Compare.java revision 2362
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan/*
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan *
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * This code is free software; you can redistribute it and/or modify it
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * under the terms of the GNU General Public License version 2 only, as
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * published by the Free Software Foundation.
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan *
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * This code is distributed in the hope that it will be useful, but WITHOUT
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * version 2 for more details (a copy is included in the LICENSE file that
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * accompanied this code).
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan *
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * You should have received a copy of the GNU General Public License version
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * 2 along with this work; if not, write to the Free Software Foundation,
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan *
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * or visit www.oracle.com if you need additional information or have any
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * questions.
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan */
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan/*
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * @test
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * @bug 4096312
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * @summary Codebase annotations on classes that are marshalled should not
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * affect the behavior of MarshalledObject.equals. Only the bytes
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * not involved in location should be compared.
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * @author Ken Arnold
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan *
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * @build Compare
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan * @run main Compare 11 annotatedRef
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan */
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morganimport java.rmi.MarshalledObject;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morganimport java.io.*;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morganpublic class Compare {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan static class Node implements Serializable {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan int value = nextValue++;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan Node next;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan static int nextValue = 1;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan };
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
d380b9443b463cec3bc1bdb313452647858fd88btheAdib private static MarshalledObject made;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan private static MarshalledObject read;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan public static void main(String[] args) throws Throwable {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan if (args.length == 1)
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan writeObjToOut(Integer.parseInt(args[0]));
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan else
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan compareObjToFile(args[0], args[1]);
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan }
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan static void writeObjToOut(int listLength) throws Throwable {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan ObjectOutputStream out = new ObjectOutputStream(System.out);
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan out.writeObject(marshalledList(listLength));
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan out.close();
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan }
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan public static void compareHashCodes(String[] args) throws Throwable {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan File f = new File(System.getProperty("test.src", "."), args[1]);
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan setupObjects(args[0], f);
38e4ad89ca32c4c0a5bb2acae7e9b2e89ac210d1JazzyNico if (made.hashCode() != read.hashCode()) {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan throw new RuntimeException(
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan "made.hashCode(){" + made.hashCode() + "} != " +
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan "read.hashCode(){" + read.hashCode() + "}"
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan );
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan }
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan }
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
d380b9443b463cec3bc1bdb313452647858fd88btheAdib static void compareObjToFile(String lengthStr, String file0) throws Throwable
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan {
18d2737bb9a2e47325277e7916dea6c8a1363a1eSveinn í Felli File f = new File(System.getProperty("test.src", "."), file0);
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan setupObjects(lengthStr, f);
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan if (!made.equals(read) || !read.equals(made)) {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan throw new RuntimeException(
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan "made.equals(read) = " + made.equals(read)
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan + ", read.equals(made) = " + read.equals(made)
d380b9443b463cec3bc1bdb313452647858fd88btheAdib );
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan }
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan }
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan static MarshalledObject setupObjects(String lengthStr, File file)
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan throws Throwable
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan int listLength = Integer.parseInt(lengthStr);
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan made = marshalledList(listLength);
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan read = (MarshalledObject) in.readObject();
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan in.close();
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan return read;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan }
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan static MarshalledObject marshalledList(int length) throws Throwable {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan Node head = null;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan Node cur = null;
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan for (int i = 0; i < length; i++) {
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan if (head == null)
aea177a59b3bfda7bc8f6301cfd0c47326aa57c9JazzyNico cur = head = new Node();
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan else
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan cur = cur.next = new Node();
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan }
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan System.err.println("head = " + head);
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan return new MarshalledObject(head);
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan }
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan}
c556b852adbbb75d16564cf48962727ac3b916b4Chris Morgan