openjdk-17/Add-Fast-serializer-testcase.patch

9988 lines
363 KiB
Diff
Raw Normal View History

From c6d212fa2e392fe0e2897c8996faf2e2b2a6770a Mon Sep 17 00:00:00 2001
Date: Wed, 4 Jan 2023 20:47:39 +0800
Subject: Add Fast serializer testcase
---
.../TestDescription.java | 30 +
.../noargctor/TestDescription.java | 36 +
.../NPEProvoker/TestDescription.java | 25 +
.../TestDescription.java | 26 +
.../PutField/TestDescription.java | 42 +
.../arraySuidConflict/TestDescription.java | 27 +
.../auditStreamSubclass/TestDescription.java | 25 +
.../available/TestDescription.java | 22 +
.../backRefCNFException/TestDescription.java | 28 +
.../TestDescription.java | 22 +
.../badSerialVersionUID/TestDescription.java | 23 +
.../badSubstByReplace/TestDescription.java | 21 +
.../checkModifiers/TestDescription.java | 27 +
.../FastSerializer/class/NonSerialA_1/A.java | 5 +
.../FastSerializer/class/NonSerialA_2/A.java | 6 +
.../io/FastSerializer/class/SerialA_1/A.java | 7 +
.../io/FastSerializer/class/SerialA_2/A.java | 10 +
.../io/FastSerializer/class/SerialA_3/A.java | 10 +
.../FastSerializer/class/TestDescription.java | 28 +
.../io/FastSerializer/class/TestEntry.java | 77 ++
.../classDescGetField/TestDescription.java | 25 +
.../io/FastSerializer/classDescHooks/Foo.ser | Bin 0 -> 271 bytes
.../classDescHooks/TestDescription.java | 51 ++
.../classLoader/classLoaderExtern.java | 137 +++
.../classLoader/classLoaderSer.java | 124 +++
.../clearHandleTable/TestDescription.java | 21 +
.../cloneArray/TestDescription.java | 22 +
.../TestDescription.java | 21 +
.../TestDescription.java | 25 +
.../defaultDataEnd/TestDescription.java | 22 +
.../TestDescription.java | 22 +
.../java/io/FastSerializer/diffExtern/Foo.ser | Bin 0 -> 87 bytes
.../io/FastSerializer/diffExtern/Foo2.ser | Bin 0 -> 79 bytes
.../FastSerializer/diffExtern/addField.java | 93 ++
.../FastSerializer/diffExtern/addclass.java | 96 ++
.../diffExtern/changeModifier.java | 84 ++
.../FastSerializer/diffExtern/deletField.java | 86 ++
.../diffExtern/removeStatic.java | 85 ++
.../diffExtern/staticField.java | 86 ++
.../java/io/FastSerializer/diffSer/Foo.ser | Bin 0 -> 46 bytes
.../java/io/FastSerializer/diffSer/Foo4.ser | Bin 0 -> 75 bytes
.../io/FastSerializer/diffSer/addField.java | 78 ++
.../io/FastSerializer/diffSer/addclass.java | 91 ++
.../diffSer/changeModifier.java | 72 ++
.../io/FastSerializer/diffSer/deletField.java | 71 ++
.../FastSerializer/diffSer/removeStatic.java | 63 ++
.../FastSerializer/diffSer/staticField.java | 63 ++
.../TestDescription.java | 33 +
.../dynamicProxy/dynamicExtern.java | 131 +++
.../dynamicProxy/dynamicSer.java | 107 +++
.../enum/array/TestDescription.java | 21 +
.../enum/basic/TestDescription.java | 21 +
.../enum/classObject/TestDescription.java | 21 +
.../constantSubclasses/TestDescription.java | 27 +
.../TestDescription.java | 21 +
.../TestDescription.java | 21 +
.../mismatchedTypecode/TestDescription.java | 22 +
.../enum/missingConstant/TestDescription.java | 27 +
.../enum/unshared/TestDescription.java | 21 +
.../AddedSuperClass/TestDescription.java | 42 +
.../RenamePackage/TestDescription.java | 33 +
.../extension/ExtendedObjectInputStream.java | 56 ++
.../RenamePackage/install/SerialDriver.java | 117 +++
.../RenamePackage/test/SerialDriver.java | 114 +++
.../expectedStackTrace/TestDescription.java | 25 +
.../explicitCNFException/TestDescription.java | 22 +
.../failureAtomicity/Bar.template | 64 ++
.../failureAtomicity/Foo.template | 62 ++
.../failureAtomicity/SerialRef.java | 25 +
.../failureAtomicity/TestDescription.java | 24 +
.../finalFields/TestDescription.java | 20 +
.../getSuidClinitError/TestDescription.java | 22 +
.../illegalHandle/TestDescription.java | 20 +
.../illegalHandle/negativeHandle.ser | Bin 0 -> 15 bytes
.../illegalHandle/tooHighHandle.ser | Bin 0 -> 15 bytes
.../inactiveRegistration/TestDescription.java | 21 +
.../innerClass/innerExtern.java | 107 +++
.../innerClass/innerSerial.java | 85 ++
.../java/io/FastSerializer/logging.properties | 64 ++
.../longString/TestDescription.java | 22 +
.../io/FastSerializer/longString/mesg.ser | Bin 0 -> 29 bytes
.../lookupAnyInvocation/TestDescription.java | 22 +
.../lookupInterfaceDesc/TestDescription.java | 21 +
.../maskSyntheticModifier/Foo.class | Bin 0 -> 667 bytes
.../maskSyntheticModifier/Foo.java | 19 +
.../TestDescription.java | 24 +
.../TestDescription.java | 20 +
.../modifyStaticFields/TestDescription.java | 21 +
.../nestedReplace/TestDescription.java | 25 +
.../TestDescription.java | 23 +
.../nonserializable/TestDescription.java | 21 +
.../normalExter/normalClassExternalize.java | 81 ++
.../normalSer/ArraySerialize.java | 67 ++
.../normalSer/EnumSerialize.java | 68 ++
.../normalSer/StringSerialize.java | 57 ++
.../normalSer/normalClassSerialize.java | 69 ++
.../notAvailable/TestDescription.java | 23 +
.../TestDescription.java | 23 +
.../FastSerializer/nullStream/nullExtern.java | 91 ++
.../FastSerializer/nullStream/nullSerial.java | 79 ++
.../oldTests/TestDescription.java | 121 +++
.../optionalDataEnd/TestDescription.java | 22 +
.../overWriteAnnotateClass.java | 121 +++
.../overWriteExtern/overWriteReadResolve.java | 100 +++
.../overWriteResolveClass.java | 114 +++
.../overWriteWriteReplace.java | 99 ++
.../overWriteSer/overWriteAnnotateClass.java | 108 +++
.../overWriteSer/overWriteReadResolve.java | 86 ++
.../overWriteSer/overWriteResolveClass.java | 102 +++
.../overWriteSer/overWriteWriteObject.java | 81 ++
.../overWriteSer/overWriteWriteReplace.java | 85 ++
.../io/FastSerializer/packageAccess/A.java | 20 +
.../io/FastSerializer/packageAccess/B.java | 14 +
.../io/FastSerializer/packageAccess/C.java | 20 +
.../io/FastSerializer/packageAccess/D.java | 11 +
.../packageAccess/TestDescription.java | 24 +
.../FastSerializer/parents/EvolvedClass.java | 66 ++
.../partialClassDesc/TestDescription.java | 22 +
.../primitiveClasses/TestDescription.java | 20 +
.../protocolVersion1/arrayVersion1.java | 68 ++
.../protocolVersion1/enumVersion.java | 69 ++
.../protocolVersion1/externVersion1.java | 96 ++
.../protocolVersion1/serVersion1.java | 66 ++
.../protocolVersion1/stringVersion1.java | 44 +
.../FastSerializer/proxy/TestDescription.java | 20 +
.../proxy/replace/TestDescription.java | 20 +
.../readPastObject/TestDescription.java | 21 +
.../TestDescription.java | 22 +
.../replaceStringArray/TestDescription.java | 20 +
.../replaceWithNull/TestDescription.java | 20 +
.../resolveClass/TestDescription.java | 21 +
.../resolveClass/consTest/Boot.java | 15 +
.../resolveClass/consTest/ConsTest.java | 36 +
.../resolveClass/consTest/SetupJar.java | 13 +
.../DeserializeButtonTest.java | 50 ++
.../resolveClass/deserializeButton/Foo.java | 38 +
.../ResolveClassException.java | 75 ++
.../TestDescription.java | 21 +
.../resolveProxyClass/TestDescription.java | 22 +
.../sanityCheck/TestDescription.java | 21 +
.../serialFilter/SerialFilterTest.java | 848 ++++++++++++++++++
.../serialFilter/TestDescription.java | 84 ++
.../serialFilter/java.security-extra1 | 4 +
.../serialFilter/security.policy | 13 +
.../security.policy.without.globalFilter | 9 +
.../serialver/classpath/ClasspathTest.java | 54 ++
.../serialver/nested/NestedTest.java | 58 ++
.../skipToEndOfBlockData/TestDescription.java | 23 +
.../TestDescription.java | 29 +
.../TestDescription.java | 29 +
.../io/FastSerializer/subclass/Allow.policy | 9 +
.../subclass/TestDescription.java | 38 +
.../subclassGC/SubclassOfOOS.java | 13 +
.../subclassGC/TestDescription.java | 26 +
.../FastSerializer/subclassGC/security.policy | 8 +
.../FastSerializer/superclassDataLoss/A.java | 13 +
.../FastSerializer/superclassDataLoss/B.java | 19 +
.../superclassDataLoss/TestDescription.java | 24 +
.../TestDescription.java | 23 +
.../typeSafeEnum/TestDescription.java | 22 +
.../typeStringBackRef/TypeStringBackRef.java | 37 +
.../serialPersistentFieldsExt.java | 94 ++
.../serialPersistentFieldsSer.java | 84 ++
.../unSerializable/staticExternal.java | 94 ++
.../unSerializable/staticSerializ.java | 82 ++
.../unSerializable/transientExternal.java | 99 ++
.../unSerializable/transientSerializ.java | 87 ++
.../TestDescription.java | 21 +
.../unnamedPackageSwitch/TestDescription.java | 25 +
.../unnamedPackageSwitch/pkg/A.java | 14 +
.../TestDescription.java | 24 +
.../unresolvedClassDesc/Foo.java | 11 +
.../unresolvedClassDesc/Read.java | 32 +
.../unresolvedClassDesc/TestDescription.java | 30 +
.../unresolvedClassDesc/Write.java | 33 +
.../unshared/TestDescription.java | 27 +
.../userRWObjError/TestDescription.java | 21 +
.../FastSerializer/util/CleanActualClass.java | 44 +
.../validate/TestDescription.java | 22 +
.../TestDescription.java | 20 +
.../writeObjectMemory/TestDescription.java | 21 +
.../writeReplace/TestDescription.java | 19 +
.../wrongReturnTypes/TestDescription.java | 28 +
183 files changed, 8436 insertions(+)
create mode 100644 test/jdk/java/io/FastSerializer/ClassCastExceptionDetail/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/InvalidClassException/noargctor/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/NPEProvoker/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/NoClassDefFoundErrorTrap/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/PutField/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/arraySuidConflict/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/auditStreamSubclass/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/available/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/backRefCNFException/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/badSerialPersistentField/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/badSerialVersionUID/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/badSubstByReplace/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/checkModifiers/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/class/NonSerialA_1/A.java
create mode 100644 test/jdk/java/io/FastSerializer/class/NonSerialA_2/A.java
create mode 100644 test/jdk/java/io/FastSerializer/class/SerialA_1/A.java
create mode 100644 test/jdk/java/io/FastSerializer/class/SerialA_2/A.java
create mode 100644 test/jdk/java/io/FastSerializer/class/SerialA_3/A.java
create mode 100644 test/jdk/java/io/FastSerializer/class/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/class/TestEntry.java
create mode 100644 test/jdk/java/io/FastSerializer/classDescGetField/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/classDescHooks/Foo.ser
create mode 100644 test/jdk/java/io/FastSerializer/classDescHooks/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/classLoader/classLoaderExtern.java
create mode 100644 test/jdk/java/io/FastSerializer/classLoader/classLoaderSer.java
create mode 100644 test/jdk/java/io/FastSerializer/clearHandleTable/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/cloneArray/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/concurrentClassDescLookup/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/corruptedUTFConsumption/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/defaultDataEnd/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/defaultReadObjectCNFException/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/diffExtern/Foo.ser
create mode 100644 test/jdk/java/io/FastSerializer/diffExtern/Foo2.ser
create mode 100644 test/jdk/java/io/FastSerializer/diffExtern/addField.java
create mode 100644 test/jdk/java/io/FastSerializer/diffExtern/addclass.java
create mode 100644 test/jdk/java/io/FastSerializer/diffExtern/changeModifier.java
create mode 100644 test/jdk/java/io/FastSerializer/diffExtern/deletField.java
create mode 100644 test/jdk/java/io/FastSerializer/diffExtern/removeStatic.java
create mode 100644 test/jdk/java/io/FastSerializer/diffExtern/staticField.java
create mode 100644 test/jdk/java/io/FastSerializer/diffSer/Foo.ser
create mode 100644 test/jdk/java/io/FastSerializer/diffSer/Foo4.ser
create mode 100644 test/jdk/java/io/FastSerializer/diffSer/addField.java
create mode 100644 test/jdk/java/io/FastSerializer/diffSer/addclass.java
create mode 100644 test/jdk/java/io/FastSerializer/diffSer/changeModifier.java
create mode 100644 test/jdk/java/io/FastSerializer/diffSer/deletField.java
create mode 100644 test/jdk/java/io/FastSerializer/diffSer/removeStatic.java
create mode 100644 test/jdk/java/io/FastSerializer/diffSer/staticField.java
create mode 100644 test/jdk/java/io/FastSerializer/duplicateSerialFields/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/dynamicProxy/dynamicExtern.java
create mode 100644 test/jdk/java/io/FastSerializer/dynamicProxy/dynamicSer.java
create mode 100644 test/jdk/java/io/FastSerializer/enum/array/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/enum/basic/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/enum/classObject/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/enum/constantSubclasses/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/enum/ignoreSerializationFields/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/enum/ignoreSerializationMethods/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/enum/mismatchedTypecode/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/enum/missingConstant/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/enum/unshared/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/evolution/AddedSuperClass/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/evolution/RenamePackage/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/evolution/RenamePackage/extension/ExtendedObjectInputStream.java
create mode 100644 test/jdk/java/io/FastSerializer/evolution/RenamePackage/install/SerialDriver.java
create mode 100644 test/jdk/java/io/FastSerializer/evolution/RenamePackage/test/SerialDriver.java
create mode 100644 test/jdk/java/io/FastSerializer/expectedStackTrace/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/explicitCNFException/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/failureAtomicity/Bar.template
create mode 100644 test/jdk/java/io/FastSerializer/failureAtomicity/Foo.template
create mode 100644 test/jdk/java/io/FastSerializer/failureAtomicity/SerialRef.java
create mode 100644 test/jdk/java/io/FastSerializer/failureAtomicity/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/finalFields/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/getSuidClinitError/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/illegalHandle/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/illegalHandle/negativeHandle.ser
create mode 100644 test/jdk/java/io/FastSerializer/illegalHandle/tooHighHandle.ser
create mode 100644 test/jdk/java/io/FastSerializer/inactiveRegistration/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/innerClass/innerExtern.java
create mode 100644 test/jdk/java/io/FastSerializer/innerClass/innerSerial.java
create mode 100644 test/jdk/java/io/FastSerializer/logging.properties
create mode 100644 test/jdk/java/io/FastSerializer/longString/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/longString/mesg.ser
create mode 100644 test/jdk/java/io/FastSerializer/lookupAnyInvocation/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/lookupInterfaceDesc/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/maskSyntheticModifier/Foo.class
create mode 100644 test/jdk/java/io/FastSerializer/maskSyntheticModifier/Foo.java
create mode 100644 test/jdk/java/io/FastSerializer/maskSyntheticModifier/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/misplacedArrayClassDesc/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/modifyStaticFields/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/nestedReplace/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/noSuchFieldClarification/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/nonserializable/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/normalExter/normalClassExternalize.java
create mode 100644 test/jdk/java/io/FastSerializer/normalSer/ArraySerialize.java
create mode 100644 test/jdk/java/io/FastSerializer/normalSer/EnumSerialize.java
create mode 100644 test/jdk/java/io/FastSerializer/normalSer/StringSerialize.java
create mode 100644 test/jdk/java/io/FastSerializer/normalSer/normalClassSerialize.java
create mode 100644 test/jdk/java/io/FastSerializer/notAvailable/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/nullArgExceptionOrder/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/nullStream/nullExtern.java
create mode 100644 test/jdk/java/io/FastSerializer/nullStream/nullSerial.java
create mode 100644 test/jdk/java/io/FastSerializer/oldTests/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/optionalDataEnd/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/overWriteExtern/overWriteAnnotateClass.java
create mode 100644 test/jdk/java/io/FastSerializer/overWriteExtern/overWriteReadResolve.java
create mode 100644 test/jdk/java/io/FastSerializer/overWriteExtern/overWriteResolveClass.java
create mode 100644 test/jdk/java/io/FastSerializer/overWriteExtern/overWriteWriteReplace.java
create mode 100644 test/jdk/java/io/FastSerializer/overWriteSer/overWriteAnnotateClass.java
create mode 100644 test/jdk/java/io/FastSerializer/overWriteSer/overWriteReadResolve.java
create mode 100644 test/jdk/java/io/FastSerializer/overWriteSer/overWriteResolveClass.java
create mode 100644 test/jdk/java/io/FastSerializer/overWriteSer/overWriteWriteObject.java
create mode 100644 test/jdk/java/io/FastSerializer/overWriteSer/overWriteWriteReplace.java
create mode 100644 test/jdk/java/io/FastSerializer/packageAccess/A.java
create mode 100644 test/jdk/java/io/FastSerializer/packageAccess/B.java
create mode 100644 test/jdk/java/io/FastSerializer/packageAccess/C.java
create mode 100644 test/jdk/java/io/FastSerializer/packageAccess/D.java
create mode 100644 test/jdk/java/io/FastSerializer/packageAccess/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/parents/EvolvedClass.java
create mode 100644 test/jdk/java/io/FastSerializer/partialClassDesc/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/primitiveClasses/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/protocolVersion1/arrayVersion1.java
create mode 100644 test/jdk/java/io/FastSerializer/protocolVersion1/enumVersion.java
create mode 100644 test/jdk/java/io/FastSerializer/protocolVersion1/externVersion1.java
create mode 100644 test/jdk/java/io/FastSerializer/protocolVersion1/serVersion1.java
create mode 100644 test/jdk/java/io/FastSerializer/protocolVersion1/stringVersion1.java
create mode 100644 test/jdk/java/io/FastSerializer/proxy/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/proxy/replace/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/readPastObject/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/recursiveClassDescLookup/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/replaceStringArray/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/replaceWithNull/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/resolveClass/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/resolveClass/consTest/Boot.java
create mode 100644 test/jdk/java/io/FastSerializer/resolveClass/consTest/ConsTest.java
create mode 100644 test/jdk/java/io/FastSerializer/resolveClass/consTest/SetupJar.java
create mode 100644 test/jdk/java/io/FastSerializer/resolveClass/deserializeButton/DeserializeButtonTest.java
create mode 100644 test/jdk/java/io/FastSerializer/resolveClass/deserializeButton/Foo.java
create mode 100644 test/jdk/java/io/FastSerializer/resolveClassException/ResolveClassException.java
create mode 100644 test/jdk/java/io/FastSerializer/resolveClassException/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/resolveProxyClass/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/sanityCheck/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/serialFilter/SerialFilterTest.java
create mode 100644 test/jdk/java/io/FastSerializer/serialFilter/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/serialFilter/java.security-extra1
create mode 100644 test/jdk/java/io/FastSerializer/serialFilter/security.policy
create mode 100644 test/jdk/java/io/FastSerializer/serialFilter/security.policy.without.globalFilter
create mode 100644 test/jdk/java/io/FastSerializer/serialver/classpath/ClasspathTest.java
create mode 100644 test/jdk/java/io/FastSerializer/serialver/nested/NestedTest.java
create mode 100644 test/jdk/java/io/FastSerializer/skipToEndOfBlockData/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/skippedObjCNFException/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/stopCustomDeserialization/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/subclass/Allow.policy
create mode 100644 test/jdk/java/io/FastSerializer/subclass/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/subclassGC/SubclassOfOOS.java
create mode 100644 test/jdk/java/io/FastSerializer/subclassGC/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/subclassGC/security.policy
create mode 100644 test/jdk/java/io/FastSerializer/superclassDataLoss/A.java
create mode 100644 test/jdk/java/io/FastSerializer/superclassDataLoss/B.java
create mode 100644 test/jdk/java/io/FastSerializer/superclassDataLoss/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/survivePrematureClose/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/typeSafeEnum/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/typeStringBackRef/TypeStringBackRef.java
create mode 100644 test/jdk/java/io/FastSerializer/unSerializable/serialPersistentFieldsExt.java
create mode 100644 test/jdk/java/io/FastSerializer/unSerializable/serialPersistentFieldsSer.java
create mode 100644 test/jdk/java/io/FastSerializer/unSerializable/staticExternal.java
create mode 100644 test/jdk/java/io/FastSerializer/unSerializable/staticSerializ.java
create mode 100644 test/jdk/java/io/FastSerializer/unSerializable/transientExternal.java
create mode 100644 test/jdk/java/io/FastSerializer/unSerializable/transientSerializ.java
create mode 100644 test/jdk/java/io/FastSerializer/underlyingOutputStreamException/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/unnamedPackageSwitch/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/unnamedPackageSwitch/pkg/A.java
create mode 100644 test/jdk/java/io/FastSerializer/unresolvableObjectStreamClass/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/unresolvedClassDesc/Foo.java
create mode 100644 test/jdk/java/io/FastSerializer/unresolvedClassDesc/Read.java
create mode 100644 test/jdk/java/io/FastSerializer/unresolvedClassDesc/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/unresolvedClassDesc/Write.java
create mode 100644 test/jdk/java/io/FastSerializer/unshared/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/userRWObjError/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/util/CleanActualClass.java
create mode 100644 test/jdk/java/io/FastSerializer/validate/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/verifyDynamicObjHandleTable/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/writeObjectMemory/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/writeReplace/TestDescription.java
create mode 100644 test/jdk/java/io/FastSerializer/wrongReturnTypes/TestDescription.java
diff --git a/test/jdk/java/io/FastSerializer/ClassCastExceptionDetail/TestDescription.java b/test/jdk/java/io/FastSerializer/ClassCastExceptionDetail/TestDescription.java
new file mode 100644
index 000000000..d106d2667
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/ClassCastExceptionDetail/TestDescription.java
@@ -0,0 +1,30 @@
+/*
+*- @TestCaseID:FastSerializer/ClassCastExceptionDetail
+*- @TestCaseName:ClassCastExceptionDetail
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4511532
+ * @summary Verify that the message string of a ClassCastException thrown by
+ * ObjectInputStream when attempting to assign a value to a field of
+ * an incompatible type contains the names of the value's class, the
+ * field's declaring class, the field's type, and the field itself.
+ *
+ * @library /test/jdk/java/io/Serializable/ClassCastExceptionDetail
+ * @clean Write Read Foo Gub
+ * @build Write
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write Read Foo Gub
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ *
+ */
diff --git a/test/jdk/java/io/FastSerializer/InvalidClassException/noargctor/TestDescription.java b/test/jdk/java/io/FastSerializer/InvalidClassException/noargctor/TestDescription.java
new file mode 100644
index 000000000..d73f1cea2
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/InvalidClassException/noargctor/TestDescription.java
@@ -0,0 +1,36 @@
+/*
+*- @TestCaseID:FastSerializer/noargctor
+*- @TestCaseName:noargctor
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4093279
+ * @summary Validate accessibility checking to NonSerializable superclass constuctor.
+ * @library /test/jdk/java/io/Serializable/InvalidClassException/noargctor
+ * @build NonSerialize.PrivateCtor
+ * NonSerialize.ProtectedCtor
+ * NonSerialize.PackageCtor
+ * NonSerialize.PublicCtor
+ * @build Serialize.SubclassAcrossPackage
+ * Serialize.SamePackageCtor
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
+
+/* @test
+ * @bug 4093279
+ * @summary Raise InvalidClassException if 1st NonSerializable superclass' no-arg constructor is not accessible. This test verifies default package access.
+ * @library /test/jdk/java/io/Serializable/InvalidClassException/noargctor
+ * @build DefaultPackage
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer DefaultPackage
+ */
+
diff --git a/test/jdk/java/io/FastSerializer/NPEProvoker/TestDescription.java b/test/jdk/java/io/FastSerializer/NPEProvoker/TestDescription.java
new file mode 100644
index 000000000..e535988dc
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/NPEProvoker/TestDescription.java
@@ -0,0 +1,25 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/NPEProvoker
+*- @TestCaseName:jdk17_NPEProvoker
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 6541870
+ * @summary this test checks that ObjectInputStream throws an IOException
+ * instead of a NullPointerException when deserializing an ArrayList
+ * of Externalizables if there is an IOException while deserializing
+ * one of these Externalizables.
+ *
+ * @author Andrey Ozerov
+ * @library /test/jdk/java/io/Serializable/NPEProvoker/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer NPEProvoker
+ */
diff --git a/test/jdk/java/io/FastSerializer/NoClassDefFoundErrorTrap/TestDescription.java b/test/jdk/java/io/FastSerializer/NoClassDefFoundErrorTrap/TestDescription.java
new file mode 100644
index 000000000..fc0be1fde
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/NoClassDefFoundErrorTrap/TestDescription.java
@@ -0,0 +1,26 @@
+/*
+*- @TestCaseID:FastSerializer/NoClassDefFoundErrorTrap
+*- @TestCaseName:NoClassDefFoundErrorTrap
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4205440
+ * @summary When ObjectInputStream.inputClassDescriptor calls its protected
+ * resolveClass, if a NoClassDefFoundError is thrown, that Error should be
+ * propagated to the caller, instead of being trapped and transformed into
+ * a ClassNotFoundException for the class being resolved.
+ * @author Peter Jones
+ *
+ * @library /test/jdk/java/io/Serializable/NoClassDefFoundErrorTrap/
+ * @build NoClassDefFoundErrorTrap
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer NoClassDefFoundErrorTrap
+ */
diff --git a/test/jdk/java/io/FastSerializer/PutField/TestDescription.java b/test/jdk/java/io/FastSerializer/PutField/TestDescription.java
new file mode 100644
index 000000000..8810243c1
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/PutField/TestDescription.java
@@ -0,0 +1,42 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/PutField
+*- @TestCaseName:PutField
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4453723
+ *
+ * @library /test/jdk/java/io/Serializable/PutField/
+ * @clean Write2 Read2 Foo
+ * @build Write2
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write2
+ * @clean Write2 Read2 Foo
+ * @build Read2
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read2
+ *
+ * @summary Verify that ObjectOutputStream.PutField.write() works for objects
+ * that do not define primitive serializable fields.
+ */
+
+/* @test
+ *
+ * @library /test/jdk/java/io/Serializable/PutField/
+ * @clean Write Read Foo
+ * @build Write
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write Read Foo
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ *
+ * @summary Verify that the ObjectOutputStream.PutField API works as
+ * advertised.
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/arraySuidConflict/TestDescription.java b/test/jdk/java/io/FastSerializer/arraySuidConflict/TestDescription.java
new file mode 100644
index 000000000..66fbd38f6
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/arraySuidConflict/TestDescription.java
@@ -0,0 +1,27 @@
+/*
+*- @TestCaseID:FastSerializer/arraySuidConflict
+*- @TestCaseName:arraySuidConflict
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4490677
+ * @summary Verify that array serialVersionUID conflicts caused by changes in
+ * package scope do not cause deserialization to fail.
+ *
+ * @library /test/jdk/java/io/Serializable/arraySuidConflict
+ * @clean Write Read Foo
+ * @build Write Foo
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write Read Foo
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ */
diff --git a/test/jdk/java/io/FastSerializer/auditStreamSubclass/TestDescription.java b/test/jdk/java/io/FastSerializer/auditStreamSubclass/TestDescription.java
new file mode 100644
index 000000000..a8f63d41c
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/auditStreamSubclass/TestDescription.java
@@ -0,0 +1,25 @@
+/*
+*- @TestCaseID:FastSerializer/auditStreamSubclass
+*- @TestCaseName:auditStreamSubclass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4311940
+ * @summary Verify that unauthorized ObjectOutputStream and ObjectInputStream
+ * cannot be constructed if they override security-sensitive non-final
+ * methods.
+ *
+ * @library /test/jdk/java/io/Serializable/auditStreamSubclass
+ * @build AuditStreamSubclass
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer AuditStreamSubclass
+ */
+
diff --git a/test/jdk/java/io/FastSerializer/available/TestDescription.java b/test/jdk/java/io/FastSerializer/available/TestDescription.java
new file mode 100644
index 000000000..4c807632b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/available/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/available
+*- @TestCaseName:available
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+/* @test
+ * @bug 4400571
+ * @summary Verify that ObjectInputStream.available() functions properly when
+ * called at the beginning of a data block, and that it does not
+ * attempt any read operations that may potentially block.
+ * @library /test/jdk/java/io/Serializable/available
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Available
+ */
+
diff --git a/test/jdk/java/io/FastSerializer/backRefCNFException/TestDescription.java b/test/jdk/java/io/FastSerializer/backRefCNFException/TestDescription.java
new file mode 100644
index 000000000..52e31b946
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/backRefCNFException/TestDescription.java
@@ -0,0 +1,28 @@
+/*
+*- @TestCaseID:FastSerializer/backRefCNFException
+*- @TestCaseName:backRefCNFException
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4312433
+ * @summary Verify that reading a back reference to a previously skipped value
+ * whose class is not available will throw a ClassNotFoundException
+ * @library /test/jdk/java/io/Serializable/backRefCNFException
+ * /test/jdk/java/io/FastSerializer/util
+ * @run driver CleanActualClass Write.class Read.class A.class B.class
+ * @build Write
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @run driver CleanActualClass Write.class Read.class A.class B.class
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ *
+ */
diff --git a/test/jdk/java/io/FastSerializer/badSerialPersistentField/TestDescription.java b/test/jdk/java/io/FastSerializer/badSerialPersistentField/TestDescription.java
new file mode 100644
index 000000000..8e8164a01
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/badSerialPersistentField/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/badSerialPersistentField
+*- @TestCaseName:badSerialPersistentField
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4387368
+ * @summary Verify that object whose class declared a serial persistent field
+ * that does not match any actual field cannot be serialized via
+ * default serialization.
+ * @library /test/jdk/java/io/Serializable/badSerialPersistentField
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer BadSerialPersistentField
+ */
diff --git a/test/jdk/java/io/FastSerializer/badSerialVersionUID/TestDescription.java b/test/jdk/java/io/FastSerializer/badSerialVersionUID/TestDescription.java
new file mode 100644
index 000000000..4e856e889
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/badSerialVersionUID/TestDescription.java
@@ -0,0 +1,23 @@
+/*
+*- @TestCaseID:FastSerializer/badSerialVersionUID
+*- @TestCaseName:badSerialVersionUID
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4431318
+ * @summary Verify that when serialVersionUID is declared with a type other
+ * than long, values that can be promoted to long will be used, and
+ * those that can't be will be ignored (but will not result in
+ * unchecked exceptions).
+ * @library /test/jdk/java/io/Serializable/badSerialVersionUID
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer BadSerialVersionUID
+ */
diff --git a/test/jdk/java/io/FastSerializer/badSubstByReplace/TestDescription.java b/test/jdk/java/io/FastSerializer/badSubstByReplace/TestDescription.java
new file mode 100644
index 000000000..348c8c4d3
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/badSubstByReplace/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/badSubstByReplace
+*- @TestCaseName:badSubstByReplace
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @summary Verify that ClassCastException is thrown when deserializing
+ * an object and one of its object fields is incompatibly replaced
+ * by either replaceObject/resolveObject.
+ * @library /test/jdk/java/io/Serializable/badSubstByReplace
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer BadSubstByReplace
+ */
diff --git a/test/jdk/java/io/FastSerializer/checkModifiers/TestDescription.java b/test/jdk/java/io/FastSerializer/checkModifiers/TestDescription.java
new file mode 100644
index 000000000..118920afb
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/checkModifiers/TestDescription.java
@@ -0,0 +1,27 @@
+/*
+*- @TestCaseID:FastSerializer/checkModifiers
+*- @TestCaseName:checkModifiers
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4214888
+ * @summary Make sure that serialpersistentFields data member is used to
+ * represent tyhe serializable fields only if it has the modfiers
+ * static, final, private and the type is ObjectStreamField.
+ * No need to check for static, as ObjectStreamField class is not
+ * serializable.
+ * @library /test/jdk/java/io/Serializable/checkModifiers
+ * @clean CheckModifiers TestClass1 TestClass2
+ * @build CheckModifiers
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer CheckModifiers
+ *
+ */
diff --git a/test/jdk/java/io/FastSerializer/class/NonSerialA_1/A.java b/test/jdk/java/io/FastSerializer/class/NonSerialA_1/A.java
new file mode 100644
index 000000000..10baeb2c1
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/class/NonSerialA_1/A.java
@@ -0,0 +1,5 @@
+
+
+public class A {
+ int field1;
+};
diff --git a/test/jdk/java/io/FastSerializer/class/NonSerialA_2/A.java b/test/jdk/java/io/FastSerializer/class/NonSerialA_2/A.java
new file mode 100644
index 000000000..e28f11230
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/class/NonSerialA_2/A.java
@@ -0,0 +1,6 @@
+
+
+public class A {
+ int field1;
+ int field2;
+};
diff --git a/test/jdk/java/io/FastSerializer/class/SerialA_1/A.java b/test/jdk/java/io/FastSerializer/class/SerialA_1/A.java
new file mode 100644
index 000000000..89ae1e831
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/class/SerialA_1/A.java
@@ -0,0 +1,7 @@
+
+
+import java.io.Serializable;
+
+public class A implements Serializable {
+ int field1;
+};
diff --git a/test/jdk/java/io/FastSerializer/class/SerialA_2/A.java b/test/jdk/java/io/FastSerializer/class/SerialA_2/A.java
new file mode 100644
index 000000000..d3a6aa869
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/class/SerialA_2/A.java
@@ -0,0 +1,10 @@
+
+
+import java.io.Serializable;
+
+public class A implements Serializable {
+ static final long serialVersionUID = 746945609796141988L;
+
+ int field1;
+ int field2;
+};
diff --git a/test/jdk/java/io/FastSerializer/class/SerialA_3/A.java b/test/jdk/java/io/FastSerializer/class/SerialA_3/A.java
new file mode 100644
index 000000000..ddeeea6e4
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/class/SerialA_3/A.java
@@ -0,0 +1,10 @@
+
+
+import java.io.Serializable;
+
+/* THis class is purposely not compatible with previous versions of class.*/
+public class A implements Serializable {
+ int field1;
+ int field2;
+ int field3;
+};
diff --git a/test/jdk/java/io/FastSerializer/class/TestDescription.java b/test/jdk/java/io/FastSerializer/class/TestDescription.java
new file mode 100644
index 000000000..c3a2d2f51
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/class/TestDescription.java
@@ -0,0 +1,28 @@
+/*
+*- @TestCaseID:FastSerializer/class
+*- @TestCaseName:class
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4075221
+ * @library /test/lib /test/jdk/java/io/Serializable/class
+ * @build jdk.test.lib.compiler.CompilerUtils
+ * jdk.test.lib.Utils
+ * jdk.test.lib.Asserts
+ * jdk.test.lib.JDKToolFinder
+ * jdk.test.lib.JDKToolLauncher
+ * jdk.test.lib.Platform
+ * jdk.test.lib.process.*
+ * @run testng/othervm/timeout=300 -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer NonSerializableTest
+ * @summary Enable serialize of nonSerializable Class descriptor.
+ */
diff --git a/test/jdk/java/io/FastSerializer/class/TestEntry.java b/test/jdk/java/io/FastSerializer/class/TestEntry.java
new file mode 100644
index 000000000..6a588fb11
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/class/TestEntry.java
@@ -0,0 +1,77 @@
+/*
+*- @TestCaseID:FastSerializer/TestEntry
+*- @TestCaseName:TestEntry
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+/*
+ * @bug 4075221
+ * @summary Enable serialize of nonSerializable Class descriptor.
+ */
+
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileInputStream;
+import java.io.InvalidClassException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+
+class TestEntry {
+ public static void main(String args[]) throws Exception {
+ File f = new File("tmp.ser");
+ if (args[0].compareTo("-s") == 0) {
+ FileOutputStream of = new FileOutputStream(f);
+ ObjectOutputStream oos = new ObjectOutputStream(of);
+ Class cl = Class.forName(args[1]);
+ oos.writeObject(cl);
+ if (ObjectStreamClass.lookup(cl) != null)
+ oos.writeObject(cl.newInstance());
+ oos.close();
+ System.out.println("Serialized Class " + cl.getName());
+ } else if (args[0].compareTo("-de") == 0) {
+ FileInputStream inf = new FileInputStream(f);
+ ObjectInputStream ois = new ObjectInputStream(inf);
+ Class cl = null;
+ try {
+ cl = (Class)ois.readObject();
+ throw new Error("Expected InvalidClassException to be thrown");
+ } catch (InvalidClassException e) {
+ System.out.println("Caught expected exception DeSerializing class " + e.getMessage());
+ }
+ ois.close();
+ } else if (args[0].compareTo("-doe") == 0) {
+ FileInputStream inf = new FileInputStream(f);
+ ObjectInputStream ois = new ObjectInputStream(inf);
+ Class cl = null;
+ cl = (Class)ois.readObject();
+ try {
+ ois.readObject();
+ throw new Error("Expected InvalidClassException to be thrown");
+ } catch (InvalidClassException e) {
+ System.out.println("Caught expected exception DeSerializing class " + e.getMessage());
+ }
+ ois.close();
+ } else if (args[0].compareTo("-d") == 0) {
+ FileInputStream inf = new FileInputStream(f);
+ ObjectInputStream ois = new ObjectInputStream(inf);
+ Class cl = (Class)ois.readObject();
+ try {
+ ois.readObject();
+ } catch (EOFException e) {
+ }
+ ois.close();
+ System.out.println("DeSerialized Class " + cl.getName());
+ } else {
+ throw new RuntimeException("Unrecognized argument");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/classDescGetField/TestDescription.java b/test/jdk/java/io/FastSerializer/classDescGetField/TestDescription.java
new file mode 100644
index 000000000..511b3bcb0
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/classDescGetField/TestDescription.java
@@ -0,0 +1,25 @@
+/*
+*- @TestCaseID:FastSerializer/classDescGetField
+*- @TestCaseName:classDescGetField
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4180735
+ * @summary Make sure that getField() of ObjectStreamClass works correctly for
+ * object types.
+ *
+ * @library /test/jdk/java/io/Serializable/classDescGetField
+ * @clean Foo GetField
+ * @build GetField
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer GetField
+ *
+ */
diff --git a/test/jdk/java/io/FastSerializer/classDescHooks/Foo.ser b/test/jdk/java/io/FastSerializer/classDescHooks/Foo.ser
new file mode 100644
index 0000000000000000000000000000000000000000..96be5f23047ecc23dcf67bc93a4a6794cfe11eba
GIT binary patch
literal 271
zcmZ4UmVvdnh=JKHKc4{t7?~KDeHa)sOBjTGvJ%S@^>Y&Q()B&_N>bBPi>!e%IVB7N
zNHRY8dFdeG;t~cyB;nwU{Gt-;iUOeFf*@n`K*s1njS+gZV9EE!b_*s3Mo$LTvc#Oy
z)QTbo0faig(%hufqP8_tWx1z3=w@PIs3-usjtOWOA3_n>=I$pG&h#ta2b$ysGpUfF
gj)4v88)l#ueuNgVt1^7eg-sG}1p)O0qv~M<00bFPK>z>%
literal 0
HcmV?d00001
diff --git a/test/jdk/java/io/FastSerializer/classDescHooks/TestDescription.java b/test/jdk/java/io/FastSerializer/classDescHooks/TestDescription.java
new file mode 100644
index 000000000..805ff4c1b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/classDescHooks/TestDescription.java
@@ -0,0 +1,51 @@
+/*
+*- @TestCaseID:FastSerializer/classDescHooks
+*- @TestCaseName:classDescHooks
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4227189
+ * @summary Ensure that class descriptor read, write hooks exist, are backwards
+ * compatible, and work as advertised.
+ * @library /test/jdk/java/io/Serializable/classDescHooks
+ * @ignore
+ * @build ClassDescHooks
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ClassDescHooks
+ */
+
+/* @test
+ * @bug 4931314
+ * @summary Verify that a ClassNotFoundException thrown by the
+ * readClassDescriptor method is reflected to the caller as an
+ * InvalidClassException with the ClassNotFoundException as its cause.
+ * @library /test/jdk/java/io/Serializable/classDescHooks
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer CNFException
+ */
+
+/* @test
+ * @bug 4461737
+ * @summary Verify that serialization functions properly for externalizable
+ * classes if ObjectInputStream.readClassDescriptor() returns a local
+ * class descriptor.
+ * @library /test/jdk/java/io/Serializable/classDescHooks
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ExternLoopback
+ */
+
+/* @test
+ * @bug 4461299
+ * @summary Verify that serialization functions properly if
+ * ObjectInputStream.readClassDescriptor() returns a local class
+ * descriptor for which the serialVersionUID has not yet been
+ * calculated.
+ * @library /test/jdk/java/io/Serializable/classDescHooks
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Loopback
+ */
diff --git a/test/jdk/java/io/FastSerializer/classLoader/classLoaderExtern.java b/test/jdk/java/io/FastSerializer/classLoader/classLoaderExtern.java
new file mode 100644
index 000000000..95a5ddc53
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/classLoader/classLoaderExtern.java
@@ -0,0 +1,137 @@
+/*
+*- @TestCaseID:FastSerializer/classLoaderExtern
+*- @TestCaseName:classLoaderExtern
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true classLoaderExtern
+*/
+
+
+import java.io.*;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+
+class Foo implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+class MyObjectInputStream extends ObjectInputStream {
+ protected ClassLoader classLoader = this.getClass().getClassLoader();
+ public MyObjectInputStream(InputStream in) throws IOException {
+ super(in);
+ }
+
+ public MyObjectInputStream(InputStream in, ClassLoader cl) throws IOException{
+ super(in);
+ this.classLoader = cl;
+ }
+ @Override
+ protected Class<?>resolveClass(ObjectStreamClass desc)throws IOException,ClassNotFoundException {
+ String name = desc.getName();
+ try {
+ return Class.forName(name,false,this.classLoader);
+ }catch(ClassNotFoundException Ex) {
+ return super.resolveClass(desc);
+ }
+ }
+}
+
+class MyClassLoader extends ClassLoader {
+ protected Class<?> findClass(String name) throws ClassNotFoundException {
+ Class clazz = null;
+ String classFilename = name + ".class";
+ File classFile = new File(classFilename);
+ if (classFile.exists()) {
+ try (FileChannel fileChannel = new FileInputStream(classFile)
+ .getChannel();) {
+ MappedByteBuffer mappedByteBuffer = fileChannel
+ .map(FileChannel.MapMode.READ_ONLY, 0, fileChannel.size());
+ byte[] b = mappedByteBuffer.array();
+ clazz = defineClass(name, b, 0, b.length);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (clazz == null) {
+ throw new ClassNotFoundException(name);
+ }
+ return clazz;
+ }
+}
+
+public class classLoaderExtern {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ MyClassLoader myClassLoader = new MyClassLoader();
+ MyObjectInputStream oin2 = new MyObjectInputStream(new FileInputStream("Foo.ser"), myClassLoader);
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/classLoader/classLoaderSer.java b/test/jdk/java/io/FastSerializer/classLoader/classLoaderSer.java
new file mode 100644
index 000000000..a3eef86fe
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/classLoader/classLoaderSer.java
@@ -0,0 +1,124 @@
+/*
+*- @TestCaseID:FastSerializer/classLoaderSer
+*- @TestCaseName:classLoaderSer
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true classLoaderSer
+*/
+
+
+import java.io.*;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+class MyObjectInputStream extends ObjectInputStream {
+ protected ClassLoader classLoader = this.getClass().getClassLoader();
+ public MyObjectInputStream(InputStream in) throws IOException {
+ super(in);
+ }
+
+ public MyObjectInputStream(InputStream in, ClassLoader cl) throws IOException{
+ super(in);
+ this.classLoader = cl;
+ }
+ @Override
+ protected Class<?>resolveClass(ObjectStreamClass desc)throws IOException,ClassNotFoundException {
+ String name = desc.getName();
+ try {
+ return Class.forName(name,false,this.classLoader);
+ }catch(ClassNotFoundException Ex) {
+ return super.resolveClass(desc);
+ }
+ }
+}
+
+class MyClassLoader extends ClassLoader {
+ protected Class<?> findClass(String name) throws ClassNotFoundException {
+ Class clazz = null;
+ String classFilename = name + ".class";
+ File classFile = new File(classFilename);
+ if (classFile.exists()) {
+ try (FileChannel fileChannel = new FileInputStream(classFile)
+ .getChannel();) {
+ MappedByteBuffer mappedByteBuffer = fileChannel
+ .map(FileChannel.MapMode.READ_ONLY, 0, fileChannel.size());
+ byte[] b = mappedByteBuffer.array();
+ clazz = defineClass(name, b, 0, b.length);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (clazz == null) {
+ throw new ClassNotFoundException(name);
+ }
+ return clazz;
+ }
+}
+
+public class classLoaderSer {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ MyClassLoader myClassLoader = new MyClassLoader();
+ MyObjectInputStream oin2 = new MyObjectInputStream(new FileInputStream("Foo.ser"), myClassLoader);
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/clearHandleTable/TestDescription.java b/test/jdk/java/io/FastSerializer/clearHandleTable/TestDescription.java
new file mode 100644
index 000000000..5b82ab10b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/clearHandleTable/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/ClearHandleTable
+*- @TestCaseName:ClearHandleTable
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4332184
+ * @summary Ensure that ObjectOutputStream properly releases strong references
+ * to written objects when reset() is called.
+ * @library /test/jdk/java/io/Serializable/clearHandleTable
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ClearHandleTable
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/cloneArray/TestDescription.java b/test/jdk/java/io/FastSerializer/cloneArray/TestDescription.java
new file mode 100644
index 000000000..cee388765
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/cloneArray/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/CloneArray
+*- @TestCaseName:CloneArray
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+
+/* @test
+ * @bug 6990094
+ * @summary Verify ObjectInputStream.cloneArray works on many kinds of arrays
+ * @author Stuart Marks, Joseph D. Darcy
+ * @library /test/jdk/java/io/Serializable/cloneArray
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer CloneArray
+ */
diff --git a/test/jdk/java/io/FastSerializer/concurrentClassDescLookup/TestDescription.java b/test/jdk/java/io/FastSerializer/concurrentClassDescLookup/TestDescription.java
new file mode 100644
index 000000000..d83578255
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/concurrentClassDescLookup/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/ConcurrentClassDescLookup
+*- @TestCaseName:ConcurrentClassDescLookup
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @summary Verify that concurrent class descriptor lookups function properly,
+ * even when class descriptor initialization is slow or throws an
+ * exception.
+ * @library /test/jdk/java/io/Serializable/concurrentClassDescLookup
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ConcurrentClassDescLookup
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/corruptedUTFConsumption/TestDescription.java b/test/jdk/java/io/FastSerializer/corruptedUTFConsumption/TestDescription.java
new file mode 100644
index 000000000..ee7f36c88
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/corruptedUTFConsumption/TestDescription.java
@@ -0,0 +1,25 @@
+/*
+*- @TestCaseID:FastSerializer/CorruptedUTFConsumption
+*- @TestCaseName:CorruptedUTFConsumption
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4450867
+ * @summary Although technically the behavior of ObjectInputStream following a
+ * UTFDataFormatException is unspecified, verify that
+ * ObjectInputStream consumes at most the expected number of utf
+ * bytes, even if the last byte(s) of the utf string indicate that the
+ * string overflows its expected length.
+ * @key randomness
+ * @library /test/jdk/java/io/Serializable/corruptedUTFConsumption
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer CorruptedUTFConsumption
+ */
diff --git a/test/jdk/java/io/FastSerializer/defaultDataEnd/TestDescription.java b/test/jdk/java/io/FastSerializer/defaultDataEnd/TestDescription.java
new file mode 100644
index 000000000..920235af9
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/defaultDataEnd/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/DefaultDataEnd
+*- @TestCaseName:DefaultDataEnd
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4360508
+ * @summary Verify that a custom readObject() method reading in data written
+ * via default serialization cannot read past the end of the default
+ * data.
+ * @library /test/jdk/java/io/Serializable/defaultDataEnd
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer DefaultDataEnd
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/defaultReadObjectCNFException/TestDescription.java b/test/jdk/java/io/FastSerializer/defaultReadObjectCNFException/TestDescription.java
new file mode 100644
index 000000000..19b1a051c
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/defaultReadObjectCNFException/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/DefaultReadObjectCNFException
+*- @TestCaseName:DefaultReadObjectCNFException
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4662327
+ * @summary Verify that ObjectInputStream.defaultReadObject() throws a
+ * ClassNotFoundException if any of the non-primitive field values it
+ * reads in are tagged with ClassNotFoundExceptions.
+ * @library /test/jdk/java/io/Serializable/defaultReadObjectCNFException
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer DefaultReadObjectCNFException
+ */
diff --git a/test/jdk/java/io/FastSerializer/diffExtern/Foo.ser b/test/jdk/java/io/FastSerializer/diffExtern/Foo.ser
new file mode 100644
index 0000000000000000000000000000000000000000..8cd50316fce9ed57f5fc7a7c1ab8c519dca8fdf4
GIT binary patch
literal 87
zcmcb2ih;Gbh=JKHKfj`cfz=~5Cnvw0g@J*Av7)$;p^kw8C>Wk!l#>D$WP%H_xaa3X
Q#F*h?%ubc5U}Y>70O{%!v;Y7A
literal 0
HcmV?d00001
diff --git a/test/jdk/java/io/FastSerializer/diffExtern/Foo2.ser b/test/jdk/java/io/FastSerializer/diffExtern/Foo2.ser
new file mode 100644
index 0000000000000000000000000000000000000000..617df1b49bce22c00c35b16b144cfd76d8502fb6
GIT binary patch
literal 79
ycmcb2ih;Gbh=JKHKfj`cf!V1twVZ{4fq}82xR9ZafdND?fkl`wM3^x|SSkSYv=Ep8
literal 0
HcmV?d00001
diff --git a/test/jdk/java/io/FastSerializer/diffExtern/addField.java b/test/jdk/java/io/FastSerializer/diffExtern/addField.java
new file mode 100644
index 000000000..dcc5ca6fa
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffExtern/addField.java
@@ -0,0 +1,93 @@
+/*
+*- @TestCaseID:FastSerializer/Extern/addField
+*- @TestCaseName:Extern/addField
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test add field on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true addField
+*/
+
+
+import java.io.*;
+
+class Foo implements Externalizable {
+ int i ;
+ int a;
+ String s ;
+ public Foo(){}
+ Foo (int i, int a, String s) {
+ this.i = i;
+ this.s = s;
+ this.a = a;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ a = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ out.writeInt(a);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) && this.a == obj.a);
+ }
+}
+
+
+public class addField {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,0,"Hello");
+ Foo f2 = new Foo(2,0,"World");
+ Foo f3 = new Foo(3,0,"Good");
+ Foo f4 = new Foo(4,0,"Bye");
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }catch (EOFException ex2){
+ System.out.println("Expected Exception");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }catch (EOFException ex2){
+ System.out.println("Expected Exception");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffExtern/addclass.java b/test/jdk/java/io/FastSerializer/diffExtern/addclass.java
new file mode 100644
index 000000000..f040d59b9
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffExtern/addclass.java
@@ -0,0 +1,96 @@
+/*
+*- @TestCaseID:FastSerializer//Extern/addclass
+*- @TestCaseName:Extern/addclass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test add Class on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true addclass
+*/
+
+
+import java.io.*;
+
+class parent {
+ parent(int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ String s;
+}
+
+class Foo extends parent implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){
+ super(0,"");
+ }
+ Foo (int i, String s) {
+ super(0,"");
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+public class addclass {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffExtern/changeModifier.java b/test/jdk/java/io/FastSerializer/diffExtern/changeModifier.java
new file mode 100644
index 000000000..4809be275
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffExtern/changeModifier.java
@@ -0,0 +1,84 @@
+/*
+*- @TestCaseID:FastSerializer/Extern/changeModifier
+*- @TestCaseName:Extern/changeModifier
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change Modifier on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true changeModifier
+*/
+
+
+import java.io.*;
+
+class Foo implements Externalizable {
+ int i ;
+ private String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+public class changeModifier {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffExtern/deletField.java b/test/jdk/java/io/FastSerializer/diffExtern/deletField.java
new file mode 100644
index 000000000..9e28023ce
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffExtern/deletField.java
@@ -0,0 +1,86 @@
+/*
+*- @TestCaseID:FastSerializer/Extern/deletField
+*- @TestCaseName:Extern/deletField
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test delet field on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true deletField
+*/
+
+
+import java.io.*;
+
+class Foo implements Externalizable {
+ int i ;
+
+ public Foo () {
+ }
+ public Foo (int i) {
+ this.i = i;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i);
+ }
+}
+
+public class deletField {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1);
+ Foo f2 = new Foo(2);
+ Foo f3 = new Foo(3);
+ Foo f4 = new Foo(4);
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }catch (EOFException ex2){
+ System.out.println("Expected Exception");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }catch (EOFException ex2){
+ System.out.println("Expected Exception");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffExtern/removeStatic.java b/test/jdk/java/io/FastSerializer/diffExtern/removeStatic.java
new file mode 100644
index 000000000..ba9fb180c
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffExtern/removeStatic.java
@@ -0,0 +1,85 @@
+/*
+*- @TestCaseID:FastSerializer/removeStatic
+*- @TestCaseName:removeStatic
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test remove static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true removeStatic
+*/
+
+
+import java.io.*;
+
+class Foo implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i );
+ }
+}
+
+public class removeStatic {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo2.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo2.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffExtern/staticField.java b/test/jdk/java/io/FastSerializer/diffExtern/staticField.java
new file mode 100644
index 000000000..896776ae2
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffExtern/staticField.java
@@ -0,0 +1,86 @@
+/*
+*- @TestCaseID:FastSerializer/staticField
+*- @TestCaseName:staticField
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true staticField
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Externalizable {
+ int i ;
+ static String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+public class staticField {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffSer/Foo.ser b/test/jdk/java/io/FastSerializer/diffSer/Foo.ser
new file mode 100644
index 0000000000000000000000000000000000000000..e4ba8874c08229ed20a49569e2d36c95cd3c32fa
GIT binary patch
literal 46
lcmcb2ih;Gbh=JKHKfi*3fq}8Okf9DpGcYj0S<G-23jq2U2x0&L
literal 0
HcmV?d00001
diff --git a/test/jdk/java/io/FastSerializer/diffSer/Foo4.ser b/test/jdk/java/io/FastSerializer/diffSer/Foo4.ser
new file mode 100644
index 0000000000000000000000000000000000000000..3bc96399431197640537d3160a46f1545c9fd56e
GIT binary patch
literal 75
zcmcb2ih;Gbh=JKHKfi*3fq}7vfz=~5CnvwSkf9F9XJB9giiGDE<)pwxm`fN~-1GAh
M0xTsA%ubc50J!cD=l}o!
literal 0
HcmV?d00001
diff --git a/test/jdk/java/io/FastSerializer/diffSer/addField.java b/test/jdk/java/io/FastSerializer/diffSer/addField.java
new file mode 100644
index 000000000..7dc2c910d
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffSer/addField.java
@@ -0,0 +1,78 @@
+/*
+*- @TestCaseID:FastSerializer/Ser/addField
+*- @TestCaseName:Ser/addField
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test add field on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true addField
+*/
+
+
+import java.io.*;
+
+class Foo implements Serializable {
+ Foo (int i, int a, String s) {
+ this.i = i;
+ this.s = s;
+ this.a = a;
+ }
+ int i;
+ int a;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+
+public class addField {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,0,"Hello");
+ Foo f2 = new Foo(2,0,"World");
+ Foo f3 = new Foo(3,0,"Good");
+ Foo f4 = new Foo(4,0,"Bye");
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }catch (StreamCorruptedException ex2){
+ System.out.println("Expected Exception");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }catch (StreamCorruptedException ex2){
+ System.out.println("Expected Exception");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffSer/addclass.java b/test/jdk/java/io/FastSerializer/diffSer/addclass.java
new file mode 100644
index 000000000..75a9bfe40
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffSer/addclass.java
@@ -0,0 +1,91 @@
+/*
+*- @TestCaseID:FastSerializer/Ser/addclass
+*- @TestCaseName:Ser/addclass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test add Class on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true addclass
+*/
+
+
+import java.io.*;
+
+class parent implements Serializable{
+ parent(int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ String s;
+}
+
+class Foo extends parent implements Serializable {
+
+ int i;
+ String s;
+ public Foo(){
+ super(0,"");
+ }
+ Foo (int i, String s) {
+ super(0,"");
+ this.i = i;
+ this.s = s;
+ }
+
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+
+public class addclass {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }catch (StreamCorruptedException ex2){
+ System.out.println("Expected Exception");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }catch (StreamCorruptedException ex2){
+ System.out.println("Expected Exception");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffSer/changeModifier.java b/test/jdk/java/io/FastSerializer/diffSer/changeModifier.java
new file mode 100644
index 000000000..ed3030729
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffSer/changeModifier.java
@@ -0,0 +1,72 @@
+/*
+*- @TestCaseID:FastSerializer/Ser/changeModifier
+*- @TestCaseName:Ser/changeModifier
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change Modifier on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true changeModifier
+*/
+
+
+import java.io.*;
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ private String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+
+public class changeModifier {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffSer/deletField.java b/test/jdk/java/io/FastSerializer/diffSer/deletField.java
new file mode 100644
index 000000000..98d6fe833
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffSer/deletField.java
@@ -0,0 +1,71 @@
+/*
+*- @TestCaseID:FastSerializer/Ser/deletField
+*- @TestCaseName:Ser/deletField
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test delet field on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true deletField
+*/
+
+
+import java.io.*;
+
+class Foo implements Serializable {
+ Foo (int i) {
+ this.i = i;
+
+ }
+ int i;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i);
+ }
+}
+
+public class deletField {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1);
+ Foo f2 = new Foo(2);
+ Foo f3 = new Foo(3);
+ Foo f4 = new Foo(4);
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex2){
+ System.out.println("Expected Exception");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex2){
+ System.out.println("Expected Exception");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffSer/removeStatic.java b/test/jdk/java/io/FastSerializer/diffSer/removeStatic.java
new file mode 100644
index 000000000..3d2a8d6c6
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffSer/removeStatic.java
@@ -0,0 +1,63 @@
+/*
+* @test
+* @summary test remove static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true removeStatic
+*/
+
+
+import java.io.*;
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+
+ }
+ int i;
+ String s;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i);
+ }
+}
+
+public class removeStatic {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ String testsrc = System.getProperty("test.src");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ } catch (EOFException ex2){
+ System.out.println("Expected Exception");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ throw ex;
+ }catch (EOFException ex2){
+ System.out.println("Expected Exception");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/diffSer/staticField.java b/test/jdk/java/io/FastSerializer/diffSer/staticField.java
new file mode 100644
index 000000000..8282c78bb
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/diffSer/staticField.java
@@ -0,0 +1,63 @@
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true staticField
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ static int i;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.s.equals(obj.s));
+ }
+}
+
+public class staticField {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }catch (StreamCorruptedException ex2){
+ System.out.println("Expected Exception");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream(testsrc+"/Foo4.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }catch (StreamCorruptedException ex2){
+ System.out.println("Expected Exception");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/duplicateSerialFields/TestDescription.java b/test/jdk/java/io/FastSerializer/duplicateSerialFields/TestDescription.java
new file mode 100644
index 000000000..e17f30b87
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/duplicateSerialFields/TestDescription.java
@@ -0,0 +1,33 @@
+/*
+*- @TestCaseID:FastSerializer/duplicateSerialFields
+*- @TestCaseName:duplicateSerialFields
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+
+/* @test
+ * @bug 4764280
+ * @summary Verify that if a serializable class declares multiple
+ * serialPersistentFields that share the same name, calling
+ * ObjectStreamClass.lookup() for that class will not result in an
+ * InternalError, and that attempts at default serialization or
+ * deserialization of such a class will result in
+ * InvalidClassExceptions.
+ *
+ * @library /test/jdk/java/io/Serializable/duplicateSerialFields
+ * @clean Setup Test A B
+ * @build Setup
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Setup
+ * @clean Setup A B
+ * @build Test
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ *
+ */
diff --git a/test/jdk/java/io/FastSerializer/dynamicProxy/dynamicExtern.java b/test/jdk/java/io/FastSerializer/dynamicProxy/dynamicExtern.java
new file mode 100644
index 000000000..d55684777
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/dynamicProxy/dynamicExtern.java
@@ -0,0 +1,131 @@
+/*
+*- @TestCaseID:FastSerializer/dynamicExtern
+*- @TestCaseName:dynamicExtern
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true dynamicExtern
+*/
+
+
+import java.io.*;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+interface ITest {
+
+}
+class Foo implements ITest, Externalizable {
+ static int i ;
+ static String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+class DynamicProxy implements InvocationHandler,Externalizable{
+ private Foo subject;
+ public DynamicProxy(){}
+ public DynamicProxy(Foo subject){
+ this.subject = subject;
+ }
+ @Override
+ public Object invoke(Object object, Method method, Object[] args)throws Throwable{
+ method.invoke(subject, args);
+ return null;
+ }
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ subject.s = (String)in.readObject();
+ subject.i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(subject.s);
+ out.writeInt(subject.i);
+ }
+}
+
+public class dynamicExtern {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo fr1 = new Foo(1,"Hello");
+ Foo fr2 = new Foo(2,"World");
+ Foo fr3 = new Foo(3,"Good");
+ Foo fr4 = new Foo(4,"Bye");
+
+ InvocationHandler handler1 = new DynamicProxy(fr1);
+ InvocationHandler handler2 = new DynamicProxy(fr2);
+ InvocationHandler handler3 = new DynamicProxy(fr3);
+ InvocationHandler handler4 = new DynamicProxy(fr4);
+ Class[] proxyInter = new Class[]{ITest.class};
+ ITest f1 = (ITest)Proxy.newProxyInstance(handler1.getClass().getClassLoader(), proxyInter, handler1);
+ ITest f2 = (ITest)Proxy.newProxyInstance(handler2.getClass().getClassLoader(), proxyInter, handler2);
+ ITest f3 = (ITest)Proxy.newProxyInstance(handler3.getClass().getClassLoader(), proxyInter, handler3);
+ ITest f4 = (ITest)Proxy.newProxyInstance(handler4.getClass().getClassLoader(), proxyInter, handler4);
+
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/dynamicProxy/dynamicSer.java b/test/jdk/java/io/FastSerializer/dynamicProxy/dynamicSer.java
new file mode 100644
index 000000000..42662199a
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/dynamicProxy/dynamicSer.java
@@ -0,0 +1,107 @@
+/*
+*- @TestCaseID:FastSerializer/dynamicSer
+*- @TestCaseName:dynamicSer
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true dynamicSer
+*/
+
+
+import java.io.*;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+interface ITest {
+
+}
+class Foo implements ITest,Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ static int i;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+
+class DynamicProxy implements InvocationHandler,Serializable{
+ private Object subject;
+ public DynamicProxy(Object subject){
+ this.subject = subject;
+ }
+ @Override
+ public Object invoke(Object object, Method method, Object[] args)throws Throwable{
+ method.invoke(subject, args);
+ return null;
+ }
+}
+
+public class dynamicSer {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo fr1 = new Foo(1,"Hello");
+ Foo fr2 = new Foo(2,"World");
+ Foo fr3 = new Foo(3,"Good");
+ Foo fr4 = new Foo(4,"Bye");
+
+ InvocationHandler handler1 = new DynamicProxy(fr1);
+ InvocationHandler handler2 = new DynamicProxy(fr2);
+ InvocationHandler handler3 = new DynamicProxy(fr3);
+ InvocationHandler handler4 = new DynamicProxy(fr4);
+ Class[] proxyInter = new Class[]{ITest.class};
+ ITest f1 = (ITest)Proxy.newProxyInstance(handler1.getClass().getClassLoader(), proxyInter, handler1);
+ ITest f2 = (ITest)Proxy.newProxyInstance(handler2.getClass().getClassLoader(), proxyInter, handler2);
+ ITest f3 = (ITest)Proxy.newProxyInstance(handler3.getClass().getClassLoader(), proxyInter, handler3);
+ ITest f4 = (ITest)Proxy.newProxyInstance(handler4.getClass().getClassLoader(), proxyInter, handler4);
+
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/enum/array/TestDescription.java b/test/jdk/java/io/FastSerializer/enum/array/TestDescription.java
new file mode 100644
index 000000000..c07a26d34
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/enum/array/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/enum/array
+*- @TestCaseName:enum/array
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4838379
+ * @summary Verify that serialization of enum constant arrays functions
+ * properly.
+ * @library /test/jdk/java/io/Serializable/enum/array
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
diff --git a/test/jdk/java/io/FastSerializer/enum/basic/TestDescription.java b/test/jdk/java/io/FastSerializer/enum/basic/TestDescription.java
new file mode 100644
index 000000000..335c69ee2
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/enum/basic/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/enum/basic
+*- @TestCaseName:enum/basic
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4838379
+ * @summary Verify that basic serialization of non-specialized enum constants
+ * functions properly.
+ * @library /test/jdk/java/io/Serializable/enum/basic
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/enum/classObject/TestDescription.java b/test/jdk/java/io/FastSerializer/enum/classObject/TestDescription.java
new file mode 100644
index 000000000..4a9ee7da6
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/enum/classObject/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/enum/classObject
+*- @TestCaseName:enum/classObject
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4838379
+ * @summary Verify that serialization of Class objects for enum types works
+ * properly.
+ * @library /test/jdk/java/io/Serializable/enum/classObject
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/enum/constantSubclasses/TestDescription.java b/test/jdk/java/io/FastSerializer/enum/constantSubclasses/TestDescription.java
new file mode 100644
index 000000000..a7cd4dbb2
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/enum/constantSubclasses/TestDescription.java
@@ -0,0 +1,27 @@
+/*
+*- @TestCaseID:FastSerializer/enum/constantSubclasses
+*- @TestCaseName:enum/constantSubclasses
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4838379
+ * @summary Verify that serialization of enum constants that are instances of
+ * constant-specific subclasses functions properly.
+ *
+ * @library /test/jdk/java/io/Serializable/enum/constantSubclasses
+ * @build Write
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ * @clean Read
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/enum/ignoreSerializationFields/TestDescription.java b/test/jdk/java/io/FastSerializer/enum/ignoreSerializationFields/TestDescription.java
new file mode 100644
index 000000000..1d548579d
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/enum/ignoreSerializationFields/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/enum/ignoreSerializationFields
+*- @TestCaseName:enum/ignoreSerializationFields
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4838379
+ * @summary Verify that serialVersionUID and serialPersistentFields
+ * declarations made by enum types and constants are ignored.
+ * @library /test/jdk/java/io/Serializable/enum/ignoreSerializationFields
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/enum/ignoreSerializationMethods/TestDescription.java b/test/jdk/java/io/FastSerializer/enum/ignoreSerializationMethods/TestDescription.java
new file mode 100644
index 000000000..a013feeca
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/enum/ignoreSerializationMethods/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/enum/ignoreSerializationMethods
+*- @TestCaseName:enum/ignoreSerializationMethods
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4838379
+ * @summary Verify that custom serialization methods defined by enum types are
+ * not invoked during serialization or deserialization.
+ * @library /test/jdk/java/io/Serializable/enum/ignoreSerializationMethods
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/enum/mismatchedTypecode/TestDescription.java b/test/jdk/java/io/FastSerializer/enum/mismatchedTypecode/TestDescription.java
new file mode 100644
index 000000000..5057e53f9
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/enum/mismatchedTypecode/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/enum/mismatchedTypecode
+*- @TestCaseName:enum/mismatchedTypecode
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4838379
+ * @summary Verify that TC_OBJECT followed by a class descriptor for an enum
+ * class results in an InvalidClassException, as does TC_ENUM followed
+ * by a class descriptor for a non-enum class.
+ * @library /test/jdk/java/io/Serializable/enum/mismatchedTypecode
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/enum/missingConstant/TestDescription.java b/test/jdk/java/io/FastSerializer/enum/missingConstant/TestDescription.java
new file mode 100644
index 000000000..cada8564b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/enum/missingConstant/TestDescription.java
@@ -0,0 +1,27 @@
+/*
+*- @TestCaseID:FastSerializer/enum/missingConstant
+*- @TestCaseName:enum/missingConstant
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4838379
+ * @summary Verify that deserialization of an enum constant that does not exist
+ * on the receiving side results in an InvalidObjectException.
+ *
+ * @library /test/jdk/java/io/Serializable/enum/constantSubclasses
+ * @build Write
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ * @clean Read
+ */
diff --git a/test/jdk/java/io/FastSerializer/enum/unshared/TestDescription.java b/test/jdk/java/io/FastSerializer/enum/unshared/TestDescription.java
new file mode 100644
index 000000000..747364a3c
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/enum/unshared/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/enum/unshared
+*- @TestCaseName:enum/unshared
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4838379
+ * @summary Verify that unshared write and read operations work properly with
+ * enum constants.
+ * @library /test/jdk/java/io/Serializable/enum/unshared
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/evolution/AddedSuperClass/TestDescription.java b/test/jdk/java/io/FastSerializer/evolution/AddedSuperClass/TestDescription.java
new file mode 100644
index 000000000..38ed6078f
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/evolution/AddedSuperClass/TestDescription.java
@@ -0,0 +1,42 @@
+/*
+*- @TestCaseID:FastSerializer/evolution/AddedSuperClass
+*- @TestCaseName:evolution/AddedSuperClass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4070080
+ *
+ * @summary Test reading an evolved class serialization into the original class
+ * version. Class evolved by adding a superclass.
+ *
+ * @library /test/jdk/java/io/Serializable/evolution/AddedSuperClass
+ * @clean A WriteAddedSuperClass ReadAddedSuperClass ReadAddedSuperClass2
+ * @build WriteAddedSuperClass
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer WriteAddedSuperClass
+ * @clean A AddedSuperClass
+ * @build ReadAddedSuperClass
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ReadAddedSuperClass
+ * @clean A
+ * @build WriteAddedSuperClass
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer WriteAddedSuperClass
+ * @clean A AddedSuperClass
+ * @build ReadAddedSuperClass2
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ReadAddedSuperClass2
+ *
+ */
+
+ /*
+ * Part a of test serializes an instance of an evolved class to a serialization stream.
+ * Part b of test deserializes the serialization stream into an instance of
+ * the original class.
+ *
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/evolution/RenamePackage/TestDescription.java b/test/jdk/java/io/FastSerializer/evolution/RenamePackage/TestDescription.java
new file mode 100644
index 000000000..bc92ca789
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/evolution/RenamePackage/TestDescription.java
@@ -0,0 +1,33 @@
+/*
+*- @TestCaseID:FastSerializer/evolution/RenamePackage
+*- @TestCaseName:evolution/RenamePackage
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4087295 4785472
+ * @library /test/lib /test/jdk/java/io/Serializable/evolution/RenamePackage
+ * @build jdk.test.lib.compiler.CompilerUtils
+ * jdk.test.lib.Utils
+ * jdk.test.lib.Asserts
+ * jdk.test.lib.JDKToolFinder
+ * jdk.test.lib.JDKToolLauncher
+ * jdk.test.lib.Platform
+ * jdk.test.lib.process.*
+ * @build RenamePackageTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer RenamePackageTest
+ * @summary Enable resolveClass() to accommodate package renaming.
+ * This fix enables one to implement a resolveClass method that maps a
+ * Serialiazable class within a serialization stream to the same class
+ * in a different package within the JVM runtime. See run shell script
+ * for instructions on how to run this test.
+ */
diff --git a/test/jdk/java/io/FastSerializer/evolution/RenamePackage/extension/ExtendedObjectInputStream.java b/test/jdk/java/io/FastSerializer/evolution/RenamePackage/extension/ExtendedObjectInputStream.java
new file mode 100644
index 000000000..bae038262
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/evolution/RenamePackage/extension/ExtendedObjectInputStream.java
@@ -0,0 +1,56 @@
+
+
+package extension;
+
+import java.util.Hashtable;
+import java.io.*;
+
+public class ExtendedObjectInputStream extends ObjectInputStream {
+
+ private static Hashtable renamedClassMap;
+
+ public ExtendedObjectInputStream(InputStream si)
+ throws IOException, StreamCorruptedException
+ {
+ super(si);
+ }
+
+ protected Class resolveClass(ObjectStreamClass v)
+ throws IOException, ClassNotFoundException
+ {
+ if (renamedClassMap != null) {
+ // System.out.println("resolveClass(" + v.getName() + ")");
+ Class newClass = (Class)renamedClassMap.get(v.getName());
+ if (newClass != null) {
+ v = ObjectStreamClass.lookup(newClass);
+ }
+ }
+ return super.resolveClass(v);
+ }
+
+ public static void addRenamedClassName(String oldName, String newName)
+ throws ClassNotFoundException
+ {
+ Class cl = null;
+
+ if (renamedClassMap == null)
+ renamedClassMap = new Hashtable(10);
+ if (newName.startsWith("[L")) {
+ // System.out.println("Array processing");
+ Class componentType =
+ Class.forName(newName.substring(2));
+ //System.out.println("ComponentType=" + componentType.getName());
+ Object dummy =
+ java.lang.reflect.Array.newInstance(componentType, 3);
+
+ cl = dummy.getClass();
+ // System.out.println("Class=" + cl.getName());
+ }
+ else
+ cl = Class.forName(newName);
+ //System.out.println("oldName=" + oldName +
+ // " newName=" + cl.getName());
+ renamedClassMap.put(oldName, cl);
+ }
+
+}
diff --git a/test/jdk/java/io/FastSerializer/evolution/RenamePackage/install/SerialDriver.java b/test/jdk/java/io/FastSerializer/evolution/RenamePackage/install/SerialDriver.java
new file mode 100644
index 000000000..b75caf15e
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/evolution/RenamePackage/install/SerialDriver.java
@@ -0,0 +1,117 @@
+
+/*
+ *
+ * @bug 4087295
+ * @build install/SerialDriver.java test/SerialDriver.java extension/ExtendedObjectInputStream.java
+ * @summary Enable resolveClass() to accommodate package renaming.
+ * This fix enables one to implement a resolveClass method that maps a
+ * Serializable class within a serialization stream to the same class
+ * in a different package within the JVM runtime. See run shell script
+ * for instructions on how to run this test.
+ */
+
+package install;
+
+import java.io.*;
+import extension.ExtendedObjectInputStream;
+
+public class SerialDriver implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ String name;
+ SerialDriver next;
+ transient Object objarray[];
+
+ public SerialDriver() {
+ name = "<terminator>";
+ next = null;
+ }
+
+ public SerialDriver(String name, SerialDriver next) {
+ this.name = name;
+ this.next = next;
+ }
+
+ static boolean serialize;
+ static boolean deserialize;
+
+ public static void main(String args[]) throws Exception {
+ SerialDriver obj = new SerialDriver("SerialDriver_2",
+ new SerialDriver());
+ SerialDriver[] array = new SerialDriver[5];
+ for (int i = 0; i < array.length; i++)
+ array[i] = new SerialDriver("SerialDriver_1_" + i, new SerialDriver());
+
+ /*
+ * see if we are serializing or deserializing.
+ * The ability to deserialize or serialize allows
+ * us to see the bidirectional readability and writeability
+ */
+ if (args.length == 1) {
+ if (args[0].equals("-d")) {
+ deserialize = true;
+ } else if (args[0].equals("-s")) {
+ serialize = true;
+ } else {
+ usage();
+ throw new Exception("incorrect command line arguments");
+ }
+ } else {
+ usage();
+ throw new Exception("incorrect command line arguments");
+ }
+
+ File f = new File("stream.ser");
+ if (serialize) {
+ // Serialize the subclass
+ try (FileOutputStream fo = new FileOutputStream(f);
+ ObjectOutputStream so = new ObjectOutputStream(fo))
+ {
+ so.writeObject(obj);
+ /* Skip arrays since they do not work with rename yet.
+ The serialVersionUID changes due to the name change
+ and there is no way to set the serialVersionUID for an
+ array. */
+ so.writeObject(array);
+ } catch (Exception e) {
+ System.out.println(e);
+ throw e;
+ }
+ }
+ if (deserialize) {
+ // Deserialize the subclass
+ try (FileInputStream fi = new FileInputStream(f);
+ ExtendedObjectInputStream si = new ExtendedObjectInputStream(fi))
+ {
+ si.addRenamedClassName("test.SerialDriver", "install.SerialDriver");
+ si.addRenamedClassName("[Ltest.SerialDriver;",
+ "[Linstall.SerialDriver");
+ obj = (SerialDriver) si.readObject();
+ array = (SerialDriver[]) si.readObject();
+ } catch (Exception e) {
+ System.out.println(e);
+ throw e;
+ }
+ System.out.println();
+ System.out.println("Printing deserialized class: ");
+ System.out.println();
+ System.out.println(obj.toString());
+ System.out.println();
+ }
+ }
+
+
+ public String toString() {
+ String nextString = next != null ? next.toString() : "<null>";
+ return "name =" + name + " next = <" + nextString + ">";
+ }
+
+ /**
+ * Prints out the usage
+ */
+ static void usage() {
+ System.out.println("Usage:");
+ System.out.println(" -s (in order to serialize)");
+ System.out.println(" -d (in order to deserialize)");
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/evolution/RenamePackage/test/SerialDriver.java b/test/jdk/java/io/FastSerializer/evolution/RenamePackage/test/SerialDriver.java
new file mode 100644
index 000000000..651eb8deb
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/evolution/RenamePackage/test/SerialDriver.java
@@ -0,0 +1,114 @@
+
+
+/*
+ *
+ * @bug 4087295
+ * @build install/SerialDriver.java test/SerialDriver.java extension/ExtendedObjectInputStream.java
+ * @summary Enable resolveClass() to accommodate package renaming.
+ * This fix enables one to implement a resolveClass method that maps a
+ * Serializable class within a serialization stream to the same class
+ * in a different package within the JVM runtime. See run shell script
+ * for instructions on how to run this test.
+ */
+
+package test;
+
+import java.io.*;
+import extension.ExtendedObjectInputStream;
+
+public class SerialDriver implements Serializable {
+ private static final long serialVersionUID = 1L;
+ String name;
+ SerialDriver next;
+
+ public SerialDriver() {
+ name = "<terminator>";
+ next = null;
+ }
+
+ public SerialDriver(String name, SerialDriver next) {
+ this.name = name;
+ this.next = next;
+ }
+
+ static boolean serialize = false;
+ static boolean deserialize = false;
+
+ public static void main(String args[]) throws Exception {
+ SerialDriver obj = new SerialDriver("SerialDriver_1", new SerialDriver());
+ SerialDriver[] array = new SerialDriver[5];
+ for (int i = 0; i < array.length; i++)
+ array[i] = new SerialDriver("SerialDriver_1_" + i, new SerialDriver());
+
+ /*
+ * see if we are serializing or deserializing.
+ * The ability to deserialize or serialize allows
+ * us to see the bidirectional readability and writeability
+ */
+ if (args.length == 1) {
+ if (args[0].equals("-d")) {
+ deserialize = true;
+ } else if (args[0].equals("-s")) {
+ serialize = true;
+ } else {
+ usage();
+ throw new Exception("incorrect command line arguments");
+ }
+ } else {
+ usage();
+ throw new Exception("incorrect command line arguments");
+ }
+
+ File f = new File("stream.ser");
+ if (serialize) {
+ // Serialize the subclass
+ try (FileOutputStream fo = new FileOutputStream(f);
+ ObjectOutputStream so = new ObjectOutputStream(fo))
+ {
+ so.writeObject(obj);
+ /* Comment out since renaming arrays does not work
+ since it changes the serialVersionUID. */
+ so.writeObject(array);
+ } catch (Exception e) {
+ System.out.println(e);
+ throw e;
+ }
+ }
+ if (deserialize) {
+ // Deserialize the subclass
+ try (FileInputStream fi = new FileInputStream(f);
+ ExtendedObjectInputStream si = new ExtendedObjectInputStream(fi))
+ {
+ si.addRenamedClassName("install.SerialDriver",
+ "test.SerialDriver");
+ si.addRenamedClassName("[Linstall.SerialDriver;",
+ "[Ltest.SerialDriver");
+ obj = (SerialDriver) si.readObject();
+ array = (SerialDriver[]) si.readObject();
+ } catch (Exception e) {
+ System.out.println(e);
+ throw e;
+ }
+ System.out.println();
+ System.out.println("Printing deserialized class: ");
+ System.out.println();
+ System.out.println(obj.toString());
+ System.out.println();
+ }
+ }
+
+
+ public String toString() {
+ String nextString = next != null ? next.toString() : "<null>";
+ return "name =" + name + " next = <" + nextString + ">";
+ }
+
+ /**
+ * Prints out the usage
+ */
+ static void usage() {
+ System.out.println("Usage:");
+ System.out.println(" -s (in order to serialize)");
+ System.out.println(" -d (in order to deserialize)");
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/expectedStackTrace/TestDescription.java b/test/jdk/java/io/FastSerializer/expectedStackTrace/TestDescription.java
new file mode 100644
index 000000000..1df307342
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/expectedStackTrace/TestDescription.java
@@ -0,0 +1,25 @@
+/*
+*- @TestCaseID:FastSerializer/expectedStackTrace
+*- @TestCaseName:expectedStackTrace
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 6317435 7110700
+ * @summary Verify that stack trace contains a proper cause of
+ * InvalidClassException (methods: checkSerialize,
+ * checkDeserialize or checkDefaultSerialize)
+ *
+ * @author Andrey Ozerov
+ * @library /test/jdk/java/io/Serializable/expectedStackTrace
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ExpectedStackTrace
+ *
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/explicitCNFException/TestDescription.java b/test/jdk/java/io/FastSerializer/explicitCNFException/TestDescription.java
new file mode 100644
index 000000000..2317c81ef
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/explicitCNFException/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/ExplicitCNFException
+*- @TestCaseName:ExplicitCNFException
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4407956
+ * @summary Verify that ClassNotFoundExceptions explicitly constructed and
+ * thrown from with custom readObject/readExternal methods are
+ * propagated properly.
+ * @library /test/jdk/java/io/Serializable/explicitCNFException
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ExplicitCNFException
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/failureAtomicity/Bar.template b/test/jdk/java/io/FastSerializer/failureAtomicity/Bar.template
new file mode 100644
index 000000000..465bc2b5e
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/failureAtomicity/Bar.template
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package $package;
+
+import java.io.IOException;
+import java.io.Serializable;
+import failureAtomicity.SerialRef;
+
+public class Bar extends Foo implements Serializable {
+ static final long serialVersionUID = -0L;
+
+ public final long barPrim;
+ public final String barRef;
+
+ public final SerialRef ref; // So we can retrieve a reference to check
+ public $zebra_type zebraBar; // ordered alphabetically, must be last
+
+ public Bar(int fooPrim, String fooRef, $foo_zebra_type fooZebra,
+ long barPrim, String barRef, $zebra_type zebra) {
+ super(fooPrim, fooRef, fooZebra);
+ this.barPrim = barPrim;
+ this.barRef = barRef;
+ this.zebraBar = zebra;
+ this.ref = new SerialRef(this);
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder()
+ .append("$package.Bar[")
+ .append("barPrim:").append(barPrim)
+ .append(", barRef:").append(barRef)
+ .append(", zebraBar:").append(zebraBar)
+ .append(", " + super.toString())
+ .toString();
+ }
+
+//$has_readObject private void readObject(java.io.ObjectInputStream in)
+//$has_readObject throws IOException, ClassNotFoundException
+//$has_readObject {
+//$has_readObject in.defaultReadObject();
+//$has_readObject }
+}
diff --git a/test/jdk/java/io/FastSerializer/failureAtomicity/Foo.template b/test/jdk/java/io/FastSerializer/failureAtomicity/Foo.template
new file mode 100644
index 000000000..455d34c9a
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/failureAtomicity/Foo.template
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package $package;
+
+import java.io.IOException;
+import java.io.Serializable;
+import failureAtomicity.SerialRef;
+
+public class Foo implements Serializable {
+ static final long serialVersionUID = -0L;
+
+ public final int fooPrim;
+ public final String fooRef;
+
+ public final SerialRef ref; // So we can retrieve a reference to check
+ public $zebra_type zebraFoo; // ordered alphabetically, must be last
+
+ public Foo(int fooPrim, String fooRef, $zebra_type zebra) {
+ this.fooPrim = fooPrim;
+ this.fooRef = fooRef;
+ this.zebraFoo = zebra;
+ this.ref = new SerialRef(this);
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder()
+ .append("$package.Foo[")
+ .append("fooPrim:").append(fooPrim)
+ .append(", fooRef:").append(fooRef)
+ .append(", zebraFoo:").append(zebraFoo).append("]")
+ .toString();
+ }
+
+//$has_readObject private void readObject(java.io.ObjectInputStream in)
+//$has_readObject throws IOException, ClassNotFoundException
+//$has_readObject {
+//$has_readObject in.defaultReadObject();
+//$has_readObject }
+
+}
diff --git a/test/jdk/java/io/FastSerializer/failureAtomicity/SerialRef.java b/test/jdk/java/io/FastSerializer/failureAtomicity/SerialRef.java
new file mode 100644
index 000000000..5b7b04c80
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/failureAtomicity/SerialRef.java
@@ -0,0 +1,25 @@
+
+package failureAtomicity;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+
+// For verification purposes only.
+
+public class SerialRef implements Serializable {
+ static final long serialVersionUID = -0L;
+ public static Object obj;
+
+ private final Object ref;
+
+ public SerialRef(Object ref) {
+ this.ref = ref;
+ }
+
+ private void readObject(ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+ in.defaultReadObject();
+ SerialRef.obj = ref;
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/failureAtomicity/TestDescription.java b/test/jdk/java/io/FastSerializer/failureAtomicity/TestDescription.java
new file mode 100644
index 000000000..65a775967
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/failureAtomicity/TestDescription.java
@@ -0,0 +1,24 @@
+/*
+*- @TestCaseID:FastSerializer/FailureAtomicity
+*- @TestCaseName:FailureAtomicity
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+/*
+ * @test
+ * @bug 8071474
+ * @summary Better failure atomicity for default read object.
+ * @modules jdk.compiler
+ * @library /test/lib /test/jdk/java/io/Serializable
+ * @build jdk.test.lib.Platform
+ * jdk.test.lib.util.FileUtils
+ * @build failureAtomicity.FailureAtomicity failureAtomicity.SerialRef
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer failureAtomicity.FailureAtomicity
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/finalFields/TestDescription.java b/test/jdk/java/io/FastSerializer/finalFields/TestDescription.java
new file mode 100644
index 000000000..36ae8606c
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/finalFields/TestDescription.java
@@ -0,0 +1,20 @@
+/*
+*- @TestCaseID:FastSerializer/FinalFields
+*- @TestCaseName:FinalFields
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4174797
+ * @summary Ensure that ObjectInputStream can set final fields.
+ * @library /test/jdk/java/io/Serializable/finalFields
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer FinalFields
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/getSuidClinitError/TestDescription.java b/test/jdk/java/io/FastSerializer/getSuidClinitError/TestDescription.java
new file mode 100644
index 000000000..3a3ee7eae
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/getSuidClinitError/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/GetSuidClinitError
+*- @TestCaseName:GetSuidClinitError
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4482966
+ * @summary Verify that ObjectStreamClass.getSerialVersionUID() will not mask
+ * Errors (other than NoSuchMethodError) triggered by JNI query for
+ * static initializer method.
+ * @library /test/jdk/java/io/Serializable/getSuidClinitError
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer GetSuidClinitError
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/illegalHandle/TestDescription.java b/test/jdk/java/io/FastSerializer/illegalHandle/TestDescription.java
new file mode 100644
index 000000000..9eb044c77
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/illegalHandle/TestDescription.java
@@ -0,0 +1,20 @@
+/*
+*- @TestCaseID:FastSerializer/illegalHandle
+*- @TestCaseName:illegalHandle
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+/* @test
+ * @bug 4357979
+ * @summary Verify that ObjectInputStream throws a StreamCorruptedException if
+ * it reads in an out-of-bounds handle value.
+ * @library /test/jdk/java/io/Serializable/illegalHandle
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true Test
+ */
diff --git a/test/jdk/java/io/FastSerializer/illegalHandle/negativeHandle.ser b/test/jdk/java/io/FastSerializer/illegalHandle/negativeHandle.ser
new file mode 100644
index 0000000000000000000000000000000000000000..627c6e860196f61a2d0cdddd3b3527e19ef3f2d7
GIT binary patch
literal 15
WcmZ4UmVvc|fjKQdzmTE!|9=20=mtgr
literal 0
HcmV?d00001
diff --git a/test/jdk/java/io/FastSerializer/illegalHandle/tooHighHandle.ser b/test/jdk/java/io/FastSerializer/illegalHandle/tooHighHandle.ser
new file mode 100644
index 0000000000000000000000000000000000000000..0894b05fdd1716659b6ae347ae2b5d9fa341607a
GIT binary patch
literal 15
WcmZ4UmVvc|fjKQdzmTDhAq4;_QUt94
literal 0
HcmV?d00001
diff --git a/test/jdk/java/io/FastSerializer/inactiveRegistration/TestDescription.java b/test/jdk/java/io/FastSerializer/inactiveRegistration/TestDescription.java
new file mode 100644
index 000000000..900640f2e
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/inactiveRegistration/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/inactiveRegistration
+*- @TestCaseName:inactiveRegistration
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4400609
+ * @summary Verify that ObjectInputStream.registerValidation() throws a
+ * NotActiveException when invoked on inactive stream.
+ * @library /test/jdk/java/io/Serializable/inactiveRegistration
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer InactiveRegistration
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/innerClass/innerExtern.java b/test/jdk/java/io/FastSerializer/innerClass/innerExtern.java
new file mode 100644
index 000000000..6d212bf76
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/innerClass/innerExtern.java
@@ -0,0 +1,107 @@
+/*
+*- @TestCaseID:FastSerializer/innerExtern
+*- @TestCaseName:innerExtern
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test static field cannot be deserialized
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true innerExtern
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Externalizable {
+ static class Foo1 implements Externalizable {
+ public Foo1(){}
+ Foo1 (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i = 0;
+ String s ;
+
+ public boolean equals(Foo1 obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+
+ }
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+
+ }
+
+}
+
+public class innerExtern {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo.Foo1 f1 = new Foo.Foo1(1,"Hello");
+ Foo.Foo1 f2 = new Foo.Foo1(2,"World");
+ Foo.Foo1 f3 = new Foo.Foo1(3,"Good");
+ Foo.Foo1 f4 = new Foo.Foo1(4,"Bye");
+
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo.Foo1 fout1 = (Foo.Foo1)oin.readObject();
+ Foo.Foo1 fout2 = (Foo.Foo1)oin.readObject();
+ Foo.Foo1 fout3 = (Foo.Foo1)oin.readObject();
+ Foo.Foo1 fout4 = (Foo.Foo1)oin.readObject();
+ oin.close();
+
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo.Foo1 fout5 = (Foo.Foo1)oin2.readObject();
+ Foo.Foo1 fout6 = (Foo.Foo1)oin2.readObject();
+ Foo.Foo1 fout7 = (Foo.Foo1)oin2.readObject();
+ Foo.Foo1 fout8 = (Foo.Foo1)oin2.readObject();
+
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/innerClass/innerSerial.java b/test/jdk/java/io/FastSerializer/innerClass/innerSerial.java
new file mode 100644
index 000000000..53d09878f
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/innerClass/innerSerial.java
@@ -0,0 +1,85 @@
+/*
+*- @TestCaseID:FastSerializer/innerSerial
+*- @TestCaseName:innerSerial
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test static field cannot be deserialized
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true innerSerial
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Serializable {
+ static class Foo1 implements Serializable {
+ Foo1 (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i = 0;
+ String s ;
+
+ public boolean equals(Foo1 obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+ }
+
+}
+
+public class innerSerial {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo.Foo1 f1 = new Foo.Foo1(1,"Hello");
+ Foo.Foo1 f2 = new Foo.Foo1(2,"World");
+ Foo.Foo1 f3 = new Foo.Foo1(3,"Good");
+ Foo.Foo1 f4 = new Foo.Foo1(4,"Bye");
+
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo.Foo1 fout1 = (Foo.Foo1)oin.readObject();
+ Foo.Foo1 fout2 = (Foo.Foo1)oin.readObject();
+ Foo.Foo1 fout3 = (Foo.Foo1)oin.readObject();
+ Foo.Foo1 fout4 = (Foo.Foo1)oin.readObject();
+ oin.close();
+
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo.Foo1 fout5 = (Foo.Foo1)oin2.readObject();
+ Foo.Foo1 fout6 = (Foo.Foo1)oin2.readObject();
+ Foo.Foo1 fout7 = (Foo.Foo1)oin2.readObject();
+ Foo.Foo1 fout8 = (Foo.Foo1)oin2.readObject();
+
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/logging.properties b/test/jdk/java/io/FastSerializer/logging.properties
new file mode 100644
index 000000000..0d3ef9140
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/logging.properties
@@ -0,0 +1,64 @@
+############################################################
+# Default Logging Configuration File
+#
+# You can use a different file by specifying a filename
+# with the java.util.logging.config.file system property.
+# For example java -Djava.util.logging.config.file=myfile
+############################################################
+
+############################################################
+# Global properties
+############################################################
+
+# "handlers" specifies a comma separated list of log Handler
+# classes. These handlers will be installed during VM startup.
+# Note that these classes must be on the system classpath.
+# By default we only configure a ConsoleHandler, which will only
+# show messages at the INFO and above levels.
+handlers= java.util.logging.ConsoleHandler
+
+# To also add the FileHandler, use the following line instead.
+#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+
+# Default global logging level.
+# This specifies which kinds of events are logged across
+# all loggers. For any given facility this global level
+# can be overriden by a facility specific level
+# Note that the ConsoleHandler also has a separate level
+# setting to limit messages printed to the console.
+.level= INFO
+
+############################################################
+# Handler specific properties.
+# Describes specific configuration info for Handlers.
+############################################################
+
+# default file output is in user's home directory.
+java.util.logging.FileHandler.pattern = %h/java%u.log
+java.util.logging.FileHandler.limit = 50000
+java.util.logging.FileHandler.count = 1
+# Default number of locks FileHandler can obtain synchronously.
+# This specifies maximum number of attempts to obtain lock file by FileHandler
+# implemented by incrementing the unique field %u as per FileHandler API documentation.
+java.util.logging.FileHandler.maxLocks = 100
+java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
+
+# Limit the message that are printed on the console to INFO and above.
+java.util.logging.ConsoleHandler.level = FINE
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+# Example to customize the SimpleFormatter output format
+# to print one-line log message like this:
+# <level>: <log message> [<date/time>]
+#
+# java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n
+
+############################################################
+# Facility specific properties.
+# Provides extra control for each logger.
+############################################################
+
+# For example, set the com.xyz.foo logger to only log SEVERE
+# messages:
+com.xyz.foo.level = SEVERE
+fastSerializer.level= FINE
diff --git a/test/jdk/java/io/FastSerializer/longString/TestDescription.java b/test/jdk/java/io/FastSerializer/longString/TestDescription.java
new file mode 100644
index 000000000..70e4c971f
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/longString/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/LongString
+*- @TestCaseName:LongString
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4217676
+ * @summary Ensure that object streams support serialization of long strings
+ * (strings whose UTF representation > 64k in length)
+ * @key randomness
+ * @library /test/jdk/java/io/Serializable/longString
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer LongString
+ */
diff --git a/test/jdk/java/io/FastSerializer/longString/mesg.ser b/test/jdk/java/io/FastSerializer/longString/mesg.ser
new file mode 100644
index 0000000000000000000000000000000000000000..cfa2616feb173118bc28ffe47c4487b06fc46f7e
GIT binary patch
literal 29
kcmcb2ih;F+LCiO`xHvIARUtD^Aw54QB{feWEi)$-0Gav<O#lD@
literal 0
HcmV?d00001
diff --git a/test/jdk/java/io/FastSerializer/lookupAnyInvocation/TestDescription.java b/test/jdk/java/io/FastSerializer/lookupAnyInvocation/TestDescription.java
new file mode 100644
index 000000000..af2540f81
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/lookupAnyInvocation/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:FastSerializer/LookupAnyInvocation
+*- @TestCaseName:LookupAnyInvocation
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4413615
+ * @summary Verify that ObjectStreamClass.lookupAny() returns a non-null
+ * descriptor for class which doesn't implement java.io.Serializable
+ * interface at all.
+ * @library /test/jdk/java/io/Serializable/lookupAnyInvocation
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer LookupAnyInvocation
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/lookupInterfaceDesc/TestDescription.java b/test/jdk/java/io/FastSerializer/lookupInterfaceDesc/TestDescription.java
new file mode 100644
index 000000000..48a0d0013
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/lookupInterfaceDesc/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/LookupInterfaceDesc
+*- @TestCaseName:LookupInterfaceDesc
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4402227
+ * @summary Verify that ObjectStreamClass.lookup() functions properly
+ * for interfaces.
+ * @library /test/jdk/java/io/Serializable/lookupInterfaceDesc
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer LookupInterfaceDesc
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/maskSyntheticModifier/Foo.class b/test/jdk/java/io/FastSerializer/maskSyntheticModifier/Foo.class
new file mode 100644
index 0000000000000000000000000000000000000000..1777af8b136a3a0f7a1622fa0482c100b5b2bf0e
GIT binary patch
literal 667
zcmZuv-%k@k5dMai?)5lnsYL{oUlwR<(k8yv@Pafksr8|TgvaZ#981cr*=~*c5Bchk
zM2IH(Xu=;wn7!7tF+SYx%{MdO%r~<)w?BRXXrS)nAyx&}1lE1b;gOFF9{X6pMjk#k
zJ#6`WZwu@QJQ1i6R-!>T99AyEcVT4^CUNCuVr481VX5Q5rURRYE~rJw_dX={Tv`<o
za?e$w>;WNDtsN7xhx$|!3LTZm?&z{F&6}`4U?exLK-jI$F!robN!+T<K!1z)Jv}m!
zY%7=TwY6@zMg(>P>|vR(^-o`2ZQFX3oF2W8<XfwBLfDvwbal%6LY|F-jL{~*KB@tV
zsJUY)z&$LoV3*WzdK;4=1Sq?L8Sa5loN~VIU&zQ3$|<CDvnP!T2kPTkabX&n)+UHE
zZMxwl>+xf0U&-MxjM*qxXZ24;LRkLappLQ4t6Kme;Lmd{^IhP*gEtMQgY6Rkwb*vZ
zdi@HyuMmGwD0$b&pL~P(lp>uk>?YjjbCF*Nm?p~vYfRxe$(-(pp0UpnmFm}^&z+yh
foIL%G>=ovJb2d0<p8aE<T#6JY4G|u&e-0~m_Z*SB
literal 0
HcmV?d00001
diff --git a/test/jdk/java/io/FastSerializer/maskSyntheticModifier/Foo.java b/test/jdk/java/io/FastSerializer/maskSyntheticModifier/Foo.java
new file mode 100644
index 000000000..ee54c292e
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/maskSyntheticModifier/Foo.java
@@ -0,0 +1,19 @@
+
+/*
+ * @bug 4897937
+ * @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
+ * modifiers of fields and methods does not affect default
+ * serialVersionUID calculation.
+ */
+
+/*
+ * This file is compiled with JDK 1.4.2 in order to obtain the Foo.class
+ * "golden file" used in the test, which contains a synthetic field and method
+ * for implementing the class literal reference. This file is not itself used
+ * directly by the test, but is kept here for reference.
+ */
+public class Foo implements java.io.Serializable {
+ Foo() {
+ Class cl = Integer.class;
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/maskSyntheticModifier/TestDescription.java b/test/jdk/java/io/FastSerializer/maskSyntheticModifier/TestDescription.java
new file mode 100644
index 000000000..83fc77a74
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/maskSyntheticModifier/TestDescription.java
@@ -0,0 +1,24 @@
+
+/*
+*- @TestCaseID:FastSerializer/MaskSyntheticModifierTest
+*- @TestCaseName:MaskSyntheticModifierTest
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4897937
+ * @library /test/jdk/java/io/Serializable/maskSyntheticModifier
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer MaskSyntheticModifierTest
+ * @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
+ * modifiers of fields and methods does not affect default
+ * serialVersionUID calculation.
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/misplacedArrayClassDesc/TestDescription.java b/test/jdk/java/io/FastSerializer/misplacedArrayClassDesc/TestDescription.java
new file mode 100644
index 000000000..1e05819a6
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/misplacedArrayClassDesc/TestDescription.java
@@ -0,0 +1,20 @@
+/*
+*- @TestCaseID:FastSerializer/MisplacedArrayClassDesc
+*- @TestCaseName:MisplacedArrayClassDesc
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+/* @test
+ * @bug 6313687
+ * @summary Verify that if the class descriptor for an ordinary object is the
+ * descriptor for an array class, an ObjectStreamException is thrown.
+ * @library /test/jdk/java/io/Serializable/misplacedArrayClassDesc
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer MisplacedArrayClassDesc
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/modifyStaticFields/TestDescription.java b/test/jdk/java/io/FastSerializer/modifyStaticFields/TestDescription.java
new file mode 100644
index 000000000..5606563f0
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/modifyStaticFields/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/ModifyStaticFields
+*- @TestCaseName:ModifyStaticFields
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4334623
+ * @summary Verify that serialPersistentFields cannot be used to cause
+ * deserialization to set the value of a static field.
+ * @library /test/jdk/java/io/Serializable/modifyStaticFields
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ModifyStaticFields
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/nestedReplace/TestDescription.java b/test/jdk/java/io/FastSerializer/nestedReplace/TestDescription.java
new file mode 100644
index 000000000..4dea6446b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/nestedReplace/TestDescription.java
@@ -0,0 +1,25 @@
+/*
+*- @TestCaseID:FastSerializer/NestedReplace
+*- @TestCaseName:NestedReplace
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4217737
+ * @library /test/jdk/java/io/Serializable/nestedReplace/
+ * @clean NestedReplace A B C D
+ * @build NestedReplace
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer NestedReplace
+ * @summary Ensure that replacement objects can nominate their own replacements,
+ * so long as the replacement is not the same class as the
+ * just-replaced object.
+ *
+ */
diff --git a/test/jdk/java/io/FastSerializer/noSuchFieldClarification/TestDescription.java b/test/jdk/java/io/FastSerializer/noSuchFieldClarification/TestDescription.java
new file mode 100644
index 000000000..d6a03f4a2
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/noSuchFieldClarification/TestDescription.java
@@ -0,0 +1,23 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/NoSuchFieldClarification
+*- @TestCaseName:jdk17_NoSuchFieldClarification
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 6323008
+ * @summary this test verifies that exception from GetField.get method
+ * will be a more comprehensible
+ *
+ * @author Andrey Ozerov
+ * @library /test/jdk/java/io/Serializable/noSuchFieldClarification/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer NoSuchFieldClarification
+ */
diff --git a/test/jdk/java/io/FastSerializer/nonserializable/TestDescription.java b/test/jdk/java/io/FastSerializer/nonserializable/TestDescription.java
new file mode 100644
index 000000000..5e351a5a9
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/nonserializable/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:FastSerializer/nonserializable
+*- @TestCaseName:nonserializable
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4403192
+ * @summary Verify that serialization includes the offending class name in the
+ * message string of a NotSerializableException.
+ * @library /test/jdk/java/io/Serializable/nonserializable/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ExceptionDetail
+ */
diff --git a/test/jdk/java/io/FastSerializer/normalExter/normalClassExternalize.java b/test/jdk/java/io/FastSerializer/normalExter/normalClassExternalize.java
new file mode 100644
index 000000000..a49ec537e
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/normalExter/normalClassExternalize.java
@@ -0,0 +1,81 @@
+/*
+*- @TestCaseID:FastSerializer/normalClassExternalize
+*- @TestCaseName:normalClassExternalize
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test serialize and deserialize of normal object
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true normalClassExternalize
+*/
+
+
+import java.io.*;
+
+class Foo implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+public class normalClassExternalize {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/normalSer/ArraySerialize.java b/test/jdk/java/io/FastSerializer/normalSer/ArraySerialize.java
new file mode 100644
index 000000000..b82074c74
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/normalSer/ArraySerialize.java
@@ -0,0 +1,67 @@
+/*
+*- @TestCaseID:FastSerializer/ArraySerialize
+*- @TestCaseName:ArraySerialize
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test serialize and deserialize of Array object
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true ArraySerialize
+*/
+
+
+import java.io.*;
+import java.util.*;
+
+
+public class ArraySerialize {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo2.ser"));
+ int num = 100;
+ Random r = new Random();
+ int[] A1 = new int[num];
+ int[] A2 = new int[num];
+ int[] A3 = new int[num];
+ int[] A4 = new int[num];
+ for(int i = 0; i < num; i++) {
+ A1[i] = r.nextInt();
+ A2[i] = r.nextInt();
+ A3[i] = r.nextInt();
+ A4[i] = r.nextInt();
+ }
+ oout.writeObject(A1);
+ oout.writeObject(A2);
+ oout.writeObject(A3);
+ oout.writeObject(A4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo2.ser"));
+ int[] Aout1 = (int[])oin.readObject();
+ int[] Aout2 = (int[])oin.readObject();
+ int[] Aout3 = (int[])oin.readObject();
+ int[] Aout4 = (int[])oin.readObject();
+ oin.close();
+ if(!Arrays.equals(A1,Aout1)||!Arrays.equals(A2,Aout2)||!Arrays.equals(A3,Aout3)||!Arrays.equals(A4,Aout4)){
+ throw new Exception("deserialized Array different");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo2.ser"));
+ int[] Aout5 = (int[])oin2.readObject();
+ int[] Aout6 = (int[])oin2.readObject();
+ int[] Aout7 = (int[])oin2.readObject();
+ int[] Aout8 = (int[])oin2.readObject();
+ if(!Arrays.equals(A1,Aout5)||!Arrays.equals(A2,Aout6)||!Arrays.equals(A3,Aout7)||!Arrays.equals(A4,Aout8)){
+ throw new Exception("deserialized Array different");
+ }
+ oin2.close();
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/normalSer/EnumSerialize.java b/test/jdk/java/io/FastSerializer/normalSer/EnumSerialize.java
new file mode 100644
index 000000000..c70c256de
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/normalSer/EnumSerialize.java
@@ -0,0 +1,68 @@
+/*
+*- @TestCaseID:FastSerializer/EnumSerialize
+*- @TestCaseName:EnumSerialize
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test serialize and deserialize of Enum object
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true EnumSerialize
+*/
+
+
+import java.io.*;
+import java.util.*;
+
+enum E {
+ A,
+ B,
+ C,
+ D,
+ ;
+ }
+
+public class EnumSerialize {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo3.ser"));
+ int num = 100;
+ Random r = new Random();
+ E E1 = E.A;
+ E E2 = E.B;
+ E E3 = E.C;
+ E E4 = E.D;
+ oout.writeObject(E1);
+ oout.writeObject(E2);
+ oout.writeObject(E3);
+ oout.writeObject(E4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo3.ser"));
+ E Eout1 = (E)oin.readObject();
+ E Eout2 = (E)oin.readObject();
+ E Eout3 = (E)oin.readObject();
+ E Eout4 = (E)oin.readObject();
+ oin.close();
+ if(!E1.equals(Eout1)||!E2.equals(Eout2)||!E3.equals(Eout3)||!E4.equals(Eout4)){
+ throw new Exception("deserialized Enum different");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo3.ser"));
+ E Eout5 = (E)oin2.readObject();
+ E Eout6 = (E)oin2.readObject();
+ E Eout7 = (E)oin2.readObject();
+ E Eout8 = (E)oin2.readObject();
+ if(!E1.equals(Eout5)||!E2.equals(Eout6)||!E3.equals(Eout7)||!E4.equals(Eout8)){
+ throw new Exception("deserialized Enum different");
+ }
+ oin2.close();
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/normalSer/StringSerialize.java b/test/jdk/java/io/FastSerializer/normalSer/StringSerialize.java
new file mode 100644
index 000000000..e3c8e84a7
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/normalSer/StringSerialize.java
@@ -0,0 +1,57 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/StringSerialize
+*- @TestCaseName:jdk17_StringSerialize
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test serialize and deserialize of String object
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true StringSerialize
+*/
+
+
+import java.io.*;
+
+
+public class StringSerialize {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo1.ser"));
+ String sin1 = "Hello World1";
+ String sin2 = "Hello World2";
+ String sin3 = "Hello World3";
+ String sin4 = "Hello World4";
+ oout.writeObject(sin1);
+ oout.writeObject(sin2);
+ oout.writeObject(sin3);
+ oout.writeObject(sin4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo1.ser"));
+ String sout1 = (String)oin.readObject();
+ String sout2 = (String)oin.readObject();
+ String sout3 = (String)oin.readObject();
+ String sout4 = (String)oin.readObject();
+ oin.close();
+ if(!sout1.equals(sin1) || !sout2.equals(sin2) ||!sout3.equals(sin3) ||!sout4.equals(sin4)){
+ throw new Exception("deserialized string different");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo1.ser"));
+ String sout5 = (String)oin2.readObject();
+ String sout6 = (String)oin2.readObject();
+ String sout7 = (String)oin2.readObject();
+ String sout8 = (String)oin2.readObject();
+ if(!sout5.equals(sin1) || !sout6.equals(sin2) ||!sout7.equals(sin3) ||!sout8.equals(sin4)){
+ throw new Exception("deserialized string different");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/normalSer/normalClassSerialize.java b/test/jdk/java/io/FastSerializer/normalSer/normalClassSerialize.java
new file mode 100644
index 000000000..b37562c15
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/normalSer/normalClassSerialize.java
@@ -0,0 +1,69 @@
+/*
+*- @TestCaseID:FastSerializer/normalClassSerialize
+*- @TestCaseName:normalClassSerialize
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test serialize and deserialize of normal object
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true normalClassSerialize
+*/
+
+
+import java.io.*;
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+
+public class normalClassSerialize {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo4.ser"));
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo4.ser"));
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo4.ser"));
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/notAvailable/TestDescription.java b/test/jdk/java/io/FastSerializer/notAvailable/TestDescription.java
new file mode 100644
index 000000000..09a2b3e41
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/notAvailable/TestDescription.java
@@ -0,0 +1,23 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/NotAvailable
+*- @TestCaseName:jdk17_NotAvailable
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4085756
+ * @summary Ensure readObject() works when InputStream.available() is not implemented.
+ * In JDK 1.1.x, Win32 System Console available() thows IOException
+ * to denote that it is not implemented.
+ * @library /test/jdk/java/io/Serializable/notAvailable/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer NotAvailable
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/nullArgExceptionOrder/TestDescription.java b/test/jdk/java/io/FastSerializer/nullArgExceptionOrder/TestDescription.java
new file mode 100644
index 000000000..015fbd4e1
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/nullArgExceptionOrder/TestDescription.java
@@ -0,0 +1,23 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/nullArgExceptionOrder
+*- @TestCaseName:jdk17_nullArgExceptionOrder
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4771562
+ * @summary Verify that if ObjectInputStream.read(byte[], int, int) is called
+ * with a null byte array and invalid offset/length values, a
+ * NullPointerException is thrown rather than an
+ * IndexOutOfBoundsException.
+ * @library /test/jdk/java/io/Serializable/nullArgExceptionOrder/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
diff --git a/test/jdk/java/io/FastSerializer/nullStream/nullExtern.java b/test/jdk/java/io/FastSerializer/nullStream/nullExtern.java
new file mode 100644
index 000000000..7c42a8346
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/nullStream/nullExtern.java
@@ -0,0 +1,91 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/nullExtern
+*- @TestCaseName:jdk17_nullExtern
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true nullExtern
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+public class nullExtern {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = null;
+ Foo f2 = null;
+ Foo f3 = null;
+ Foo f4 = null;
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(fout1!=null || fout2!=null ||fout3!=null ||fout4!=null){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(fout5!=null || fout6!=null ||fout7!=null ||fout8!=null){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/nullStream/nullSerial.java b/test/jdk/java/io/FastSerializer/nullStream/nullSerial.java
new file mode 100644
index 000000000..dbc481906
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/nullStream/nullSerial.java
@@ -0,0 +1,79 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/nullSerial
+*- @TestCaseName:jdk17_nullSerial
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true nullSerial
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ static int i;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+
+public class nullSerial {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = null;
+ Foo f2 = null;
+ Foo f3 = null;
+ Foo f4 = null;
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(fout1!=null || fout2!=null ||fout3!=null ||fout4!=null){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(fout5!=null || fout6!=null ||fout7!=null ||fout8!=null){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/oldTests/TestDescription.java b/test/jdk/java/io/FastSerializer/oldTests/TestDescription.java
new file mode 100644
index 000000000..8b34430ef
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/oldTests/TestDescription.java
@@ -0,0 +1,121 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/oldTests
+*- @TestCaseName:jdk17_oldTests
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+/* @test
+ * @summary it is new version of old test which was under
+ * /src/share/test/serialization/piotest.java
+ * Test of serialization/deserialization of
+ * objects as arrays of arrays
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ArraysOfArrays
+ */
+
+/* @test
+ * @summary it is a new version of an old test which was
+ * /src/share/test/serialization/piotest.java
+ * Test of serialization/deserialization of
+ * objects with Arrays types
+ *
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @build ArrayOpsTest PrimitivesTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SimpleArrays
+ */
+
+/* @test
+ * @summary it is a new version of an old test which was
+ * /src/share/test/serialization/piotest.java
+ * Test of serialization when there is
+ * exceptions on the I/O stream
+ *
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @build PrimitivesTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SerializeWithException
+ */
+
+/* @test
+ * @summary it is new version of old test which was
+ * /src/share/test/serialization/psiotest.java
+ * Test pickling and unpickling an object with derived classes
+ * and using a read special to serialize the "middle" class.
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer CheckingEquality
+ */
+
+/* @test
+ * @summary it is new version of old test which was
+ * /src/share/test/serialization/piotest.java
+ * Test of serialization/deserialization of
+ * objects with BinaryTree types
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer BinaryTree
+ */
+
+
+/* @test
+ * @summary it is new version of old test which was
+ * /src/share/test/serialization/subtest.java
+ * This test verifies of invocation
+ * annotateClass/replaceObject methods
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer AnnotateClass
+ */
+
+/* @test
+ * @summary it is new version of old test which was
+ * /src/share/test/serialization/piotest.java
+ * Test of serialization/deserialization of
+ * objects with CircularListType types
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer CircularList
+ */
+
+/* @test
+ * @summary it is new version of old test which was under
+ * /src/share/test/serialization/psiotest.java
+ * Test validation callbacks
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ValidateClass
+ */
+
+/* @test
+ * @summary it is a new version of an old test which was
+ * /src/share/test/serialization/piotest.java
+ * Test of serialization/deserialization of
+ * primitives
+ *
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @build PrimitivesTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer WritePrimitive
+ */
+
+/* @test
+ * @summary it is a new version of an old test which was
+ * /src/share/test/serialization/piotest.java
+ * Test of serialization/deserialization
+ * of objects with fields of array type
+ *
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @build ArrayTest PrimitivesTest ArrayOpsTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ArrayFields
+ */
+
+/* @test
+ * @summary it is new version of old test which was
+ * /src/share/test/serialization/psiotest.java
+ * Test pickling and unpickling an object with derived classes
+ * and using a read special to serialize the "middle" class,
+ * which raises NotSerializableException inside writeObject()
+ * and readObject() methods.
+ * @library /test/jdk/java/io/Serializable/oldTests/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer CheckForException
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/optionalDataEnd/TestDescription.java b/test/jdk/java/io/FastSerializer/optionalDataEnd/TestDescription.java
new file mode 100644
index 000000000..8fdf70edd
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/optionalDataEnd/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/optionalDataEnd
+*- @TestCaseName:jdk17_optionalDataEnd
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4402870
+ * @summary Verify that an OptionalDataException with eof == true is thrown
+ * when a call to ObjectInputStream.readObject() attempts to read past
+ * the end of custom data.
+ * @library /test/jdk/java/io/Serializable/optionalDataEnd/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer OptionalDataEnd
+ */
diff --git a/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteAnnotateClass.java b/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteAnnotateClass.java
new file mode 100644
index 000000000..cc98443e4
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteAnnotateClass.java
@@ -0,0 +1,121 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/Extern/overWriteAnnotateClass
+*- @TestCaseName:jdk17_overWriteAnnotateClass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true overWriteAnnotateClass
+*/
+
+
+import java.io.*;
+import java.util.ArrayList;
+
+class Foo implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+
+ public boolean equals(ArrayList obj) {
+ return (this.i == (int)obj.get(0) && this.s.equals(obj.get(1)));
+ }
+
+ private Object readResolve() throws ObjectStreamException {
+ ArrayList<Object> list = new ArrayList<>();
+ list.add(i);
+ list.add(s);
+ return list;
+ }
+}
+
+class MyObjectOutputStream extends ObjectOutputStream{
+
+ public MyObjectOutputStream(OutputStream out) throws IOException {
+ super(out);
+ }
+
+ @Override
+ protected void annotateClass(Class c)throws IOException
+ {
+ if(c == Foo.class)
+ {
+ super.annotateClass(c);
+ return ;
+ }else {
+ throw new InvalidClassException(
+ "Unauthorized deserialization attempt");
+ }
+ }
+
+
+}
+
+public class overWriteAnnotateClass {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ MyObjectOutputStream oout = new MyObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ ArrayList fout1 = (ArrayList)oin.readObject();
+ ArrayList fout2 = (ArrayList)oin.readObject();
+ ArrayList fout3 = (ArrayList)oin.readObject();
+ ArrayList fout4 = (ArrayList)oin.readObject();
+ oin.close();
+ if(!f1.equals(fout1) || !f2.equals(fout2) ||!f3.equals(fout3) ||!f4.equals(fout4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ ArrayList fout5 = (ArrayList)oin2.readObject();
+ ArrayList fout6 = (ArrayList)oin2.readObject();
+ ArrayList fout7 = (ArrayList)oin2.readObject();
+ ArrayList fout8 = (ArrayList)oin2.readObject();
+ if(!f1.equals(fout5) || !f2.equals(fout6) ||!f3.equals(fout7) ||!f4.equals(fout8)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteReadResolve.java b/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteReadResolve.java
new file mode 100644
index 000000000..95bc1fa84
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteReadResolve.java
@@ -0,0 +1,100 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/Extern/overWriteReadResolve
+*- @TestCaseName:Extern/overWriteReadResolve
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true overWriteReadResolve
+*/
+
+
+import java.io.*;
+import java.util.ArrayList;
+
+class Foo implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+
+ public boolean equals(ArrayList obj) {
+ return (this.i == (int)obj.get(0) && this.s.equals(obj.get(1)));
+ }
+
+ private Object readResolve() throws ObjectStreamException {
+ ArrayList<Object> list = new ArrayList<>();
+ list.add(i);
+ list.add(s);
+ return list;
+ }
+}
+
+
+public class overWriteReadResolve {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ ArrayList fout1 = (ArrayList)oin.readObject();
+ ArrayList fout2 = (ArrayList)oin.readObject();
+ ArrayList fout3 = (ArrayList)oin.readObject();
+ ArrayList fout4 = (ArrayList)oin.readObject();
+ oin.close();
+ if(!f1.equals(fout1) || !f2.equals(fout2) ||!f3.equals(fout3) ||!f4.equals(fout4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ ArrayList fout5 = (ArrayList)oin2.readObject();
+ ArrayList fout6 = (ArrayList)oin2.readObject();
+ ArrayList fout7 = (ArrayList)oin2.readObject();
+ ArrayList fout8 = (ArrayList)oin2.readObject();
+ if(!f1.equals(fout5) || !f2.equals(fout6) ||!f3.equals(fout7) ||!f4.equals(fout8)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteResolveClass.java b/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteResolveClass.java
new file mode 100644
index 000000000..0e3c7b3ad
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteResolveClass.java
@@ -0,0 +1,114 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/Extern/overWriteResolveClass
+*- @TestCaseName:Extern/overWriteResolveClass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true overWriteResolveClass
+*/
+
+
+import java.io.*;
+import java.util.ArrayList;
+
+class Foo implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+
+ public boolean equals(ArrayList obj) {
+ return (this.i == (int)obj.get(0) && this.s.equals(obj.get(1)));
+ }
+
+ private Object readResolve() throws ObjectStreamException {
+ ArrayList<Object> list = new ArrayList<>();
+ list.add(i);
+ list.add(s);
+ return list;
+ }
+}
+
+class MyObjectInputStream extends ObjectInputStream {
+ public MyObjectInputStream(InputStream in) throws IOException {
+ super(in);
+ }
+ @Override
+ protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
+ if (!desc.getName().equals(Foo.class.getName())) {
+ throw new InvalidClassException(
+ "Unauthorized deserialization attempt",
+ desc.getName());
+ }
+ return super.resolveClass(desc);
+ }
+}
+
+public class overWriteResolveClass {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ MyObjectInputStream oin = new MyObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ ArrayList fout1 = (ArrayList)oin.readObject();
+ ArrayList fout2 = (ArrayList)oin.readObject();
+ ArrayList fout3 = (ArrayList)oin.readObject();
+ ArrayList fout4 = (ArrayList)oin.readObject();
+ oin.close();
+ if(!f1.equals(fout1) || !f2.equals(fout2) ||!f3.equals(fout3) ||!f4.equals(fout4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ MyObjectInputStream oin2 = new MyObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ ArrayList fout5 = (ArrayList)oin2.readObject();
+ ArrayList fout6 = (ArrayList)oin2.readObject();
+ ArrayList fout7 = (ArrayList)oin2.readObject();
+ ArrayList fout8 = (ArrayList)oin2.readObject();
+ if(!f1.equals(fout5) || !f2.equals(fout6) ||!f3.equals(fout7) ||!f4.equals(fout8)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteWriteReplace.java b/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteWriteReplace.java
new file mode 100644
index 000000000..fc8be4cee
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/overWriteExtern/overWriteWriteReplace.java
@@ -0,0 +1,99 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/Extern/overWriteWriteReplace
+*- @TestCaseName:Extern/overWriteWriteReplace
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true overWriteWriteReplace
+*/
+
+
+import java.io.*;
+import java.util.ArrayList;
+
+class Foo implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+
+ public boolean equals(ArrayList obj) {
+ return (this.i == (int)obj.get(0) && this.s.equals(obj.get(1)));
+ }
+ private Object writeReplace() throws ObjectStreamException {
+ ArrayList<Object> list = new ArrayList<>();
+ list.add(i);
+ list.add(s);
+ return list;
+ }
+}
+
+
+public class overWriteWriteReplace {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ ArrayList fout1 = (ArrayList)oin.readObject();
+ ArrayList fout2 = (ArrayList)oin.readObject();
+ ArrayList fout3 = (ArrayList)oin.readObject();
+ ArrayList fout4 = (ArrayList)oin.readObject();
+ oin.close();
+ if(!f1.equals(fout1) || !f2.equals(fout2) ||!f3.equals(fout3) ||!f4.equals(fout4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ ArrayList fout5 = (ArrayList)oin2.readObject();
+ ArrayList fout6 = (ArrayList)oin2.readObject();
+ ArrayList fout7 = (ArrayList)oin2.readObject();
+ ArrayList fout8 = (ArrayList)oin2.readObject();
+ if(!f1.equals(fout5) || !f2.equals(fout6) ||!f3.equals(fout7) ||!f4.equals(fout8)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/overWriteSer/overWriteAnnotateClass.java b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteAnnotateClass.java
new file mode 100644
index 000000000..5dee5bdf9
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteAnnotateClass.java
@@ -0,0 +1,108 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/Ser/overWriteAnnotateClass
+*- @TestCaseName:overWriteAnnotateClass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true overWriteAnnotateClass
+*/
+
+
+import java.io.*;
+import java.util.ArrayList;
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ String s ;
+
+ public boolean equals(ArrayList obj) {
+ return (this.i == (int)obj.get(0) && this.s.equals(obj.get(1)));
+ }
+
+ private Object readResolve() throws ObjectStreamException {
+ ArrayList<Object> list = new ArrayList<>();
+ list.add(i);
+ list.add(s);
+ return list;
+ }
+}
+
+class MyObjectOutputStream extends ObjectOutputStream{
+
+ public MyObjectOutputStream(OutputStream out) throws IOException {
+ super(out);
+ }
+
+ @Override
+ protected void annotateClass(Class c)throws IOException
+ {
+ if(c == Foo.class)
+ {
+ super.annotateClass(c);
+ return ;
+ }else {
+ throw new InvalidClassException(
+ "Unauthorized deserialization attempt");
+ }
+ }
+
+
+}
+
+public class overWriteAnnotateClass {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ MyObjectOutputStream oout = new MyObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ ArrayList fout1 = (ArrayList)oin.readObject();
+ ArrayList fout2 = (ArrayList)oin.readObject();
+ ArrayList fout3 = (ArrayList)oin.readObject();
+ ArrayList fout4 = (ArrayList)oin.readObject();
+ oin.close();
+ if(!f1.equals(fout1) || !f2.equals(fout2) ||!f3.equals(fout3) ||!f4.equals(fout4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ ArrayList fout5 = (ArrayList)oin2.readObject();
+ ArrayList fout6 = (ArrayList)oin2.readObject();
+ ArrayList fout7 = (ArrayList)oin2.readObject();
+ ArrayList fout8 = (ArrayList)oin2.readObject();
+ if(!f1.equals(fout5) || !f2.equals(fout6) ||!f3.equals(fout7) ||!f4.equals(fout8)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/overWriteSer/overWriteReadResolve.java b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteReadResolve.java
new file mode 100644
index 000000000..fa4d5ca2a
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteReadResolve.java
@@ -0,0 +1,86 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/Ser/overWriteReadResolve
+*- @TestCaseName:Ser/overWriteReadResolve
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true overWriteReadResolve
+*/
+
+
+import java.io.*;
+import java.util.ArrayList;
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ String s ;
+
+ public boolean equals(ArrayList obj) {
+ return (this.i == (int)obj.get(0) && this.s.equals(obj.get(1)));
+ }
+
+ private Object readResolve() throws ObjectStreamException {
+ ArrayList<Object> list = new ArrayList<>();
+ list.add(i);
+ list.add(s);
+ return list;
+ }
+}
+
+public class overWriteReadResolve {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ ArrayList fout1 = (ArrayList)oin.readObject();
+ ArrayList fout2 = (ArrayList)oin.readObject();
+ ArrayList fout3 = (ArrayList)oin.readObject();
+ ArrayList fout4 = (ArrayList)oin.readObject();
+ oin.close();
+ if(!f1.equals(fout1) || !f2.equals(fout2) ||!f3.equals(fout3) ||!f4.equals(fout4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ ArrayList fout5 = (ArrayList)oin2.readObject();
+ ArrayList fout6 = (ArrayList)oin2.readObject();
+ ArrayList fout7 = (ArrayList)oin2.readObject();
+ ArrayList fout8 = (ArrayList)oin2.readObject();
+ if(!f1.equals(fout5) || !f2.equals(fout6) ||!f3.equals(fout7) ||!f4.equals(fout8)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/overWriteSer/overWriteResolveClass.java b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteResolveClass.java
new file mode 100644
index 000000000..cff0efc9e
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteResolveClass.java
@@ -0,0 +1,102 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/Ser/overWriteResolveClass
+*- @TestCaseName:Ser/overWriteResolveClass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true overWriteResolveClass
+*/
+
+
+import java.io.*;
+import java.util.ArrayList;
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ String s ;
+
+ public boolean equals(ArrayList obj) {
+ return (this.i == (int)obj.get(0) && this.s.equals(obj.get(1)));
+ }
+
+ private Object readResolve() throws ObjectStreamException {
+ ArrayList<Object> list = new ArrayList<>();
+ list.add(i);
+ list.add(s);
+ return list;
+ }
+}
+
+class MyObjectInputStream extends ObjectInputStream {
+
+ public MyObjectInputStream(InputStream in) throws IOException {
+ super(in);
+ }
+ @Override
+ protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
+ if (!desc.getName().equals(Foo.class.getName())) {
+ throw new InvalidClassException(
+ "Unauthorized deserialization attempt",
+ desc.getName());
+ }
+ return super.resolveClass(desc);
+ }
+}
+
+public class overWriteResolveClass {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ MyObjectInputStream oin = new MyObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ ArrayList fout1 = (ArrayList)oin.readObject();
+ ArrayList fout2 = (ArrayList)oin.readObject();
+ ArrayList fout3 = (ArrayList)oin.readObject();
+ ArrayList fout4 = (ArrayList)oin.readObject();
+ oin.close();
+ if(!f1.equals(fout1) || !f2.equals(fout2) ||!f3.equals(fout3) ||!f4.equals(fout4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ MyObjectInputStream oin2 = new MyObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ ArrayList fout5 = (ArrayList)oin2.readObject();
+ ArrayList fout6 = (ArrayList)oin2.readObject();
+ ArrayList fout7 = (ArrayList)oin2.readObject();
+ ArrayList fout8 = (ArrayList)oin2.readObject();
+ if(!f1.equals(fout5) || !f2.equals(fout6) ||!f3.equals(fout7) ||!f4.equals(fout8)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/overWriteSer/overWriteWriteObject.java b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteWriteObject.java
new file mode 100644
index 000000000..8b1b091e8
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteWriteObject.java
@@ -0,0 +1,81 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/overWriteWriteObject
+*- @TestCaseName:overWriteWriteObject
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test serialize and deserialize of normal object
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true overWriteWriteObject
+*/
+
+
+import java.io.*;
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+
+ private void writeObject(java.io.ObjectOutputStream stream)
+ throws IOException {
+ stream.writeObject(s);
+ stream.writeInt(i);
+ }
+
+ private void readObject(java.io.ObjectInputStream stream)
+ throws IOException, ClassNotFoundException {
+ s = (String) stream.readObject();
+ i = stream.readInt();
+ }
+}
+
+public class overWriteWriteObject {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo4.ser"));
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo4.ser"));
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo4.ser"));
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/overWriteSer/overWriteWriteReplace.java b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteWriteReplace.java
new file mode 100644
index 000000000..c794132aa
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/overWriteSer/overWriteWriteReplace.java
@@ -0,0 +1,85 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/Ser/overWriteWriteReplace
+*- @TestCaseName:Ser/overWriteWriteReplace
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true overWriteWriteReplace
+*/
+
+
+import java.io.*;
+import java.util.ArrayList;
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i;
+ String s ;
+
+ public boolean equals(ArrayList obj) {
+ return (this.i == (int)obj.get(0) && this.s.equals(obj.get(1)));
+ }
+ private Object writeReplace() throws ObjectStreamException {
+ ArrayList<Object> list = new ArrayList<>();
+ list.add(i);
+ list.add(s);
+ return list;
+ }
+}
+
+public class overWriteWriteReplace {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ ArrayList fout1 = (ArrayList)oin.readObject();
+ ArrayList fout2 = (ArrayList)oin.readObject();
+ ArrayList fout3 = (ArrayList)oin.readObject();
+ ArrayList fout4 = (ArrayList)oin.readObject();
+ oin.close();
+ if(!f1.equals(fout1) || !f2.equals(fout2) ||!f3.equals(fout3) ||!f4.equals(fout4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ ArrayList fout5 = (ArrayList)oin2.readObject();
+ ArrayList fout6 = (ArrayList)oin2.readObject();
+ ArrayList fout7 = (ArrayList)oin2.readObject();
+ ArrayList fout8 = (ArrayList)oin2.readObject();
+ if(!f1.equals(fout5) || !f2.equals(fout6) ||!f3.equals(fout7) ||!f4.equals(fout8)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/packageAccess/A.java b/test/jdk/java/io/FastSerializer/packageAccess/A.java
new file mode 100644
index 000000000..ea6b006ce
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/packageAccess/A.java
@@ -0,0 +1,20 @@
+
+
+/*
+ * @bug 4765255
+ * @summary Verify proper functioning of package equality checks used to
+ * determine accessibility of superclass constructor and inherited
+ * writeReplace/readResolve methods.
+ */
+
+public class A {
+
+ static boolean packagePrivateConstructorInvoked = false;
+
+ A() {
+ packagePrivateConstructorInvoked = true;
+ }
+
+ public A(int throwaway) {
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/packageAccess/B.java b/test/jdk/java/io/FastSerializer/packageAccess/B.java
new file mode 100644
index 000000000..e750ae72e
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/packageAccess/B.java
@@ -0,0 +1,14 @@
+
+
+/*
+ * @bug 4765255
+ * @summary Verify proper functioning of package equality checks used to
+ * determine accessibility of superclass constructor and inherited
+ * writeReplace/readResolve methods.
+ */
+
+public class B extends A implements java.io.Serializable {
+ public B() {
+ super(0);
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/packageAccess/C.java b/test/jdk/java/io/FastSerializer/packageAccess/C.java
new file mode 100644
index 000000000..af8bf0b9b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/packageAccess/C.java
@@ -0,0 +1,20 @@
+
+
+/*
+ * @bug 4765255
+ * @summary Verify proper functioning of package equality checks used to
+ * determine accessibility of superclass constructor and inherited
+ * writeReplace/readResolve methods.
+ */
+
+import java.io.*;
+
+public class C implements Serializable {
+ Object writeReplace() throws ObjectStreamException {
+ throw new Error("package-private writeReplace called");
+ }
+
+ Object readResolve() throws ObjectStreamException {
+ throw new Error("package-private readResolve called");
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/packageAccess/D.java b/test/jdk/java/io/FastSerializer/packageAccess/D.java
new file mode 100644
index 000000000..f9d80fef5
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/packageAccess/D.java
@@ -0,0 +1,11 @@
+
+
+/*
+ * @bug 4765255
+ * @summary Verify proper functioning of package equality checks used to
+ * determine accessibility of superclass constructor and inherited
+ * writeReplace/readResolve methods.
+ */
+
+public class D extends C implements java.io.Serializable {
+}
diff --git a/test/jdk/java/io/FastSerializer/packageAccess/TestDescription.java b/test/jdk/java/io/FastSerializer/packageAccess/TestDescription.java
new file mode 100644
index 000000000..20eff38c0
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/packageAccess/TestDescription.java
@@ -0,0 +1,24 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/packageAccess
+*- @TestCaseName:packageAccess
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4765255
+ * @library /test/lib /test/jdk/java/io/Serializable/packageAccess
+ * @build jdk.test.lib.util.JarUtils A B C D PackageAccessTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer PackageAccessTest
+ * @summary Verify proper functioning of package equality checks used to
+ * determine accessibility of superclass constructor and inherited
+ * writeReplace/readResolve methods.
+ */
diff --git a/test/jdk/java/io/FastSerializer/parents/EvolvedClass.java b/test/jdk/java/io/FastSerializer/parents/EvolvedClass.java
new file mode 100644
index 000000000..aaff27452
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/parents/EvolvedClass.java
@@ -0,0 +1,66 @@
+
+
+/*
+ * @bug 4186885
+ */
+
+import java.io.*;
+
+public class EvolvedClass {
+ public static void main(String args[]) throws Exception{
+ ASubClass corg = new ASubClass(1, "SerializedByEvolvedClass");
+ ASubClass cnew = null;
+
+ // Deserialize in to new class object
+ FileInputStream fi = new FileInputStream("parents.ser");
+ try {
+ ObjectInputStream si = new ObjectInputStream(fi);
+ cnew = (ASubClass) si.readObject();
+ } finally {
+ fi.close();
+ }
+
+ System.out.println("Printing the deserialized class: ");
+ System.out.println();
+ System.out.println(cnew);
+ }
+}
+
+
+/* During deserialization, the no-arg constructor of a serializable base class
+ * must not be invoked.
+ */
+class ASuperClass implements Serializable {
+ String name;
+
+ ASuperClass() {
+ /*
+ * This method is not to be executed during deserialization for this
+ * example. Must call no-arg constructor of class Object which is the
+ * base class for ASuperClass.
+ */
+ throw new Error("ASuperClass: Wrong no-arg constructor invoked");
+ }
+
+ ASuperClass(String name) {
+ this.name = new String(name);
+ }
+
+ public String toString() {
+ return("Name: " + name);
+ }
+}
+
+class ASubClass extends ASuperClass implements Serializable {
+ int num;
+
+ private static final long serialVersionUID =6341246181948372513L;
+ ASubClass(int num, String name) {
+ super(name);
+ this.num = num;
+ }
+
+ public String toString() {
+ return (super.toString() + "\nNum: " + num);
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/partialClassDesc/TestDescription.java b/test/jdk/java/io/FastSerializer/partialClassDesc/TestDescription.java
new file mode 100644
index 000000000..05f634b51
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/partialClassDesc/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/partialClassDesc
+*- @TestCaseName:partialClassDesc
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4373844
+ * @summary Verify that partially initialized ObjectStreamClass instances
+ * cannot be obtained from ObjectStreamClass.lookup() in the event
+ * that the target class is uninitializable.
+ * @library /test/jdk/java/io/Serializable/partialClassDesc/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer PartialClassDesc
+ */
diff --git a/test/jdk/java/io/FastSerializer/primitiveClasses/TestDescription.java b/test/jdk/java/io/FastSerializer/primitiveClasses/TestDescription.java
new file mode 100644
index 000000000..97a1bf169
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/primitiveClasses/TestDescription.java
@@ -0,0 +1,20 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/primitiveClasses
+*- @TestCaseName:primitiveClasses
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4171142 4519050
+ * @summary Verify that primitive classes can be serialized and deserialized.
+ * @library /test/jdk/java/io/Serializable/primitiveClasses/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer PrimitiveClasses
+ */
diff --git a/test/jdk/java/io/FastSerializer/protocolVersion1/arrayVersion1.java b/test/jdk/java/io/FastSerializer/protocolVersion1/arrayVersion1.java
new file mode 100644
index 000000000..f125c3053
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/protocolVersion1/arrayVersion1.java
@@ -0,0 +1,68 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/arrayVersion1
+*- @TestCaseName:arrayVersion1
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test serialize and deserialize of Array object
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true arrayVersion1
+*/
+
+
+import java.io.*;
+import java.util.*;
+
+
+public class arrayVersion1 {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo2.ser"));
+ oout.useProtocolVersion(ObjectInputStream.PROTOCOL_VERSION_1);
+ int num = 100;
+ Random r = new Random();
+ int[] A1 = new int[num];
+ int[] A2 = new int[num];
+ int[] A3 = new int[num];
+ int[] A4 = new int[num];
+ for(int i = 0; i < num; i++) {
+ A1[i] = r.nextInt();
+ A2[i] = r.nextInt();
+ A3[i] = r.nextInt();
+ A4[i] = r.nextInt();
+ }
+ oout.writeObject(A1);
+ oout.writeObject(A2);
+ oout.writeObject(A3);
+ oout.writeObject(A4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo2.ser"));
+ int[] Aout1 = (int[])oin.readObject();
+ int[] Aout2 = (int[])oin.readObject();
+ int[] Aout3 = (int[])oin.readObject();
+ int[] Aout4 = (int[])oin.readObject();
+ oin.close();
+ if(!Arrays.equals(A1,Aout1)||!Arrays.equals(A2,Aout2)||!Arrays.equals(A3,Aout3)||!Arrays.equals(A4,Aout4)){
+ throw new Exception("deserialized Array different");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo2.ser"));
+ int[] Aout5 = (int[])oin2.readObject();
+ int[] Aout6 = (int[])oin2.readObject();
+ int[] Aout7 = (int[])oin2.readObject();
+ int[] Aout8 = (int[])oin2.readObject();
+ if(!Arrays.equals(A1,Aout5)||!Arrays.equals(A2,Aout6)||!Arrays.equals(A3,Aout7)||!Arrays.equals(A4,Aout8)){
+ throw new Exception("deserialized Array different");
+ }
+ oin2.close();
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/protocolVersion1/enumVersion.java b/test/jdk/java/io/FastSerializer/protocolVersion1/enumVersion.java
new file mode 100644
index 000000000..248a182ad
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/protocolVersion1/enumVersion.java
@@ -0,0 +1,69 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/enumVersion
+*- @TestCaseName:enumVersion
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test serialize and deserialize of Enum object
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true enumVersion
+*/
+
+
+import java.io.*;
+import java.util.*;
+
+enum E {
+ A,
+ B,
+ C,
+ D,
+ ;
+ }
+
+public class enumVersion {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo3.ser"));
+ oout.useProtocolVersion(ObjectInputStream.PROTOCOL_VERSION_1);
+ int num = 100;
+ Random r = new Random();
+ E E1 = E.A;
+ E E2 = E.B;
+ E E3 = E.C;
+ E E4 = E.D;
+ oout.writeObject(E1);
+ oout.writeObject(E2);
+ oout.writeObject(E3);
+ oout.writeObject(E4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo3.ser"));
+ E Eout1 = (E)oin.readObject();
+ E Eout2 = (E)oin.readObject();
+ E Eout3 = (E)oin.readObject();
+ E Eout4 = (E)oin.readObject();
+ oin.close();
+ if(!E1.equals(Eout1)||!E2.equals(Eout2)||!E3.equals(Eout3)||!E4.equals(Eout4)){
+ throw new Exception("deserialized Enum different");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo3.ser"));
+ E Eout5 = (E)oin2.readObject();
+ E Eout6 = (E)oin2.readObject();
+ E Eout7 = (E)oin2.readObject();
+ E Eout8 = (E)oin2.readObject();
+ if(!E1.equals(Eout5)||!E2.equals(Eout6)||!E3.equals(Eout7)||!E4.equals(Eout8)){
+ throw new Exception("deserialized Enum different");
+ }
+ oin2.close();
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/protocolVersion1/externVersion1.java b/test/jdk/java/io/FastSerializer/protocolVersion1/externVersion1.java
new file mode 100644
index 000000000..40143a07a
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/protocolVersion1/externVersion1.java
@@ -0,0 +1,96 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/externVersion1
+*- @TestCaseName:externVersion1
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true externVersion1
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Externalizable {
+ int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+public class externVersion1 {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.useProtocolVersion(ObjectInputStream.PROTOCOL_VERSION_1);
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }catch (StreamCorruptedException ex2){
+ System.out.println("Expected Exception");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }catch (StreamCorruptedException ex2){
+ System.out.println("Expected Exception");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/protocolVersion1/serVersion1.java b/test/jdk/java/io/FastSerializer/protocolVersion1/serVersion1.java
new file mode 100644
index 000000000..17a9b8adf
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/protocolVersion1/serVersion1.java
@@ -0,0 +1,66 @@
+/*
+* @test
+* @summary test change field to static on deserialize end
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true serVersion1
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ static int i;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+
+public class serVersion1 {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ String testsrc = System.getProperty("test.src");
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.useProtocolVersion(ObjectInputStream.PROTOCOL_VERSION_1);
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/protocolVersion1/stringVersion1.java b/test/jdk/java/io/FastSerializer/protocolVersion1/stringVersion1.java
new file mode 100644
index 000000000..a108ed7c8
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/protocolVersion1/stringVersion1.java
@@ -0,0 +1,44 @@
+/*
+* @test
+* @summary test serialize and deserialize of String object
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true stringVersion1
+*/
+
+
+import java.io.*;
+
+
+public class stringVersion1 {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo1.ser"));
+ oout.useProtocolVersion(ObjectInputStream.PROTOCOL_VERSION_1);
+ String sin1 = "Hello World1";
+ String sin2 = "Hello World2";
+ String sin3 = "Hello World3";
+ String sin4 = "Hello World4";
+ oout.writeObject(sin1);
+ oout.writeObject(sin2);
+ oout.writeObject(sin3);
+ oout.writeObject(sin4);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo1.ser"));
+ String sout1 = (String)oin.readObject();
+ String sout2 = (String)oin.readObject();
+ String sout3 = (String)oin.readObject();
+ String sout4 = (String)oin.readObject();
+ oin.close();
+ if(!sout1.equals(sin1) || !sout2.equals(sin2) ||!sout3.equals(sin3) ||!sout4.equals(sin4)){
+ throw new Exception("deserialized string different");
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo1.ser"));
+ String sout5 = (String)oin2.readObject();
+ String sout6 = (String)oin2.readObject();
+ String sout7 = (String)oin2.readObject();
+ String sout8 = (String)oin2.readObject();
+ if(!sout5.equals(sin1) || !sout6.equals(sin2) ||!sout7.equals(sin3) ||!sout8.equals(sin4)){
+ throw new Exception("deserialized string different");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/proxy/TestDescription.java b/test/jdk/java/io/FastSerializer/proxy/TestDescription.java
new file mode 100644
index 000000000..a8478395c
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/proxy/TestDescription.java
@@ -0,0 +1,20 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/Basic
+*- @TestCaseName:Basic
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @summary Verifies basic correct functioning of proxy serialization.
+ * @key randomness
+ * @library /test/jdk/java/io/Serializable/proxy/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Basic
+ */
diff --git a/test/jdk/java/io/FastSerializer/proxy/replace/TestDescription.java b/test/jdk/java/io/FastSerializer/proxy/replace/TestDescription.java
new file mode 100644
index 000000000..287852ae3
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/proxy/replace/TestDescription.java
@@ -0,0 +1,20 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/replace
+*- @TestCaseName:replace
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @summary Ensure that serialization invokes writeReplace/readResolve methods
+ * on dynamic proxies, just as with normal objects.
+ * @library /test/jdk/java/io/Serializable/proxy/replace/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ */
diff --git a/test/jdk/java/io/FastSerializer/readPastObject/TestDescription.java b/test/jdk/java/io/FastSerializer/readPastObject/TestDescription.java
new file mode 100644
index 000000000..c57c42a45
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/readPastObject/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/readPastObject
+*- @TestCaseName:readPastObject
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4253271
+ * @library /test/jdk/java/io/Serializable/readPastObject/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ReadPastObject
+ * @summary Ensure that ObjectInputStream.readObject() is called, it doesn't
+ * read past the end of the object in the underlying stream.
+ */
diff --git a/test/jdk/java/io/FastSerializer/recursiveClassDescLookup/TestDescription.java b/test/jdk/java/io/FastSerializer/recursiveClassDescLookup/TestDescription.java
new file mode 100644
index 000000000..d0395556b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/recursiveClassDescLookup/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/recursiveClassDescLookup
+*- @TestCaseName:recursiveClassDescLookup
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4803747
+ * @library /test/jdk/java/io/Serializable/recursiveClassDescLookup/
+ * @run main/othervm/timeout=20 -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Test
+ * @summary Verify that a nested call to ObjectStreamClass.lookup from within
+ * the static initializer of a serializable class will not cause
+ * deadlock.
+ */
diff --git a/test/jdk/java/io/FastSerializer/replaceStringArray/TestDescription.java b/test/jdk/java/io/FastSerializer/replaceStringArray/TestDescription.java
new file mode 100644
index 000000000..cbeb05418
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/replaceStringArray/TestDescription.java
@@ -0,0 +1,20 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/replaceStringArray
+*- @TestCaseName:replaceStringArray
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4099013
+ * @library /test/jdk/java/io/Serializable/replaceStringArray/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ReplaceStringArray
+ * @summary Enable substitution of String and Array by ObjectStreams.
+ */
diff --git a/test/jdk/java/io/FastSerializer/replaceWithNull/TestDescription.java b/test/jdk/java/io/FastSerializer/replaceWithNull/TestDescription.java
new file mode 100644
index 000000000..fe5b9610a
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/replaceWithNull/TestDescription.java
@@ -0,0 +1,20 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/replaceWithNull
+*- @TestCaseName:replaceWithNull
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4065313
+ * @library /test/jdk/java/io/Serializable/replaceWithNull/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ReplaceWithNull
+ * @summary Ensure that it is okay to replace an object with null.
+ */
diff --git a/test/jdk/java/io/FastSerializer/resolveClass/TestDescription.java b/test/jdk/java/io/FastSerializer/resolveClass/TestDescription.java
new file mode 100644
index 000000000..e0ef76230
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/resolveClass/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/resolveClass
+*- @TestCaseName:resolveClass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4413434
+ * @library /test/jdk/java/io/Serializable/resolveClass/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer MethodTest
+ * @summary Verify that generated java.lang.reflect implementation classes do
+ * not interfere with serialization's class resolution mechanism.
+ */
diff --git a/test/jdk/java/io/FastSerializer/resolveClass/consTest/Boot.java b/test/jdk/java/io/FastSerializer/resolveClass/consTest/Boot.java
new file mode 100644
index 000000000..29229b268
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/resolveClass/consTest/Boot.java
@@ -0,0 +1,15 @@
+
+/*
+ * @bug 4413434
+ * @summary Verify that generated java.lang.reflect implementation classes do
+ * not interfere with serialization's class resolution mechanism.
+ */
+
+import java.io.*;
+
+// this class should be loaded from bootclasspath
+public class Boot {
+ public Boot(ObjectInputStream oin) throws Exception {
+ oin.readObject();
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/resolveClass/consTest/ConsTest.java b/test/jdk/java/io/FastSerializer/resolveClass/consTest/ConsTest.java
new file mode 100644
index 000000000..3d3ef7004
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/resolveClass/consTest/ConsTest.java
@@ -0,0 +1,36 @@
+
+
+/*
+ * @test
+ * @bug 4413434
+ * @library /test/lib
+ * @build jdk.test.lib.util.JarUtils SetupJar Boot
+ * @run driver SetupJar
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -Xbootclasspath/a:boot.jar ConsTest
+ * @summary Verify that generated java.lang.reflect implementation classes do
+ * not interfere with serialization's class resolution mechanism.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Constructor;
+
+public class ConsTest implements Serializable {
+ public static void main(String[] args) throws Exception {
+ Constructor cons = Boot.class.getConstructor(
+ new Class[] { ObjectInputStream.class });
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ ObjectOutputStream oout = new ObjectOutputStream(bout);
+ oout.writeObject(new ConsTest());
+ oout.close();
+
+ for (int i = 0; i < 100; i++) {
+ ObjectInputStream oin = new ObjectInputStream(
+ new ByteArrayInputStream(bout.toByteArray()));
+ cons.newInstance(new Object[]{ oin });
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/resolveClass/consTest/SetupJar.java b/test/jdk/java/io/FastSerializer/resolveClass/consTest/SetupJar.java
new file mode 100644
index 000000000..4e957863e
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/resolveClass/consTest/SetupJar.java
@@ -0,0 +1,13 @@
+
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import jdk.test.lib.util.JarUtils;
+public class SetupJar {
+
+ public static void main(String args[]) throws Exception {
+ Path classes = Paths.get(System.getProperty("test.classes", ""));
+ JarUtils.createJarFile(Paths.get("boot.jar"), classes,
+ classes.resolve("Boot.class"));
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/resolveClass/deserializeButton/DeserializeButtonTest.java b/test/jdk/java/io/FastSerializer/resolveClass/deserializeButton/DeserializeButtonTest.java
new file mode 100644
index 000000000..5d17ab42d
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/resolveClass/deserializeButton/DeserializeButtonTest.java
@@ -0,0 +1,50 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/DeserializeButtonTest
+*- @TestCaseName:DeserializeButtonTest
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4413434
+ * @library /test/lib
+ * @build jdk.test.lib.util.JarUtils Foo
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer DeserializeButtonTest
+ * @summary Verify that class loaded outside of application class loader is
+ * correctly resolved during deserialization when read in by custom
+ * readObject() method of a bootstrap class (in this case,
+ * java.util.Vector).
+ */
+
+import java.net.URLClassLoader;
+import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import jdk.test.lib.util.JarUtils;
+public class DeserializeButtonTest {
+ public static void main(String[] args) throws Exception {
+ setup();
+
+ try (URLClassLoader ldr =
+ new URLClassLoader(new URL[]{ new URL("file:cb.jar") })) {
+ Runnable r = (Runnable) Class.forName("Foo", true, ldr).newInstance();
+ r.run();
+ }
+ }
+
+ private static void setup() throws Exception {
+ Path classes = Paths.get(System.getProperty("test.classes", ""));
+ JarUtils.createJarFile(Paths.get("cb.jar"),
+ classes,
+ classes.resolve("Foo.class"),
+ classes.resolve("Foo$TestElement.class"));
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/resolveClass/deserializeButton/Foo.java b/test/jdk/java/io/FastSerializer/resolveClass/deserializeButton/Foo.java
new file mode 100644
index 000000000..b7525a9d0
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/resolveClass/deserializeButton/Foo.java
@@ -0,0 +1,38 @@
+
+
+/*
+ * @bug 4413434
+ * @summary Verify that class loaded outside of application class loader is
+ * correctly resolved during deserialization when read in by custom
+ * readObject() method of a bootstrap class (in this case,
+ * java.util.Vector).
+ */
+
+import java.io.*;
+import java.util.Vector;
+
+public class Foo implements Runnable {
+
+ static class TestElement extends Object implements Serializable {}
+
+ public void run() {
+ try {
+ Vector<TestElement> container = new Vector<TestElement>();
+ container.add(new TestElement());
+
+ // iterate to trigger java.lang.reflect code generation
+ for (int i = 0; i < 100; i++) {
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ ObjectOutputStream oout = new ObjectOutputStream(bout);
+ oout.writeObject(container);
+ oout.close();
+ ObjectInputStream oin = new ObjectInputStream(
+ new ByteArrayInputStream(bout.toByteArray()));
+ oin.readObject();
+ }
+ } catch (Exception ex) {
+ throw new Error(
+ "Error occured while (de)serializing container: ", ex);
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/resolveClassException/ResolveClassException.java b/test/jdk/java/io/FastSerializer/resolveClassException/ResolveClassException.java
new file mode 100644
index 000000000..f37565d41
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/resolveClassException/ResolveClassException.java
@@ -0,0 +1,75 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/ResolveClassException
+*- @TestCaseName:ResolveClassException
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4191941
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ResolveClassException
+ * @summary Ensure that original ClassNotFoundException thrown inside of
+ * ObjectInputStream.resolveClass() is preserved (and thrown).
+ */
+
+import java.io.*;
+
+class BrokenObjectInputStream extends ObjectInputStream {
+
+ static final String message = "bodega";
+
+ BrokenObjectInputStream(InputStream in) throws IOException {
+ super(in);
+ }
+
+ protected Class resolveClass(ObjectStreamClass desc)
+ throws IOException, ClassNotFoundException
+ {
+ throw new ClassNotFoundException(message);
+ }
+}
+
+public class ResolveClassException {
+ public static void main(String[] args) throws Exception {
+ ByteArrayOutputStream bout;
+ ObjectOutputStream oout;
+ ByteArrayInputStream bin;
+ BrokenObjectInputStream oin;
+ Object obj;
+
+ // write and read an object
+ obj = new Integer(5);
+ bout = new ByteArrayOutputStream();
+ oout = new ObjectOutputStream(bout);
+ oout.writeObject(obj);
+ bin = new ByteArrayInputStream(bout.toByteArray());
+ oin = new BrokenObjectInputStream(bin);
+ try {
+ oin.readObject();
+ } catch (ClassNotFoundException e) {
+ if (! BrokenObjectInputStream.message.equals(e.getMessage()))
+ throw new Error("Original exception not preserved");
+ }
+
+ // write and read an array of objects
+ obj = new Integer[] { new Integer(5) };
+ bout = new ByteArrayOutputStream();
+ oout = new ObjectOutputStream(bout);
+ oout.writeObject(obj);
+ bin = new ByteArrayInputStream(bout.toByteArray());
+ oin = new BrokenObjectInputStream(bin);
+ try {
+ oin.readObject();
+ } catch (ClassNotFoundException e) {
+ if (! BrokenObjectInputStream.message.equals(e.getMessage()))
+ throw new Error("Original exception not preserved");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/resolveClassException/TestDescription.java b/test/jdk/java/io/FastSerializer/resolveClassException/TestDescription.java
new file mode 100644
index 000000000..028d66c5d
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/resolveClassException/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/ResolveClassException2
+*- @TestCaseName:ResolveClassException2
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4191941
+ * @library /test/jdk/java/io/Serializable/resolveClassException/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer ResolveClassException
+ * @summary Ensure that original ClassNotFoundException thrown inside of
+ * ObjectInputStream.resolveClass() is preserved (and thrown).
+ */
diff --git a/test/jdk/java/io/FastSerializer/resolveProxyClass/TestDescription.java b/test/jdk/java/io/FastSerializer/resolveProxyClass/TestDescription.java
new file mode 100644
index 000000000..3597ff34f
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/resolveProxyClass/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/NonPublicInterface
+*- @TestCaseName:NonPublicInterface
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4413817 8004928
+ * @library /test/jdk/java/io/Serializable/resolveProxyClass/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer NonPublicInterface
+ * @summary Verify that ObjectInputStream.resolveProxyClass can properly
+ * resolve a dynamic proxy class which implements a non-public
+ * interface not defined in the latest user defined class loader.
+ */
diff --git a/test/jdk/java/io/FastSerializer/sanityCheck/TestDescription.java b/test/jdk/java/io/FastSerializer/sanityCheck/TestDescription.java
new file mode 100644
index 000000000..4c0b3237b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/sanityCheck/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/SanityCheck
+*- @TestCaseName:SanityCheck
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @library /test/jdk/java/io/Serializable/sanityCheck/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SanityCheck
+ * @summary Basic sanity check to test if default (de)serialization is
+ * transmitting values properly.
+ * @key randomness
+ */
diff --git a/test/jdk/java/io/FastSerializer/serialFilter/SerialFilterTest.java b/test/jdk/java/io/FastSerializer/serialFilter/SerialFilterTest.java
new file mode 100644
index 000000000..23a0472b9
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/serialFilter/SerialFilterTest.java
@@ -0,0 +1,848 @@
+/*
+ * Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+*- @TestCaseID:jdk17/FastSerializer/SerialFilterTest
+*- @TestCaseName:SerialFilterTest
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InvalidClassException;
+import java.io.ObjectInputFilter;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serial;
+import java.io.Serializable;
+import java.lang.invoke.SerializedLambda;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.LongAdder;
+
+import javax.net.ssl.SSLEngineResult;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
+
+/* @test
+ * @bug 8234836
+ * @build SerialFilterTest
+ * @run testng/othervm -Djdk.serialSetFilterAfterRead=true -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SerialFilterTest
+ *
+ * @summary Test ObjectInputFilters using Builtin Filter Factory
+ */
+@Test
+public class SerialFilterTest implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = -6999613679881262446L;
+
+ /**
+ * Enable three arg lambda.
+ * @param <T> The pattern
+ * @param <U> The test object
+ * @param <V> Boolean for if the filter should allow or reject
+ */
+ interface TriConsumer< T, U, V> {
+ void accept(T t, U u, V v);
+ }
+
+ /**
+ * Misc object to use that should always be accepted.
+ */
+ private static final Object otherObject = Integer.valueOf(0);
+
+
+ /**
+ * DataProvider for the individual patterns to test.
+ * Expand the patterns into cases for each of the Std and Compatibility APIs.
+ * @return an array of arrays of the parameters including factories
+ */
+ @DataProvider(name="Patterns")
+ static Object[][] patterns() {
+ Object[][] patterns = new Object[][]{
+ {"java.util.Hashtable"},
+ {"java.util.Hash*"},
+ {"javax.net.ssl.*"},
+ {"javax.net.**"},
+ {"*"},
+ {"maxarray=47"},
+ {"maxdepth=5"},
+ {"maxrefs=10"},
+ {"maxbytes=100"},
+ {"maxbytes=72"},
+ {"maxbytes=+1024"},
+ {"java.base/java.util.Hashtable"},
+ };
+ return patterns;
+ }
+
+ @DataProvider(name="InvalidPatterns")
+ static Object[][] invalidPatterns() {
+ return new Object [][] {
+ {".*"},
+ {".**"},
+ {"!"},
+ {"/java.util.Hashtable"},
+ {"java.base/"},
+ {"/"},
+ };
+ }
+
+ @DataProvider(name="Limits")
+ static Object[][] limits() {
+ // The numbers are arbitrary > 1
+ return new Object[][] {
+ {"maxrefs", 1}, // 0 is tested as n-1
+ {"maxrefs", 10},
+ {"maxdepth", 5},
+ {"maxbytes", 100},
+ {"maxarray", 16},
+ {"maxbytes", Long.MAX_VALUE},
+ };
+ }
+
+ @DataProvider(name="InvalidLimits")
+ static Object[][] invalidLimits() {
+ return new Object[][] {
+ {"maxrefs=-1"},
+ {"maxdepth=-1"},
+ {"maxbytes=-1"},
+ {"maxarray=-1"},
+ {"xyz=0"},
+ {"xyz=-1"},
+ {"maxrefs=0xabc"},
+ {"maxrefs=abc"},
+ {"maxrefs="},
+ {"maxrefs=+"},
+ {"maxbytes=-1"},
+ {"maxbytes=9223372036854775808"},
+ {"maxbytes=-9223372036854775807"},
+ };
+ }
+
+ /**
+ * DataProvider of individual objects. Used to check the information
+ * available to the filter.
+ * @return Arrays of parameters with objects
+ */
+ @DataProvider(name="Objects")
+ static Object[][] objects() {
+ byte[] byteArray = new byte[0];
+ Object[] objArray = new Object[7];
+ objArray[objArray.length - 1] = objArray;
+
+ Class<?> serClass = null;
+ String className = "java.util.concurrent.atomic.LongAdder$SerializationProxy";
+ try {
+ serClass = Class.forName(className);
+ } catch (Exception e) {
+ Assert.fail("missing class: " + className, e);
+ }
+
+ Class<?>[] interfaces = {Runnable.class};
+ Runnable proxy = (Runnable) Proxy.newProxyInstance(null,
+ interfaces, (p, m, args) -> p);
+
+ Runnable runnable = (Runnable & Serializable) SerialFilterTest::noop;
+
+ List<Class<?>> classList = new ArrayList<>();
+ classList.add(HashSet.class);
+ classList.addAll(Collections.nCopies(21, Map.Entry[].class));
+
+ Object[][] objects = {
+ { null, 0, -1, 0, 0, 0,
+ Arrays.asList()}, // no callback, no values
+ { objArray, 3, 7, 9, 2, 43,
+ Arrays.asList(objArray.getClass(), objArray.getClass())},
+ { Object[].class, 1, -1, 1, 1, 27,
+ Arrays.asList(Object[].class)},
+ { new SerialFilterTest(), 1, -1, 1, 1, 24,
+ Arrays.asList(SerialFilterTest.class)},
+ { new LongAdder(), 2, -1, 2, 1, 73,
+ Arrays.asList(serClass, LongAdder.class)},
+ { new byte[14], 2, 14, 2, 1, 15,
+ Arrays.asList(byteArray.getClass(), byteArray.getClass())},
+ { runnable, 7, 0, 13, 2, 164,
+ Arrays.asList(java.lang.invoke.SerializedLambda.class,
+ objArray.getClass(),
+ objArray.getClass(),
+ SerialFilterTest.class,
+ java.lang.invoke.SerializedLambda.class)},
+ { deepHashSet(10), 69, 4, 50, 11, 607, classList },
+ { proxy.getClass(), 3, -1, 2, 2, 57,
+ Arrays.asList(Runnable.class,
+ java.lang.reflect.Proxy.class,
+ java.lang.reflect.Proxy.class)},
+ { new F(), 6, -1, 6, 6, 27,
+ Arrays.asList(F.class, E.class, D.class,
+ C.class, B.class, A.class)},
+
+ };
+ return objects;
+ }
+
+ @DataProvider(name="Arrays")
+ static Object[][] arrays() {
+ return new Object[][]{
+ {new Object[16], 16},
+ {new boolean[16], 16},
+ {new byte[16], 16},
+ {new char[16], 16},
+ {new int[16], 16},
+ {new long[16], 16},
+ {new short[16], 16},
+ {new float[16], 16},
+ {new double[16], 16},
+ };
+ }
+
+
+ /**
+ * Test each object and verify the classes identified by the filter,
+ * the count of calls to the filter, the max array size, max refs, max depth,
+ * max bytes.
+ * This test ignores/is not dependent on the global filter settings.
+ *
+ * @param object a Serializable object
+ * @param count the expected count of calls to the filter
+ * @param maxArray the maximum array size
+ * @param maxRefs the maximum references
+ * @param maxDepth the maximum depth
+ * @param maxBytes the maximum stream size
+ * @param classes the expected (unique) classes
+ * @throws IOException
+ */
+ @Test(dataProvider="Objects")
+ void t1(Object object,
+ long count, long maxArray, long maxRefs, long maxDepth, long maxBytes,
+ List<Class<?>> classes) throws IOException {
+ byte[] bytes = writeObjects(object);
+ Validator validator = new Validator();
+ validate(bytes, validator);
+ System.out.printf("v: %s%n", validator);
+
+ Assert.assertEquals(validator.count, count, "callback count wrong");
+ Assert.assertEquals(validator.classes, classes, "classes mismatch");
+ Assert.assertEquals(validator.maxArray, maxArray, "maxArray mismatch");
+ Assert.assertEquals(validator.maxRefs, maxRefs, "maxRefs wrong");
+ Assert.assertEquals(validator.maxDepth, maxDepth, "depth wrong");
+ Assert.assertEquals(validator.maxBytes, maxBytes, "maxBytes wrong");
+ }
+
+ /**
+ * Test each pattern with an appropriate object.
+ * A filter is created from the pattern and used to serialize and
+ * deserialize a generated object with both the positive and negative case.
+ * This test ignores/is not dependent on the global filter settings.
+ *
+ * @param pattern a pattern
+ */
+ @Test(dataProvider="Patterns")
+ void testPatterns(String pattern) {
+ evalPattern(pattern, (p, o, neg) -> testPatterns(p, o, neg));
+ }
+
+ /**
+ * Test that the filter on a OIS can be set only on a fresh OIS,
+ * before deserializing any objects.
+ * This test is agnostic the global filter being set or not.
+ */
+ @Test
+ void nonResettableFilter() {
+ Validator validator1 = new Validator();
+ Validator validator2 = new Validator();
+
+ Validator[] filterCases = {
+ validator1, // setting filter to a non-null filter
+ null, // setting stream-specific filter to null
+ };
+
+ for (Validator validator : filterCases) {
+ try {
+ byte[] bytes = writeObjects("text1"); // an object
+
+ try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais)) {
+ // Check the initial filter is the global filter; may be null
+ ObjectInputFilter global = ObjectInputFilter.Config.getSerialFilter();
+ ObjectInputFilter initial = ois.getObjectInputFilter();
+ Assert.assertEquals(global, initial, "initial filter should be the global filter");
+
+ ois.setObjectInputFilter(validator);
+ Object o = ois.readObject();
+ try {
+ ois.setObjectInputFilter(validator2);
+ Assert.fail("Should not be able to set filter twice");
+ } catch (IllegalStateException ise) {
+ // success, the exception was expected
+ }
+ } catch (EOFException eof) {
+ Assert.fail("Should not reach end-of-file", eof);
+ } catch (ClassNotFoundException cnf) {
+ Assert.fail("Deserializing", cnf);
+ }
+ } catch (IOException ex) {
+ Assert.fail("Unexpected IOException", ex);
+ }
+ }
+ }
+
+
+ /**
+ * Test that if an Objects readReadResolve method returns an array
+ * that the callback to the filter includes the proper array length.
+ * @throws IOException if an error occurs
+ */
+ @Test(dataProvider="Arrays")
+ void testReadResolveToArray(Object array, int length) throws IOException {
+ ReadResolveToArray object = new ReadResolveToArray(array, length);
+ byte[] bytes = writeObjects(object);
+ Object o = validate(bytes, object); // the object is its own filter
+ Assert.assertEquals(o.getClass(), array.getClass(), "Filter not called with the array");
+ }
+
+
+ /**
+ * Test repeated limits use the last value.
+ * Construct a filter with the limit and the limit repeated -1.
+ * Invoke the filter with the limit to make sure it is rejected.
+ * Invoke the filter with the limit -1 to make sure it is accepted.
+ * @param name the name of the limit to test
+ * @param value a test value
+ */
+ @Test(dataProvider="Limits")
+ void testLimits(String name, long value) {
+ Class<?> arrayClass = new int[0].getClass();
+ String pattern = String.format("%s=%d;%s=%d", name, value, name, value - 1);
+ ObjectInputFilter filter = ObjectInputFilter.Config.createFilter(pattern);
+ Assert.assertEquals(
+ filter.checkInput(new FilterValues(arrayClass, value, value, value, value)),
+ ObjectInputFilter.Status.REJECTED,
+ "last limit value not used: " + filter);
+ Assert.assertEquals(
+ filter.checkInput(new FilterValues(arrayClass, value-1, value-1, value-1, value-1)),
+ ObjectInputFilter.Status.UNDECIDED,
+ "last limit value not used: " + filter);
+ }
+
+ /**
+ * Test invalid limits.
+ * Construct a filter with the limit, it should throw IllegalArgumentException.
+ * @param pattern a pattern to test
+ */
+ @Test(dataProvider="InvalidLimits", expectedExceptions=java.lang.IllegalArgumentException.class)
+ void testInvalidLimits(String pattern) {
+ try {
+ ObjectInputFilter filter = ObjectInputFilter.Config.createFilter(pattern);
+ } catch (IllegalArgumentException iae) {
+ System.out.printf(" success exception: %s%n", iae);
+ throw iae;
+ }
+ }
+
+ /**
+ * Test that returning null from a filter causes deserialization to fail.
+ */
+ @Test(expectedExceptions=InvalidClassException.class)
+ void testNullStatus() throws IOException {
+ byte[] bytes = writeObjects(0); // an Integer
+ try {
+ Object o = validate(bytes, new ObjectInputFilter() {
+ public ObjectInputFilter.Status checkInput(ObjectInputFilter.FilterInfo f) {
+ return null;
+ }
+ });
+ } catch (InvalidClassException ice) {
+ System.out.printf(" success exception: %s%n", ice);
+ throw ice;
+ }
+ }
+
+ /**
+ * Verify that malformed patterns throw IAE.
+ * @param pattern pattern from the data source
+ */
+ @Test(dataProvider="InvalidPatterns", expectedExceptions=IllegalArgumentException.class)
+ void testInvalidPatterns(String pattern) {
+ try {
+ ObjectInputFilter.Config.createFilter(pattern);
+ } catch (IllegalArgumentException iae) {
+ System.out.printf(" success exception: %s%n", iae);
+ throw iae;
+ }
+ }
+
+ /**
+ * Test that Config.create returns null if the argument does not contain any patterns or limits.
+ */
+ @Test()
+ void testEmptyPattern() {
+ ObjectInputFilter filter = ObjectInputFilter.Config.createFilter("");
+ Assert.assertNull(filter, "empty pattern did not return null");
+
+ filter = ObjectInputFilter.Config.createFilter(";;;;");
+ Assert.assertNull(filter, "pattern with only delimiters did not return null");
+ }
+
+ /**
+ * Read objects from the serialized stream, validated with the filter.
+ *
+ * @param bytes a byte array to read objects from
+ * @param filter the ObjectInputFilter
+ * @return the object deserialized if any
+ * @throws IOException can be thrown
+ */
+ static Object validate(byte[] bytes,
+ ObjectInputFilter filter) throws IOException {
+ try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+ ObjectInputStream ois = new ObjectInputStream(bais)) {
+ ois.setObjectInputFilter(filter);
+
+ Object o = ois.readObject();
+ return o;
+ } catch (EOFException eof) {
+ // normal completion
+ } catch (ClassNotFoundException cnf) {
+ Assert.fail("Deserializing", cnf);
+ }
+ return null;
+ }
+
+ /**
+ * Write objects and return a byte array with the bytes.
+ *
+ * @param objects zero or more objects to serialize
+ * @return the byte array of the serialized objects
+ * @throws IOException if an exception occurs
+ */
+ static byte[] writeObjects(Object... objects) throws IOException {
+ byte[] bytes;
+ try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos)) {
+ for (Object o : objects) {
+ oos.writeObject(o);
+ }
+ bytes = baos.toByteArray();
+ }
+ return bytes;
+ }
+
+ /**
+ * A filter that accumulates information about the checkInput callbacks
+ * that can be checked after readObject completes.
+ */
+ static class Validator implements ObjectInputFilter {
+ long count; // Count of calls to checkInput
+ List<Class<?>> classes = new ArrayList<>();
+ long maxArray = -1;
+ long maxRefs;
+ long maxDepth;
+ long maxBytes;
+
+ Validator() {
+ }
+
+ @Override
+ public ObjectInputFilter.Status checkInput(FilterInfo filter) {
+ Class<?> serialClass = filter.serialClass();
+ System.out.printf(" checkInput: class: %s, arrayLen: %d, refs: %d, depth: %d, bytes; %d%n",
+ serialClass, filter.arrayLength(), filter.references(),
+ filter.depth(), filter.streamBytes());
+ count++;
+ if (serialClass != null) {
+ if (serialClass.getName().contains("$$Lambda$")) {
+ // TBD: proper identification of serialized Lambdas?
+ // Fold the serialized Lambda into the SerializedLambda type
+ classes.add(SerializedLambda.class);
+ } else if (Proxy.isProxyClass(serialClass)) {
+ classes.add(Proxy.class);
+ } else {
+ classes.add(serialClass);
+ }
+
+ }
+ this.maxArray = Math.max(this.maxArray, filter.arrayLength());
+ this.maxRefs = Math.max(this.maxRefs, filter.references());
+ this.maxDepth = Math.max(this.maxDepth, filter.depth());
+ this.maxBytes = Math.max(this.maxBytes, filter.streamBytes());
+ return ObjectInputFilter.Status.UNDECIDED;
+ }
+
+ public String toString(){
+ return "count: " + count
+ + ", classes: " + classes.toString()
+ + ", maxArray: " + maxArray
+ + ", maxRefs: " + maxRefs
+ + ", maxDepth: " + maxDepth
+ + ", maxBytes: " + maxBytes;
+ }
+ }
+
+
+ /**
+ * Create a filter from a pattern and API factory, then serialize and
+ * deserialize an object and check allowed or reject.
+ *
+ * @param pattern the pattern
+ * @param object the test object
+ * @param allowed the expected result from ObjectInputStream (exception or not)
+ */
+ static void testPatterns(String pattern, Object object, boolean allowed) {
+ try {
+ byte[] bytes = SerialFilterTest.writeObjects(object);
+ ObjectInputFilter filter = ObjectInputFilter.Config.createFilter(pattern);
+ validate(bytes, filter);
+ Assert.assertTrue(allowed, "filter should have thrown an exception");
+ } catch (IllegalArgumentException iae) {
+ Assert.fail("bad format pattern", iae);
+ } catch (InvalidClassException ice) {
+ Assert.assertFalse(allowed, "filter should not have thrown an exception: " + ice);
+ } catch (IOException ioe) {
+ Assert.fail("Unexpected IOException", ioe);
+ }
+ }
+
+ /**
+ * For a filter pattern, generate and apply a test object to the action.
+ * @param pattern a pattern
+ * @param action an action to perform on positive and negative cases
+ */
+ static void evalPattern(String pattern, TriConsumer<String, Object, Boolean> action) {
+ Object o = genTestObject(pattern, true);
+ Assert.assertNotNull(o, "success generation failed");
+ action.accept(pattern, o, true);
+
+ // Test the negative pattern
+ o = genTestObject(pattern, false);
+ Assert.assertNotNull(o, "fail generation failed");
+ String negPattern = pattern.contains("=") ? pattern : "!" + pattern;
+ action.accept(negPattern, o, false);
+ }
+
+ /**
+ * Generate a test object based on the pattern.
+ * Handles each of the forms of the pattern, wildcards,
+ * class name, various limit forms.
+ * @param pattern a pattern
+ * @param allowed a boolean indicating to generate the allowed or disallowed case
+ * @return an object or {@code null} to indicate no suitable object could be generated
+ */
+ static Object genTestObject(String pattern, boolean allowed) {
+ if (pattern.contains("=")) {
+ return genTestLimit(pattern, allowed);
+ } else if (pattern.endsWith("*")) {
+ return genTestObjectWildcard(pattern, allowed);
+ } else {
+ // class
+ // isolate module name, if any
+ int poffset = 0;
+ int soffset = pattern.indexOf('/', poffset);
+ String module = null;
+ if (soffset >= 0) {
+ poffset = soffset + 1;
+ module = pattern.substring(0, soffset);
+ }
+ try {
+ Class<?> clazz = Class.forName(pattern.substring(poffset));
+ Constructor<?> cons = clazz.getConstructor();
+ return cons.newInstance();
+ } catch (ClassNotFoundException ex) {
+ Assert.fail("no such class available: " + pattern);
+ } catch (InvocationTargetException
+ | NoSuchMethodException
+ | InstantiationException
+ | IllegalAccessException ex1) {
+ Assert.fail("newInstance: " + ex1);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Generate an object to be used with the various wildcard pattern forms.
+ * Explicitly supports only specific package wildcards with specific objects.
+ * @param pattern a wildcard pattern ending in "*"
+ * @param allowed a boolean indicating to generate the allowed or disallowed case
+ * @return an object within or outside the wildcard
+ */
+ static Object genTestObjectWildcard(String pattern, boolean allowed) {
+ if (pattern.endsWith(".**")) {
+ // package hierarchy wildcard
+ if (pattern.startsWith("javax.net.")) {
+ return SSLEngineResult.Status.BUFFER_OVERFLOW;
+ }
+ if (pattern.startsWith("java.")) {
+ return 4;
+ }
+ if (pattern.startsWith("javax.")) {
+ return SSLEngineResult.Status.BUFFER_UNDERFLOW;
+ }
+ return otherObject;
+ } else if (pattern.endsWith(".*")) {
+ // package wildcard
+ if (pattern.startsWith("javax.net.ssl")) {
+ return SSLEngineResult.Status.BUFFER_UNDERFLOW;
+ }
+ } else {
+ // class wildcard
+ if (pattern.equals("*")) {
+ return otherObject; // any object will do
+ }
+ if (pattern.startsWith("java.util.Hash")) {
+ return new Hashtable<String, String>();
+ }
+ }
+ Assert.fail("Object could not be generated for pattern: "
+ + pattern
+ + ", allowed: " + allowed);
+ return null;
+ }
+
+ /**
+ * Generate a limit test object for the pattern.
+ * For positive cases, the object exactly hits the limit.
+ * For negative cases, the object is 1 greater than the limit
+ * @param pattern the pattern, containing "=" and a maxXXX keyword
+ * @param allowed a boolean indicating to generate the allowed or disallowed case
+ * @return a sitable object
+ */
+ static Object genTestLimit(String pattern, boolean allowed) {
+ int ndx = pattern.indexOf('=');
+ Assert.assertNotEquals(ndx, -1, "missing value in limit");
+ long value = Long.parseUnsignedLong(pattern.substring(ndx+1));
+ if (pattern.startsWith("maxdepth=")) {
+ // Return an object with the requested depth (or 1 greater)
+ long depth = allowed ? value : value + 1;
+ Object[] array = new Object[1];
+ for (int i = 1; i < depth; i++) {
+ Object[] n = new Object[1];
+ n[0] = array;
+ array = n;
+ }
+ return array;
+ } else if (pattern.startsWith("maxbytes=")) {
+ // Return a byte array that when written to OOS creates
+ // a stream of exactly the size requested.
+ return genMaxBytesObject(allowed, value);
+ } else if (pattern.startsWith("maxrefs=")) {
+ // 4 references to classes in addition to the array contents
+ Object[] array = new Object[allowed ? (int)value - 4 : (int)value - 3];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = otherObject;
+ }
+ return array;
+ } else if (pattern.startsWith("maxarray=")) {
+ return allowed ? new int[(int)value] : new int[(int)value+1];
+ }
+ Assert.fail("Object could not be generated for pattern: "
+ + pattern
+ + ", allowed: " + allowed);
+ return null;
+ }
+
+ /**
+ * Generate an an object that will be serialized to some number of bytes.
+ * Or 1 greater if allowed is false.
+ * It returns a two element Object array holding a byte array sized
+ * to achieve the desired total size.
+ * @param allowed true if the stream should be allowed at that size,
+ * false if the stream should be larger
+ * @param maxBytes the number of bytes desired in the stream;
+ * should not be less than 72 (due to protocol overhead).
+ * @return a object that will be serialized to the length requested
+ */
+ private static Object genMaxBytesObject(boolean allowed, long maxBytes) {
+ Object[] holder = new Object[2];
+ long desiredSize = allowed ? maxBytes : maxBytes + 1;
+ long actualSize = desiredSize;
+ long byteSize = desiredSize - 72; // estimate needed array size
+ do {
+ byteSize += (desiredSize - actualSize);
+ byte[] a = new byte[(int)byteSize];
+ holder[0] = a;
+ holder[1] = a;
+ try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream os = new ObjectOutputStream(baos)) {
+ os.writeObject(holder);
+ os.flush();
+ actualSize = baos.size();
+ } catch (IOException ie) {
+ Assert.fail("exception generating stream", ie);
+ }
+ } while (actualSize != desiredSize);
+ return holder;
+ }
+
+ /**
+ * Returns a HashSet of a requested depth.
+ * @param depth the depth
+ * @return a HashSet of HashSets...
+ */
+ static HashSet<Object> deepHashSet(int depth) {
+ HashSet<Object> hashSet = new HashSet<>();
+ HashSet<Object> s1 = hashSet;
+ HashSet<Object> s2 = new HashSet<>();
+ for (int i = 0; i < depth; i++ ) {
+ HashSet<Object> t1 = new HashSet<>();
+ HashSet<Object> t2 = new HashSet<>();
+ // make t1 not equal to t2
+ t1.add("by Jimminy");
+ s1.add(t1);
+ s1.add(t2);
+ s2.add(t1);
+ s2.add(t2);
+ s1 = t1;
+ s2 = t2;
+ }
+ return hashSet;
+ }
+
+ /**
+ * Simple method to use with Serialized Lambda.
+ */
+ private static void noop() {}
+
+
+ /**
+ * Class that returns an array from readResolve and also implements
+ * the ObjectInputFilter to check that it has the expected length.
+ */
+ static class ReadResolveToArray implements Serializable, ObjectInputFilter {
+ @Serial
+ private static final long serialVersionUID = 123456789L;
+
+ @SuppressWarnings("serial") /* Incorrect declarations are being tested */
+ private final Object array;
+ private final int length;
+
+ ReadResolveToArray(Object array, int length) {
+ this.array = array;
+ this.length = length;
+ }
+
+ @Serial
+ Object readResolve() {
+ return array;
+ }
+
+ @Override
+ public ObjectInputFilter.Status checkInput(FilterInfo filter) {
+ if (ReadResolveToArray.class.isAssignableFrom(filter.serialClass())) {
+ return ObjectInputFilter.Status.ALLOWED;
+ }
+ if (filter.serialClass() != array.getClass() ||
+ (filter.arrayLength() >= 0 && filter.arrayLength() != length)) {
+ return ObjectInputFilter.Status.REJECTED;
+ }
+ return ObjectInputFilter.Status.UNDECIDED;
+ }
+
+ }
+
+ /**
+ * Hold a snapshot of values to be passed to an ObjectInputFilter.
+ */
+ static class FilterValues implements ObjectInputFilter.FilterInfo {
+ private final Class<?> clazz;
+ private final long arrayLength;
+ private final long depth;
+ private final long references;
+ private final long streamBytes;
+
+ public FilterValues(Class<?> clazz, long arrayLength, long depth, long references, long streamBytes) {
+ this.clazz = clazz;
+ this.arrayLength = arrayLength;
+ this.depth = depth;
+ this.references = references;
+ this.streamBytes = streamBytes;
+ }
+
+ @Override
+ public Class<?> serialClass() {
+ return clazz;
+ }
+
+ public long arrayLength() {
+ return arrayLength;
+ }
+
+ public long depth() {
+ return depth;
+ }
+
+ public long references() {
+ return references;
+ }
+
+ public long streamBytes() {
+ return streamBytes;
+ }
+ }
+
+ // Deeper superclass hierarchy
+ static class A implements Serializable {
+ @Serial
+ private static final long serialVersionUID = 1L;
+ };
+ static class B extends A {
+ @Serial
+ private static final long serialVersionUID = 2L;
+ }
+ static class C extends B {
+ @Serial
+ private static final long serialVersionUID = 3L;
+ }
+ static class D extends C {
+ @Serial
+ private static final long serialVersionUID = 4L;
+ }
+ static class E extends D {
+ @Serial
+ private static final long serialVersionUID = 5L;
+ }
+ static class F extends E {
+ @Serial
+ private static final long serialVersionUID = 6L;
+ }
+
+}
diff --git a/test/jdk/java/io/FastSerializer/serialFilter/TestDescription.java b/test/jdk/java/io/FastSerializer/serialFilter/TestDescription.java
new file mode 100644
index 000000000..837652128
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/serialFilter/TestDescription.java
@@ -0,0 +1,84 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/CheckArrayTest
+*- @TestCaseName:CheckArrayTest
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @library /test/jdk/java/io/Serializable/serialFilter/
+ * @build CheckArrayTest SerialFilterTest
+ * @bug 8203368
+ * @modules java.base/jdk.internal.access
+ * @run testng/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer CheckArrayTest
+ *
+ * @summary Test the SharedSecret access to ObjectInputStream.checkArray works
+ * with overridden subclasses.
+ */
+
+/* @test
+ * @library /test/jdk/java/io/Serializable/serialFilter/
+ * @build FilterWithSecurityManagerTest SerialFilterTest
+ * @run testng/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer FilterWithSecurityManagerTest
+ * @run testng/othervm/policy=security.policy.without.globalFilter
+ * -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer
+ * -Djava.security.manager=default FilterWithSecurityManagerTest
+ * @run testng/othervm/policy=security.policy
+ * -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer
+ * -Djava.security.manager=default
+ * -Djdk.serialFilter=java.lang.Integer FilterWithSecurityManagerTest
+ *
+ * @summary Test that setting specific filter is checked by security manager,
+ * setting process-wide filter is checked by security manager.
+ */
+
+
+/* @test
+ * @library /test/jdk/java/io/Serializable/serialFilter/
+ * @build MixedFiltersTest SerialFilterTest
+ * @run testng/othervm
+ * -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer
+ * -Djdk.serialFilter=!java.**;!java.lang.Long;maxdepth=5;maxarray=5;maxbytes=90;maxrefs=5 MixedFiltersTest
+ * @run testng/othervm
+ * -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer
+ * -Djdk.serialFilter=java.**;java.lang.Long;maxdepth=1000;maxarray=1000;maxbytes=1000;maxrefs=1000 MixedFiltersTest
+ *
+ * @summary Test that when both global filter and specific filter are set,
+ * global filter will not affect specific filter.
+ */
+
+/* @test
+ * @library /test/jdk/java/io/Serializable/serialFilter/
+ * @build CheckInputOrderTest SerialFilterTest
+ * @run testng/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer CheckInputOrderTest
+ *
+ * @summary Test that when both global filter and specific filter are set,
+ * global filter will not affect specific filter.
+ */
+
+/* @test
+ * @bug 8231422
+ * @library /test/jdk/java/io/Serializable/serialFilter/
+ * @build GlobalFilterTest SerialFilterTest
+ * @run testng/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer GlobalFilterTest
+ * @run testng/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer
+ * -Djdk.serialFilter=java.**
+ * -Dexpected-jdk.serialFilter=java.** GlobalFilterTest
+ * @run testng/othervm/policy=security.policy
+ * -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer GlobalFilterTest
+ * @run testng/othervm/policy=security.policy
+ * -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer
+ * -Djava.security.properties=${test.src}/java.security-extra1
+ * -Djava.security.debug=properties GlobalFilterTest
+ *
+ * @summary Test Global Filters
+ */
+
+
diff --git a/test/jdk/java/io/FastSerializer/serialFilter/java.security-extra1 b/test/jdk/java/io/FastSerializer/serialFilter/java.security-extra1
new file mode 100644
index 000000000..7a52040c6
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/serialFilter/java.security-extra1
@@ -0,0 +1,4 @@
+# Serialization Input Process-wide Filter
+# See conf/security/java.security for pattern synatx
+#
+jdk.serialFilter=java.**;javax.**;maxarray=34;maxdepth=7
diff --git a/test/jdk/java/io/FastSerializer/serialFilter/security.policy b/test/jdk/java/io/FastSerializer/serialFilter/security.policy
new file mode 100644
index 000000000..7362da3af
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/serialFilter/security.policy
@@ -0,0 +1,13 @@
+// Individual Permissions to for GlobalFilterTest and FilterWithSecurityManager
+grant {
+ // Specific permission under test
+ permission java.io.SerializablePermission "serialFilter";
+
+ // Permissions needed to run the test
+ permission java.util.PropertyPermission "*", "read,write";
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
+ permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
+ permission java.security.SecurityPermission "*";
+ permission java.lang.RuntimePermission "accessDeclaredMembers";
+};
+
diff --git a/test/jdk/java/io/FastSerializer/serialFilter/security.policy.without.globalFilter b/test/jdk/java/io/FastSerializer/serialFilter/security.policy.without.globalFilter
new file mode 100644
index 000000000..0e98d6981
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/serialFilter/security.policy.without.globalFilter
@@ -0,0 +1,9 @@
+// Individual Permissions for FilterWithSecurityManagerTest
+grant {
+ // Permissions needed to run the test
+ permission java.util.PropertyPermission "*", "read";
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
+ permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
+ permission java.lang.RuntimePermission "accessDeclaredMembers";
+};
+
diff --git a/test/jdk/java/io/FastSerializer/serialver/classpath/ClasspathTest.java b/test/jdk/java/io/FastSerializer/serialver/classpath/ClasspathTest.java
new file mode 100644
index 000000000..727cae8b5
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/serialver/classpath/ClasspathTest.java
@@ -0,0 +1,54 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/ClasspathTest
+*- @TestCaseName:ClasspathTest
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4035147 4785472
+ * @library /test/lib
+ * @build jdk.test.lib.Utils
+ * @build jdk.test.lib.Asserts
+ * @build jdk.test.lib.JDKToolFinder
+ * @build jdk.test.lib.JDKToolLauncher
+ * @build jdk.test.lib.Platform
+ * @build jdk.test.lib.process.*
+ * @build ClasspathTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer serialver.ClasspathTest
+ * @summary Test the use of the -classpath switch in the serialver application.
+ */
+
+package serialver;
+
+import java.io.File;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.process.ProcessTools;
+
+public class ClasspathTest implements java.io.Serializable {
+ int a;
+ int b;
+
+ public static void main(String args[]) throws Exception {
+ JDKToolLauncher serialver =
+ JDKToolLauncher.create("serialver")
+ .addToolArg("-classpath")
+ .addToolArg(System.getProperty("test.class.path"))
+ .addToolArg("serialver.ClasspathTest");
+ Process p = ProcessTools.startProcess("serialver",
+ new ProcessBuilder(serialver.getCommand()));
+ p.waitFor();
+ if (p.exitValue() != 0) {
+ throw new RuntimeException("error occurs in serialver");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/serialver/nested/NestedTest.java b/test/jdk/java/io/FastSerializer/serialver/nested/NestedTest.java
new file mode 100644
index 000000000..3292ff431
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/serialver/nested/NestedTest.java
@@ -0,0 +1,58 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/NestedTest
+*- @TestCaseName:NestedTest
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4312217 4785473
+ * @library /test/lib
+ * @build jdk.test.lib.Utils
+ * jdk.test.lib.Asserts
+ * jdk.test.lib.JDKToolFinder
+ * jdk.test.lib.JDKToolLauncher
+ * jdk.test.lib.Platform
+ * jdk.test.lib.process.*
+ * @build NestedTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer serialver.NestedTest
+ * @summary To test the use of nested class specification using the '.'
+ * notation instead of the '$' notation.
+ */
+
+package serialver;
+
+import java.io.Serializable;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.process.ProcessTools;
+
+public class NestedTest implements Serializable {
+ public static class Test1 implements Serializable {
+ public static class Test2 implements Serializable{
+ private static final long serialVersionUID = 100L;
+ }
+ }
+
+ public static void main(String args[]) throws Exception {
+ JDKToolLauncher serialver =
+ JDKToolLauncher.create("serialver")
+ .addToolArg("-classpath")
+ .addToolArg(System.getProperty("test.class.path"))
+ .addToolArg("serialver.NestedTest.Test1.Test2");
+ Process p = ProcessTools.startProcess("serialver",
+ new ProcessBuilder(serialver.getCommand()));
+ p.waitFor();
+ if (p.exitValue() != 0) {
+ throw new RuntimeException("error occurs in serialver.");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/skipToEndOfBlockData/TestDescription.java b/test/jdk/java/io/FastSerializer/skipToEndOfBlockData/TestDescription.java
new file mode 100644
index 000000000..0fb7b9b80
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/skipToEndOfBlockData/TestDescription.java
@@ -0,0 +1,23 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/skipToEndOfBlockData
+*- @TestCaseName:skipToEndOfBlockData
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4228592
+ * @library /test/jdk/java/io/Serializable/skipToEndOfBlockData/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SkipToEndOfBlockData
+ * @summary Ensure that ObjectInputStream properly skips over block data when a
+ * class that defines readObject() or readExternal() fails to read all
+ * of the data written by the corresponding writeObject() or
+ * writeExternal() method.
+ */
diff --git a/test/jdk/java/io/FastSerializer/skippedObjCNFException/TestDescription.java b/test/jdk/java/io/FastSerializer/skippedObjCNFException/TestDescription.java
new file mode 100644
index 000000000..1db6ad1ad
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/skippedObjCNFException/TestDescription.java
@@ -0,0 +1,29 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/skippedObjCNFException
+*- @TestCaseName:skippedObjCNFException
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4313167
+ *
+ * @library /test/jdk/java/io/Serializable/skippedObjCNFException/
+ * @clean Write Read A B C
+ * @build Write
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write Read A B C
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ *
+ * @summary Verify that ClassNotFoundExceptions caused by values referenced
+ * (perhaps transitively) by "skipped" fields will not cause
+ * deserialization failure.
+ */
diff --git a/test/jdk/java/io/FastSerializer/stopCustomDeserialization/TestDescription.java b/test/jdk/java/io/FastSerializer/stopCustomDeserialization/TestDescription.java
new file mode 100644
index 000000000..815605fdc
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/stopCustomDeserialization/TestDescription.java
@@ -0,0 +1,29 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/stopCustomDeserialization
+*- @TestCaseName:stopCustomDeserialization
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4663191
+ * @summary Verify that readObject and readObjectNoData methods will not be
+ * called on an object being deserialized if that object is already
+ * tagged with a ClassNotFoundException.
+ *
+ * @library /test/jdk/java/io/Serializable/stopCustomDeserialization/
+ * /test/jdk/java/io/FastSerializer/util/
+ * @run driver CleanActualClass Write.class Read.class A.class B.class C.class X.class
+ * @build Write
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @run driver CleanActualClass Write.class Read.class A.class B.class C.class X.class
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ */
diff --git a/test/jdk/java/io/FastSerializer/subclass/Allow.policy b/test/jdk/java/io/FastSerializer/subclass/Allow.policy
new file mode 100644
index 000000000..a31cebf49
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/subclass/Allow.policy
@@ -0,0 +1,9 @@
+grant {
+ // "standard" properies that can be read by anyone
+ permission java.io.FilePermission "-","read,write,execute";
+ permission java.io.SerializablePermission "enableSubstitution";
+
+ // Needed to get access to private writeObjectMethod and
+ // to be able to call it.
+ permission java.lang.reflect.ReflectPermission "access";
+};
diff --git a/test/jdk/java/io/FastSerializer/subclass/TestDescription.java b/test/jdk/java/io/FastSerializer/subclass/TestDescription.java
new file mode 100644
index 000000000..069032fbd
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/subclass/TestDescription.java
@@ -0,0 +1,38 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/subclass
+*- @TestCaseName:subclass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4100915
+ * @summary Verify that [write/read]ObjectOverride methods get called.
+ * Test verifies that ALL methods to write an object can
+ * be overridden. However, the testing for reading an object
+ * is incomplete. Only test that readObjectOverride is called.
+ * An entire protocol would need to be implemented and written
+ * out before being able to test the input side of the API.
+ *
+ * Also, would be appropriate that this program verify
+ * that if SerializablePermission "enableSubclassImplementation"
+ * is not in the security policy and security is enabled, that
+ * a security exception is thrown when constructing the
+ * ObjectOutputStream subclass.
+ *
+ *
+ * @library /test/jdk/java/io/Serializable/subclass/
+ * @build AbstractObjectInputStream AbstractObjectOutputStream
+ * @build XObjectInputStream XObjectOutputStream
+ * @build SubclassTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SubclassTest
+ * @run main/othervm/policy=Allow.policy -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SubclassTest -expectSecurityException
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/subclassGC/SubclassOfOOS.java b/test/jdk/java/io/FastSerializer/subclassGC/SubclassOfOOS.java
new file mode 100644
index 000000000..e19c12f76
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/subclassGC/SubclassOfOOS.java
@@ -0,0 +1,13 @@
+
+
+import java.io.*;
+
+public class SubclassOfOOS extends ObjectOutputStream {
+ public SubclassOfOOS(OutputStream os) throws IOException {
+ super(os);
+ }
+
+ public SubclassOfOOS() throws IOException {
+ super();
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/subclassGC/TestDescription.java b/test/jdk/java/io/FastSerializer/subclassGC/TestDescription.java
new file mode 100644
index 000000000..28e3aff80
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/subclassGC/TestDescription.java
@@ -0,0 +1,26 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/subclassGC
+*- @TestCaseName:subclassGC
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 6232010
+ * @summary this test checks that replacing SoftCache class with ConcurrentMap
+ * in ObjectInputStream/ObjectOutputStream gives an opportunity to
+ * classes which are inherited from OIS and OOS and loaded through
+ * separete ClassLoaders be available for garbage collection
+ *
+ * @author Andrey Ozerov
+ * @library /test/jdk/java/io/Serializable/subclassGC/
+ * @build SubclassOfOOS
+ * @run main/othervm/policy=security.policy -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SubclassGC
+ */
diff --git a/test/jdk/java/io/FastSerializer/subclassGC/security.policy b/test/jdk/java/io/FastSerializer/subclassGC/security.policy
new file mode 100644
index 000000000..a3ef804b3
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/subclassGC/security.policy
@@ -0,0 +1,8 @@
+
+grant {
+ permission java.lang.RuntimePermission "createClassLoader";
+ permission java.lang.RuntimePermission "getClassLoader";
+ permission java.util.PropertyPermission "test.classes", "read";
+ permission java.io.FilePermission "<<ALL FILES>>", "read";
+};
+
diff --git a/test/jdk/java/io/FastSerializer/superclassDataLoss/A.java b/test/jdk/java/io/FastSerializer/superclassDataLoss/A.java
new file mode 100644
index 000000000..a1e976307
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/superclassDataLoss/A.java
@@ -0,0 +1,13 @@
+
+
+/*
+ * @bug 4325590
+ * @summary Verify that superclass data is not lost when incoming superclass
+ * descriptor is matched with local class that is not a superclass of
+ * the deserialized instance's class.
+ */
+
+public class A implements java.io.Serializable {
+ protected final int i;
+ protected A(int i) { this.i = i; }
+}
diff --git a/test/jdk/java/io/FastSerializer/superclassDataLoss/B.java b/test/jdk/java/io/FastSerializer/superclassDataLoss/B.java
new file mode 100644
index 000000000..eca1c0b8a
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/superclassDataLoss/B.java
@@ -0,0 +1,19 @@
+
+
+/*
+ * @bug 4325590
+ * @summary Verify that superclass data is not lost when incoming superclass
+ * descriptor is matched with local class that is not a superclass of
+ * the deserialized instance's class.
+ */
+
+public class B extends A implements Runnable {
+ public B() { super(0xDEADBEEF); }
+
+ // verify superclass data still present
+ public void run() {
+ if (i != 0xDEADBEEF) {
+ throw new Error("superclass data erased");
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/superclassDataLoss/TestDescription.java b/test/jdk/java/io/FastSerializer/superclassDataLoss/TestDescription.java
new file mode 100644
index 000000000..b8831114c
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/superclassDataLoss/TestDescription.java
@@ -0,0 +1,24 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/superclassDataLoss
+*- @TestCaseName:superclassDataLoss
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4325590
+ * @library /test/lib/ /test/jdk/java/io/Serializable/superclassDataLoss/
+ * @build jdk.test.lib.util.JarUtils A B
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SuperclassDataLossTest
+ * @summary Verify that superclass data is not lost when incoming superclass
+ * descriptor is matched with local class that is not a superclass of
+ * the deserialized instance's class.
+ */
diff --git a/test/jdk/java/io/FastSerializer/survivePrematureClose/TestDescription.java b/test/jdk/java/io/FastSerializer/survivePrematureClose/TestDescription.java
new file mode 100644
index 000000000..d09547a8d
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/survivePrematureClose/TestDescription.java
@@ -0,0 +1,23 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/survivePrematureClose
+*- @TestCaseName:survivePrematureClose
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4502808
+ * @library /test/jdk/java/io/Serializable/survivePrematureClose/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer SurvivePrematureClose
+ * @summary Verify that if the custom serialization method (i.e., readExternal,
+ * writeExternal, readObject or writeObject) of an object closes the
+ * stream it is passed, (de)serialization of that object can still
+ * complete.
+ */
diff --git a/test/jdk/java/io/FastSerializer/typeSafeEnum/TestDescription.java b/test/jdk/java/io/FastSerializer/typeSafeEnum/TestDescription.java
new file mode 100644
index 000000000..c0469a8f0
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/typeSafeEnum/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/typeSafeEnum
+*- @TestCaseName:typeSafeEnum
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4140729
+ * @library /test/jdk/java/io/Serializable/typeSafeEnum/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer TypeSafeEnum
+ * @summary Verify that writeReplace & readResolve are called by serialization.
+ * readResolve is used to maintain the invariant that the enums
+ * of TypeSafeEnum are singletons.
+ */
diff --git a/test/jdk/java/io/FastSerializer/typeStringBackRef/TypeStringBackRef.java b/test/jdk/java/io/FastSerializer/typeStringBackRef/TypeStringBackRef.java
new file mode 100644
index 000000000..1efe3668a
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/typeStringBackRef/TypeStringBackRef.java
@@ -0,0 +1,37 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/TypeStringBackRef
+*- @TestCaseName:TypeStringBackRef
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4405949
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer TypeStringBackRef
+ * @summary Verify that back references are used when writing multiple type
+ * strings that are equal() to one another.
+ */
+
+import java.io.*;
+
+public class TypeStringBackRef implements Serializable {
+
+ String a, b, c, d, e, f, g;
+
+ public static void main(String[] args) throws Exception {
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ ObjectOutputStream oout = new ObjectOutputStream(bout);
+ oout.writeObject(ObjectStreamClass.lookup(TypeStringBackRef.class));
+ oout.close();
+ if (bout.size() != 25) {
+ throw new Error("Wrong data length: " + bout.size());
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/unSerializable/serialPersistentFieldsExt.java b/test/jdk/java/io/FastSerializer/unSerializable/serialPersistentFieldsExt.java
new file mode 100644
index 000000000..08aeee569
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unSerializable/serialPersistentFieldsExt.java
@@ -0,0 +1,94 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/serialPersistentFieldsExt
+*- @TestCaseName:serialPersistentFieldsExt
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test static field cannot be deserialized
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true serialPersistentFieldsExt
+*/
+
+
+import java.io.*;
+
+class Foo implements Externalizable {
+ transient int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ private static final ObjectStreamField[] serialPersistentFields = { new ObjectStreamField("i", int.class) };
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+
+public class serialPersistentFieldsExt {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/unSerializable/serialPersistentFieldsSer.java b/test/jdk/java/io/FastSerializer/unSerializable/serialPersistentFieldsSer.java
new file mode 100644
index 000000000..bc7e8860c
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unSerializable/serialPersistentFieldsSer.java
@@ -0,0 +1,84 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/serialPersistentFieldsSer
+*- @TestCaseName:serialPersistentFieldsSer
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test static field cannot be deserialized
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true serialPersistentFieldsSer
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ int i = 0;
+ String s ;
+
+ private static final ObjectStreamField[] serialPersistentFields = { new ObjectStreamField("i", int.class) };
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i);
+ }
+}
+
+public class serialPersistentFieldsSer {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+
+ if(!f1.equals(fout1) || !f2.equals(fout2) ||!f3.equals(fout3) ||!f4.equals(fout4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+
+ if(!f1.equals(fout5) || !f2.equals(fout6) ||!f3.equals(fout7) ||!f4.equals(fout8)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/unSerializable/staticExternal.java b/test/jdk/java/io/FastSerializer/unSerializable/staticExternal.java
new file mode 100644
index 000000000..0f4761fc0
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unSerializable/staticExternal.java
@@ -0,0 +1,94 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/staticExternal
+*- @TestCaseName:staticExternal
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test static field cannot be deserialized
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true staticExternal
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Externalizable {
+ static int i ;
+ static String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+public class staticExternal {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/unSerializable/staticSerializ.java b/test/jdk/java/io/FastSerializer/unSerializable/staticSerializ.java
new file mode 100644
index 000000000..a68806e59
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unSerializable/staticSerializ.java
@@ -0,0 +1,82 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/staticSerializ
+*- @TestCaseName:staticSerializ
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test static field cannot be deserialized
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true staticSerializ
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ static int i = 0;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+
+public class staticSerializ {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+
+ if(!fout1.equals(f1) || !fout2.equals(f2) ||!fout3.equals(f3) ||!fout4.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+
+ if(!fout5.equals(f1) || !fout6.equals(f2) ||!fout7.equals(f3) ||!fout8.equals(f4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/unSerializable/transientExternal.java b/test/jdk/java/io/FastSerializer/unSerializable/transientExternal.java
new file mode 100644
index 000000000..651449b3b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unSerializable/transientExternal.java
@@ -0,0 +1,99 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/transientExternal
+*- @TestCaseName:transientExternal
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test transient field cannot be deserialized
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true transientSerializ
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Externalizable {
+ transient int i ;
+ String s ;
+ public Foo(){}
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ s = (String)in.readObject();
+ i = in.readInt();
+ }
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(s);
+ out.writeInt(i);
+ }
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s) );
+ }
+}
+
+public class transientSerializ {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ Foo fc1 = new Foo(0,"Hello");
+ Foo fc2 = new Foo(0,"World");
+ Foo fc3 = new Foo(0,"Good");
+ Foo fc4 = new Foo(0,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ //System.out.println(f1.i);
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+
+ if(!fout1.equals(fc1) || !fout2.equals(fc2) ||!fout3.equals(fc3) ||!fout4.equals(fc4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+
+
+ if(!fout5.equals(fc1) || !fout6.equals(fc2) ||!fout7.equals(fc3) ||!fout8.equals(fc4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/unSerializable/transientSerializ.java b/test/jdk/java/io/FastSerializer/unSerializable/transientSerializ.java
new file mode 100644
index 000000000..b5f179e58
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unSerializable/transientSerializ.java
@@ -0,0 +1,87 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/transientSerializ
+*- @TestCaseName:transientSerializ
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+* @test
+* @summary test transient field cannot be deserialized
+* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer -DfastSerializerEscapeMode=true -DprintFastSerializer=true transientSerializ
+*/
+
+
+import java.io.*;
+
+
+class Foo implements Serializable {
+ Foo (int i, String s) {
+ this.i = i;
+ this.s = s;
+ }
+ transient int i = 0;
+ String s ;
+
+ public boolean equals(Foo obj) {
+ return (this.i == obj.i && this.s.equals(obj.s));
+ }
+}
+
+public class transientSerializ {
+ public static void main(String[] args) throws Exception{
+ String configFile = System.getProperty("test.src") + "/../logging.properties";
+ System.setProperty("java.util.logging.config.file",configFile);
+ Foo f1 = new Foo(1,"Hello");
+ Foo f2 = new Foo(2,"World");
+ Foo f3 = new Foo(3,"Good");
+ Foo f4 = new Foo(4,"Bye");
+ Foo fc1 = new Foo(0,"Hello");
+ Foo fc2 = new Foo(0,"World");
+ Foo fc3 = new Foo(0,"Good");
+ Foo fc4 = new Foo(0,"Bye");
+ ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("Foo.ser"));
+ oout.writeObject(f1);
+ oout.writeObject(f2);
+ oout.writeObject(f3);
+ oout.writeObject(f4);
+ oout.close();
+ //System.out.println(f1.i);
+
+ ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try{
+ Foo fout1 = (Foo)oin.readObject();
+ Foo fout2 = (Foo)oin.readObject();
+ Foo fout3 = (Foo)oin.readObject();
+ Foo fout4 = (Foo)oin.readObject();
+ oin.close();
+
+ if(!fout1.equals(fc1) || !fout2.equals(fc2) ||!fout3.equals(fc3) ||!fout4.equals(fc4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ ObjectInputStream oin2 = new ObjectInputStream(new FileInputStream("Foo.ser"));
+ try {
+ Foo fout5 = (Foo)oin2.readObject();
+ Foo fout6 = (Foo)oin2.readObject();
+ Foo fout7 = (Foo)oin2.readObject();
+ Foo fout8 = (Foo)oin2.readObject();
+
+
+ if(!fout5.equals(fc1) || !fout6.equals(fc2) ||!fout7.equals(fc3) ||!fout8.equals(fc4)){
+ throw new Exception("deserialized obj different");
+ }
+ }catch (ClassCastException ex){
+ return;
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/underlyingOutputStreamException/TestDescription.java b/test/jdk/java/io/FastSerializer/underlyingOutputStreamException/TestDescription.java
new file mode 100644
index 000000000..07f26c71a
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/underlyingOutputStreamException/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/underlyingOutputStreamException
+*- @TestCaseName:underlyingOutputStreamException
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @library /test/jdk/java/io/Serializable/underlyingOutputStreamException/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer UnderlyingOutputStreamException
+ * @summary Verify that if ObjectOutputStream's underlying OutputStream throws
+ * an IOException, the original IOException (not a
+ * StreamCorruptedException) will be thrown to the writing thread.
+ */
diff --git a/test/jdk/java/io/FastSerializer/unnamedPackageSwitch/TestDescription.java b/test/jdk/java/io/FastSerializer/unnamedPackageSwitch/TestDescription.java
new file mode 100644
index 000000000..cd67b02b5
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unnamedPackageSwitch/TestDescription.java
@@ -0,0 +1,25 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/unnamedPackageSwitch
+*- @TestCaseName:unnamedPackageSwitch
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4348213
+ * @library /test/jdk/java/io/Serializable/unnamedPackageSwitch/
+ * @build pkg.A
+ * @build UnnamedPackageSwitchTest
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer UnnamedPackageSwitchTest
+ * @summary Verify that deserialization allows an incoming class descriptor
+ * representing a class in the unnamed package to be resolved to a
+ * local class with the same name in a named package, and vice-versa.
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/unnamedPackageSwitch/pkg/A.java b/test/jdk/java/io/FastSerializer/unnamedPackageSwitch/pkg/A.java
new file mode 100644
index 000000000..d86764b1a
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unnamedPackageSwitch/pkg/A.java
@@ -0,0 +1,14 @@
+
+/*
+ * @bug 4348213
+ * @summary Verify that deserialization allows an incoming class descriptor
+ * representing a class in the default package to be resolved to a
+ * local class with the same name in a non-default package, and
+ * vice-versa.
+ */
+
+package pkg;
+
+public class A implements java.io.Serializable {
+ private static final long serialVersionUID = 0L;
+}
diff --git a/test/jdk/java/io/FastSerializer/unresolvableObjectStreamClass/TestDescription.java b/test/jdk/java/io/FastSerializer/unresolvableObjectStreamClass/TestDescription.java
new file mode 100644
index 000000000..dea2171e5
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unresolvableObjectStreamClass/TestDescription.java
@@ -0,0 +1,24 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/unresolvableObjectStreamClass
+*- @TestCaseName:unresolvableObjectStreamClass
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 8039396
+ * @library /test/jdk/java/io/Serializable/unresolvableObjectStreamClass/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer UnresolvableObjectStreamClass serialize
+ * @clean MySerializable
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer UnresolvableObjectStreamClass deserialize
+ *
+ * @summary NPE when writing a class descriptor object to a custom
+ * ObjectOutputStream
+ */
diff --git a/test/jdk/java/io/FastSerializer/unresolvedClassDesc/Foo.java b/test/jdk/java/io/FastSerializer/unresolvedClassDesc/Foo.java
new file mode 100644
index 000000000..60b058e5b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unresolvedClassDesc/Foo.java
@@ -0,0 +1,11 @@
+
+
+/*
+ * @bug 4482471
+ * @summary Verify that even if an incoming ObjectStreamClass is not resolvable
+ * to a local class, the ObjectStreamClass object itself is still
+ * deserializable (without incurring a ClassNotFoundException).
+ */
+
+public class Foo implements java.io.Serializable {
+}
diff --git a/test/jdk/java/io/FastSerializer/unresolvedClassDesc/Read.java b/test/jdk/java/io/FastSerializer/unresolvedClassDesc/Read.java
new file mode 100644
index 000000000..a86646152
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unresolvedClassDesc/Read.java
@@ -0,0 +1,32 @@
+
+/*
+ * @bug 4482471
+ * @summary Verify that even if an incoming ObjectStreamClass is not resolvable
+ * to a local class, the ObjectStreamClass object itself is still
+ * deserializable (without incurring a ClassNotFoundException).
+ */
+
+import java.io.*;
+
+public class Read {
+ public static void main(String[] args) throws Exception {
+ FileInputStream in = new FileInputStream("tmp.ser");
+ try {
+ ObjectInputStream oin = new ObjectInputStream(in);
+ oin.readObject();
+ oin.readObject();
+ try {
+ oin.readObject();
+ throw new Error("read of Foo instance succeeded");
+ } catch (ClassNotFoundException ex) {
+ }
+ try {
+ oin.readObject();
+ throw new Error("indirect read of Foo instance succeeded");
+ } catch (ClassNotFoundException ex) {
+ }
+ } finally {
+ in.close();
+ }
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/unresolvedClassDesc/TestDescription.java b/test/jdk/java/io/FastSerializer/unresolvedClassDesc/TestDescription.java
new file mode 100644
index 000000000..4bff2d805
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unresolvedClassDesc/TestDescription.java
@@ -0,0 +1,30 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/unresolvedClassDesc
+*- @TestCaseName:unresolvedClassDesc
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4482471
+ *
+ * @library /test/jdk/java/io/Serializable/unresolvedClassDesc/
+ * @clean Write Read Foo
+ * @build Write Foo
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write Foo
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ * @clean Read
+ *
+ * @summary Verify that even if an incoming ObjectStreamClass is not resolvable
+ * to a local class, the ObjectStreamClass object itself is still
+ * deserializable (without incurring a ClassNotFoundException).
+ */
diff --git a/test/jdk/java/io/FastSerializer/unresolvedClassDesc/Write.java b/test/jdk/java/io/FastSerializer/unresolvedClassDesc/Write.java
new file mode 100644
index 000000000..34e559870
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unresolvedClassDesc/Write.java
@@ -0,0 +1,33 @@
+
+
+/* @test
+ * @bug 4482471
+ *
+ * @clean Write Read Foo
+ * @build Write Foo
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write Foo
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ * @clean Read
+ *
+ * @summary Verify that even if an incoming ObjectStreamClass is not resolvable
+ * to a local class, the ObjectStreamClass object itself is still
+ * deserializable (without incurring a ClassNotFoundException).
+ */
+
+import java.io.*;
+
+public class Write {
+ public static void main(String[] args) throws Exception {
+ ObjectOutputStream oout =
+ new ObjectOutputStream(new FileOutputStream("tmp.ser"));
+ ObjectStreamClass desc = ObjectStreamClass.lookup(Foo.class);
+ Foo foo = new Foo();
+ oout.writeObject(desc);
+ oout.writeObject(new Object[]{ desc }); // test indirect references
+ oout.writeObject(foo);
+ oout.writeObject(new Object[]{ foo });
+ oout.close();
+ }
+}
diff --git a/test/jdk/java/io/FastSerializer/unshared/TestDescription.java b/test/jdk/java/io/FastSerializer/unshared/TestDescription.java
new file mode 100644
index 000000000..31fd11ca4
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/unshared/TestDescription.java
@@ -0,0 +1,27 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/unshared
+*- @TestCaseName:unshared
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4311991
+ *
+ * @library /test/jdk/java/io/Serializable/unshared/
+ * @clean Write Read Foo Bar
+ * @build Write
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write Read Foo Bar
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ *
+ * @summary Test ObjectOutputStream.writeUnshared/readUnshared functionality.
+ */
diff --git a/test/jdk/java/io/FastSerializer/userRWObjError/TestDescription.java b/test/jdk/java/io/FastSerializer/userRWObjError/TestDescription.java
new file mode 100644
index 000000000..f2e94df9b
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/userRWObjError/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/userRWObjError
+*- @TestCaseName:userRWObjError
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4082734
+ * @library /test/jdk/java/io/Serializable/userRWObjError/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer UserRWObjError
+ * @summary Ensure that Error exception is propogated from Serializable class'
+ * readObject & writeObject method.
+ */
diff --git a/test/jdk/java/io/FastSerializer/util/CleanActualClass.java b/test/jdk/java/io/FastSerializer/util/CleanActualClass.java
new file mode 100644
index 000000000..c19e7b0ce
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/util/CleanActualClass.java
@@ -0,0 +1,44 @@
+// !!!
+// NOTE: this class is only used for FastSerializer test.
+// !!!
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * Clean class file , using relative paths which are actual serialalbe directory.
+ */
+public class CleanActualClass {
+ public static final String TEST_ClASS = System.getProperty("test.classes", "").trim();
+
+ /**
+ * @param args files
+ * @throws IOException if an I/O error occurs
+ */
+ public static void main(String[] args) throws IOException {
+ if (args.length == 0) {
+ throw new IllegalArgumentException("At least one file must be specified to clean");
+ }
+ String base = TEST_ClASS.replace("TestDescription.d", "");
+ String rep = "/java/io/FastSerializer/";
+ int pos = base.lastIndexOf(rep);
+ if (pos != -1) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(base.substring(0, pos));
+ builder.append("/test/jdk/java/io/Serializable/");
+ builder.append(base.substring(pos + rep.length()));
+ base = builder.toString();
+ }
+
+ for (String arg:args) {
+ Path path = Paths.get(base, arg).toAbsolutePath().normalize();
+ if (Files.deleteIfExists(path)) {
+ System.out.printf("delete " + path + " success\n");
+ } else {
+ System.out.printf("file " + path + " doesn't exist\n");
+ }
+ }
+ }
+}
+
diff --git a/test/jdk/java/io/FastSerializer/validate/TestDescription.java b/test/jdk/java/io/FastSerializer/validate/TestDescription.java
new file mode 100644
index 000000000..e5123514d
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/validate/TestDescription.java
@@ -0,0 +1,22 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/validate
+*- @TestCaseName:validate
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/*
+ * @test
+ * @bug 4094892
+ * @summary Verify that an object is not validated more than once during deserialization.
+ * @library /test/jdk/java/io/Serializable/validate/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Validate
+ *
+ */
\ No newline at end of file
diff --git a/test/jdk/java/io/FastSerializer/verifyDynamicObjHandleTable/TestDescription.java b/test/jdk/java/io/FastSerializer/verifyDynamicObjHandleTable/TestDescription.java
new file mode 100644
index 000000000..d88cbda07
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/verifyDynamicObjHandleTable/TestDescription.java
@@ -0,0 +1,20 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/verifyDynamicObjHandleTable
+*- @TestCaseName:verifyDynamicObjHandleTable
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4146453
+ * @library /test/jdk/java/io/Serializable/verifyDynamicObjHandleTable/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer VerifyDynamicObjHandleTable
+ * @summary Test that regrow of object/handle table of ObjectOutputStream works.
+ */
diff --git a/test/jdk/java/io/FastSerializer/writeObjectMemory/TestDescription.java b/test/jdk/java/io/FastSerializer/writeObjectMemory/TestDescription.java
new file mode 100644
index 000000000..20b59bb43
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/writeObjectMemory/TestDescription.java
@@ -0,0 +1,21 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/writeObjectMemory
+*- @TestCaseName:writeObjectMemory
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @library /test/jdk/java/io/Serializable/writeObjectMemory/
+ * @clean A WriteObjectMemory
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer WriteObjectMemory
+ * @bug 4146453 5011410
+ * @summary Test that regrow of object/handle table of ObjectOutputStream works.
+ */
diff --git a/test/jdk/java/io/FastSerializer/writeReplace/TestDescription.java b/test/jdk/java/io/FastSerializer/writeReplace/TestDescription.java
new file mode 100644
index 000000000..6dd013c67
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/writeReplace/TestDescription.java
@@ -0,0 +1,19 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/writeReplace
+*- @TestCaseName:writeReplace
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @library /test/jdk/java/io/Serializable/writeReplace/
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer WriteReplace
+ * @summary Test proper functioning of class-defined writeReplace methods.
+ */
diff --git a/test/jdk/java/io/FastSerializer/wrongReturnTypes/TestDescription.java b/test/jdk/java/io/FastSerializer/wrongReturnTypes/TestDescription.java
new file mode 100644
index 000000000..f5acfee1e
--- /dev/null
+++ b/test/jdk/java/io/FastSerializer/wrongReturnTypes/TestDescription.java
@@ -0,0 +1,28 @@
+/*
+*- @TestCaseID:jdk17/FastSerializer/wrongReturnTypes
+*- @TestCaseName:wrongReturnTypes
+*- @TestCaseType:Function test
+*- @RequirementID:AR.SR.IREQ02478866.001.001
+*- @RequirementName:FastSeralizer 功能实现
+*- @Condition:UseFastSerializer
+*- @Brief:
+* -#step1 将对象写入数据流
+* -#step2 从数据流中读取对象
+*- @Expect: 读取对象与写入对象相同
+*- @Priority:Level 1
+*/
+
+/* @test
+ * @bug 4337857
+ *
+ * @library /test/jdk/java/io/Serializable/wrongReturnTypes/
+ * @clean Write Read A B
+ * @build Write
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Write
+ * @clean Write Read A B
+ * @build Read
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseFastSerializer Read
+ *
+ * @summary Verify that custom serialization methods declared with incorrect
+ * return types are not invoked.
+ */
--
2.37.0