SerializationTest.java revision 05895faacf43e6fd2bcd57baed31832f6888cb31
11ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson/* 21ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * Copyright (C) 2011 The Android Open Source Project 31ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * 41ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 51ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * you may not use this file except in compliance with the License. 61ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * You may obtain a copy of the License at 71ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * 81ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 91ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * 101ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * Unless required by applicable law or agreed to in writing, software 111ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 121ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * See the License for the specific language governing permissions and 141ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson * limitations under the License. 151ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson */ 161ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson 171ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilsonpackage libcore.java.io; 181ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson 1947f29998eae296ad812d697c8da12e84e394fee2Jesse Wilsonimport java.io.IOException; 2047f29998eae296ad812d697c8da12e84e394fee2Jesse Wilsonimport java.io.InvalidClassException; 2105895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughesimport java.io.ObjectStreamClass; 2205895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughesimport java.io.ObjectStreamField; 231ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilsonimport java.io.Serializable; 241ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilsonimport junit.framework.TestCase; 25b416ef5dc224630af2b9393a15ae120b27e4864aJesse Wilsonimport libcore.util.SerializationTester; 261ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson 271ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilsonpublic final class SerializationTest extends TestCase { 281ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson 291ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson // http://b/4471249 301ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson public void testSerializeFieldMadeTransient() throws Exception { 3105895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughes // Does ObjectStreamClass have the right idea? 3205895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughes ObjectStreamClass osc = ObjectStreamClass.lookup(FieldMadeTransient.class); 3305895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughes ObjectStreamField[] fields = osc.getFields(); 3405895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughes assertEquals(1, fields.length); 3505895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughes assertEquals("nonTransientInt", fields[0].getName()); 3605895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughes assertEquals(int.class, fields[0].getType()); 3705895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughes 388f99aa098c6a06b8be788abbca1c1d1060342709Jesse Wilson // this was created by serializing a FieldMadeTransient with a non-0 transientInt 391ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson String s = "aced0005737200346c6962636f72652e6a6176612e696f2e53657269616c697a6174696f6e54657" 401ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson + "374244669656c644d6164655472616e7369656e74000000000000000002000149000c7472616e736" 411ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson + "9656e74496e747870abababab"; 42b416ef5dc224630af2b9393a15ae120b27e4864aJesse Wilson FieldMadeTransient deserialized = (FieldMadeTransient) SerializationTester.deserializeHex(s); 431ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson assertEquals(0, deserialized.transientInt); 441ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson } 451ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson 461ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson static class FieldMadeTransient implements Serializable { 471ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson private static final long serialVersionUID = 0L; 481ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson private transient int transientInt; 4905895faacf43e6fd2bcd57baed31832f6888cb31Elliott Hughes private int nonTransientInt; 501ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson } 5147f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson 5247f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson public void testSerialVersionUidChange() throws Exception { 5347f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson // this was created by serializing a SerialVersionUidChanged with serialVersionUID = 0L 5447f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson String s = "aced0005737200396c6962636f72652e6a6176612e696f2e53657269616c697a6174696f6e54657" 5547f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson + "3742453657269616c56657273696f6e5569644368616e67656400000000000000000200014900016" 5647f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson + "1787000000003"; 5747f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson try { 5847f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson SerializationTester.deserializeHex(s); 5947f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson fail(); 6047f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson } catch (InvalidClassException expected) { 6147f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson } 6247f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson } 6347f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson 6447f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson static class SerialVersionUidChanged implements Serializable { 6547f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson private static final long serialVersionUID = 1L; // was 0L 6647f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson private int a; 6747f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson } 6847f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson 6947f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson public void testMissingSerialVersionUid() throws Exception { 7047f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson // this was created by serializing a FieldsChanged with one int field named 'a' 7147f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson String s = "aced00057372002f6c6962636f72652e6a6176612e696f2e53657269616c697a6174696f6e54657" 7247f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson + "374244669656c64734368616e6765643bcfb934e310fa1c02000149000161787000000003"; 7347f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson try { 7447f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson SerializationTester.deserializeHex(s); 7547f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson fail(); 7647f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson } catch (InvalidClassException expected) { 7747f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson } 7847f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson } 7947f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson 8047f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson static class FieldsChanged implements Serializable { 8147f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson private int b; // was 'a' 8247f29998eae296ad812d697c8da12e84e394fee2Jesse Wilson } 831ffc4b2e242d1ba40ceb30b21510f0f26bd5aaa2Jesse Wilson} 84