| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package tests.api.java.io; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.FileInputStream; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.ObjectInputStream; |
| import java.io.ObjectOutputStream; |
| import java.io.Serializable; |
| import java.security.Permission; |
| import java.security.PermissionCollection; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Calendar; |
| import java.util.GregorianCalendar; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.Hashtable; |
| import java.util.IdentityHashMap; |
| import java.util.LinkedHashMap; |
| import java.util.LinkedHashSet; |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.PropertyPermission; |
| import java.util.Set; |
| import java.util.SimpleTimeZone; |
| import java.util.SortedMap; |
| import java.util.SortedSet; |
| import java.util.TimeZone; |
| import java.util.TreeMap; |
| import java.util.TreeSet; |
| |
| import dalvik.annotation.TestTargetClass; |
| |
| /** |
| * Automated Test Suite for class java.io.ObjectOutputStream |
| * |
| */ |
| @SuppressWarnings({"serial", "unchecked"}) |
| @TestTargetClass(Serializable.class) |
| public class SerializationStressTest extends junit.framework.TestCase implements |
| Serializable { |
| |
| // protected static final String MODE_XLOAD = "xload"; |
| |
| // protected static final String MODE_XDUMP = "xdump"; |
| |
| static final String FOO = "foo"; |
| |
| static final String MSG_TEST_FAILED = "Failed to write/read/assertion checking: "; |
| |
| protected static final boolean DEBUG = false; |
| |
| protected static boolean xload = false; |
| |
| protected static boolean xdump = false; |
| |
| protected static String xFileName = null; |
| |
| protected transient int dumpCount = 0; |
| |
| protected transient ObjectInputStream ois; |
| |
| protected transient ObjectOutputStream oos; |
| |
| protected transient ByteArrayOutputStream bao; |
| |
| protected void t_MixPrimitivesAndObjects() throws IOException, |
| ClassNotFoundException { |
| int i = 7; |
| String s1 = "string 1"; |
| String s2 = "string 2"; |
| byte[] bytes = { 1, 2, 3 }; |
| |
| oos.writeInt(i); |
| oos.writeObject(s1); |
| oos.writeUTF(s2); |
| oos.writeObject(bytes); |
| oos.close(); |
| try { |
| ois = new ObjectInputStream(loadStream()); |
| |
| int j = ois.readInt(); |
| assertTrue("Wrong int :" + j, i == j); |
| |
| String l1 = (String) ois.readObject(); |
| assertTrue("Wrong obj String :" + l1, s1.equals(l1)); |
| |
| String l2 = (String) ois.readUTF(); |
| assertTrue("Wrong UTF String :" + l2, s2.equals(l2)); |
| |
| byte[] bytes2 = (byte[]) ois.readObject(); |
| assertTrue("Wrong byte[]", Arrays.equals(bytes, bytes2)); |
| |
| } finally { |
| ois.close(); |
| } |
| } |
| |
| // ----------------------------------------------------------------------------------- |
| |
| static final Map TABLE = new Hashtable(); |
| |
| static final Map MAP = new HashMap(); |
| |
| static final SortedMap TREE = new TreeMap(); |
| |
| static final LinkedHashMap LINKEDMAP = new LinkedHashMap(); |
| |
| static final LinkedHashSet LINKEDSET = new LinkedHashSet(); |
| |
| static final IdentityHashMap IDENTITYMAP = new IdentityHashMap(); |
| |
| static final List ALIST = Arrays.asList(new String[] { "a", "list", "of", |
| "strings" }); |
| |
| static final List LIST = new ArrayList(ALIST); |
| |
| static final Set SET = new HashSet(Arrays.asList(new String[] { "one", |
| "two", "three" })); |
| |
| static final Permission PERM = new PropertyPermission("file.encoding", |
| "write"); |
| |
| static final PermissionCollection PERMCOL = PERM.newPermissionCollection(); |
| |
| static final SortedSet SORTSET = new TreeSet(Arrays.asList(new String[] { |
| "one", "two", "three" })); |
| |
| static final java.text.DateFormat DATEFORM = java.text.DateFormat |
| .getInstance(); |
| |
| static final java.text.ChoiceFormat CHOICE = new java.text.ChoiceFormat( |
| "1#one|2#two|3#three"); |
| |
| static final java.text.NumberFormat NUMBERFORM = java.text.NumberFormat |
| .getInstance(); |
| |
| static final java.text.MessageFormat MESSAGE = new java.text.MessageFormat( |
| "the time: {0,time} and date {0,date}"); |
| |
| static final LinkedList LINKEDLIST = new LinkedList(Arrays |
| .asList(new String[] { "a", "linked", "list", "of", "strings" })); |
| |
| static final SimpleTimeZone TIME_ZONE = new SimpleTimeZone(3600000, |
| "S-TEST"); |
| |
| static final Calendar CALENDAR = new GregorianCalendar(TIME_ZONE); |
| |
| static Exception INITIALIZE_EXCEPTION = null; |
| |
| static { |
| try { |
| TABLE.put("one", "1"); |
| TABLE.put("two", "2"); |
| TABLE.put("three", "3"); |
| MAP.put("one", "1"); |
| MAP.put("two", "2"); |
| MAP.put("three", "3"); |
| LINKEDMAP.put("one", "1"); |
| LINKEDMAP.put("two", "2"); |
| LINKEDMAP.put("three", "3"); |
| IDENTITYMAP.put("one", "1"); |
| IDENTITYMAP.put("two", "2"); |
| IDENTITYMAP.put("three", "3"); |
| LINKEDSET.add("one"); |
| LINKEDSET.add("two"); |
| LINKEDSET.add("three"); |
| TREE.put("one", "1"); |
| TREE.put("two", "2"); |
| TREE.put("three", "3"); |
| PERMCOL.add(PERM); |
| // To make sure they all use the same Calendar |
| CALENDAR.setTimeZone(new SimpleTimeZone(0, "GMT")); |
| CALENDAR.set(1999, Calendar.JUNE, 23, 15, 47, 13); |
| CALENDAR.set(Calendar.MILLISECOND, 553); |
| DATEFORM.setCalendar(CALENDAR); |
| java.text.DateFormatSymbols symbols = new java.text.DateFormatSymbols(); |
| symbols.setZoneStrings(new String[][] { { "a", "b", "c", "d" }, |
| { "e", "f", "g", "h" } }); |
| ((java.text.SimpleDateFormat) DATEFORM).setDateFormatSymbols(symbols); |
| DATEFORM.setNumberFormat(new java.text.DecimalFormat("#.#;'-'#.#")); |
| DATEFORM.setTimeZone(TimeZone.getTimeZone("EST")); |
| ((java.text.DecimalFormat) NUMBERFORM).applyPattern("#.#;'-'#.#"); |
| MESSAGE.setFormat(0, DATEFORM); |
| MESSAGE.setFormat(1, DATEFORM); |
| } catch (Exception e) { |
| INITIALIZE_EXCEPTION = e; |
| } |
| } |
| |
| public SerializationStressTest() { |
| } |
| |
| public SerializationStressTest(String name) { |
| super(name); |
| } |
| |
| public String getDumpName() { |
| return getName() + dumpCount; |
| } |
| |
| protected void dump(Object o) throws IOException, ClassNotFoundException { |
| if (dumpCount > 0) |
| setUp(); |
| // Dump the object |
| try { |
| oos.writeObject(o); |
| } finally { |
| oos.close(); |
| } |
| } |
| |
| protected Object dumpAndReload(Object o) throws IOException, |
| ClassNotFoundException { |
| dump(o); |
| return reload(); |
| } |
| |
| protected InputStream loadStream() throws IOException { |
| // Choose the load stream |
| if (xload || xdump) { |
| // Load from pre-existing file |
| return new FileInputStream(xFileName + "-" + getDumpName() + ".ser"); |
| } else { |
| // Just load from memory, we dumped to memory |
| return new ByteArrayInputStream(bao.toByteArray()); |
| } |
| } |
| |
| protected Object reload() throws IOException, ClassNotFoundException { |
| ois = new ObjectInputStream(loadStream()); |
| dumpCount++; |
| try { |
| return ois.readObject(); |
| } finally { |
| ois.close(); |
| } |
| } |
| |
| /** |
| * Sets up the fixture, for example, open a network connection. This method |
| * is called before a test is executed. |
| */ |
| protected void setUp() { |
| if (INITIALIZE_EXCEPTION != null) { |
| throw new ExceptionInInitializerError(INITIALIZE_EXCEPTION); |
| } |
| try { |
| if (xdump) { |
| oos = new ObjectOutputStream(new FileOutputStream(xFileName |
| + "-" + getDumpName() + ".ser")); |
| } else { |
| oos = new ObjectOutputStream(bao = new ByteArrayOutputStream()); |
| } |
| } catch (Exception e) { |
| fail("Exception thrown during setup : " + e.getMessage()); |
| } |
| } |
| |
| /** |
| * Tears down the fixture, for example, close a network connection. This |
| * method is called after a test is executed. |
| */ |
| protected void tearDown() { |
| if (oos != null) { |
| try { |
| oos.close(); |
| } catch (Exception e) { |
| } |
| } |
| } |
| |
| |
| } |