blob: 27d8b3310e52bbb0e10c5cb2c5e5c096c6bed8c3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.harmony.tests.java.io;
import java.io.IOException;
import java.io.NotSerializableException;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Vector;
@SuppressWarnings({ "serial", "unused" })
public class SerializationStressTest1 extends SerializationStressTest {
// The purpose of these two classes is to test if serialization, when
// loading, runs the object's constructor (wrong) or the constructor defined
// at the topmost Serializable superclass(correct).
static final int INIT_INT_VALUE = 7;
// HAS to be static class so that our constructor signature will remain
// untouched (no synthetic param)
private static class SerializationTest implements java.io.Serializable {
int anInt = INIT_INT_VALUE;
public SerializationTest() {
super();
}
}
static final String INIT_STR_VALUE = "a string that is blortz";
// HAS to be static class so that our constructor signature will remain
// untouched (no synthetic param)
private static class SerializationTestSubclass1 extends SerializationTest {
String aString = INIT_STR_VALUE;
public SerializationTestSubclass1() {
super();
// Just to change default superclass init value
anInt = INIT_INT_VALUE / 2;
}
}
// -----------------------------------------------------------------------------------
private static class SpecTestSuperClass implements Runnable {
protected java.lang.String instVar;
public SpecTestSuperClass() {
}
public void run() {
}
}
private static class SpecTest extends SpecTestSuperClass implements
Cloneable, Serializable {
public java.lang.String instVar1;
public static java.lang.String staticVar1;
public static java.lang.String staticVar2;
{
instVar1 = "NonStaticInitialValue";
}
static {
staticVar1 = "StaticInitialValue";
staticVar1 = new String(staticVar1);
}
public Object method(Object objParam, Object objParam2) {
return new Object();
}
public boolean method(boolean bParam, Object objParam) {
return true;
}
public boolean method(boolean bParam, Object objParam, Object objParam2) {
return true;
}
}
private static class SpecTestSubclass extends SpecTest {
public transient java.lang.String transientInstVar = "transientValue";
}
// -----------------------------------------------------------------------------------
// This one tests what happens if the read/writeObject methods are defined
// Serialization should work fine.
private static class ReadWriteObject implements java.io.Serializable {
public boolean calledWriteObject = false;
public boolean calledReadObject = false;
public ReadWriteObject() {
super();
}
private void readObject(java.io.ObjectInputStream in)
throws java.io.IOException, ClassNotFoundException {
calledReadObject = true;
in.readObject();
}
private void writeObject(java.io.ObjectOutputStream out)
throws java.io.IOException {
calledWriteObject = true;
out.writeObject(FOO);
}
}
// This one tests what happens if the read/writeObject methods are not
// private.
// Serialization should fail.
private static class PublicReadWriteObject implements java.io.Serializable {
public boolean calledWriteObject = false;
public boolean calledReadObject = false;
public PublicReadWriteObject() {
super();
}
public void readObject(java.io.ObjectInputStream in)
throws java.io.IOException, ClassNotFoundException {
calledReadObject = true;
in.readObject();
}
public void writeObject(java.io.ObjectOutputStream out)
throws java.io.IOException {
calledWriteObject = true;
out.writeObject(FOO);
}
}
// This one tests if field names are serialized in the same way (sorting)
// across different VMs
private static class FieldOrder implements Serializable {
String aaa1NonPrimitive = "aaa1";
int bbb1PrimitiveInt = 5;
boolean aaa2PrimitiveBoolean = true;
String bbb2NonPrimitive = "bbb2";
}
// This one tests what happens if you define just readObject, but not
// writeObject.
// Does it run or not ?
private static class JustReadObject implements java.io.Serializable {
public boolean calledReadObject = false;
public JustReadObject() {
super();
}
private void readObject(java.io.ObjectInputStream in)
throws java.io.IOException, ClassNotFoundException {
calledReadObject = true;
in.defaultReadObject();
}
}
// This one tests what happens if you define just writeObject, but not
// readObject.
// Does it run or not ?
private static class JustWriteObject implements java.io.Serializable {
public boolean calledWriteObject = false;
public JustWriteObject() {
super();
}
private void writeObject(java.io.ObjectOutputStream out)
throws java.io.IOException, ClassNotFoundException {
calledWriteObject = true;
out.defaultWriteObject();
}
}
// This one tests class-based replacement when dumping
private static class ClassBasedReplacementWhenDumping implements
java.io.Serializable {
public boolean calledReplacement = false;
public ClassBasedReplacementWhenDumping() {
super();
}
private Object writeReplace() {
calledReplacement = true;
return FOO; // Replacement is a String
}
}
// This one tests whether class-based replacement supports multiple levels.
// MultipleClassBasedReplacementWhenDumping -> C1 -> C2 -> C3 -> FOO
private static class MultipleClassBasedReplacementWhenDumping implements
java.io.Serializable {
private static class C1 implements java.io.Serializable {
private Object writeReplace() {
return new C2();
}
}
private static class C2 implements java.io.Serializable {
private Object writeReplace() {
return new C3();
}
}
private static class C3 implements java.io.Serializable {
private Object writeReplace() {
return FOO;
}
}
public MultipleClassBasedReplacementWhenDumping() {
super();
}
private Object writeReplace() {
return new C1();
}
}
// This one tests class-based replacement when loading
private static class ClassBasedReplacementWhenLoading implements
java.io.Serializable {
public ClassBasedReplacementWhenLoading() {
super();
}
private Object readResolve() {
return FOO; // Replacement is a String
}
}
// This one tests what happens if a loading-replacement is not
// type-compatible with the original object
private static class ClassBasedReplacementWhenLoadingViolatesFieldType
implements java.io.Serializable {
public ClassBasedReplacementWhenLoading classBasedReplacementWhenLoading = new ClassBasedReplacementWhenLoading();
public ClassBasedReplacementWhenLoadingViolatesFieldType() {
super();
}
}
// What happens if dumping causes an error and you try to reload ?
// Should the load throw the same exception ?
private static class MyExceptionWhenDumping1 implements
java.io.Serializable {
private static class MyException extends java.io.IOException {
}
// A primitive instance variable exposes a bug in the serialization
// spec.
// Primitive instance variables are written without primitive data tags
// and so are read without checking for tags. If an exception is
// written, reading primitive data will just read bytes from the stream
// which may be tags
public boolean anInstanceVar = false;
public MyExceptionWhenDumping1() {
super();
}
private void readObject(java.io.ObjectInputStream in)
throws java.io.IOException, ClassNotFoundException {
in.defaultReadObject();
}
private void writeObject(java.io.ObjectOutputStream out)
throws java.io.IOException, ClassNotFoundException {
throw new MyException();
}
}
// What happens if dumping causes an error and you try to reload ?
// Should the load throw the same exception ?
private static class MyExceptionWhenDumping2 implements
java.io.Serializable {
private static class MyException extends java.io.IOException {
}
;
public Integer anInstanceVar = new Integer(0xA1);
public MyExceptionWhenDumping2() {
super();
}
private void readObject(java.io.ObjectInputStream in)
throws java.io.IOException, ClassNotFoundException {
in.defaultReadObject();
}
private void writeObject(java.io.ObjectOutputStream out)
throws java.io.IOException, ClassNotFoundException {
throw new MyException();
}
}
// What happens if dumping causes an error (NonSerializable inst var) and
// you try to reload ?
// Should the load throw the same exception ?
private static class NonSerializableExceptionWhenDumping implements
java.io.Serializable {
public Object anInstanceVar = new Object();
public NonSerializableExceptionWhenDumping() {
super();
}
}
// What happens if dumping causes an error (which is not serializable) and
// you try to reload ?
// Should the load throw the same exception ?
private static class MyUnserializableExceptionWhenDumping implements
java.io.Serializable {
private static class MyException extends java.io.IOException {
private Object notSerializable = new Object();
}
public boolean anInstanceVar = false;
public MyUnserializableExceptionWhenDumping() {
super();
}
private void readObject(java.io.ObjectInputStream in)
throws java.io.IOException, ClassNotFoundException {
in.defaultReadObject();
}
private void writeObject(java.io.ObjectOutputStream out)
throws java.io.IOException, ClassNotFoundException {
throw new MyException();
}
}
public SerializationStressTest1(String name) {
super(name);
}
public void test_18_1_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
objToSave = "HelloWorld";
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, (((String) objLoaded)
.equals((String) objToSave)));
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type: "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_2_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
objToSave = null;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, objLoaded == objToSave);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_3_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
byte[] bytes = { 0, 1, 2, 3 };
objToSave = bytes;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, Arrays.equals(
(byte[]) objLoaded, (byte[]) objToSave));
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_4_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
int[] ints = { 0, 1, 2, 3 };
objToSave = ints;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, Arrays.equals(
(int[]) objLoaded, (int[]) objToSave));
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
throw err;
}
}
public void test_18_5_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
short[] shorts = { 0, 1, 2, 3 };
objToSave = shorts;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, Arrays.equals(
(short[]) objLoaded, (short[]) objToSave));
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_6_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
long[] longs = { 0, 1, 2, 3 };
objToSave = longs;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, Arrays.equals(
(long[]) objLoaded, (long[]) objToSave));
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_7_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
float[] floats = { 0.0f, 1.1f, 2.2f, 3.3f };
objToSave = floats;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, Arrays.equals(
(float[]) objLoaded, (float[]) objToSave));
} catch (IOException e) {
fail("IOException serializing data: " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_8_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
double[] doubles = { 0.0, 1.1, 2.2, 3.3 };
objToSave = doubles;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, Arrays.equals(
(double[]) objLoaded, (double[]) objToSave));
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_9_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
boolean[] booleans = { true, false, false, true };
objToSave = booleans;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, Arrays.equals(
(boolean[]) objLoaded, (boolean[]) objToSave));
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : " + e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_10_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
String[] strings = { "foo", "bar", "java" };
objToSave = strings;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue(MSG_TEST_FAILED + objToSave, Arrays.equals(
(Object[]) objLoaded, (Object[]) objToSave));
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("Unable to read Object type: " + e.toString());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_11_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
objToSave = new Object(); // Not serializable
if (DEBUG)
System.out.println("Obj = " + objToSave);
boolean passed = false;
Throwable t = null;
try {
objLoaded = dumpAndReload(objToSave);
} catch (NotSerializableException ns) {
passed = true;
t = ns;
} catch (Exception wrongExc) {
passed = false;
t = wrongExc;
}
assertTrue(
"Failed to throw NotSerializableException when serializing "
+ objToSave + " Threw(if non-null) this: " + t,
passed);
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_12_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
try {
if (DEBUG)
System.out.println("Obj = <mixed>");
t_MixPrimitivesAndObjects();
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when dumping mixed types");
// err.printStackTrace();
throw err;
}
}
public void test_18_13_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
SerializationTestSubclass1 st = new SerializationTestSubclass1();
// Just change the default ivar values
st.anInt = Integer.MAX_VALUE;
st.aString = FOO;
objToSave = st;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// non-serializable inst var has to be initialized from top
// constructor
assertTrue(
MSG_TEST_FAILED + objToSave,
((SerializationTestSubclass1) objLoaded).anInt == Integer.MAX_VALUE);
// but serialized var has to be restored as it was in the object
// when dumped
assertTrue(MSG_TEST_FAILED + objToSave,
((SerializationTestSubclass1) objLoaded).aString
.equals(FOO));
} catch (IOException e) {
fail("Exception serializing " + objToSave + "\t->"
+ e.toString());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
err.printStackTrace();
throw err;
}
}
public void test_18_14_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
SpecTest specTest = new SpecTest();
// Just change the default ivar values
specTest.instVar = FOO;
specTest.instVar1 = specTest.instVar;
objToSave = specTest;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// non-serializable inst var has to be initialized from top
// constructor
assertNull(MSG_TEST_FAILED + objToSave,
((SpecTest) objLoaded).instVar);
// instVar from non-serialized class, cant be saved/restored
// by serialization but serialized ivar has to be restored as it
// was in the object when dumped
assertTrue(MSG_TEST_FAILED + objToSave,
((SpecTest) objLoaded).instVar1.equals(FOO));
} catch (IOException e) {
fail("Exception serializing " + objToSave + "\t->"
+ e.toString());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_15_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
SpecTestSubclass specTestSubclass = new SpecTestSubclass();
// Just change the default ivar values
specTestSubclass.transientInstVar = FOO;
objToSave = specTestSubclass;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// non-serializable inst var cant be saved, and it is not init'ed
// from top constructor in this case
assertNull(MSG_TEST_FAILED + objToSave,
((SpecTestSubclass) objLoaded).transientInstVar);
// transient slot, cant be saved/restored by serialization
} catch (IOException e) {
fail("Exception serializing " + objToSave + "\t->"
+ e.toString());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_16_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
String[] strings = new String[2];
strings[0] = FOO;
strings[1] = (" " + FOO + " ").trim(); // Safe way to get a copy
// that is not ==
objToSave = strings;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
String[] stringsLoaded = (String[]) objLoaded;
// Serialization has to use identity-based table for assigning IDs
assertTrue(MSG_TEST_FAILED + objToSave,
!(stringsLoaded[0] == stringsLoaded[1]));
} catch (IOException e) {
fail("Exception serializing " + objToSave + "\t->"
+ e.toString());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_17_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
ReadWriteObject readWrite = new ReadWriteObject();
objToSave = readWrite;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// has to have called the writeObject on the instance to dump
assertTrue(MSG_TEST_FAILED + objToSave, readWrite.calledWriteObject);
// has to have called the readObject on the instance loaded
assertTrue(MSG_TEST_FAILED + objToSave,
((ReadWriteObject) objLoaded).calledReadObject);
} catch (IOException e) {
fail("Exception serializing " + objToSave + "\t->"
+ e.toString());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_18_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
PublicReadWriteObject publicReadWrite = new PublicReadWriteObject();
objToSave = publicReadWrite;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Can't have called the writeObject on the instance to dump
assertTrue(MSG_TEST_FAILED + objToSave,
!publicReadWrite.calledWriteObject);
// Can't have called the readObject on the instance loaded
assertTrue(MSG_TEST_FAILED + objToSave,
!((PublicReadWriteObject) objLoaded).calledReadObject);
} catch (IOException e) {
fail("Exception serializing " + objToSave + "\t->"
+ e.toString());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_19_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
FieldOrder fieldOrder = new FieldOrder();
objToSave = fieldOrder;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// This test is only useful for X-loading, so if it managed to
// dump&load, we passed the test
assertTrue(MSG_TEST_FAILED + objToSave, true);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_20_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
objToSave = Class.forName("java.lang.Integer");
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Classes with the same name are unique, so test for ==
assertTrue(MSG_TEST_FAILED + objToSave, objLoaded == objToSave);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_21_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
// Even though instances of java.lang.Object are not Serializable,
// instances of java.lang.Class are. So, the object
// java.lang.Object.class
// should be serializable
objToSave = Class.forName("java.lang.Object");
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Classes with the same name are unique, so test for ==
assertTrue(MSG_TEST_FAILED + objToSave, objLoaded == objToSave);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_22_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
java.net.URL url = new java.net.URL("http://localhost/a.txt");
objToSave = url;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
assertTrue("URLs are not the same: " + url + "\t,\t" + objLoaded,
url.equals(objLoaded));
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_23_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
JustReadObject justReadObject = new JustReadObject();
objToSave = justReadObject;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Only calls readObject on the instance loaded if writeObject was
// also defined
assertTrue("Called readObject on an object without a writeObject",
!((JustReadObject) objLoaded).calledReadObject);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_24_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
JustWriteObject justWriteObject = new JustWriteObject();
objToSave = justWriteObject;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Call writeObject on the instance even if it does not define
// readObject
assertTrue(MSG_TEST_FAILED + objToSave,
justWriteObject.calledWriteObject);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type: "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_25_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
Vector<String> vector = new Vector<String>(1);
vector.add(FOO);
objToSave = vector;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to have the string there
assertTrue(MSG_TEST_FAILED + objToSave, FOO
.equals(((java.util.Vector) objLoaded).elementAt(0)));
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
throw err;
}
}
public void test_18_26_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
Hashtable<String, String> hashTable = new Hashtable<String, String>(
5);
hashTable.put(FOO, FOO);
objToSave = hashTable;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
java.util.Hashtable loadedHashTable = (java.util.Hashtable) objLoaded;
// Has to have the key/value there (FOO -> FOO)
assertTrue(MSG_TEST_FAILED + objToSave, FOO.equals(loadedHashTable
.get(FOO)));
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
throw err;
}
}
public void test_18_27_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
ClassBasedReplacementWhenDumping classBasedReplacementWhenDumping = new ClassBasedReplacementWhenDumping();
objToSave = classBasedReplacementWhenDumping;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to have run the replacement method
assertTrue("Did not run writeReplace",
classBasedReplacementWhenDumping.calledReplacement);
// Has to have loaded a String (replacement object)
assertTrue("Did not replace properly", FOO.equals(objLoaded));
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_28_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
MultipleClassBasedReplacementWhenDumping multipleClassBasedReplacementWhenDumping = new MultipleClassBasedReplacementWhenDumping();
objToSave = multipleClassBasedReplacementWhenDumping;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to have loaded a String (replacement object)
assertTrue(
"Executed multiple levels of replacement (see PR 1F9RNT1), loaded= "
+ objLoaded,
objLoaded instanceof MultipleClassBasedReplacementWhenDumping.C1);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.toString());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_29_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
ClassBasedReplacementWhenLoading classBasedReplacementWhenLoading = new ClassBasedReplacementWhenLoading();
objToSave = classBasedReplacementWhenLoading;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to have loaded a String (replacement object)
assertTrue("Did not run readResolve", FOO.equals(objLoaded));
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_30_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
ClassBasedReplacementWhenLoadingViolatesFieldType classBasedReplacementWhenLoadingViolatesFieldType = new ClassBasedReplacementWhenLoadingViolatesFieldType();
objToSave = classBasedReplacementWhenLoadingViolatesFieldType;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// We cannot gere here, the load replacement must have caused a
// field type violation
fail(
"Loading replacements can cause field type violation in this implementation");
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (ClassCastException e) {
assertTrue(
"Loading replacements can NOT cause field type violation in this implementation",
true);
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_31_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
MyExceptionWhenDumping1 exceptionWhenDumping = new MyExceptionWhenDumping1();
objToSave = exceptionWhenDumping;
if (DEBUG)
System.out.println("Obj = " + objToSave);
boolean causedException = false;
try {
dump(objToSave);
} catch (MyExceptionWhenDumping1.MyException e) {
causedException = true;
}
;
assertTrue("Should have caused an exception when dumping",
causedException);
causedException = false;
try {
objLoaded = reload();
// Although the spec says we should get a WriteAbortedException,
// the serialization format handle an Exception when reading
// primitive data so we get ClassCastException instead
} catch (ClassCastException e) {
causedException = true;
}
;
assertTrue("Should have caused a ClassCastException when loading",
causedException);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_32_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
MyExceptionWhenDumping2 exceptionWhenDumping = new MyExceptionWhenDumping2();
objToSave = exceptionWhenDumping;
if (DEBUG)
System.out.println("Obj = " + objToSave);
boolean causedException = false;
try {
dump(objToSave);
} catch (MyExceptionWhenDumping2.MyException e) {
causedException = true;
}
;
assertTrue("Should have caused an exception when dumping",
causedException);
causedException = false;
try {
objLoaded = reload();
} catch (java.io.WriteAbortedException e) {
causedException = true;
}
;
assertTrue(
"Should have caused a java.io.WriteAbortedException when loading",
causedException);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (ClassCastException e) {
fail("ClassCastException : " + e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
throw err;
}
}
public void test_NonSerializableExceptionWhenDumping() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
NonSerializableExceptionWhenDumping nonSerializableExceptionWhenDumping = new NonSerializableExceptionWhenDumping();
objToSave = nonSerializableExceptionWhenDumping;
if (DEBUG)
System.out.println("Obj = " + objToSave);
boolean causedException = false;
try {
dump(objToSave);
} catch (java.io.NotSerializableException e) {
causedException = true;
}
;
assertTrue("Should have caused an exception when dumping",
causedException);
causedException = false;
try {
objLoaded = reload();
} catch (java.io.WriteAbortedException e) {
causedException = true;
}
;
assertTrue(
"Should have caused a java.io.WriteAbortedException when loading",
causedException);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_33_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
MyUnserializableExceptionWhenDumping exceptionWhenDumping = new MyUnserializableExceptionWhenDumping();
objToSave = exceptionWhenDumping;
if (DEBUG)
System.out.println("Obj = " + objToSave);
boolean causedException = false;
try {
dump(objToSave);
} catch (MyUnserializableExceptionWhenDumping.MyException e) {
causedException = true;
}
assertTrue("Should have caused an exception when dumping",
causedException);
// As the stream is corrupted, reading the stream will have
// undefined results
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_34_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
java.io.IOException ioe = new java.io.IOException();
objToSave = ioe;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to be able to save/load an exception
assertTrue(MSG_TEST_FAILED + objToSave, true);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_35_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
objToSave = Class.forName("java.util.Hashtable");
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Classes with the same name are unique, so test for ==
assertTrue(MSG_TEST_FAILED + objToSave, objLoaded == objToSave);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_36_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
java.io.IOException ex = new java.io.InvalidClassException(FOO);
objToSave = ex;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to be able to save/load an exception
assertTrue(MSG_TEST_FAILED + objToSave, true);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_37_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
java.io.IOException ex = new java.io.InvalidObjectException(FOO);
objToSave = ex;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to be able to save/load an exception
assertTrue(MSG_TEST_FAILED + objToSave, true);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_38_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
java.io.IOException ex = new java.io.NotActiveException(FOO);
objToSave = ex;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to be able to save/load an exception
assertTrue(MSG_TEST_FAILED + objToSave, true);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_39_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
java.io.IOException ex = new java.io.NotSerializableException(FOO);
objToSave = ex;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to be able to save/load an exception
assertTrue(MSG_TEST_FAILED + objToSave, true);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
public void test_18_40_writeObject() {
// Test for method void
// java.io.ObjectOutputStream.writeObject(java.lang.Object)
Object objToSave = null;
Object objLoaded;
try {
java.io.IOException ex = new java.io.StreamCorruptedException(FOO);
objToSave = ex;
if (DEBUG)
System.out.println("Obj = " + objToSave);
objLoaded = dumpAndReload(objToSave);
// Has to be able to save/load an exception
assertTrue(MSG_TEST_FAILED + objToSave, true);
} catch (IOException e) {
fail("IOException serializing " + objToSave + " : "
+ e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException reading Object type : "
+ e.getMessage());
} catch (Error err) {
System.out.println("Error when obj = " + objToSave);
// err.printStackTrace();
throw err;
}
}
}