4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
26 * ident "%Z%%M% %I% %E% SMI"
29 import org.opensolaris.os.dtrace.*;
32 * Regression test for the LocalConsumer state machine. Calls Consumer
33 * methods before and after open(), compile(), enable(), go(), stop(),
34 * and close() to verify that the calls succeed as expected or fail with
35 * the expected Java exception.
37 public class TestStateMachine {
38 static Program program;
47 exit(int status, String msg)
50 System.out.println(msg);
58 printState(Consumer consumer)
60 System.out.println("open: " + consumer.isOpen());
61 System.out.println("enabled: " + consumer.isEnabled());
62 System.out.println("closed: " + consumer.isClosed());
66 beforeOpen(Consumer consumer)
68 System.out.println("before open");
73 consumer.compile("syscall:::entry");
74 exit(1, "compile before open");
75 } catch (IllegalStateException e) {
76 System.out.println(e);
77 } catch (Exception e) {
79 exit(1, "compile before open");
85 exit(1, "enable before open");
86 } catch (IllegalStateException e) {
87 System.out.println(e);
88 } catch (Exception e) {
90 exit(1, "enable before open");
93 // getOption, setOption, unsetOption
95 consumer.getOption(Option.bufsize);
96 exit(1, "getOption before open");
97 } catch (IllegalStateException e) {
98 System.out.println(e);
99 } catch (Exception e) {
101 exit(1, "getOption before open");
104 consumer.setOption(Option.bufsize, Option.mb(1));
105 exit(1, "setOption before open");
106 } catch (IllegalStateException e) {
107 System.out.println(e);
108 } catch (Exception e) {
110 exit(1, "setOption before open");
113 consumer.unsetOption(Option.quiet);
114 exit(1, "unsetOption before open");
115 } catch (IllegalStateException e) {
116 System.out.println(e);
117 } catch (Exception e) {
119 exit(1, "unsetOption before open");
122 // createProcess, grabProcess
124 consumer.createProcess("date");
125 exit(1, "createProcess before open");
126 } catch (IllegalStateException e) {
127 System.out.println(e);
128 } catch (Exception e) {
130 exit(1, "createProcess before open");
133 consumer.grabProcess(1);
134 exit(1, "grabProcess before open");
135 } catch (IllegalStateException e) {
136 System.out.println(e);
137 } catch (Exception e) {
139 exit(1, "grabProcess before open");
144 consumer.listProbes(ProbeDescription.EMPTY);
145 exit(1, "listProbes before open");
146 } catch (IllegalStateException e) {
147 System.out.println(e);
148 } catch (Exception e) {
150 exit(1, "listProbes before open");
155 consumer.getAggregate();
156 exit(1, "getAggregate before open");
157 } catch (IllegalStateException e) {
158 System.out.println(e);
159 } catch (Exception e) {
161 exit(1, "getAggregate before open");
166 consumer.getVersion(); // allowed
167 } catch (Exception e) {
169 exit(1, "getVersion before open");
174 beforeCompile(Consumer consumer)
176 System.out.println("before compile");
177 printState(consumer);
182 exit(1, "open after open");
183 } catch (IllegalStateException e) {
184 System.out.println(e);
185 } catch (Exception e) {
187 exit(1, "open after open");
193 exit(1, "enable before compile");
194 } catch (IllegalStateException e) {
195 System.out.println(e);
196 } catch (Exception e) {
198 exit(1, "enable before compile");
203 beforeEnable(Consumer consumer)
205 System.out.println("before enable");
206 printState(consumer);
211 exit(1, "go before enable");
212 } catch (IllegalStateException e) {
213 System.out.println(e);
214 } catch (Exception e) {
216 exit(1, "go before enable");
221 beforeGo(Consumer consumer)
223 System.out.println("before go");
224 printState(consumer);
228 consumer.getAggregate();
229 exit(1, "getAggregate before go");
230 } catch (IllegalStateException e) {
231 System.out.println(e);
232 } catch (Exception e) {
234 exit(1, "getAggregate before go");
237 // lookupKernelFunction, lookupUserFunction
239 consumer.lookupKernelFunction(1);
240 exit(1, "lookupKernelFunction before go");
241 } catch (IllegalStateException e) {
242 System.out.println(e);
243 } catch (Exception e) {
245 exit(1, "lookupKernelFunction before go");
248 consumer.lookupUserFunction(1, 1);
249 exit(1, "lookupUserFunction before go");
250 } catch (IllegalStateException e) {
251 System.out.println(e);
252 } catch (Exception e) {
254 exit(1, "lookupUserFunction before go");
260 exit(1, "stop before go");
261 } catch (IllegalStateException e) {
262 System.out.println(e);
263 } catch (Exception e) {
265 exit(1, "stop before go");
270 afterGo(Consumer consumer, Program program)
272 System.out.println("after go");
273 printState(consumer);
278 exit(1, "go after go");
279 } catch (IllegalStateException e) {
280 System.out.println(e);
281 } catch (Exception e) {
283 exit(1, "go after go");
286 // createProcess, grabProcess
288 consumer.createProcess("date");
289 exit(1, "createProcess after go");
290 } catch (IllegalStateException e) {
291 System.out.println(e);
292 } catch (Exception e) {
294 exit(1, "createProcess after go");
297 consumer.grabProcess(1);
298 exit(1, "grabProcess after go");
299 } catch (IllegalStateException e) {
300 System.out.println(e);
301 } catch (Exception e) {
303 exit(1, "grabProcess after go");
308 consumer.listProbes(ProbeDescription.EMPTY);
309 exit(1, "listProbes after go");
310 } catch (IllegalStateException e) {
311 System.out.println(e);
312 } catch (Exception e) {
314 exit(1, "listProbes after go");
319 consumer.compile("syscall:::entry");
320 exit(1, "compile after go");
321 } catch (IllegalStateException e) {
322 System.out.println(e);
323 } catch (Exception e) {
325 exit(1, "compile after go");
331 exit(1, "enable after go");
332 } catch (IllegalStateException e) {
333 System.out.println(e);
334 } catch (Exception e) {
336 exit(1, "enable after go");
341 consumer.getAggregate();
342 } catch (Exception e) {
344 exit(1, "getAggregate after go");
349 consumer.getProgramInfo(program);
350 } catch (Exception e) {
352 exit(1, "getProgramInfo after go");
355 // getOption, setOption, unsetOption
357 consumer.getOption(Option.quiet);
358 consumer.setOption(Option.quiet);
359 consumer.unsetOption(Option.quiet);
360 } catch (Exception e) {
362 exit(1, "get, set, unset option after go");
367 afterStop(Consumer consumer, Program program)
369 System.out.println("after stop");
370 printState(consumer);
375 exit(1, "stop after stop");
376 } catch (IllegalStateException e) {
377 System.out.println(e);
378 } catch (Exception e) {
380 exit(1, "stop after stop");
385 consumer.getAggregate();
386 } catch (Exception e) {
388 exit(1, "getAggregate after stop");
393 consumer.getProgramInfo(program);
394 } catch (Exception e) {
396 exit(1, "getProgramInfo after stop");
399 // getOption, setOption, unsetOption
401 consumer.getOption(Option.quiet);
402 consumer.setOption(Option.quiet);
403 consumer.unsetOption(Option.quiet);
404 } catch (Exception e) {
406 exit(1, "get, set, unset option after stop");
411 afterClose(Consumer consumer, Program program)
413 System.out.println("after close");
414 printState(consumer);
419 exit(1, "open after close");
420 } catch (IllegalStateException e) {
421 System.out.println(e);
422 } catch (Exception e) {
424 exit(1, "open after close");
429 consumer.compile("syscall:::entry");
430 exit(1, "compile after close");
431 } catch (IllegalStateException e) {
432 System.out.println(e);
433 } catch (Exception e) {
435 exit(1, "compile after close");
441 exit(1, "enable after close");
442 } catch (IllegalStateException e) {
443 System.out.println(e);
444 } catch (Exception e) {
446 exit(1, "enable after close");
449 // getOption, setOption, unsetOption
451 consumer.getOption(Option.bufsize);
452 exit(1, "getOption after close");
453 } catch (IllegalStateException e) {
454 System.out.println(e);
455 } catch (Exception e) {
457 exit(1, "getOption after close");
460 consumer.setOption(Option.bufsize, Option.mb(1));
461 exit(1, "setOption after close");
462 } catch (IllegalStateException e) {
463 System.out.println(e);
464 } catch (Exception e) {
466 exit(1, "setOption after close");
469 consumer.unsetOption(Option.quiet);
470 exit(1, "unsetOption after close");
471 } catch (IllegalStateException e) {
472 System.out.println(e);
473 } catch (Exception e) {
475 exit(1, "unsetOption after close");
478 // createProcess, grabProcess
480 consumer.createProcess("date");
481 exit(1, "createProcess after close");
482 } catch (IllegalStateException e) {
483 System.out.println(e);
484 } catch (Exception e) {
486 exit(1, "createProcess after close");
489 consumer.grabProcess(1);
490 exit(1, "grabProcess after close");
491 } catch (IllegalStateException e) {
492 System.out.println(e);
493 } catch (Exception e) {
495 exit(1, "grabProcess after close");
500 consumer.listProbes(ProbeDescription.EMPTY);
501 exit(1, "listProbes after close");
502 } catch (IllegalStateException e) {
503 System.out.println(e);
504 } catch (Exception e) {
506 exit(1, "listProbes after close");
511 consumer.getAggregate();
512 exit(1, "getAggregate after close");
513 } catch (IllegalStateException e) {
514 System.out.println(e);
515 } catch (Exception e) {
517 exit(1, "getAggregate after close");
522 consumer.getVersion(); // allowed
523 } catch (Exception e) {
525 exit(1, "getVersion after close");
531 exit(1, "go after close");
532 } catch (IllegalStateException e) {
533 System.out.println(e);
534 } catch (Exception e) {
536 exit(1, "go after close");
539 // lookupKernelFunction, lookupUserFunction
541 consumer.lookupKernelFunction(1);
542 exit(1, "lookupKernelFunction after close");
543 } catch (IllegalStateException e) {
544 System.out.println(e);
545 } catch (Exception e) {
547 exit(1, "lookupKernelFunction after close");
550 consumer.lookupUserFunction(1, 1);
551 exit(1, "lookupUserFunction after close");
552 } catch (IllegalStateException e) {
553 System.out.println(e);
554 } catch (Exception e) {
556 exit(1, "lookupUserFunction after close");
562 exit(1, "stop after close");
563 } catch (IllegalStateException e) {
564 System.out.println(e);
565 } catch (Exception e) {
567 exit(1, "stop after close");
572 consumer.getProgramInfo(program);
573 exit(1, "getProgramInfo after close");
574 } catch (IllegalStateException e) {
575 System.out.println(e);
576 } catch (Exception e) {
578 exit(1, "getProgramInfo after close");
585 final Consumer consumer = new LocalConsumer();
586 consumer.addConsumerListener(new ConsumerAdapter() {
587 public void consumerStarted(ConsumerEvent e) {
588 System.out.println("consumerStarted, running: " +
589 consumer.isRunning());
590 afterGo(consumer, program);
592 public void consumerStopped(ConsumerEvent e) {
593 System.out.println("consumerStopped, running: " +
594 consumer.isRunning());
599 beforeOpen(consumer);
601 beforeCompile(consumer);
602 program = consumer.compile(
603 "syscall:::entry { @[execname] = count(); } " +
604 "tick-101ms { printa(@); }");
605 beforeEnable(consumer);
608 System.out.println("before go, running: " + consumer.isRunning());
610 // Avoid race, call afterGo() in ConsumerListener
612 Thread.currentThread().sleep(300);
613 } catch (InterruptedException e) {
618 System.out.println("after stop, running: " + consumer.isRunning());
619 afterStop(consumer, program);
621 afterClose(consumer, program);
622 } catch (DTraceException e) {