9988 lines
363 KiB
Diff
9988 lines
363 KiB
Diff
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
|
|
|