test/jdk/java/io/Serializable/sanityCheck/SanityCheck.java
author rriggs
Fri, 11 Oct 2019 13:11:56 -0400
changeset 58565 baa5969ecf34
parent 47216 71c04702a3d5
permissions -rw-r--r--
8231427: Warning cleanup in tests of java.io.Serializable Reviewed-by: darcy, lancea

/*
 * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/* @test
 * @summary Basic sanity check to test if default (de)serialization is
 *          transmitting values properly.
 * @key randomness
 */

import java.io.*;
import java.util.*;

class Item implements Serializable {
    private static final long serialVersionUID = 1L;

    static final int ARRAYLEN = 1000;
    static final int STRLEN = 1000;
    static Random rand = new Random(System.currentTimeMillis());

    boolean z;
    byte b;
    char c;
    short s;
    int i;
    float f;
    long j;
    double d;

    boolean[] zary;
    byte[] bary;
    char[] cary;
    short[] sary;
    int[] iary;
    float[] fary;
    long[] jary;
    double[] dary;

    String str;
    @SuppressWarnings("serial")  /* Incorrect declarations are being tested */
    Object[] oary;

    Item() {
        z = rand.nextBoolean();
        b = (byte) rand.nextInt();
        c = (char) rand.nextInt();
        s = (short) rand.nextInt();
        i = rand.nextInt();
        f = rand.nextFloat();
        j = rand.nextLong();
        d = rand.nextDouble();

        zary = new boolean[ARRAYLEN];
        bary = new byte[ARRAYLEN];
        cary = new char[ARRAYLEN];
        sary = new short[ARRAYLEN];
        iary = new int[ARRAYLEN];
        fary = new float[ARRAYLEN];
        jary = new long[ARRAYLEN];
        dary = new double[ARRAYLEN];
        oary = new Object[ARRAYLEN];

        for (int i = 0; i < ARRAYLEN; i++) {
            zary[i] = rand.nextBoolean();
            bary[i] = (byte) rand.nextInt();
            cary[i] = (char) rand.nextInt();
            sary[i] = (short) rand.nextInt();
            iary[i] = rand.nextInt();
            fary[i] = rand.nextFloat();
            jary[i] = rand.nextLong();
            dary[i] = rand.nextDouble();
            oary[i] = rand.nextInt();
        }

        char[] strChars = new char[STRLEN];
        for (int i = 0; i < STRLEN; i++) {
            strChars[i] = (char) rand.nextInt();
        }
        str = new String(strChars);
    }

    public boolean equals(Object obj) {
        if (!(obj instanceof Item)) {
            return false;
        }
        Item other = (Item) obj;

        if ((z != other.z) || (b != other.b) || (c != other.c) ||
            (s != other.s) || (i != other.i) || (f != other.f) ||
            (j != other.j) || (d != other.d))
        {
            return false;
        }

        for (int i = 0; i < ARRAYLEN; i++) {
            if ((zary[i] != other.zary[i]) || (bary[i] != other.bary[i]) ||
                (cary[i] != other.cary[i]) || (sary[i] != other.sary[i]) ||
                (iary[i] != other.iary[i]) || (fary[i] != other.fary[i]) ||
                (jary[i] != other.jary[i]) || (dary[i] != other.dary[i]) ||
                !oary[i].equals(other.oary[i]))
            {
                return false;
            }
        }

        if (!str.equals(other.str)) {
            return false;
        }

        return true;
    }

    @Override
    public int hashCode() {
        return Objects.hash(i, j);
    }
}

public class SanityCheck {
    public static void main(String[] args) throws Exception {
        for (int i = 0; i < 20; i++) {
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            ObjectOutputStream oout = new ObjectOutputStream(bout);
            Item item = new Item();
            oout.writeObject(item);
            oout.close();

            ObjectInputStream oin = new ObjectInputStream(
                new ByteArrayInputStream(bout.toByteArray()));
            Item itemcopy = (Item) oin.readObject();

            if (! item.equals(itemcopy)) {
                throw new Error();
            }
        }
    }
}