1 /*
2  * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 /* @test
25  * @summary Basic sanity check to test if default (de)serialization is
26  *          transmitting values properly.
27  * @key randomness
28  */
29 
30 import java.io.*;
31 import java.util.*;
32 
33 class Item implements Serializable {
34 
35     static final int ARRAYLEN = 1000;
36     static final int STRLEN = 1000;
37     static Random rand = new Random(System.currentTimeMillis());
38 
39     boolean z;
40     byte b;
41     char c;
42     short s;
43     int i;
44     float f;
45     long j;
46     double d;
47 
48     boolean[] zary;
49     byte[] bary;
50     char[] cary;
51     short[] sary;
52     int[] iary;
53     float[] fary;
54     long[] jary;
55     double[] dary;
56 
57     String str;
58     Object[] oary;
59 
Item()60     Item() {
61         z = rand.nextBoolean();
62         b = (byte) rand.nextInt();
63         c = (char) rand.nextInt();
64         s = (short) rand.nextInt();
65         i = rand.nextInt();
66         f = rand.nextFloat();
67         j = rand.nextLong();
68         d = rand.nextDouble();
69 
70         zary = new boolean[ARRAYLEN];
71         bary = new byte[ARRAYLEN];
72         cary = new char[ARRAYLEN];
73         sary = new short[ARRAYLEN];
74         iary = new int[ARRAYLEN];
75         fary = new float[ARRAYLEN];
76         jary = new long[ARRAYLEN];
77         dary = new double[ARRAYLEN];
78         oary = new Object[ARRAYLEN];
79 
80         for (int i = 0; i < ARRAYLEN; i++) {
81             zary[i] = rand.nextBoolean();
82             bary[i] = (byte) rand.nextInt();
83             cary[i] = (char) rand.nextInt();
84             sary[i] = (short) rand.nextInt();
85             iary[i] = rand.nextInt();
86             fary[i] = rand.nextFloat();
87             jary[i] = rand.nextLong();
88             dary[i] = rand.nextDouble();
89             oary[i] = new Integer(rand.nextInt());
90         }
91 
92         char[] strChars = new char[STRLEN];
93         for (int i = 0; i < STRLEN; i++) {
94             strChars[i] = (char) rand.nextInt();
95         }
96         str = new String(strChars);
97     }
98 
equals(Object obj)99     public boolean equals(Object obj) {
100         if (!(obj instanceof Item)) {
101             return false;
102         }
103         Item other = (Item) obj;
104 
105         if ((z != other.z) || (b != other.b) || (c != other.c) ||
106             (s != other.s) || (i != other.i) || (f != other.f) ||
107             (j != other.j) || (d != other.d))
108         {
109             return false;
110         }
111 
112         for (int i = 0; i < ARRAYLEN; i++) {
113             if ((zary[i] != other.zary[i]) || (bary[i] != other.bary[i]) ||
114                 (cary[i] != other.cary[i]) || (sary[i] != other.sary[i]) ||
115                 (iary[i] != other.iary[i]) || (fary[i] != other.fary[i]) ||
116                 (jary[i] != other.jary[i]) || (dary[i] != other.dary[i]) ||
117                 !oary[i].equals(other.oary[i]))
118             {
119                 return false;
120             }
121         }
122 
123         if (!str.equals(other.str)) {
124             return false;
125         }
126 
127         return true;
128     }
129 }
130 
131 public class SanityCheck {
main(String[] args)132     public static void main(String[] args) throws Exception {
133         for (int i = 0; i < 20; i++) {
134             ByteArrayOutputStream bout = new ByteArrayOutputStream();
135             ObjectOutputStream oout = new ObjectOutputStream(bout);
136             Item item = new Item();
137             oout.writeObject(item);
138             oout.close();
139 
140             ObjectInputStream oin = new ObjectInputStream(
141                 new ByteArrayInputStream(bout.toByteArray()));
142             Item itemcopy = (Item) oin.readObject();
143 
144             if (! item.equals(itemcopy)) {
145                 throw new Error();
146             }
147         }
148     }
149 }
150