1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.io; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.BufferedInputStream; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayInputStream; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayOutputStream; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.Externalizable; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileInputStream; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileNotFoundException; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileOutputStream; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InvalidObjectException; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.NotActiveException; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectInput; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectInputStream; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectInputValidation; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectOutput; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectOutputStream; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectStreamClass; 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectStreamException; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream; 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PipedInputStream; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PipedOutputStream; 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.Serializable; 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.SerializablePermission; 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.StreamCorruptedException; 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.reflect.Proxy; 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Permission; 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays; 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashMap; 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Hashtable; 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Vector; 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest; 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert; 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes@SuppressWarnings("serial") 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ObjectInputStreamTest extends TestCase implements 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Serializable { 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream ois; 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream oos; 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayOutputStream bao; 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public class SerializableTestHelper implements Serializable { 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String aField1; 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String aField2; 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SerializableTestHelper() { 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes aField1 = null; 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes aField2 = null; 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SerializableTestHelper(String s, String t) { 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes aField1 = s; 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes aField2 = t; 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void readObject(ObjectInputStream ois) throws Exception { 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // note aField2 is not read 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream.GetField fields = ois.readFields(); 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes aField1 = (String) fields.get("aField1", "Zap"); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void writeObject(ObjectOutputStream oos) throws IOException { 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // note aField2 is not written 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream.PutField fields = oos.putFields(); 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fields.put("aField1", aField1); 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeFields(); 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String getText1() { 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return aField1; 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void setText1(String s) { 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes aField1 = s; 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String getText2() { 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return aField2; 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void setText2(String s) { 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes aField2 = s; 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class A1 implements Serializable { 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final long serialVersionUID = 5942584913446079661L; 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes B1 b1 = new B1(); 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes B1 b2 = b1; 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Vector v = new Vector(); 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class B1 implements Serializable { 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int i = 5; 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Hashtable h = new Hashtable(); 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readObject() 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readObjectMissingClasses() throws Exception { 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SerializationTest.verifySelf(new A1(), new SerializableAssert() { 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void assertDeserialized(Serializable initial, 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Serializable deserialized) { 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(5, ((A1) deserialized).b1.i); 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }); 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#ObjectInputStream(java.io.InputStream) 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_io_InputStream() throws IOException { 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeDouble(Double.MAX_VALUE); 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(new byte[90])); 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("StreamCorruptedException expected"); 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (StreamCorruptedException e) { 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests {@link java.io.ObjectInputStream#resolveProxyClass(String[])} 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_resolveProxyClass() throws IOException, 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassNotFoundException { 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeBytes("HelloWorld"); 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MockObjectInputStream mockIn = new MockObjectInputStream( 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new ByteArrayInputStream(bao.toByteArray())); 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class[] clazzs = { java.io.ObjectInputStream.class, 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes java.io.Reader.class }; 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < clazzs.length; i++) { 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class clazz = clazzs[i]; 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class[] interfaceNames = clazz.getInterfaces(); 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] interfaces = new String[interfaceNames.length]; 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int index = 0; 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Class c : interfaceNames) { 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes interfaces[index] = c.getName(); 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes index++; 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class<?> s = mockIn.resolveProxyClass(interfaces); 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (Proxy.isProxyClass(s)) { 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class[] implementedInterfaces = s.getInterfaces(); 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (index = 0; index < implementedInterfaces.length; index++) { 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(interfaceNames[index], 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes implementedInterfaces[index]); 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should return a proxy class that implements the interfaces named in a proxy class descriptor"); 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mockIn.close(); 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MockObjectInputStream extends ObjectInputStream { 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MockObjectInputStream(InputStream input) 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws StreamCorruptedException, IOException { 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(input); 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Class<?> resolveProxyClass(String[] interfaceNames) throws IOException, ClassNotFoundException { 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.resolveProxyClass(interfaceNames); 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#available() 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_available() throws IOException { 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeBytes("HelloWorld"); 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect bytes", 10, ois.available()); 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#close() 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_close() throws IOException { 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeBytes("HelloWorld"); 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#defaultReadObject() 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_defaultReadObject() throws Exception { 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // SM. This method may as well be private, as if called directly it 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // throws an exception. 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String s = "HelloWorld"; 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeObject(s); 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.defaultReadObject(); 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("NotActiveException expected"); 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NotActiveException e) { 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Desired behavior 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#read() 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_read() throws IOException { 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.write('T'); 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect byte value", 'T', ois.read()); 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#read(byte[], int, int) 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_read$BII() throws IOException { 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] buf = new byte[10]; 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeBytes("HelloWorld"); 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.read(buf, 0, 10); 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect bytes", "HelloWorld", new String(buf, 0, 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 10, "UTF-8")); 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readBoolean() 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readBoolean() throws IOException { 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeBoolean(true); 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Read incorrect boolean value", ois.readBoolean()); 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readByte() 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readByte() throws IOException { 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeByte(127); 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect byte value", 127, ois.readByte()); 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readChar() 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readChar() throws IOException { 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeChar('T'); 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect char value", 'T', ois.readChar()); 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readDouble() 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readDouble() throws IOException { 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeDouble(Double.MAX_VALUE); 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Read incorrect double value", 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.readDouble() == Double.MAX_VALUE); 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readFields() 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readFields() throws Exception { 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SerializableTestHelper sth; 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * "SerializableTestHelper" is an object created for these tests with 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * two fields (Strings) and simple implementations of readObject and 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * writeObject which simply read and write the first field but not the 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * second 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeObject(new SerializableTestHelper("Gabba", "Jabba")); 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.flush(); 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sth = (SerializableTestHelper) (ois.readObject()); 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("readFields / writeFields failed--first field not set", 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Gabba", sth.getText1()); 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull( 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "readFields / writeFields failed--second field should not have been set", 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sth.getText2()); 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readFloat() 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readFloat() throws IOException { 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeFloat(Float.MAX_VALUE); 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Read incorrect float value", 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.readFloat() == Float.MAX_VALUE); 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readFully(byte[]) 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readFully$B() throws IOException { 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] buf = new byte[10]; 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeBytes("HelloWorld"); 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.readFully(buf); 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect bytes", "HelloWorld", new String(buf, 0, 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 10, "UTF-8")); 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readFully(byte[], int, int) 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readFully$BII() throws IOException { 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] buf = new byte[10]; 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeBytes("HelloWorld"); 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.readFully(buf, 0, 10); 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect bytes", "HelloWorld", new String(buf, 0, 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 10, "UTF-8")); 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readInt() 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readInt() throws IOException { 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeInt(Integer.MAX_VALUE); 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Read incorrect int value", 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.readInt() == Integer.MAX_VALUE); 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readLine() 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("deprecation") 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readLine() throws IOException { 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeBytes("HelloWorld\nSecondLine"); 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.readLine(); 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect string value", "SecondLine", ois 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .readLine()); 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readLong() 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readLong() throws IOException { 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeLong(Long.MAX_VALUE); 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Read incorrect long value", 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.readLong() == Long.MAX_VALUE); 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readObject() 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readObject() throws Exception { 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String s = "HelloWorld"; 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeObject(s); 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect Object value", s, ois.readObject()); 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-91 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // dynamically create serialization byte array for the next hierarchy: 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // - class A implements Serializable 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // - class C extends A 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] cName = C.class.getName().getBytes("UTF-8"); 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] aName = A.class.getName().getBytes("UTF-8"); 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayOutputStream out = new ByteArrayOutputStream(); 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] begStream = new byte[] { (byte) 0xac, (byte) 0xed, // STREAM_MAGIC 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, (byte) 0x05, // STREAM_VERSION 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x73, // TC_OBJECT 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x72, // TC_CLASSDESC 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, // only first byte for C class name length 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(begStream, 0, begStream.length); 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(cName.length); // second byte for C class name length 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(cName, 0, cName.length); // C class name 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] midStream = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x21, // serialVersionUID = 33L 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x02, // flags 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, (byte) 0x00, // fields : none 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x78, // TC_ENDBLOCKDATA 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x72, // Super class for C: TC_CLASSDESC for A class 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, // only first byte for A class name length 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(midStream, 0, midStream.length); 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(aName.length); // second byte for A class name length 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(aName, 0, aName.length); // A class name 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] endStream = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x0b, // serialVersionUID = 11L 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x02, // flags 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, (byte) 0x01, // fields 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x4c, // field description: type L (object) 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, (byte) 0x04, // length 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // field = 'name' 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65, 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x74, // className1: TC_STRING 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, (byte) 0x12, // length 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76, 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x61, (byte) 0x2f, (byte) 0x6c, (byte) 0x61, 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x6e, (byte) 0x67, (byte) 0x2f, (byte) 0x53, 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x74, (byte) 0x72, (byte) 0x69, (byte) 0x6e, 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x67, (byte) 0x3b, 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x78, // TC_ENDBLOCKDATA 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x70, // NULL super class for A class 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // classdata 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x74, // TC_STRING 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x00, (byte) 0x04, // length 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65, // value 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(endStream, 0, endStream.length); 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.flush(); 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // read created serial. form 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream( 505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.toByteArray())); 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object o = ois.readObject(); 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(C.class, o.getClass()); 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-846 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(new ObjectInputStream() {}.readObject()); 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readObjectOverride() 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readObjectOverride() throws Exception { 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-846 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(new ObjectInputStream() { 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object readObjectOverride() throws IOException, 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassNotFoundException { 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.readObjectOverride(); 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }.readObjectOverride()); 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class A implements Serializable { 530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final long serialVersionUID = 11L; 532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String name = "name"; 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class B extends A {} 537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class C extends B { 539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final long serialVersionUID = 33L; 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readObject() 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readObjectCorrupt() throws IOException, ClassNotFoundException { 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] bytes = { 00, 00, 00, 0x64, 0x43, 0x48, (byte) 0xFD, 0x71, 00, 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 00, 0x0B, (byte) 0xB8, 0x4D, 0x65 }; 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bin = new ByteArrayInputStream(bytes); 550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream in = new ObjectInputStream(bin); 552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.readObject(); 553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Unexpected read of corrupted stream"); 554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (StreamCorruptedException e) { 555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readShort() 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readShort() throws IOException { 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeShort(Short.MAX_VALUE); 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Read incorrect short value", 567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.readShort() == Short.MAX_VALUE); 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readUnsignedByte() 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readUnsignedByte() throws IOException { 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeByte(-1); 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect unsignedByte value", 255, ois 579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .readUnsignedByte()); 580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readUnsignedShort() 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readUnsignedShort() throws IOException { 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeShort(-1); 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect unsignedShort value", 65535, ois 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .readUnsignedShort()); 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#readUTF() 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readUTF() throws IOException { 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeUTF("HelloWorld"); 600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Read incorrect utf value", "HelloWorld", ois.readUTF()); 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#skipBytes(int) 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_skipBytesI() throws IOException { 610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] buf = new byte[10]; 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeBytes("HelloWorld"); 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.skipBytes(5); 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.read(buf, 0, 5); 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Skipped incorrect bytes", "World", new String(buf, 0, 5, "UTF-8")); 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-844 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new ObjectInputStream() {}.skipBytes(0); 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("NullPointerException expected"); 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) {} 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression Test for JIRA 2192 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readObject_withPrimitiveClass() throws Exception { 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File file = new File("test.ser"); 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file.deleteOnExit(); 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Test test = new Test(); 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream( 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file)); 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.writeObject(test); 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.close(); 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream in = new ObjectInputStream(new FileInputStream(file)); 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Test another = (Test) in.readObject(); 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.close(); 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(test, another); 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //Regression Test for JIRA-2249 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class ObjectOutputStreamWithWriteDesc extends 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream { 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectOutputStreamWithWriteDesc(OutputStream os) 646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(os); 648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void writeClassDescriptor(ObjectStreamClass desc) 652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class ObjectIutputStreamWithReadDesc extends 657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream { 658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private Class returnClass; 659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectIutputStreamWithReadDesc(InputStream is, Class returnClass) 661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(is); 663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.returnClass = returnClass; 664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectStreamClass readClassDescriptor() throws IOException, 668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassNotFoundException { 669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ObjectStreamClass.lookup(returnClass); 670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class TestClassForSerialization implements Serializable { 675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final long serialVersionUID = 1L; 676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ClassDescriptor() throws IOException, 679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassNotFoundException { 680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStreamWithWriteDesc oos = new ObjectOutputStreamWithWriteDesc( 683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes baos); 684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeObject(String.class); 685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class cls = TestClassForSerialization.class; 687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectIutputStreamWithReadDesc ois = new ObjectIutputStreamWithReadDesc( 689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais, cls); 690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object obj = ois.readObject(); 691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(cls, obj); 693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression Test for JIRA-2340 696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class ObjectOutputStreamWithWriteDesc1 extends 697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream { 698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectOutputStreamWithWriteDesc1(OutputStream os) 699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(os); 701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void writeClassDescriptor(ObjectStreamClass desc) 705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.writeClassDescriptor(desc); 707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class ObjectIutputStreamWithReadDesc1 extends 711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream { 712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectIutputStreamWithReadDesc1(InputStream is) 714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(is); 716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectStreamClass readClassDescriptor() throws IOException, 720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassNotFoundException { 721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.readClassDescriptor(); 722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for Harmony-1921 726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class ObjectInputStreamWithResolve extends ObjectInputStream { 727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectInputStreamWithResolve(InputStream in) throws IOException { 728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(in); 729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("unchecked") 733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Class resolveClass(ObjectStreamClass desc) 734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException, ClassNotFoundException { 735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (desc.getName().equals( 736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "org.apache.harmony.luni.tests.pkg1.TestClass")) { 737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return org.apache.harmony.luni.tests.pkg2.TestClass.class; 738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.resolveClass(desc); 740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_resolveClass() throws Exception { 744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes org.apache.harmony.luni.tests.pkg1.TestClass to1 = new org.apache.harmony.luni.tests.pkg1.TestClass(); 745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes to1.i = 555; 746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream oos = new ObjectOutputStream(baos); 748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeObject(to1); 749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.flush(); 750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] bytes = baos.toByteArray(); 751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream ois = new ObjectInputStreamWithResolve(bais); 753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes org.apache.harmony.luni.tests.pkg2.TestClass to2 = (org.apache.harmony.luni.tests.pkg2.TestClass) ois 754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .readObject(); 755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (to2.i != to1.i) { 757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Wrong object read. Expected val: " + to1.i + ", got: " 758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + to2.i); 759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class ObjectInputStreamWithResolveObject extends ObjectInputStream { 763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static Integer intObj = Integer.valueOf(1000); 765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectInputStreamWithResolveObject(InputStream in) throws IOException { 767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(in); 768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes enableResolveObject(true); 769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Object resolveObject(Object obj) throws IOException { 773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if(obj instanceof Integer){ 774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes obj = intObj; 775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.resolveObject(obj); 777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.ObjectInputStream#resolveObject(Object) 782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_resolveObjectLjava_lang_Object() throws Exception { 784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Write an Integer object into memory 785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer original = new Integer(10); 786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream oos = new ObjectOutputStream(baos); 788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeObject(original); 789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.flush(); 790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Read the object from memory 793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] bytes = baos.toByteArray(); 794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStreamWithResolveObject ois = 796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new ObjectInputStreamWithResolveObject(bais); 797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer actual = (Integer) ois.readObject(); 798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // object should be resolved from 10 to 1000 801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(ObjectInputStreamWithResolveObject.intObj, actual); 802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readClassDescriptor() throws IOException, 805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassNotFoundException { 806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStreamWithWriteDesc1 oos = new ObjectOutputStreamWithWriteDesc1( 809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes baos); 810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectStreamClass desc = ObjectStreamClass 811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .lookup(TestClassForSerialization.class); 812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeClassDescriptor(desc); 813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] bytes = baos.toByteArray(); 816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectIutputStreamWithReadDesc1 ois = new ObjectIutputStreamWithReadDesc1( 818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais); 819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object obj = ois.readClassDescriptor(); 820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(desc.getClass(), obj.getClass()); 822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //eof 824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream(bytes); 825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ExceptionalBufferedInputStream bis = new ExceptionalBufferedInputStream( 826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais); 827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectIutputStreamWithReadDesc1(bis); 828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bis.setEOF(true); 830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes obj = ois.readClassDescriptor(); 833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //e.printStackTrace(); 835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //throw exception 840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream(bytes); 841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bis = new ExceptionalBufferedInputStream(bais); 842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectIutputStreamWithReadDesc1(bis); 843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bis.setException(new IOException()); 845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes obj = ois.readClassDescriptor(); 848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //e.printStackTrace(); 850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //corrupt 855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bais = new ByteArrayInputStream(bytes); 856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bis = new ExceptionalBufferedInputStream(bais); 857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois = new ObjectIutputStreamWithReadDesc1(bis); 858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bis.setCorrupt(true); 860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes obj = ois.readClassDescriptor(); 863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //e.printStackTrace(); 865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class ExceptionalBufferedInputStream extends BufferedInputStream { 871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private boolean eof = false; 872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private IOException exception = null; 873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private boolean corrupt = false; 874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ExceptionalBufferedInputStream(InputStream in) { 876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(in); 877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public int read() throws IOException { 881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (exception != null) { 882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw exception; 883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (eof) { 886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return -1; 887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (corrupt) { 890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return 0; 891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.read(); 893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void setEOF(boolean eof) { 896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.eof = eof; 897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void setException(IOException exception) { 900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.exception = exception; 901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void setCorrupt(boolean corrupt) { 904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.corrupt = corrupt; 905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class ObjectIutputStreamWithReadDesc2 extends 909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream { 910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private Class returnClass; 911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectIutputStreamWithReadDesc2(InputStream is, Class returnClass) 913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(is); 915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.returnClass = returnClass; 916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ObjectStreamClass readClassDescriptor() throws IOException, 920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassNotFoundException { 921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectStreamClass osc = super.readClassDescriptor(); 922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (osc.getName().equals(returnClass.getName())) { 924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ObjectStreamClass.lookup(returnClass); 925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return osc; 927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Testing classDescriptor replacement with the value generated by 932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * ObjectStreamClass.lookup() method. 933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Regression test for HARMONY-4638 934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readClassDescriptor_1() throws IOException, ClassNotFoundException { 936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes A a = new A(); 937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes a.name = "It's a test"; 938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes PipedOutputStream pout = new PipedOutputStream(); 939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes PipedInputStream pin = new PipedInputStream(pout); 940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream out = new ObjectOutputStream(pout); 941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream in = new ObjectIutputStreamWithReadDesc2(pin, A.class); 942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test single object 944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.writeObject(a); 945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes A a1 = (A) in.readObject(); 946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Single case: incorrectly read the field of A", a.name, a1.name); 947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test cyclic reference 949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap m = new HashMap(); 950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes a = new A(); 951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes a.name = "It's a test 0"; 952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes a1 = new A(); 953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes a1.name = "It's a test 1"; 954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put("0", a); 955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put("1", a1); 956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.writeObject(m); 957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap m1 = (HashMap) in.readObject(); 958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Incorrectly read the field of A", a.name, ((A) m1.get("0")).name); 959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Incorrectly read the field of A1", a1.name, ((A) m1.get("1")).name); 960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_registerValidation() throws Exception { 963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression Test for Harmony-2402 964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new ObjectOutputStream(baos); 966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream ois = new ObjectInputStream( 967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new ByteArrayInputStream(baos.toByteArray())); 968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.registerValidation(null, 256); 971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("NotActiveException should be thrown"); 972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NotActiveException nae) { 973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression Test for Harmony-3916 977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes baos = new ByteArrayOutputStream(); 978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream oos = new ObjectOutputStream(baos); 979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeObject(new RegisterValidationClass()); 980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.close(); 981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream fis = new ObjectInputStream(bais); 983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // should not throw NotActiveException 984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fis.readObject(); 985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class RegisterValidationClass implements Serializable { 988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("unused") 989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private A a = new A(); 990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { 991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes stream.defaultReadObject(); 992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes stream.registerValidation(new MockObjectInputValidation(), 0); 993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class MockObjectInputValidation implements ObjectInputValidation { 997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void validateObject() throws InvalidObjectException { 998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //Regression Test for HARMONY-3726 1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readObject_array() throws Exception { 1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final String resourcePrefix = ObjectInputStreamTest.class.getPackage().getName().replace('.', '/'); 1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/temp/test_array_strings.ser")); 1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// TestArray ta = new TestArray(new String[] { "AAA", "BBB" }); 1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// oos.writeObject(ta); 1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// oos.close(); 1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// oos = new ObjectOutputStream(new FileOutputStream("/temp/test_array_integers.ser")); 1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// ta = new TestArray(new Integer[] { 10, 20 }); 1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// oos.writeObject(ta); 1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// oos.close(); 1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream oin = new ObjectInputStream(this.getClass().getClassLoader().getResourceAsStream( 1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "serialization/" + resourcePrefix + "/test_array_strings.ser")); 1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestArray testArray = (TestArray) oin.readObject(); 1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] strings = new String[] { "AAA", "BBB" }; 1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(java.util.Arrays.equals(strings, testArray.array)); 1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oin = new ObjectInputStream(this.getClass().getClassLoader().getResourceAsStream( 1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "serialization/" + resourcePrefix + "/test_array_integers.ser")); 1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes testArray = (TestArray) oin.readObject(); 1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer[] integers = new Integer[] { 10, 20 }; 1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(java.util.Arrays.equals(integers, testArray.array)); 1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class TestExtObject implements Externalizable { 1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void writeExternal(ObjectOutput out) throws IOException { 1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.writeInt(10); 1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { 1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.readInt(); 1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class TestObjectOutputStream extends ObjectOutputStream { 1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private ObjectStreamClass[] objs; 1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private int pos = 0; 1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public TestObjectOutputStream(OutputStream out, ObjectStreamClass[] objs) throws IOException { 1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(out); 1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.objs = objs; 1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void writeClassDescriptor(ObjectStreamClass osc) throws IOException { 1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes objs[pos++] = osc; } 1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class TestObjectInputStream extends ObjectInputStream { 1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private ObjectStreamClass[] objs; 1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private int pos = 0; 1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public TestObjectInputStream(InputStream in, ObjectStreamClass[] objs) throws IOException { 1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(in); 1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.objs = objs; 1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 1063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException { 1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return objs[pos++]; 1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-4996 1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readObject_replacedClassDescriptor() throws Exception { 1070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectStreamClass[] objs = new ObjectStreamClass[1000]; 1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes PipedOutputStream pout = new PipedOutputStream(); 1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes PipedInputStream pin = new PipedInputStream(pout); 1073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream oout = new TestObjectOutputStream(pout, objs); 1074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oout.writeObject(new TestExtObject()); 1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oout.writeObject("test"); 1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oout.close(); 1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream oin = new TestObjectInputStream(pin, objs); 1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oin.readObject(); 1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oin.readObject(); 1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_readObject_replacedClassField() throws Exception { 1083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayOutputStream out = new ByteArrayOutputStream(); 1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectOutputStream oos = new ObjectOutputStream(out); 1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FieldReplacementTestClass obj = new FieldReplacementTestClass(1234); 1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos.writeObject(obj); 1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.flush(); 1088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.close(); 1089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1090fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); 1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ObjectInputStream ois = new ObjectInputStream(in); 1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FieldReplacementTestClass result = 1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (FieldReplacementTestClass)ois.readObject(); 1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw ClassCastException"); 1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ClassCastException e) { 1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ois.close(); 1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Sets up the fixture, for example, open a network connection. This method 1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * is called before a test is executed. 1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 1108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes oos = new ObjectOutputStream(bao = new ByteArrayOutputStream()); 1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class FieldReplacementTestClass implements Serializable { 1114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private FieldClass c; 1115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public FieldReplacementTestClass(int i) { 1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes c = new FieldClass(i); 1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class FieldClass implements Serializable { 1121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private int i; 1122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public FieldClass(int i) { 1123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 1124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.i = i; 1125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Object writeReplace() throws ObjectStreamException { 1127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new ReplacementFieldClass(i); 1128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class ReplacementFieldClass implements Serializable { 1131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private int i; 1132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ReplacementFieldClass(int i) { 1133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 1134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.i = i; 1135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 1139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesclass TestArray implements Serializable 1141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes{ 1142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final long serialVersionUID = 1L; 1143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object[] array; 1145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public TestArray(Object[] array) { 1147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.array = array; 1148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 1151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesclass Test implements Serializable { 1153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final long serialVersionUID = 1L; 1154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class classes[] = new Class[] { byte.class, short.class, int.class, 1156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long.class, boolean.class, char.class, float.class, 1157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes double.class, void.class }; 1158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 1160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean equals(Object o) { 1161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!(o instanceof Test)) { 1162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 1163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return Arrays.equals(classes, ((Test) o).classes); 1165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 1167