TestBean.java revision 23b5c241225a8ade2b6b9f06ebb891ee459e3b02
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee/*
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * CDDL HEADER START
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee *
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * The contents of this file are subject to the terms of the
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * Common Development and Distribution License (the "License").
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * You may not use this file except in compliance with the License.
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee *
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * or http://www.opensolaris.org/os/licensing.
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * See the License for the specific language governing permissions
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * and limitations under the License.
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee *
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * When distributing Covered Code, include this CDDL HEADER in each
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * If applicable, add the following below this CDDL HEADER, with the
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * fields enclosed by brackets "[]" replaced with your own identifying
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * information: Portions Copyright [yyyy] [name of copyright owner]
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee *
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * CDDL HEADER END
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee */
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee/*
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * Use is subject to license terms.
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee *
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * ident "%Z%%M% %I% %E% SMI"
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee */
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomeeimport org.opensolaris.os.dtrace.*;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomeeimport java.util.*;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomeeimport java.io.*;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomeeimport java.beans.*;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomeeimport java.lang.reflect.*;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee/**
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * Regression test for serialization and XML encoding/decoding. Tests
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * every Serializable class in the Java DTrace API by creating a dummy
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * instance, writing it to a file, then reading it back in and comparing
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * the string values of the object before and after, as well as
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * verifying object equality before and after if the class overrides the
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee * equals() method.
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee */
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomeepublic class TestBean {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static final String[] TESTS = new String[] {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "ExitRecord",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "AggregationRecord",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Aggregation",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Tuple",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "ScalarRecord",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "KernelStackRecord",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "LogDistribution",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "LinearDistribution",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Option",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "ProcessState",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "ProbeDescription",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "PrintaRecord",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "PrintfRecord",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "ProbeData",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Aggregate",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "UserStackRecord",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "AvgValue",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "CountValue",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "SumValue",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "MinValue",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "MaxValue",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Error",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Drop",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "InterfaceAttributes",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "ProgramInfo",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "ProbeInfo",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Probe",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Flow",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "KernelSymbolRecord",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "UserSymbolRecord",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "UserSymbolRecord$Value"
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee };
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee static void
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(int status)
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.out.flush();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.err.flush();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.exit(status);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static XMLEncoder
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getXMLEncoder(File file)
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee XMLEncoder encoder = null;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee try {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee OutputStream out = new BufferedOutputStream
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee (new FileOutputStream(file));
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee encoder = new XMLEncoder(out);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (Exception e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee e.printStackTrace();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return encoder;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static XMLDecoder
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getXMLDecoder(File file)
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return getXMLDecoder(file, null);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static XMLDecoder
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getXMLDecoder(File file, ExceptionListener exceptionListener)
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee XMLDecoder decoder = null;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee try {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee InputStream in = new BufferedInputStream
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee (new FileInputStream(file));
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee decoder = new XMLDecoder(in, null, exceptionListener);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (Exception e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee e.printStackTrace();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return decoder;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static ExitRecord
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getExitRecord()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ExitRecord r = new ExitRecord(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static AggregationRecord
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getAggregationRecord()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Tuple tuple = getTuple();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee AggregationValue value = new CountValue(7);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee AggregationRecord r = new AggregationRecord(tuple, value);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static Aggregation
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getAggregation()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee List < AggregationRecord > list =
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new ArrayList < AggregationRecord > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee AggregationRecord r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee r = getAggregationRecord();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee list.add(r);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v1 = new ScalarRecord(new byte[] {(byte)1, (byte)2,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee (byte)3}, 3);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v2 = new ScalarRecord("shebang!", 256);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Tuple tuple = new Tuple(v1, v2);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee AggregationValue value = getLinearDistribution();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee r = new AggregationRecord(tuple, value);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee list.add(r);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Aggregation a = new Aggregation("counts", 2, list);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return a;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static Tuple
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getTuple()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord r1 = new ScalarRecord("cat", 256);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord r2 = new ScalarRecord(new Integer(9), 2);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord r3 = new KernelStackRecord(
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame[] {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame("has"),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame("nine"),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame("lives")},
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new byte[] { (byte)0, (byte)1, (byte)2 });
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord r4 = new ScalarRecord(new byte[] {(byte)1, (byte)2,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee (byte)3}, 3);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Tuple tuple = new Tuple(r1, r2, r3, r4);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return tuple;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static ScalarRecord
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getScalarRecord()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Object v = new byte[] {(byte)1, (byte)2, (byte)3};
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ScalarRecord r = new ScalarRecord(v, 3);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static KernelStackRecord
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getKernelStackRecord()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee StackFrame[] stackFrames = new StackFrame[] {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame("Frame 1"),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame("Frame 2"),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame("Frame 3")
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee };
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee KernelStackRecord r = new KernelStackRecord(stackFrames,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new byte[] { (byte)0, (byte)1, (byte)2 });
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static LogDistribution
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getLogDistribution()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee List < Distribution.Bucket > buckets =
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new ArrayList < Distribution.Bucket > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Distribution.Bucket bucket;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee int n = 0;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee long base = 0;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee long i;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee long sign;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee long nextSign;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee long power;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee long nextPower;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee long lowerBound;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee long upperBound;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee for (i = -62; i <= 62; ++i) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if (i == 0) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee bucket = new Distribution.Bucket(-1, -1, n++);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee buckets.add(bucket);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee bucket = new Distribution.Bucket(0, 0, n++);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee buckets.add(bucket);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee bucket = new Distribution.Bucket(1, 1, n++);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee buckets.add(bucket);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee continue;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee sign = ((i < 0) ? -1L : 1L);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee power = (sign * i);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee nextSign = (((i + 1) < 0) ? -1L : 1L);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee nextPower = (nextSign * (i + 1));
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee lowerBound = sign * ((long) Math.pow(2L, power));
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee upperBound = (nextPower == 0 ? -2L :
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee (nextSign * ((long) Math.pow(2L, nextPower))) - 1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if ((upperBound > 0) && ((upperBound * 2L) < 0)) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee upperBound = Long.MAX_VALUE;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee bucket = new Distribution.Bucket(lowerBound, upperBound, n++);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee buckets.add(bucket);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee LogDistribution d = new LogDistribution(buckets);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return d;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static LinearDistribution
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getLinearDistribution()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee List < Distribution.Bucket > buckets =
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new ArrayList < Distribution.Bucket > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Distribution.Bucket bucket;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee int n = 10; // number of buckets
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee int base = 1;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee int step = 10;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee bucket = new Distribution.Bucket(Long.MIN_VALUE, (base - 1), 0);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee buckets.add(bucket);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee for (int i = base; i < (n * step); i += step) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee bucket = new Distribution.Bucket(i, (i + (step - 1)),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ((i - 1) / step));
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee buckets.add(bucket);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee bucket = new Distribution.Bucket((n * step) + 1, Long.MAX_VALUE, 0);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee buckets.add(bucket);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee LinearDistribution d = new LinearDistribution(base, step, buckets);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return d;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static Option
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getOption()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Option option = new Option("aggrate", "1s");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return option;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static ProcessState
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getProcessState()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ProcessState p = new ProcessState(123456, "UNDEAD",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee 3, "SIGSTOP",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee -2, "Process stopped on dime");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return p;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static ProbeDescription
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getProbeDescription()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ProbeDescription d = new ProbeDescription(256, "syscall", null,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "malloc", "entry");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return d;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static PrintaRecord
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getPrintaRecord()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee List < Aggregation > aggregations = new ArrayList < Aggregation > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Aggregation a = getAggregation();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee aggregations.add(a);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee aggregations.add(a);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Map < Tuple, String > formattedOutput =
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new HashMap < Tuple, String > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee for (Tuple t : a.asMap().keySet()) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee formattedOutput.put(t, "cat");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee List < Tuple > tuples = new ArrayList < Tuple > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee for (Tuple t : a.asMap().keySet()) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee tuples.add(t);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Collections.sort(tuples);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee PrintaRecord r = new PrintaRecord(1234567890L,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee aggregations, formattedOutput, tuples,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Yes, this is the formatted printa() output");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static PrintfRecord
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getPrintfRecord()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee List < ValueRecord > list = new ArrayList < ValueRecord > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v1 = getScalarRecord();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v2 = new ScalarRecord(new Integer(7), 4);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee list.add(v1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee list.add(v2);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee PrintfRecord r = new PrintfRecord(list,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "long formatted string");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static ProbeData
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getProbeData()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee List < Record > list = new ArrayList < Record > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee list.add(getPrintaRecord());
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee list.add(getPrintfRecord());
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee list.add(getScalarRecord());
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ProbeData d = new ProbeData(7, 1, getProbeDescription(),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getFlow(), list);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return d;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static Aggregate
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getAggregate()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee List < Aggregation > list = new ArrayList < Aggregation > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee list.add(getAggregation());
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee List < AggregationRecord > reclist =
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new ArrayList < AggregationRecord > ();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee AggregationRecord r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v1 = new ScalarRecord("cat", 256);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v2 = new ScalarRecord("dog", 256);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v3 = new ScalarRecord("mouse", 256);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v4 = new ScalarRecord("mouse", 256);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v5 = new ScalarRecord(new Byte((byte) 'C'), 1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ValueRecord v6 = new ScalarRecord(new Short((short) 7), 2);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Tuple tuple = new Tuple(v1, v2, v3, v4, v5, v6);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee AggregationValue value = getCountValue();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee r = new AggregationRecord(tuple, value);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee reclist.add(r);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee list.add(new Aggregation("times", 1, reclist));
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Aggregate a = new Aggregate(1234567890L, list);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return a;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static UserStackRecord
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getUserStackRecord()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee StackFrame[] frames = new StackFrame[] {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame("User Stack Frame 1"),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame("User Stack Frame 2"),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new StackFrame("User Stack Frame 3")
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee };
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee UserStackRecord r = new UserStackRecord(123456, frames,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new byte[] { (byte)0, (byte)1, (byte)2 });
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static AvgValue
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getAvgValue()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee AvgValue v = new AvgValue(5, 20, 4);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return v;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static CountValue
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getCountValue()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee CountValue v = new CountValue(9);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return v;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static MinValue
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getMinValue()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee MinValue v = new MinValue(101);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return v;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static MaxValue
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getMaxValue()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee MaxValue v = new MaxValue(101);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return v;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static SumValue
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getSumValue()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee SumValue v = new SumValue(25);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return v;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static org.opensolaris.os.dtrace.Error
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getError()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ProbeDescription probe = getProbeDescription();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee org.opensolaris.os.dtrace.Error e =
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new org.opensolaris.os.dtrace.Error(probe, 8, 3,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee 1, 20, "DTRACEFLT_BADALIGN", -1, "error on enabled probe ID 8 " +
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "(ID " + probe.getID() + ": " + probe + "): Bad alignment " +
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "(0x33ef) in action #1 at DIF offset 20");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return e;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static Drop
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getDrop()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Drop drop = new Drop(2, "SPECBUSY", 72, 1041,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "Guess we dropped stuff all over the place.");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return drop;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static InterfaceAttributes
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getInterfaceAttributes()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee InterfaceAttributes a = new InterfaceAttributes(
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee InterfaceAttributes.Stability.UNSTABLE,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee InterfaceAttributes.Stability.EVOLVING,
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee InterfaceAttributes.DependencyClass.ISA);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return a;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static ProgramInfo
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getProgramInfo()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ProgramInfo info = new ProgramInfo(getInterfaceAttributes(),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getInterfaceAttributes(), 256);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return info;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static ProbeInfo
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getProbeInfo()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ProbeInfo info = new ProbeInfo(getInterfaceAttributes(),
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getInterfaceAttributes());
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return info;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static Probe
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getProbe()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Probe p = new Probe(getProbeDescription(), getProbeInfo());
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return p;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static Flow
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getFlow()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Flow f = new Flow(Flow.Kind.RETURN.name(), 3);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return f;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static KernelSymbolRecord
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getKernelSymbolRecord()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee KernelSymbolRecord r = new KernelSymbolRecord("mod`func+0x4", -1L);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static UserSymbolRecord
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getUserSymbolRecord()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee UserSymbolRecord r = new UserSymbolRecord(7, "mod`func+0x4", -1L);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return r;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static UserSymbolRecord.Value
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getUserSymbolRecord$Value()
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee UserSymbolRecord.Value v = new UserSymbolRecord.Value(7, -1L);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return v;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee static String
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee getString(Object o)
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String s;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if (o instanceof ScalarRecord) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee o = ((ScalarRecord)o).getValue();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if (o instanceof byte[]) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee s = Arrays.toString((byte[])o);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } else if (o instanceof Object[]) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee s = Arrays.toString((Object[])o);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } else {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Class c = o.getClass();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee try {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Method m = c.getDeclaredMethod("toLogString");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee s = (String)m.invoke(o);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (Exception e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee s = o.toString();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee return s;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee static void
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee checkEquality(Object obj, Object newobj)
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee // If the class overrides equals(), make sure the re-created
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee // object still equals the original object
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee try {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Method eq = obj.getClass().getDeclaredMethod("equals",
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Object.class);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Boolean ret = (Boolean) eq.invoke(obj, newobj);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if (ret != true) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.err.println("serialization failed: " +
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee obj.getClass().getName());
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (Exception e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee // Does not override equals(), although a super-class might.
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee // A better test would check for any superclass other than
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee // Object.class.
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee static void
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee performSerializationTest(File file, String classname)
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee throws IOException, ClassNotFoundException
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String methodName = "get" + classname;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Object obj = null;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Object newobj = null;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee try {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Method method = TestBean.class.getDeclaredMethod(methodName);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee obj = method.invoke(null);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (Exception e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee e.printStackTrace();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.out.println(classname + ":");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String serialized = getString(obj);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.out.println(" serialized: " + serialized);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee FileOutputStream fos = new FileOutputStream(file);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ObjectOutputStream out = new ObjectOutputStream(fos);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee out.writeObject(obj);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee FileInputStream fis = new FileInputStream(file);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee ObjectInputStream in = new ObjectInputStream(fis);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee newobj = in.readObject();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String deserialized = getString(newobj);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.out.println(" deserialized: " + deserialized);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if (!serialized.equals(deserialized)) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.err.println("serialization failed: " + classname);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee checkEquality(obj, newobj);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee static void
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee performBeanTest(File file, String classname)
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String methodName = "get" + classname;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Object obj = null;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Object newobj = null;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee try {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee Method method = TestBean.class.getDeclaredMethod(methodName);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee obj = method.invoke(null);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (Exception e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee e.printStackTrace();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.out.println(classname + ":");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee XMLEncoder encoder = getXMLEncoder(file);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String encoded = getString(obj);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.out.println(" encoded: " + encoded);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee encoder.writeObject(obj);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee encoder.close();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee XMLDecoder decoder = getXMLDecoder(file);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee newobj = decoder.readObject();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String decoded = getString(newobj);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.out.println(" decoded: " + decoded);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee decoder.close();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if (!encoded.equals(decoded)) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.err.println("bean persistence failed: " + classname);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee checkEquality(obj, newobj);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee public static void
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee main(String[] args)
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if ((args.length != 1) && (args.length != 2)) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.err.println("usage: java TestBean < filename > " +
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee "[ < classname > ]");
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String filename = args[0];
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String classname = null;
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if (args.length >= 2) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee classname = args[1];
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee File file = new File(filename);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee try {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee if (!file.canRead()) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee try {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee file.createNewFile();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (Exception e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.err.println("failed to create " + filename);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (SecurityException e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee System.err.println("failed to open " + filename);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee String[] tests = (classname == null ? TESTS:
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee new String[] { classname });
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee try {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee for (int i = 0; i < tests.length; ++i) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee performSerializationTest(file, tests[i]);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee performBeanTest(file, tests[i]);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (IOException e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee e.printStackTrace();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee } catch (ClassNotFoundException e) {
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee e.printStackTrace();
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee exit(1);
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee }
23b5c241225a8ade2b6b9f06ebb891ee459e3b02tomee}