1935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson/* 2935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more 3935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * contributor license agreements. See the NOTICE file distributed with 4935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * this work for additional information regarding copyright ownership. 5935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0 6935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * (the "License"); you may not use this file except in compliance with 7935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * the License. You may obtain a copy of the License at 8935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * 9935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 10935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * 11935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * Unless required by applicable law or agreed to in writing, software 12935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 13935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * See the License for the specific language governing permissions and 15935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * limitations under the License. 16935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson */ 17935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 18935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpackage libcore.java.io; 19935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 20935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.ByteArrayInputStream; 21935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.ByteArrayOutputStream; 22935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.FileInputStream; 23935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.FileOutputStream; 24935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.IOException; 25935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.NotActiveException; 26935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.ObjectInputStream; 27935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.ObjectOutputStream; 28935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.OutputStream; 29935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.Serializable; 30935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport junit.framework.TestCase; 31935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport tests.support.Support_ASimpleOutputStream; 32935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport tests.support.Support_OutputStream; 33935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 34935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpublic class OldObjectOutputStreamTest extends TestCase implements Serializable { 35935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 36935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson static final long serialVersionUID = 1L; 37935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 38935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson java.io.File f; 39935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 40935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public class SerializableTestHelper implements Serializable { 41935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public String aField1; 42935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 43935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public String aField2; 44935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 45935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson SerializableTestHelper(String s, String t) { 46935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson aField1 = s; 47935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson aField2 = t; 48935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 49935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 50935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson private void readObject(ObjectInputStream ois) throws IOException { 51935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // note aField2 is not read 52935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 53935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ObjectInputStream.GetField fields = ois.readFields(); 54935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson aField1 = (String) fields.get("aField1", "Zap"); 55935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (Exception e) { 56935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 57935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 58935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 59935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson private void writeObject(ObjectOutputStream oos) throws IOException { 60935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // note aField2 is not written 61935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ObjectOutputStream.PutField fields = oos.putFields(); 62935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fields.put("aField1", aField1); 63935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.writeFields(); 64935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 65935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 66935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public String getText1() { 67935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson return aField1; 68935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 69935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 70935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public String getText2() { 71935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson return aField2; 72935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 73935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 74935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 75935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson private static class BasicObjectOutputStream extends ObjectOutputStream { 76935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public boolean writeStreamHeaderCalled; 77935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 78935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public BasicObjectOutputStream() throws IOException, SecurityException { 79935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson super(); 80935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson writeStreamHeaderCalled = false; 81935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 82935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 83935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public BasicObjectOutputStream(OutputStream output) throws IOException { 84935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson super(output); 85935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 86935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 87935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void drain() throws IOException { 88935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson super.drain(); 89935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 90935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 91935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public boolean enableReplaceObject(boolean enable) 92935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson throws SecurityException { 93935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson return super.enableReplaceObject(enable); 94935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 95935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 96935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void writeObjectOverride(Object object) throws IOException { 97935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson super.writeObjectOverride(object); 98935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 99935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 100935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void writeStreamHeader() throws IOException { 101935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson super.writeStreamHeader(); 102935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson writeStreamHeaderCalled = true; 103935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 104935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson} 105935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 106935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson private static class NoFlushTestOutputStream extends ByteArrayOutputStream { 107935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public boolean flushCalled; 108935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 109935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public NoFlushTestOutputStream() { 110935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson super(); 111935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson flushCalled = false; 112935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 113935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 114935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void flush() throws IOException { 115935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson super.flush(); 116935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson flushCalled = true; 117935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 118935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 119935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 120935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected static final String MODE_XLOAD = "xload"; 121935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 122935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected static final String MODE_XDUMP = "xdump"; 123935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 124935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson static final String FOO = "foo"; 125935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 126935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson static final String MSG_WITE_FAILED = "Failed to write: "; 127935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 128935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson private static final boolean DEBUG = false; 129935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 130935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected static boolean xload = false; 131935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 132935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected static boolean xdump = false; 133935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 134935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected static String xFileName = null; 135935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 136935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected ObjectInputStream ois; 137935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 138935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected ObjectOutputStream oos; 139935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 140935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected ObjectOutputStream oos_ioe; 141935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 142935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected Support_OutputStream sos; 143935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 144935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected ByteArrayOutputStream bao; 145935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 146935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson static final int INIT_INT_VALUE = 7; 147935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 148935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson static final String INIT_STR_VALUE = "a string that is blortz"; 149935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 150935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson /** 151229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.io.ObjectOutputStream#ObjectOutputStream(java.io.OutputStream) 152935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson */ 153935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_ConstructorLjava_io_OutputStream() throws IOException { 154935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.close(); 155935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos = new ObjectOutputStream(new ByteArrayOutputStream()); 156935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.close(); 157935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 158935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 159935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos = new ObjectOutputStream(null); 160935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 1: NullPointerException expected."); 161935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (NullPointerException e) { 162935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 163935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 164935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 165935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson Support_ASimpleOutputStream sos = new Support_ASimpleOutputStream(true); 166935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 167935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos = new ObjectOutputStream(sos); 168935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 2: IOException expected."); 169935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 170935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 171935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 172935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 173935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 174935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_close() throws IOException { 175935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int outputSize = bao.size(); 176935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Writing of a primitive type should be buffered. 177935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.writeInt(42); 178935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("Test 1: Primitive data unexpectedly written to the target stream.", 179935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson bao.size() == outputSize); 180935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Closing should write the buffered data to the target stream. 181935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.close(); 182935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("Test 2: Primitive data has not been written to the the target stream.", 183935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson bao.size() > outputSize); 184935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 185935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 186935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos_ioe.close(); 187935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 3: IOException expected."); 188935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 189935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 190935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 191935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 192935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 193935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_drain() throws IOException { 194935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson NoFlushTestOutputStream target = new NoFlushTestOutputStream(); 195935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson BasicObjectOutputStream boos = new BasicObjectOutputStream(target); 196935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int initialSize = target.size(); 197935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boolean written = false; 198935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 199935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boos.writeBytes("Lorem ipsum"); 200935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // If there is no buffer then the bytes have already been written. 201935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson written = (target.size() > initialSize); 202935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 203935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boos.drain(); 204935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("Content has not been written to the target.", 205935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson written || (target.size() > initialSize)); 206935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertFalse("flush() has been called on the target.", 207935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson target.flushCalled); 208935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 209935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 210935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_enableReplaceObjectB() throws IOException { 211935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Start testing without a SecurityManager. 212935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson BasicObjectOutputStream boos = new BasicObjectOutputStream(); 213935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertFalse("Test 1: Object resolving must be disabled by default.", 214935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boos.enableReplaceObject(true)); 215935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 216935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("Test 2: enableReplaceObject did not return the previous value.", 217935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boos.enableReplaceObject(false)); 218935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 219935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 220935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_flush() throws Exception { 221935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Test for method void java.io.ObjectOutputStream.flush() 222935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int size = bao.size(); 223935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.writeByte(127); 224935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("Test 1: Data already flushed.", bao.size() == size); 225935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.flush(); 226935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("Test 2: Failed to flush data.", bao.size() > size); 227935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 228935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 229935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos_ioe.flush(); 230935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 3: IOException expected."); 231935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 232935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 233935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 234935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 235935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 236935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_putFields() throws Exception { 237935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson /* 238935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * "SerializableTestHelper" is an object created for these tests with 239935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * two fields (Strings) and simple implementations of readObject and 240935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * writeObject which simply read and write the first field but not the 241935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * second one. 242935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson */ 243935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson SerializableTestHelper sth; 244935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 245935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 246935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.putFields(); 247935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 1: NotActiveException expected."); 248935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (NotActiveException e) { 249935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 250935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 251935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 252935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.writeObject(new SerializableTestHelper("Gabba", "Jabba")); 253935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.flush(); 254935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 255935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson sth = (SerializableTestHelper) (ois.readObject()); 256935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Test 2: readFields or writeFields failed; first field not set.", 257935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson "Gabba", sth.getText1()); 258935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertNull("Test 3: readFields or writeFields failed; second field should not have been set.", 259935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson sth.getText2()); 260935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 261935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 262935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_reset() throws Exception { 263935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson String o = "HelloWorld"; 264935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson sos = new Support_OutputStream(200); 265935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.close(); 266935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos = new ObjectOutputStream(sos); 267935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.writeObject(o); 268935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.writeObject(o); 269935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.reset(); 270935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.writeObject(o); 271935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 272935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson sos.setThrowsException(true); 273935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 274935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.reset(); 275935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 1: IOException expected."); 276935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 277935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 278935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 279935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson sos.setThrowsException(false); 280935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 281935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois = new ObjectInputStream(new ByteArrayInputStream(sos.toByteArray())); 282935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Test 2: Incorrect object read.", o, ois.readObject()); 283935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Test 3: Incorrect object read.", o, ois.readObject()); 284935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Test 4: Incorrect object read.", o, ois.readObject()); 285935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois.close(); 286935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 287935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 288935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_write$BII() throws Exception { 289935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson byte[] buf = new byte[10]; 290935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 291935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 292935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois.read(buf, 0, -1); 293935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IndexOutOfBoundsException not thrown"); 294935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IndexOutOfBoundsException e) { 295935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected 296935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 297935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 298935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois.read(buf, -1, 1); 299935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IndexOutOfBoundsException not thrown"); 300935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IndexOutOfBoundsException e) { 301935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected 302935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 303935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 304935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois.read(buf, 10, 1); 305935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IndexOutOfBoundsException not thrown"); 306935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IndexOutOfBoundsException e) { 307935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected 308935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 309935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois.close(); 310935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 311935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 312935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 313935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_writeObjectOverrideLjava_lang_Object() throws IOException { 314935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson BasicObjectOutputStream boos = 315935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson new BasicObjectOutputStream(new ByteArrayOutputStream()); 316935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 317935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 318935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boos.writeObjectOverride(new Object()); 319935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IOException expected."); 320935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 321935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson catch (IOException e) { 322935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 323935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson finally { 324935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boos.close(); 325935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 326935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 327935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 328935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_writeStreamHeader() throws IOException { 329935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson BasicObjectOutputStream boos; 330935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ByteArrayOutputStream baos = new ByteArrayOutputStream(); 331935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson short s; 332935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson byte[] buffer; 333935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 334935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Test 1: Make sure that writeStreamHeader() has been called. 335935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boos = new BasicObjectOutputStream(baos); 336935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 337935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("Test 1: writeStreamHeader() has not been called.", 338935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boos.writeStreamHeaderCalled); 339935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 340935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Test 2: Check that at least four bytes have been written. 341935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson buffer = baos.toByteArray(); 342935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("Test 2: At least four bytes should have been written", 343935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson buffer.length >= 4); 344935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 345935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Test 3: Check the magic number. 346935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson s = buffer[0]; 347935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson s <<= 8; 348935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson s += ((short) buffer[1] & 0x00ff); 349935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Test 3: Invalid magic number written.", 350935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson java.io.ObjectStreamConstants.STREAM_MAGIC, s); 351935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 352935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Test 4: Check the stream version number. 353935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson s = buffer[2]; 354935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson s <<= 8; 355935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson s += ((short) buffer[3] & 0x00ff); 356935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Invalid stream version number written.", 357935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson java.io.ObjectStreamConstants.STREAM_VERSION, s); 358935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 359935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson finally { 360935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson boos.close(); 361935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 362935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 363935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 364935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson /** 365935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * Sets up the fixture, for example, open a network connection. This method 366935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * is called before a test is executed. 367935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson */ 368935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected void setUp() throws Exception { 369935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson super.setUp(); 370935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos = new ObjectOutputStream(bao = new ByteArrayOutputStream()); 371935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos_ioe = new ObjectOutputStream(sos = new Support_OutputStream()); 372935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson sos.setThrowsException(true); 373935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 374935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 375935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson /** 376935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * Tears down the fixture, for example, close a network connection. This 377935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * method is called after a test is executed. 378935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson */ 379935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected void tearDown() throws Exception { 380935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson super.tearDown(); 381935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson if (oos != null) { 382935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 383935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.close(); 384935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (Exception e) {} 385935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 386935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson if (oos_ioe != null) { 387935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 388935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos_ioe.close(); 389935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (Exception e) {} 390935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 391935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson if (f != null && f.exists()) { 392935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson if (!f.delete()) { 393935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Error cleaning up files during teardown"); 394935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 395935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 396935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 397935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 398935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected Object reload() throws IOException, ClassNotFoundException { 399935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 400935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Choose the load stream 401935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson if (xload || xdump) { 402935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Load from pre-existing file 403935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois = new ObjectInputStream(new FileInputStream(xFileName + "-" 404935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson + getName() + ".ser")); 405935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } else { 406935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Just load from memory, we dumped to memory 407935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois = new ObjectInputStream(new ByteArrayInputStream(bao 408935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson .toByteArray())); 409935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 410935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 411935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 412935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson return ois.readObject(); 413935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } finally { 414935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson ois.close(); 415935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 416935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 417935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 418935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected void dump(Object o) throws IOException, ClassNotFoundException { 419935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 420935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Choose the dump stream 421935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson if (xdump) { 422935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos = new ObjectOutputStream(new FileOutputStream( 423935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson f = new java.io.File(xFileName + "-" + getName() + ".ser"))); 424935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } else { 425935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos = new ObjectOutputStream(bao = new ByteArrayOutputStream()); 426935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 427935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 428935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Dump the object 429935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 430935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.writeObject(o); 431935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } finally { 432935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson oos.close(); 433935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 434935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 435935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson} 436