1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 27ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 37ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 47ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * this work for additional information regarding copyright ownership. 57ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 67ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * (the "License"); you may not use this file except in compliance with 77ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * the License. You may obtain a copy of the License at 87ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * 117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * Unless required by applicable law or agreed to in writing, software 127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * See the License for the specific language governing permissions and 157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.luni.tests.java.io; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.BufferedInputStream; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayOutputStream; 237ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.Externalizable; 247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.File; 257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.FileInputStream; 267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.FileNotFoundException; 277ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.FileOutputStream; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 307ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.InvalidObjectException; 317ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.NotActiveException; 327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.ObjectInput; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectInputStream; 347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.ObjectInputValidation; 357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.ObjectOutput; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectOutputStream; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectStreamClass; 387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.OutputStream; 397ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.PipedInputStream; 407ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.PipedOutputStream; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Serializable; 427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.io.SerializablePermission; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.StreamCorruptedException; 447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.lang.reflect.Proxy; 457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.security.Permission; 467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.util.Arrays; 477ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.util.HashMap; 487ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.util.Hashtable; 497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport java.util.Vector; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.testframework.serialization.SerializationTest; 547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes@SuppressWarnings("serial") 577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughespublic class ObjectInputStreamTest extends TestCase implements 587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Serializable { 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectInputStream ois; 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectOutputStream oos; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteArrayOutputStream bao; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public class SerializableTestHelper implements Serializable { 677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public String aField1; 697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public String aField2; 717ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes SerializableTestHelper() { 737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes aField1 = null; 747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes aField2 = null; 757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 777ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes SerializableTestHelper(String s, String t) { 787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes aField1 = s; 797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes aField2 = t; 807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private void readObject(ObjectInputStream ois) throws Exception { 837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // note aField2 is not read 847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream.GetField fields = ois.readFields(); 857ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes aField1 = (String) fields.get("aField1", "Zap"); 867ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 877ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 887ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private void writeObject(ObjectOutputStream oos) throws IOException { 897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // note aField2 is not written 907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStream.PutField fields = oos.putFields(); 917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes fields.put("aField1", aField1); 927ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeFields(); 937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 957ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public String getText1() { 967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return aField1; 977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 997ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void setText1(String s) { 1007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes aField1 = s; 1017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public String getText2() { 1047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return aField2; 1057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void setText2(String s) { 1087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes aField2 = s; 1097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class A1 implements Serializable { 1137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private static final long serialVersionUID = 5942584913446079661L; 1157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes B1 b1 = new B1(); 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1187ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes B1 b2 = b1; 1197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Vector v = new Vector(); 1217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1227ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1237ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class B1 implements Serializable { 1247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes int i = 5; 1267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1277ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Hashtable h = new Hashtable(); 1287ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1297ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1307ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 131229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readObject() 1327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 1337ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readObjectMissingClasses() throws Exception { 1347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes SerializationTest.verifySelf(new A1(), new SerializableAssert() { 1357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void assertDeserialized(Serializable initial, 1367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Serializable deserialized) { 1377ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals(5, ((A1) deserialized).b1.i); 1387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1397ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes }); 1407ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1417ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 143229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#ObjectInputStream(java.io.InputStream) 1447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 1457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_ConstructorLjava_io_InputStream() throws IOException { 1467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeDouble(Double.MAX_VALUE); 1477ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 1497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 1507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 1517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1537ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(new byte[90])); 1547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes fail("StreamCorruptedException expected"); 1557ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } catch (StreamCorruptedException e) { 1567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Expected 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1597ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1607ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 161229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * {@link java.io.ObjectInputStream#resolveProxyClass(String[])} 1627ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 1637ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_resolveProxyClass() throws IOException, 1647ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ClassNotFoundException { 1657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeBytes("HelloWorld"); 1667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 1677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 1687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes MockObjectInputStream mockIn = new MockObjectInputStream( 1697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes new ByteArrayInputStream(bao.toByteArray())); 1707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Class[] clazzs = { java.io.ObjectInputStream.class, 1717ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes java.io.Reader.class }; 1727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes for (int i = 0; i < clazzs.length; i++) { 1737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Class clazz = clazzs[i]; 1747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Class[] interfaceNames = clazz.getInterfaces(); 1757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes String[] interfaces = new String[interfaceNames.length]; 1767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes int index = 0; 1777ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes for (Class c : interfaceNames) { 1787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes interfaces[index] = c.getName(); 1797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes index++; 1807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Class<?> s = mockIn.resolveProxyClass(interfaces); 1827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes if (Proxy.isProxyClass(s)) { 1847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Class[] implementedInterfaces = s.getInterfaces(); 1857ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes for (index = 0; index < implementedInterfaces.length; index++) { 1867ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals(interfaceNames[index], 1877ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes implementedInterfaces[index]); 1887ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } else { 1907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes fail("Should return a proxy class that implements the interfaces named in a proxy class descriptor"); 1917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes mockIn.close(); 1947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 1957ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes class MockObjectInputStream extends ObjectInputStream { 1977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public MockObjectInputStream(InputStream input) 1997ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes throws StreamCorruptedException, IOException { 2007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(input); 2017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 2027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 2037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 2047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public Class<?> resolveProxyClass(String[] interfaceNames) throws IOException, ClassNotFoundException { 2057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return super.resolveProxyClass(interfaceNames); 2067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 2077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 2087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 2097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 2107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 211229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#available() 2127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 2137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_available() throws IOException { 2147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeBytes("HelloWorld"); 2157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 2167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 2177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect bytes", 10, ois.available()); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ois.close(); 2197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 2207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 2217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 222229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#close() 2237ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 2247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_close() throws IOException { 2257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeBytes("HelloWorld"); 2267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 2277ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 2287ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 2297ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 232229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#defaultReadObject() 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_defaultReadObject() throws Exception { 2357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // SM. This method may as well be private, as if called directly it 2367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // throws an exception. 2377ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes String s = "HelloWorld"; 2387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeObject(s); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project oos.close(); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.defaultReadObject(); 2437ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes fail("NotActiveException expected"); 2447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } catch (NotActiveException e) { 2457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Desired behavior 2467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } finally { 2477ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 2507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 2517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 252229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#read() 2537ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 2547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_read() throws IOException { 2557ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.write('T'); 2567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 2577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 2587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect byte value", 'T', ois.read()); 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ois.close(); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 263229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#read(byte[], int, int) 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_read$BII() throws IOException { 2667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] buf = new byte[10]; 2677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeBytes("HelloWorld"); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project oos.close(); 2697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 2707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.read(buf, 0, 10); 2717ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 2727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect bytes", "HelloWorld", new String(buf, 0, 2737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10, "UTF-8")); 2747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 277229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readBoolean() 2787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 2797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readBoolean() throws IOException { 2807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeBoolean(true); 2817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 2827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 2837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertTrue("Read incorrect boolean value", ois.readBoolean()); 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ois.close(); 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 288229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readByte() 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readByte() throws IOException { 2917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeByte(127); 2927ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 2937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 2947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect byte value", 127, ois.readByte()); 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ois.close(); 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 299229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readChar() 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 3017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readChar() throws IOException { 3027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeChar('T'); 3037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 3047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 3057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect char value", 'T', ois.readChar()); 3067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 3087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 310229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readDouble() 3117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 3127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readDouble() throws IOException { 3137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeDouble(Double.MAX_VALUE); 3147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 3157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 3167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertTrue("Read incorrect double value", 3177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.readDouble() == Double.MAX_VALUE); 3187ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 3197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 3207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 322229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readFields() 3237ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 3247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readFields() throws Exception { 3257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes SerializableTestHelper sth; 3277ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3287ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /* 3297ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * "SerializableTestHelper" is an object created for these tests with 3307ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * two fields (Strings) and simple implementations of readObject and 3317ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * writeObject which simply read and write the first field but not the 3327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * second 3337ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 3347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeObject(new SerializableTestHelper("Gabba", "Jabba")); 3367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.flush(); 3377ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 3387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes sth = (SerializableTestHelper) (ois.readObject()); 3397ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("readFields / writeFields failed--first field not set", 3407ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes "Gabba", sth.getText1()); 3417ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertNull( 3427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes "readFields / writeFields failed--second field should not have been set", 3437ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes sth.getText2()); 3447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 3457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 347229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readFloat() 3487ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 3497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readFloat() throws IOException { 3507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeFloat(Float.MAX_VALUE); 3517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 3527ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 3537ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertTrue("Read incorrect float value", 3547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.readFloat() == Float.MAX_VALUE); 3557ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 3567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 3577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 359229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readFully(byte[]) 3607ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 3617ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readFully$B() throws IOException { 3627ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] buf = new byte[10]; 3637ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeBytes("HelloWorld"); 3647ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 3657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 3667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.readFully(buf); 3677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 3687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect bytes", "HelloWorld", new String(buf, 0, 3697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10, "UTF-8")); 3707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 3717ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 373229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readFully(byte[], int, int) 3747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 3757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readFully$BII() throws IOException { 3767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] buf = new byte[10]; 3777ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeBytes("HelloWorld"); 3787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 3797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 3807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.readFully(buf, 0, 10); 3817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 3827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect bytes", "HelloWorld", new String(buf, 0, 3837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10, "UTF-8")); 3847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 3857ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3867ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 387229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readInt() 3887ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 3897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readInt() throws IOException { 3907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeInt(Integer.MAX_VALUE); 3917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 3927ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 3937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertTrue("Read incorrect int value", 3947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.readInt() == Integer.MAX_VALUE); 3957ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 3967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 3977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 3987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 399229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readLine() 4007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 4017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @SuppressWarnings("deprecation") 4027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readLine() throws IOException { 4037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeBytes("HelloWorld\nSecondLine"); 4047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 4057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 4067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.readLine(); 4077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect string value", "SecondLine", ois 4087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes .readLine()); 4097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 4107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 4117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 413229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readLong() 4147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 4157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readLong() throws IOException { 4167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeLong(Long.MAX_VALUE); 4177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 4187ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 4197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertTrue("Read incorrect long value", 4207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.readLong() == Long.MAX_VALUE); 4217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 4227ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 4237ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 425229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readObject() 4267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 4277ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readObject() throws Exception { 4287ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes String s = "HelloWorld"; 4297ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeObject(s); 4307ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 4317ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 4327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect Object value", s, ois.readObject()); 4337ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 4347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression for HARMONY-91 4367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // dynamically create serialization byte array for the next hierarchy: 4377ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // - class A implements Serializable 4387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // - class C extends A 4397ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4407ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] cName = C.class.getName().getBytes("UTF-8"); 4417ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] aName = A.class.getName().getBytes("UTF-8"); 4427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4437ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayOutputStream out = new ByteArrayOutputStream(); 4447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] begStream = new byte[] { (byte) 0xac, (byte) 0xed, // STREAM_MAGIC 4467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, (byte) 0x05, // STREAM_VERSION 4477ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x73, // TC_OBJECT 4487ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x72, // TC_CLASSDESC 4497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, // only first byte for C class name length 4507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes }; 4517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4527ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.write(begStream, 0, begStream.length); 4537ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.write(cName.length); // second byte for C class name length 4547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.write(cName, 0, cName.length); // C class name 4557ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] midStream = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, 4577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 4587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x21, // serialVersionUID = 33L 4597ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x02, // flags 4607ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, (byte) 0x00, // fields : none 4617ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x78, // TC_ENDBLOCKDATA 4627ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x72, // Super class for C: TC_CLASSDESC for A class 4637ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, // only first byte for A class name length 4647ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes }; 4657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.write(midStream, 0, midStream.length); 4677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.write(aName.length); // second byte for A class name length 4687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.write(aName, 0, aName.length); // A class name 4697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] endStream = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, 4717ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 4727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x0b, // serialVersionUID = 11L 4737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x02, // flags 4747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, (byte) 0x01, // fields 4757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x4c, // field description: type L (object) 4777ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, (byte) 0x04, // length 4787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // field = 'name' 4797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65, 4807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x74, // className1: TC_STRING 4827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, (byte) 0x12, // length 4837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // 4847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76, 4857ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x61, (byte) 0x2f, (byte) 0x6c, (byte) 0x61, 4867ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x6e, (byte) 0x67, (byte) 0x2f, (byte) 0x53, 4877ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x74, (byte) 0x72, (byte) 0x69, (byte) 0x6e, 4887ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x67, (byte) 0x3b, 4897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x78, // TC_ENDBLOCKDATA 4917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x70, // NULL super class for A class 4927ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // classdata 4947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x74, // TC_STRING 4957ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x00, (byte) 0x04, // length 4967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65, // value 4977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes }; 4987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 4997ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.write(endStream, 0, endStream.length); 5007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.flush(); 5017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // read created serial. form 5037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream( 5047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.toByteArray())); 5057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Object o = ois.readObject(); 5067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals(C.class, o.getClass()); 5077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression for HARMONY-846 5097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertNull(new ObjectInputStream() {}.readObject()); 5107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 5117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 513229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readObjectOverride() 5147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 5157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readObjectOverride() throws Exception { 5167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression for HARMONY-846 5177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertNull(new ObjectInputStream() { 5187ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 5207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public Object readObjectOverride() throws IOException, 5217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ClassNotFoundException { 5227ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return super.readObjectOverride(); 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 5247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes }.readObjectOverride()); 5267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 5277ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5287ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class A implements Serializable { 5297ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5307ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private static final long serialVersionUID = 11L; 5317ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public String name = "name"; 5337ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 5347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class B extends A {} 5367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5377ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class C extends B { 5387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5397ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private static final long serialVersionUID = 33L; 5407ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 5417ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 543229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readObject() 5447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 5457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readObjectCorrupt() throws IOException, ClassNotFoundException { 5467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] bytes = { 00, 00, 00, 0x64, 0x43, 0x48, (byte) 0xFD, 0x71, 00, 5477ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 00, 0x0B, (byte) 0xB8, 0x4D, 0x65 }; 5487ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayInputStream bin = new ByteArrayInputStream(bytes); 5497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes try { 5507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream in = new ObjectInputStream(bin); 5517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes in.readObject(); 5527ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes fail("Unexpected read of corrupted stream"); 5537ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } catch (StreamCorruptedException e) { 5547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Expected 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 5567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 5577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 559229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readShort() 5607ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 5617ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readShort() throws IOException { 5627ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeShort(Short.MAX_VALUE); 5637ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 5647ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 5657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertTrue("Read incorrect short value", 5667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.readShort() == Short.MAX_VALUE); 5677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 5687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 5697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 571229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readUnsignedByte() 5727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 5737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readUnsignedByte() throws IOException { 5747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeByte(-1); 5757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 5767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 5777ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect unsignedByte value", 255, ois 5787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes .readUnsignedByte()); 5797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 5807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 5817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 583229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readUnsignedShort() 5847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 5857ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readUnsignedShort() throws IOException { 5867ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeShort(-1); 5877ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 5887ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 5897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect unsignedShort value", 65535, ois 5907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes .readUnsignedShort()); 5917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 5927ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 5937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 5947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 595229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#readUTF() 5967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 5977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readUTF() throws IOException { 5987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeUTF("HelloWorld"); 5997ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 6007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 6017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Read incorrect utf value", "HelloWorld", ois.readUTF()); 6027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 6037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 6047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 6057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 606229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#skipBytes(int) 6077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 6087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_skipBytesI() throws IOException { 6097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] buf = new byte[10]; 6107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeBytes("HelloWorld"); 6117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 6127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 6137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.skipBytes(5); 6147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.read(buf, 0, 5); 6157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 6167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Skipped incorrect bytes", "World", new String(buf, 0, 5, "UTF-8")); 6177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 6187ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression for HARMONY-844 6197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes try { 6207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes new ObjectInputStream() {}.skipBytes(0); 6217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes fail("NullPointerException expected"); 6227ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } catch (NullPointerException e) {} 6237ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 6247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 6257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression Test for JIRA 2192 6267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readObject_withPrimitiveClass() throws Exception { 6277ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes File file = new File("test.ser"); 6287ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes file.deleteOnExit(); 6297ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Test test = new Test(); 6307ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream( 6317ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes file)); 6327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.writeObject(test); 6337ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.close(); 6347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 6357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream in = new ObjectInputStream(new FileInputStream(file)); 6367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Test another = (Test) in.readObject(); 6377ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes in.close(); 6387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals(test, another); 6397ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 6407ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 6417ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes //Regression Test for JIRA-2249 6427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class ObjectOutputStreamWithWriteDesc extends 6437ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStream { 6447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectOutputStreamWithWriteDesc(OutputStream os) 6457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes throws IOException { 6467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(os); 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 6487ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 6507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void writeClassDescriptor(ObjectStreamClass desc) 6517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes throws IOException { 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6557ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class ObjectIutputStreamWithReadDesc extends 6567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream { 6577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private Class returnClass; 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6597ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectIutputStreamWithReadDesc(InputStream is, Class returnClass) 6607ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes throws IOException { 6617ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(is); 6627ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes this.returnClass = returnClass; 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 6647ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 6657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 6667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectStreamClass readClassDescriptor() throws IOException, 6677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ClassNotFoundException { 6687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return ObjectStreamClass.lookup(returnClass); 6697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes static class TestClassForSerialization implements Serializable { 6747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private static final long serialVersionUID = 1L; 6757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 6767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 6777ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_ClassDescriptor() throws IOException, 6787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ClassNotFoundException { 6797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 6807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 6817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStreamWithWriteDesc oos = new ObjectOutputStreamWithWriteDesc( 6827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes baos); 6837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeObject(String.class); 6847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 6857ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Class cls = TestClassForSerialization.class; 6867ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 6877ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectIutputStreamWithReadDesc ois = new ObjectIutputStreamWithReadDesc( 6887ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bais, cls); 6897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Object obj = ois.readObject(); 6907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 6917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals(cls, obj); 6927ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 6937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 6947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression Test for JIRA-2340 6957ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class ObjectOutputStreamWithWriteDesc1 extends 6967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStream { 6977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectOutputStreamWithWriteDesc1(OutputStream os) 6987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes throws IOException { 6997ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(os); 7007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 7017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 7037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void writeClassDescriptor(ObjectStreamClass desc) 7047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes throws IOException { 7057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super.writeClassDescriptor(desc); 7067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 7077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 7087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class ObjectIutputStreamWithReadDesc1 extends 7107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream { 7117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectIutputStreamWithReadDesc1(InputStream is) 7137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes throws IOException { 7147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(is); 7157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 7167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 7187ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectStreamClass readClassDescriptor() throws IOException, 7197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ClassNotFoundException { 7207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return super.readClassDescriptor(); 7217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 7227ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 7237ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression test for Harmony-1921 7257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class ObjectInputStreamWithResolve extends ObjectInputStream { 7267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectInputStreamWithResolve(InputStream in) throws IOException { 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(in); 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7307ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 7317ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @SuppressWarnings("unchecked") 7327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes protected Class resolveClass(ObjectStreamClass desc) 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException, ClassNotFoundException { 7347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes if (desc.getName().equals( 7357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes "org.apache.harmony.luni.tests.pkg1.TestClass")) { 7367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return org.apache.harmony.luni.tests.pkg2.TestClass.class; 737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.resolveClass(desc); 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_resolveClass() throws Exception { 7437ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes org.apache.harmony.luni.tests.pkg1.TestClass to1 = new org.apache.harmony.luni.tests.pkg1.TestClass(); 7447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes to1.i = 555; 7457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 7467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStream oos = new ObjectOutputStream(baos); 7477ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeObject(to1); 7487ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.flush(); 7497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] bytes = baos.toByteArray(); 7507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 7517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream ois = new ObjectInputStreamWithResolve(bais); 7527ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes org.apache.harmony.luni.tests.pkg2.TestClass to2 = (org.apache.harmony.luni.tests.pkg2.TestClass) ois 7537ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes .readObject(); 7547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7557ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes if (to2.i != to1.i) { 7567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes fail("Wrong object read. Expected val: " + to1.i + ", got: " 7577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes + to2.i); 7587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7617ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes static class ObjectInputStreamWithResolveObject extends ObjectInputStream { 7627ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7637ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static Integer intObj = Integer.valueOf(1000); 7647ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectInputStreamWithResolveObject(InputStream in) throws IOException { 7667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(in); 7677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes enableResolveObject(true); 7687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 7697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 7717ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes protected Object resolveObject(Object obj) throws IOException { 7727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes if(obj instanceof Integer){ 7737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes obj = intObj; 7747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 7757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return super.resolveObject(obj); 7767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 7787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 780229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectInputStream#resolveObject(Object) 7817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 7827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_resolveObjectLjava_lang_Object() throws Exception { 7837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Write an Integer object into memory 7847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Integer original = new Integer(10); 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteArrayOutputStream baos = new ByteArrayOutputStream(); 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectOutputStream oos = new ObjectOutputStream(baos); 7877ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeObject(original); 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project oos.flush(); 7897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 7907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Read the object from memory 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] bytes = baos.toByteArray(); 7937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 7947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStreamWithResolveObject ois = 7957ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes new ObjectInputStreamWithResolveObject(bais); 7967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Integer actual = (Integer) ois.readObject(); 7977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 7987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 7997ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // object should be resolved from 10 to 1000 8007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals(ObjectInputStreamWithResolveObject.intObj, actual); 8017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readClassDescriptor() throws IOException, 8047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ClassNotFoundException { 8057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 8077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStreamWithWriteDesc1 oos = new ObjectOutputStreamWithWriteDesc1( 8087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes baos); 8097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectStreamClass desc = ObjectStreamClass 8107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes .lookup(TestClassForSerialization.class); 8117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeClassDescriptor(desc); 8127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 8137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes byte[] bytes = baos.toByteArray(); 8157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 8167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectIutputStreamWithReadDesc1 ois = new ObjectIutputStreamWithReadDesc1( 8177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bais); 8187ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Object obj = ois.readClassDescriptor(); 8197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 8207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals(desc.getClass(), obj.getClass()); 8217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8227ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes //eof 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bais = new ByteArrayInputStream(bytes); 8247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ExceptionalBufferedInputStream bis = new ExceptionalBufferedInputStream( 8257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bais); 8267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectIutputStreamWithReadDesc1(bis); 8277ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8287ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bis.setEOF(true); 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 8317ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes obj = ois.readClassDescriptor(); 8327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } catch (IOException e) { 8337ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes //e.printStackTrace(); 8347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } finally { 8357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 8367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8377ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes //throw exception 8397ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bais = new ByteArrayInputStream(bytes); 8407ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bis = new ExceptionalBufferedInputStream(bais); 8417ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectIutputStreamWithReadDesc1(bis); 8427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8437ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bis.setException(new IOException()); 8447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes try { 8467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes obj = ois.readClassDescriptor(); 8477ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } catch (IOException e) { 8487ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes //e.printStackTrace(); 8497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } finally { 8507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 8517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8527ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8537ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes //corrupt 8547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bais = new ByteArrayInputStream(bytes); 8557ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bis = new ExceptionalBufferedInputStream(bais); 8567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois = new ObjectIutputStreamWithReadDesc1(bis); 8577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes bis.setCorrupt(true); 8597ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8607ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes try { 8617ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes obj = ois.readClassDescriptor(); 8627ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } catch (IOException e) { 8637ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes //e.printStackTrace(); 8647ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } finally { 8657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.close(); 8667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes static class ExceptionalBufferedInputStream extends BufferedInputStream { 8707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private boolean eof = false; 8717ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private IOException exception = null; 8727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private boolean corrupt = false; 8737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ExceptionalBufferedInputStream(InputStream in) { 8757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(in); 8767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8777ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 8797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public int read() throws IOException { 8807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes if (exception != null) { 8817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes throw exception; 8827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes if (eof) { 8857ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return -1; 8867ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8877ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8887ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes if (corrupt) { 8897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return 0; 8907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return super.read(); 8927ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void setEOF(boolean eof) { 8957ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes this.eof = eof; 8967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 8977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 8987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void setException(IOException exception) { 8997ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes this.exception = exception; 9007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void setCorrupt(boolean corrupt) { 9037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes this.corrupt = corrupt; 9047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class ObjectIutputStreamWithReadDesc2 extends 9087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream { 9097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private Class returnClass; 9107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectIutputStreamWithReadDesc2(InputStream is, Class returnClass) 9127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes throws IOException { 9137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(is); 9147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes this.returnClass = returnClass; 9157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 9187ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public ObjectStreamClass readClassDescriptor() throws IOException, 9197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ClassNotFoundException { 9207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectStreamClass osc = super.readClassDescriptor(); 9217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9227ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes if (osc.getName().equals(returnClass.getName())) { 9237ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return ObjectStreamClass.lookup(returnClass); 9247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return osc; 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 9287ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9297ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /* 9307ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * Testing classDescriptor replacement with the value generated by 9317ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * ObjectStreamClass.lookup() method. 9327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * Regression test for HARMONY-4638 9337ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 9347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readClassDescriptor_1() throws IOException, ClassNotFoundException { 9357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes A a = new A(); 9367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes a.name = "It's a test"; 9377ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes PipedOutputStream pout = new PipedOutputStream(); 9387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes PipedInputStream pin = new PipedInputStream(pout); 9397ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStream out = new ObjectOutputStream(pout); 9407ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream in = new ObjectIutputStreamWithReadDesc2(pin, A.class); 9417ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // test single object 9437ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.writeObject(a); 9447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes A a1 = (A) in.readObject(); 9457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Single case: incorrectly read the field of A", a.name, a1.name); 9467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9477ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // test cyclic reference 9487ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes HashMap m = new HashMap(); 9497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes a = new A(); 9507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes a.name = "It's a test 0"; 9517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes a1 = new A(); 9527ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes a1.name = "It's a test 1"; 9537ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes m.put("0", a); 9547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes m.put("1", a1); 9557ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.writeObject(m); 9567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes HashMap m1 = (HashMap) in.readObject(); 9577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Incorrectly read the field of A", a.name, ((A) m1.get("0")).name); 9587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertEquals("Incorrectly read the field of A1", a1.name, ((A) m1.get("1")).name); 9597ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9607ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9617ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_registerValidation() throws Exception { 9627ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression Test for Harmony-2402 9637ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 9647ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes new ObjectOutputStream(baos); 9657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream ois = new ObjectInputStream( 9667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes new ByteArrayInputStream(baos.toByteArray())); 9677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes try { 9697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ois.registerValidation(null, 256); 9707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes fail("NotActiveException should be thrown"); 9717ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } catch (NotActiveException nae) { 9727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // expected 9737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression Test for Harmony-3916 9767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes baos = new ByteArrayOutputStream(); 9777ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStream oos = new ObjectOutputStream(baos); 9787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.writeObject(new RegisterValidationClass()); 9797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos.close(); 9807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 9817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream fis = new ObjectInputStream(bais); 9827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // should not throw NotActiveException 9837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes fis.readObject(); 9847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9857ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9867ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private static class RegisterValidationClass implements Serializable { 9877ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @SuppressWarnings("unused") 9887ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private A a = new A(); 9897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { 9907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes stream.defaultReadObject(); 9917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes stream.registerValidation(new MockObjectInputValidation(), 0); 9927ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9957ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private static class MockObjectInputValidation implements ObjectInputValidation { 9967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void validateObject() throws InvalidObjectException { 9977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 9987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 9997ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes //Regression Test for HARMONY-3726 10027ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readObject_array() throws Exception { 10037ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes final String resourcePrefix = ObjectInputStreamTest.class.getPackage().getName().replace('.', '/'); 10057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/temp/test_array_strings.ser")); 10077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes// TestArray ta = new TestArray(new String[] { "AAA", "BBB" }); 10087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes// oos.writeObject(ta); 10097ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes// oos.close(); 10107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes// oos = new ObjectOutputStream(new FileOutputStream("/temp/test_array_integers.ser")); 10117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes// ta = new TestArray(new Integer[] { 10, 20 }); 10127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes// oos.writeObject(ta); 10137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes// oos.close(); 10147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream oin = new ObjectInputStream(this.getClass().getClassLoader().getResourceAsStream( 10167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes "serialization/" + resourcePrefix + "/test_array_strings.ser")); 10177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes TestArray testArray = (TestArray) oin.readObject(); 10187ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes String[] strings = new String[] { "AAA", "BBB" }; 10197ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertTrue(java.util.Arrays.equals(strings, testArray.array)); 10207ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10217ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oin = new ObjectInputStream(this.getClass().getClassLoader().getResourceAsStream( 10227ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes "serialization/" + resourcePrefix + "/test_array_integers.ser")); 10237ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes testArray = (TestArray) oin.readObject(); 10247ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Integer[] integers = new Integer[] { 10, 20 }; 10257ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes assertTrue(java.util.Arrays.equals(integers, testArray.array)); 10267ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10277ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10287ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public static class TestExtObject implements Externalizable { 10297ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void writeExternal(ObjectOutput out) throws IOException { 10307ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes out.writeInt(10); 10317ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10327ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10337ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { 10347ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes in.readInt(); 10357ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10367ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10377ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10387ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes static class TestObjectOutputStream extends ObjectOutputStream { 10397ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private ObjectStreamClass[] objs; 10407ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private int pos = 0; 10417ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10427ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public TestObjectOutputStream(OutputStream out, ObjectStreamClass[] objs) throws IOException { 10437ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(out); 10447ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes this.objs = objs; 10457ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10467ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10477ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 10487ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes protected void writeClassDescriptor(ObjectStreamClass osc) throws IOException { 10497ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes objs[pos++] = osc; } 10507ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10517ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10527ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes static class TestObjectInputStream extends ObjectInputStream { 10537ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private ObjectStreamClass[] objs; 10547ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private int pos = 0; 10557ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10567ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public TestObjectInputStream(InputStream in, ObjectStreamClass[] objs) throws IOException { 10577ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super(in); 10587ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes this.objs = objs; 10597ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10607ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10617ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 10627ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException { 10637ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return objs[pos++]; 10647ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10657ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10667ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10677ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes // Regression test for HARMONY-4996 10687ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public void test_readObject_replacedClassDescriptor() throws Exception { 10697ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectStreamClass[] objs = new ObjectStreamClass[1000]; 10707ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes PipedOutputStream pout = new PipedOutputStream(); 10717ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes PipedInputStream pin = new PipedInputStream(pout); 10727ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectOutputStream oout = new TestObjectOutputStream(pout, objs); 10737ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oout.writeObject(new TestExtObject()); 10747ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oout.writeObject("test"); 10757ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oout.close(); 10767ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes ObjectInputStream oin = new TestObjectInputStream(pin, objs); 10777ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oin.readObject(); 10787ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oin.readObject(); 10797ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10807ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10817ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes /** 10827ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * Sets up the fixture, for example, open a network connection. This method 10837ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes * is called before a test is executed. 10847ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes */ 10857ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 10867ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes protected void setUp() throws Exception { 10877ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes super.setUp(); 10887ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes oos = new ObjectOutputStream(bao = new ByteArrayOutputStream()); 10897ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 10907ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes} 10917ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10927ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesclass TestArray implements Serializable 10937ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes{ 10947ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private static final long serialVersionUID = 1L; 10957ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10967ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public Object[] array; 10977ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 10987ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public TestArray(Object[] array) { 10997ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes this.array = array; 11007ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 11017ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 1102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 1103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 11047ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughesclass Test implements Serializable { 11057ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes private static final long serialVersionUID = 1L; 11067ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes 11077ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes Class classes[] = new Class[] { byte.class, short.class, int.class, 11087ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes long.class, boolean.class, char.class, float.class, double.class }; 1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 11107ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes @Override 11117ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes public boolean equals(Object o) { 11127ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes if (!(o instanceof Test)) { 11137ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return false; 11147ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 11157ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes return Arrays.equals(classes, ((Test) o).classes); 11167ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes } 11177ee3a061452c5a7e5c8e661219a1f08a14171858Elliott Hughes} 1118