1*2be1a816SJohn Birrell /* 2*2be1a816SJohn Birrell * CDDL HEADER START 3*2be1a816SJohn Birrell * 4*2be1a816SJohn Birrell * The contents of this file are subject to the terms of the 5*2be1a816SJohn Birrell * Common Development and Distribution License (the "License"). 6*2be1a816SJohn Birrell * You may not use this file except in compliance with the License. 7*2be1a816SJohn Birrell * 8*2be1a816SJohn Birrell * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*2be1a816SJohn Birrell * or http://www.opensolaris.org/os/licensing. 10*2be1a816SJohn Birrell * See the License for the specific language governing permissions 11*2be1a816SJohn Birrell * and limitations under the License. 12*2be1a816SJohn Birrell * 13*2be1a816SJohn Birrell * When distributing Covered Code, include this CDDL HEADER in each 14*2be1a816SJohn Birrell * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*2be1a816SJohn Birrell * If applicable, add the following below this CDDL HEADER, with the 16*2be1a816SJohn Birrell * fields enclosed by brackets "[]" replaced with your own identifying 17*2be1a816SJohn Birrell * information: Portions Copyright [yyyy] [name of copyright owner] 18*2be1a816SJohn Birrell * 19*2be1a816SJohn Birrell * CDDL HEADER END 20*2be1a816SJohn Birrell */ 21*2be1a816SJohn Birrell 22*2be1a816SJohn Birrell /* 23*2be1a816SJohn Birrell * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24*2be1a816SJohn Birrell * Use is subject to license terms. 25*2be1a816SJohn Birrell * 26*2be1a816SJohn Birrell * ident "%Z%%M% %I% %E% SMI" 27*2be1a816SJohn Birrell */ 28*2be1a816SJohn Birrell 29*2be1a816SJohn Birrell import java.io.File; 30*2be1a816SJohn Birrell import java.io.IOException; 31*2be1a816SJohn Birrell import java.util.List; 32*2be1a816SJohn Birrell import org.opensolaris.os.dtrace.*; 33*2be1a816SJohn Birrell 34*2be1a816SJohn Birrell /** 35*2be1a816SJohn Birrell * Regression for multi-aggregation printa() corner cases. 36*2be1a816SJohn Birrell */ 37*2be1a816SJohn Birrell public class TestMultiAggPrinta { 38*2be1a816SJohn Birrell static int exitStatus; 39*2be1a816SJohn Birrell 40*2be1a816SJohn Birrell // Gets a string representation of the given PrintaRecord minus the 41*2be1a816SJohn Birrell // timestamp of the aggregate snapshot, so that the output is 42*2be1a816SJohn Birrell // comparable across multiple test runs. 43*2be1a816SJohn Birrell static String printaRecordString(PrintaRecord rec)44*2be1a816SJohn Birrell printaRecordString(PrintaRecord rec) 45*2be1a816SJohn Birrell { 46*2be1a816SJohn Birrell StringBuffer buf = new StringBuffer(); 47*2be1a816SJohn Birrell buf.append(PrintaRecord.class.getName()); 48*2be1a816SJohn Birrell buf.append("[aggregations = "); 49*2be1a816SJohn Birrell buf.append(rec.getAggregations()); 50*2be1a816SJohn Birrell buf.append(", formattedStrings = "); 51*2be1a816SJohn Birrell buf.append(rec.getFormattedStrings()); 52*2be1a816SJohn Birrell buf.append(", tuples = "); 53*2be1a816SJohn Birrell buf.append(rec.getTuples()); 54*2be1a816SJohn Birrell buf.append(", output = "); 55*2be1a816SJohn Birrell buf.append(rec.getOutput()); 56*2be1a816SJohn Birrell buf.append(']'); 57*2be1a816SJohn Birrell return buf.toString(); 58*2be1a816SJohn Birrell } 59*2be1a816SJohn Birrell 60*2be1a816SJohn Birrell static String probeDataString(ProbeData data)61*2be1a816SJohn Birrell probeDataString(ProbeData data) 62*2be1a816SJohn Birrell { 63*2be1a816SJohn Birrell StringBuffer buf = new StringBuffer(); 64*2be1a816SJohn Birrell buf.append(ProbeData.class.getName()); 65*2be1a816SJohn Birrell buf.append("[epid = "); 66*2be1a816SJohn Birrell buf.append(data.getEnabledProbeID()); 67*2be1a816SJohn Birrell // Do not include cpu, since it can change across test runs 68*2be1a816SJohn Birrell buf.append(", enabledProbeDescription = "); 69*2be1a816SJohn Birrell buf.append(data.getEnabledProbeDescription()); 70*2be1a816SJohn Birrell buf.append(", flow = "); 71*2be1a816SJohn Birrell buf.append(data.getFlow()); 72*2be1a816SJohn Birrell buf.append(", records = "); 73*2be1a816SJohn Birrell 74*2be1a816SJohn Birrell List <Record> records = data.getRecords(); 75*2be1a816SJohn Birrell Record record; 76*2be1a816SJohn Birrell Object value; 77*2be1a816SJohn Birrell buf.append('['); 78*2be1a816SJohn Birrell for (int i = 0; i < records.size(); ++i) { 79*2be1a816SJohn Birrell if (i > 0) { 80*2be1a816SJohn Birrell buf.append(", "); 81*2be1a816SJohn Birrell } 82*2be1a816SJohn Birrell record = records.get(i); 83*2be1a816SJohn Birrell if (record instanceof ValueRecord) { 84*2be1a816SJohn Birrell value = ((ValueRecord)record).getValue(); 85*2be1a816SJohn Birrell if (value instanceof String) { 86*2be1a816SJohn Birrell buf.append("\""); 87*2be1a816SJohn Birrell buf.append((String)value); 88*2be1a816SJohn Birrell buf.append("\""); 89*2be1a816SJohn Birrell } else { 90*2be1a816SJohn Birrell buf.append(record); 91*2be1a816SJohn Birrell } 92*2be1a816SJohn Birrell } else if (record instanceof PrintaRecord) { 93*2be1a816SJohn Birrell PrintaRecord printa = (PrintaRecord)record; 94*2be1a816SJohn Birrell buf.append(printaRecordString(printa)); 95*2be1a816SJohn Birrell } else { 96*2be1a816SJohn Birrell buf.append(record); 97*2be1a816SJohn Birrell } 98*2be1a816SJohn Birrell } 99*2be1a816SJohn Birrell buf.append(']'); 100*2be1a816SJohn Birrell return buf.toString(); 101*2be1a816SJohn Birrell } 102*2be1a816SJohn Birrell 103*2be1a816SJohn Birrell public static void main(String[] args)104*2be1a816SJohn Birrell main(String[] args) 105*2be1a816SJohn Birrell { 106*2be1a816SJohn Birrell if (args.length != 1) { 107*2be1a816SJohn Birrell System.err.println("usage: java TestMultiAggPrinta <script>"); 108*2be1a816SJohn Birrell System.exit(2); 109*2be1a816SJohn Birrell } 110*2be1a816SJohn Birrell 111*2be1a816SJohn Birrell final Consumer consumer = new LocalConsumer(); 112*2be1a816SJohn Birrell consumer.addConsumerListener(new ConsumerAdapter() { 113*2be1a816SJohn Birrell public void dataReceived(DataEvent e) { 114*2be1a816SJohn Birrell ProbeData data = e.getProbeData(); 115*2be1a816SJohn Birrell List <Record> records = data.getRecords(); 116*2be1a816SJohn Birrell for (Record r : records) { 117*2be1a816SJohn Birrell if (r instanceof ExitRecord) { 118*2be1a816SJohn Birrell ExitRecord exitRecord = (ExitRecord)r; 119*2be1a816SJohn Birrell exitStatus = exitRecord.getStatus(); 120*2be1a816SJohn Birrell } 121*2be1a816SJohn Birrell } 122*2be1a816SJohn Birrell System.out.println(probeDataString(e.getProbeData())); 123*2be1a816SJohn Birrell } 124*2be1a816SJohn Birrell public void consumerStopped(ConsumerEvent e) { 125*2be1a816SJohn Birrell consumer.close(); 126*2be1a816SJohn Birrell System.exit(exitStatus); 127*2be1a816SJohn Birrell } 128*2be1a816SJohn Birrell }); 129*2be1a816SJohn Birrell 130*2be1a816SJohn Birrell File file = new File(args[0]); 131*2be1a816SJohn Birrell try { 132*2be1a816SJohn Birrell consumer.open(); 133*2be1a816SJohn Birrell consumer.compile(file); 134*2be1a816SJohn Birrell consumer.enable(); 135*2be1a816SJohn Birrell consumer.go(); 136*2be1a816SJohn Birrell } catch (DTraceException e) { 137*2be1a816SJohn Birrell e.printStackTrace(); 138*2be1a816SJohn Birrell System.exit(1); 139*2be1a816SJohn Birrell } catch (IOException e) { 140*2be1a816SJohn Birrell e.printStackTrace(); 141*2be1a816SJohn Birrell System.exit(1); 142*2be1a816SJohn Birrell } 143*2be1a816SJohn Birrell } 144*2be1a816SJohn Birrell } 145