1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/*
2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  this work for additional information regarding copyright ownership.
5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  (the "License"); you may not use this file except in compliance with
7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  the License.  You may obtain a copy of the License at
8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  See the License for the specific language governing permissions and
15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  limitations under the License.
16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.io;
19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayInputStream;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayOutputStream;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.DataInputStream;
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileInputStream;
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileOutputStream;
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException;
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InputStream;
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InvalidObjectException;
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.NotActiveException;
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectInputStream;
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectOutputStream;
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectStreamClass;
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectStreamException;
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.Serializable;
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.StreamCorruptedException;
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.WriteAbortedException;
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.security.Permission;
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.security.PermissionCollection;
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.ArrayList;
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Arrays;
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Calendar;
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.GregorianCalendar;
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.HashMap;
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.HashSet;
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Hashtable;
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.IdentityHashMap;
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.LinkedHashMap;
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.LinkedHashSet;
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.LinkedList;
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.List;
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Map;
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.PropertyPermission;
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Set;
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.SimpleTimeZone;
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.SortedMap;
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.SortedSet;
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.TimeZone;
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.TreeMap;
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.TreeSet;
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Vector;
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport libcore.io.Streams;
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/**
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Automated Test Suite for class java.io.ObjectOutputStream
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath@SuppressWarnings("serial")
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class SerializationStressTest extends junit.framework.TestCase implements
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Serializable {
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    // protected static final String MODE_XLOAD = "xload";
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    // protected static final String MODE_XDUMP = "xdump";
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final String FOO = "foo";
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final String MSG_TEST_FAILED = "Failed to write/read/assertion checking: ";
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected static final boolean DEBUG = false;
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected static boolean xload = false;
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected static boolean xdump = false;
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected static String xFileName = null;
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected transient int dumpCount = 0;
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected transient ObjectInputStream ois;
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected transient ObjectOutputStream oos;
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected transient ByteArrayOutputStream bao;
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    // -----------------------------------------------------------------------------------
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class ObjectInputStreamSubclass extends ObjectInputStream {
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private Vector<Class> resolvedClasses = new Vector<Class>();
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public ObjectInputStreamSubclass(InputStream in) throws IOException,
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                StreamCorruptedException {
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            super(in);
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public Class<?> resolveClass(ObjectStreamClass osClass)
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                throws IOException, ClassNotFoundException {
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Class result = super.resolveClass(osClass);
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            resolvedClasses.addElement(result);
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return result;
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public Class[] resolvedClasses() {
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return (Class[]) resolvedClasses.toArray(new Class[resolvedClasses
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .size()]);
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final Map<String, String> TABLE = new Hashtable<String, String>();
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final Map<String, String> MAP = new HashMap<String, String>();
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final SortedMap<String, String> TREE = new TreeMap<String, String>();
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final LinkedHashMap<String, String> LINKEDMAP = new LinkedHashMap<String, String>();
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final LinkedHashSet<String> LINKEDSET = new LinkedHashSet<String>();
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final IdentityHashMap<String, String> IDENTITYMAP = new IdentityHashMap<String, String>();
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final List<String> ALIST = Arrays.asList(new String[] { "a", "list", "of",
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            "strings" });
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final List<String> LIST = new ArrayList<String>(ALIST);
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final Set<String> SET = new HashSet<String>(Arrays.asList(new String[] { "one",
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            "two", "three" }));
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final SortedSet<String> SORTSET = new TreeSet<String>(Arrays.asList(new String[] {
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            "one", "two", "three" }));
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final java.text.DateFormat DATEFORM = java.text.DateFormat
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            .getInstance();
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final java.text.ChoiceFormat CHOICE = new java.text.ChoiceFormat(
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            "1#one|2#two|3#three");
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final java.text.NumberFormat NUMBERFORM = java.text.NumberFormat
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            .getInstance();
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final java.text.MessageFormat MESSAGE = new java.text.MessageFormat(
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            "the time: {0,time} and date {0,date}");
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final LinkedList<String> LINKEDLIST = new LinkedList<String>(Arrays
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            .asList(new String[] { "a", "linked", "list", "of", "strings" }));
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final SimpleTimeZone TIME_ZONE = new SimpleTimeZone(3600000,
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            "S-TEST");
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final Calendar CALENDAR = new GregorianCalendar(TIME_ZONE);
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static {
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        TABLE.put("one", "1");
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        TABLE.put("two", "2");
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        TABLE.put("three", "3");
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        MAP.put("one", "1");
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        MAP.put("two", "2");
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        MAP.put("three", "3");
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        LINKEDMAP.put("one", "1");
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        LINKEDMAP.put("two", "2");
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        LINKEDMAP.put("three", "3");
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        IDENTITYMAP.put("one", "1");
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        IDENTITYMAP.put("two", "2");
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        IDENTITYMAP.put("three", "3");
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        LINKEDSET.add("one");
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        LINKEDSET.add("two");
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        LINKEDSET.add("three");
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        TREE.put("one", "1");
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        TREE.put("two", "2");
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        TREE.put("three", "3");
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // To make sure they all use the same Calendar
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        CALENDAR.setTimeZone(new SimpleTimeZone(0, "GMT"));
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        CALENDAR.set(1999, Calendar.JUNE, 23, 15, 47, 13);
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        CALENDAR.set(Calendar.MILLISECOND, 553);
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        DATEFORM.setCalendar(CALENDAR);
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        java.text.DateFormatSymbols symbols = new java.text.DateFormatSymbols();
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        symbols.setZoneStrings(new String[][] { { "a", "b", "c", "d", "e" },
185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                { "f", "g", "h", "i", "j" } });
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ((java.text.SimpleDateFormat) DATEFORM).setDateFormatSymbols(symbols);
187c96651d01dc87a20aa718d60feaff6611451852eNeil Fuller        DATEFORM.setNumberFormat(new java.text.DecimalFormat("#0.#"));
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        DATEFORM.setTimeZone(TimeZone.getTimeZone("EST"));
189c96651d01dc87a20aa718d60feaff6611451852eNeil Fuller        ((java.text.DecimalFormat) NUMBERFORM).applyPattern("#0.#");
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        MESSAGE.setFormat(0, DATEFORM);
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        MESSAGE.setFormat(1, DATEFORM);
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public SerializationStressTest() {
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public SerializationStressTest(String name) {
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        super(name);
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public String getDumpName() {
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        return getName() + dumpCount;
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void dump(Object o) throws IOException, ClassNotFoundException {
206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        if (dumpCount > 0)
207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            setUp();
208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Dump the object
209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(o);
211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected Object dumpAndReload(Object o) throws IOException,
217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ClassNotFoundException {
218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        dump(o);
219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        return reload();
220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected InputStream loadStream() throws IOException {
223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Choose the load stream
224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        if (xload || xdump) {
225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Load from pre-existing file
226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new FileInputStream(xFileName + "-" + getDumpName() + ".ser");
227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } else {
228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Just load from memory, we dumped to memory
229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new ByteArrayInputStream(bao.toByteArray());
230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected Object reload() throws IOException, ClassNotFoundException {
234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ois = new ObjectInputStream(loadStream());
235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        dumpCount++;
236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return ois.readObject();
238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Sets up the fixture, for example, open a network connection. This method
245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * is called before a test is executed.
246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void setUp() {
248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (xdump) {
250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                oos = new ObjectOutputStream(new FileOutputStream(xFileName
251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + "-" + getDumpName() + ".ser"));
252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } else {
253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                oos = new ObjectOutputStream(bao = new ByteArrayOutputStream());
254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (Exception e) {
256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Exception thrown during setup : " + e.getMessage());
257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Tears down the fixture, for example, close a network connection. This
262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * method is called after a test is executed.
263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void tearDown() {
265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        if (oos != null) {
266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                oos.close();
268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (Exception e) {
269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_1_Constructor() throws Exception {
274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method java.io.ObjectOutputStream(java.io.OutputStream)
275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.close();
276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos = new ObjectOutputStream(new ByteArrayOutputStream());
277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.close();
278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_2_close() {
281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.close()
282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos = new ObjectOutputStream(bao = new ByteArrayOutputStream());
285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeChar('T');
287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(FOO);
288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Writing to a closed stream does not cause problems. This is
289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // the expected behavior
290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Operation on closed stream threw IOException : "
292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + e.getMessage());
293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_3_defaultWriteObject() {
297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.defaultWriteObject()
298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.defaultWriteObject();
301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NotActiveException e) {
302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Correct
303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return;
304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        fail(
307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "Failed to throw NotActiveException when invoked outside readObject");
308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_4_flush() {
311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.flush()
312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos = new ObjectOutputStream(bao = new ByteArrayOutputStream());
315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            int size = bao.size();
316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeByte(127);
317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Data flushed already", bao.size() == size);
318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.flush();
319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Failed to flush data", bao.size() > size);
320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // we don't know how many bytes are actually written for 1 byte,
321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // so we test > <before>
322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos = null;
324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_5_reset() {
330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.reset()
331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            String o = "HelloWorld";
333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(o);
334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(o);
335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.reset();
336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(o);
337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_6_write() {
345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.write(byte [], int,
346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // int)
347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            byte[] buf = new byte[255];
349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            byte[] output = new byte[255];
350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int i = 0; i < output.length; i++)
351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                output[i] = (byte) i;
352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.write(output, 0, output.length);
353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.readFully(buf);
356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int i = 0; i < output.length; i++)
358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (buf[i] != output[i])
359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    fail("Read incorrect byte: " + i);
360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_6a_write() {
366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.write(byte [], int,
367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // int)
368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            byte[] buf = new byte[256];
370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            byte[] output = new byte[256];
371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int i = 0; i < output.length; i++)
372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                output[i] = (byte) (i & 0xff);
373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.write(output, 0, output.length);
374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.readFully(buf);
377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int i = 0; i < output.length; i++)
379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (buf[i] != output[i])
380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    fail("Read incorrect byte: " + i);
381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_7_write() {
387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.write(int)
388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.write('T');
390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Read incorrect byte", 'T', ois.read());
393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_8_write() {
400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.write(byte [])
401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            byte[] buf = new byte[10];
403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.write("HelloWorld".getBytes());
404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.read(buf, 0, 10);
407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
408cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Read incorrect bytes", "HelloWorld", new String(buf, 0, 10)
409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            );
410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_9_writeBoolean() {
416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.writeBoolean(boolean)
417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeBoolean(true);
419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
421cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrote incorrect byte value", ois.readBoolean());
422cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
423cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_10_writeByte() {
428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.writeByte(int)
429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeByte(127);
431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Wrote incorrect byte value", 127, ois.readByte());
434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_11_writeBytes() {
440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void
441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // java.io.ObjectOutputStream.writeBytes(java.lang.String)
442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            byte[] buf = new byte[10];
444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeBytes("HelloWorld");
445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.readFully(buf);
448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
449cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Wrote incorrect bytes value", "HelloWorld", new String(buf, 0, 10, "UTF-8")
450cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            );
451cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
452cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
453cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
454cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
455cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
456cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_12_writeChar() {
457cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.writeChar(int)
458cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
459cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeChar('T');
460cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
461cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
462cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Wrote incorrect char value", 'T', ois.readChar());
463cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
464cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
465cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
466cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
467cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
468cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_13_writeChars() {
469cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void
470cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // java.io.ObjectOutputStream.writeChars(java.lang.String)
471cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
472cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            int avail = 0;
473cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            char[] buf = new char[10];
474cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeChars("HelloWorld");
475cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
476cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
477cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Number of prim data bytes in stream / 2 to give char index
478cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            avail = ois.available() / 2;
479cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int i = 0; i < avail; ++i)
480cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                buf[i] = ois.readChar();
481cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
482cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Wrote incorrect chars", "HelloWorld", new String(buf, 0, 10)
483cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            );
484cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
485cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
486cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
487cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
488cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
489cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_14_writeDouble() {
490cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.writeDouble(double)
491cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
492cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeDouble(Double.MAX_VALUE);
493cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
494cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
495cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrote incorrect double value",
496cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    ois.readDouble() == Double.MAX_VALUE);
497cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
498cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
499cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
500cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
501cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
502cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_15_writeFloat() {
503cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.writeFloat(float)
504cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
505cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeFloat(Float.MAX_VALUE);
506cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
507cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
508cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrote incorrect double value",
509cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    ois.readFloat() == Float.MAX_VALUE);
510cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
511cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = null;
512cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
513cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
514cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
515cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
516cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
517cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_16_writeInt() {
518cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.writeInt(int)
519cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
520cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeInt(Integer.MAX_VALUE);
521cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
522cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
523cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrote incorrect double value",
524cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    ois.readInt() == Integer.MAX_VALUE);
525cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
526cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
527cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
528cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
529cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
530cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
531cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_17_writeLong() {
532cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.writeLong(long)
533cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
534cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeLong(Long.MAX_VALUE);
535cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
536cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
537cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrote incorrect double value",
538cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    ois.readLong() == Long.MAX_VALUE);
539cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
540cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
541cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
542cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
543cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
544cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_19_writeShort() {
545cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.ObjectOutputStream.writeShort(int)
546cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
547cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeShort(127);
548cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
549cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
550cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Wrote incorrect short value", 127, ois.readShort());
551cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
552cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
553cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
554cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
555cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
556cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_20_writeUTF() {
557cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void
558cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // java.io.ObjectOutputStream.writeUTF(java.lang.String)
559cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
560cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeUTF("HelloWorld");
561cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
562cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
563cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Wrote incorrect UTF value",
564cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    "HelloWorld", ois.readUTF());
565cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
566cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
567cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
568cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
569cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
570cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_25_available() {
571cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
572cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(FOO);
573cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(FOO);
574cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.flush();
575cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            int available1 = 0;
576cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            int available2 = 0;
577cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Object obj1 = null;
578cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Object obj2 = null;
579cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ObjectInputStream ois = new ObjectInputStream(loadStream());
580cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            available1 = ois.available();
581cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj1 = ois.readObject();
582cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            available2 = ois.available();
583cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj2 = ois.readObject();
584cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
585cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("available returned incorrect value", 0, available1);
586cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("available returned incorrect value", 0, available2);
587cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
588cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("available caused incorrect reading", FOO.equals(obj1));
589cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("available returned incorrect value", FOO.equals(obj2));
590cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
591cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
592cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing object : " + e.getMessage());
593cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (ClassNotFoundException e) {
594cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Unable to read Object type : " + e.toString());
595cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (Error err) {
596cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            System.out.println("Error " + err);
597cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            throw err;
598cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
599cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
600cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
601cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
602cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void t_MixPrimitivesAndObjects() throws IOException,
603cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ClassNotFoundException {
604cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int i = 7;
605cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String s1 = "string 1";
606cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String s2 = "string 2";
607cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] bytes = { 1, 2, 3 };
608cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
609cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.writeInt(i);
610cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.writeObject(s1);
611cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.writeUTF(s2);
612cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.writeObject(bytes);
613cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.close();
614cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
615cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
616cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
617cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            int j = ois.readInt();
618cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrong int :" + j, i == j);
619cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
620cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            String l1 = (String) ois.readObject();
621cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrong obj String :" + l1, s1.equals(l1));
622cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
623cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            String l2 = (String) ois.readUTF();
624cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrong UTF String :" + l2, s2.equals(l2));
625cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
626cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            byte[] bytes2 = (byte[]) ois.readObject();
627cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrong byte[]", Arrays.equals(bytes, bytes2));
628cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
629cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
630cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
631cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
632cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
633cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
634cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_resolveClass() {
635cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
636cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(new Object[] { Integer.class, new Integer(1) });
637cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
638cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
639cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStreamSubclass(loadStream());
640cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.readObject();
641cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois.close();
642cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e1) {
643cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException : " + e1.getMessage());
644cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (ClassNotFoundException e2) {
645cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("ClassNotFoundException : " + e2.getMessage());
646cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
647cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
648cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Class[] resolvedClasses = ((ObjectInputStreamSubclass) ois)
649cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .resolvedClasses();
650cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("missing resolved", 3, resolvedClasses.length);
651cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("resolved class 1", resolvedClasses[0] == Object[].class);
652cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("resolved class 2", resolvedClasses[1] == Integer.class);
653cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("resolved class 3", resolvedClasses[2] == Number.class);
654cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
655cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
656cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_reset() throws IOException, ClassNotFoundException {
657cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.reset();
658cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.writeObject("R");
659cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.reset();
660cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.writeByte(24);
661cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        oos.close();
662cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
663cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        DataInputStream dis = new DataInputStream(loadStream());
664cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] input = Streams.readFully(dis);
665cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] result = new byte[] { (byte) 0xac, (byte) 0xed, (byte) 0,
666cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                (byte) 5, (byte) 0x79, (byte) 0x74, (byte) 0, (byte) 1,
667cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                (byte) 'R', (byte) 0x79, (byte) 0x77, (byte) 1, (byte) 24 };
668cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("incorrect output", Arrays.equals(input, result));
669cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
670cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ois = new ObjectInputStreamSubclass(loadStream());
671cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Wrong result from readObject()", "R", ois.readObject());
672cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Wrong result from readByte()", 24, ois.readByte());
673cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ois.close();
674cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
675cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
676cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class ResolveObjectTest implements Serializable {
677cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Object field1, field2;
678cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
679cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
680cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class ResolveObjectInputStream extends ObjectInputStream {
681cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ResolveObjectInputStream(InputStream in)
682cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                throws StreamCorruptedException, IOException {
683cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            super(in);
684cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
685cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
686cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public void enableResolve() {
687cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            enableResolveObject(true);
688cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
689cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
690cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public Object resolveObject(Object obj) {
691cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (obj instanceof Vector) // test_1_resolveObject()
692cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return new Hashtable();
693cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            else if ("abc".equals(obj)) // test_2_resolveObject()
694cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return "ABC";
695cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            else if (obj instanceof String) // test_3_resolveObject()
696cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return String.valueOf(((String) obj).length());
697cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            else if (obj instanceof int[]) // test_4_resolveObject()
698cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return new Object[1];
699cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            else if (obj instanceof Object[] && ((Object[]) obj).length == 2) // test_5_resolveObject()
700cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return new char[1];
701cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return obj;
702cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
703cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
704cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
705cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_1_resolveObject() {
706cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
707cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest obj = new ResolveObjectTest();
708cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field1 = new Vector();
709cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field2 = obj.field1;
710cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(obj);
711cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
712cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ResolveObjectInputStream(loadStream());
713cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ((ResolveObjectInputStream) ois).enableResolve();
714cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest result = null;
715cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
716cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                result = (ResolveObjectTest) ois.readObject();
717cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (ClassNotFoundException e) {
718cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail(e.toString());
719cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
720cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Object not resolved",
721cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    result.field1 instanceof Hashtable);
722cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Second reference not resolved",
723cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    result.field1 == result.field2);
724cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
725cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
726cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
727cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
728cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
729cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_2_resolveObject() {
730cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
731cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest obj = new ResolveObjectTest();
732cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field1 = "abc";
733cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field2 = obj.field1;
734cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(obj);
735cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
736cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ResolveObjectInputStream(loadStream());
737cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ((ResolveObjectInputStream) ois).enableResolve();
738cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest result = null;
739cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
740cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                result = (ResolveObjectTest) ois.readObject();
741cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (ClassNotFoundException e) {
742cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail(e.toString());
743cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
744cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("String not resolved", "ABC", result.field1);
745cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Second reference not resolved",
746cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    result.field1 == result.field2);
747cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
748cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
749cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
750cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
751cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
752cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_3_resolveObject() {
753cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
754cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest obj = new ResolveObjectTest();
755cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            char[] lchars = new char[70000];
756cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field1 = new String(lchars);
757cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field2 = obj.field1;
758cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(obj);
759cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
760cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ResolveObjectInputStream(loadStream());
761cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ((ResolveObjectInputStream) ois).enableResolve();
762cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest result = null;
763cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
764cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                result = (ResolveObjectTest) ois.readObject();
765cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (ClassNotFoundException e) {
766cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail(e.toString());
767cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
768cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Long String not resolved", "70000"
769cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .equals(result.field1));
770cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Second reference not resolved",
771cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    result.field1 == result.field2);
772cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
773cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
774cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
775cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
776cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
777cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_4_resolveObject() {
778cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
779cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest obj = new ResolveObjectTest();
780cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field1 = new int[5];
781cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field2 = obj.field1;
782cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(obj);
783cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
784cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ResolveObjectInputStream(loadStream());
785cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ((ResolveObjectInputStream) ois).enableResolve();
786cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest result = null;
787cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
788cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                result = (ResolveObjectTest) ois.readObject();
789cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (ClassNotFoundException e) {
790cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail(e.toString());
791cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
792cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Class cl = new Object[0].getClass();
793cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("int[] not resolved", result.field1.getClass() == cl);
794cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Second reference not resolved",
795cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    result.field1 == result.field2);
796cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
797cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
798cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
799cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
800cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
801cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_5_resolveObject() {
802cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
803cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest obj = new ResolveObjectTest();
804cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field1 = new Object[2];
805cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.field2 = obj.field1;
806cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(obj);
807cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
808cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ResolveObjectInputStream(loadStream());
809cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ((ResolveObjectInputStream) ois).enableResolve();
810cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResolveObjectTest result = null;
811cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
812cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                result = (ResolveObjectTest) ois.readObject();
813cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (ClassNotFoundException e) {
814cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail(e.toString());
815cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
816cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Class cl = new char[0].getClass();
817cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("int[] not resolved", result.field1.getClass() == cl);
818cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Second reference not resolved",
819cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    result.field1 == result.field2);
820cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
821cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
822cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
823cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
824cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
825cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class WriteReplaceTestA implements Serializable {
826cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public Object writeReplace() throws ObjectStreamException {
827cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new ReadResolveTestB();
828cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
829cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
830cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
831cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class WriteReplaceTestB extends WriteReplaceTestA {
832cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
833cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
834cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class WriteReplaceTestC extends WriteReplaceTestA {
835cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public Object writeReplace() throws ObjectStreamException {
836cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new ReadResolveTestC();
837cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
838cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
839cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
840cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class WriteReplaceTestD implements Serializable {
841cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private Object writeReplace() throws ObjectStreamException {
842cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new ReadResolveTestD();
843cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
844cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
845cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
846cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class WriteReplaceTestE extends WriteReplaceTestD {
847cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
848cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
849cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class WriteReplaceTestF implements Serializable {
850cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int type, readType;
851cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
852cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public WriteReplaceTestF(int type, int readType) {
853cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            this.type = type;
854cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            this.readType = readType;
855cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
856cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
857cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public Object writeReplace() throws ObjectStreamException {
858cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            switch (type) {
859cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                case 0:
860cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    throw new InvalidObjectException("invalid");
861cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                case 1:
862cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    throw new RuntimeException("runtime");
863cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                case 2:
864cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    throw new Error("error");
865cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                default:
866cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    return new ReadResolveTestE(readType);
867cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
868cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
869cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
870cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
871cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class ReadResolveTestA implements Serializable {
872cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public Object readResolve() throws ObjectStreamException {
873cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new ReadResolveTestA();
874cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
875cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
876cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
877cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class ReadResolveTestB extends ReadResolveTestA {
878cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
879cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
880cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class ReadResolveTestC implements Serializable {
881cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private Object readResolve() throws ObjectStreamException {
882cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new ReadResolveTestB();
883cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
884cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
885cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
886cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class ReadResolveTestD extends ReadResolveTestC {
887cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
888cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
889cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class ReadResolveTestE implements Serializable {
890cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int type;
891cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
892cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public ReadResolveTestE(int type) {
893cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            this.type = type;
894cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
895cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
896cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public Object readResolve() throws ObjectStreamException {
897cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            switch (type) {
898cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                case 0:
899cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    throw new InvalidObjectException("invalid");
900cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                case 1:
901cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    throw new RuntimeException("runtime");
902cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                case 2:
903cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    throw new Error("error");
904cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                case 3:
905cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    return this;
906cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                default:
907cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    return new ReadResolveTestF();
908cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
909cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
910cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
911cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
912cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class ReadResolveTestF implements Serializable {
913cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
914cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
915cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_1_writeReplace() {
916cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
917cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Vector<Object> v = new Vector<Object>();
918cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            v.addElement(new WriteReplaceTestA());
919cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            v.addElement(new WriteReplaceTestB());
920cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            v.addElement(new WriteReplaceTestB());
921cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            v.addElement(new WriteReplaceTestC());
922cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            v.addElement(new WriteReplaceTestD());
923cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            v.addElement(new WriteReplaceTestE());
924cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(v);
925cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
926cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
927cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Vector result = (Vector) ois.readObject();
928cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("invalid 0 : " + result.elementAt(0), result
929cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .elementAt(0).getClass() == ReadResolveTestA.class);
930cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("invalid 1 : " + result.elementAt(1), result
931cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .elementAt(1).getClass() == ReadResolveTestA.class);
932cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("invalid 2 : " + result.elementAt(2), result
933cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .elementAt(2).getClass() == ReadResolveTestA.class);
934cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("invalid 3 : " + result.elementAt(3), result
935cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .elementAt(3).getClass() == ReadResolveTestB.class);
936cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("invalid 4 : " + result.elementAt(4), result
937cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .elementAt(4).getClass() == ReadResolveTestD.class);
938cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("invalid 5 : " + result.elementAt(5), result
939cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .elementAt(5).getClass() == WriteReplaceTestE.class);
940cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
941cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
942cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (ClassNotFoundException e) {
943cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("ClassNotFoundException serializing data : " + e.getMessage());
944cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
945cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
946cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
947cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_2_writeReplace() {
948cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
949cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            boolean exception = false;
950cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
951cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                oos.writeObject(new WriteReplaceTestF(0, -1));
952cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (ObjectStreamException e) {
953cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                exception = true;
954cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
955cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Should throw ObjectStreamException", exception);
956cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            exception = false;
957cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
958cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                oos.writeObject(new WriteReplaceTestF(1, -1));
959cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (RuntimeException e) {
960cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                exception = true;
961cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
962cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Should throw RuntimeException", exception);
963cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            exception = false;
964cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
965cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                oos.writeObject(new WriteReplaceTestF(2, -1));
966cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (Error e) {
967cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                exception = true;
968cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
969cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Should throw Error", exception);
970cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
971cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(new WriteReplaceTestF(3, 0));
972cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(new WriteReplaceTestF(3, 1));
973cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(new WriteReplaceTestF(3, 2));
974cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            WriteReplaceTestF test = new WriteReplaceTestF(3, 3);
975cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(test);
976cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(test);
977cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            WriteReplaceTestF test2 = new WriteReplaceTestF(3, 4);
978cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(test2);
979cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.writeObject(test2);
980cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            oos.close();
981cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ois = new ObjectInputStream(loadStream());
982cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
983cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                ois.readObject();
984cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (WriteAbortedException e) {
985cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
986cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
987cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            exception = false;
988cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
989cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                ois.readObject();
990cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (ObjectStreamException e) {
991cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                exception = true;
992cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
993cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Expected ObjectStreamException", exception);
994cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            exception = false;
995cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
996cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                ois.readObject();
997cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (RuntimeException e) {
998cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                exception = true;
999cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
1000cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Expected RuntimeException", exception);
1001cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            exception = false;
1002cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
1003cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                ois.readObject();
1004cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (Error e) {
1005cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                exception = true;
1006cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
1007cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Expected Error", exception);
1008cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1009cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Object readE1 = ois.readObject();
1010cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Object readE2 = ois.readObject();
1011cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Replaced objects should be identical", readE1 == readE2);
1012cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Object readF1 = ois.readObject();
1013cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Object readF2 = ois.readObject();
1014cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Replaced resolved objects should be identical: "
1015cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + readF1 + " " + readF2, readF1 == readF2);
1016cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
1017cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException serializing data : " + e.getMessage());
1018cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (ClassNotFoundException e) {
1019cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("ClassNotFoundException serializing data : " + e.getMessage());
1020cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1021cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1022cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
1023