1 /*******************************************************************************
2 * Copyright (c) 2013 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Alexandre Montplaisir - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.core
.tests
.ctfadaptor
;
15 import static org
.junit
.Assert
.assertArrayEquals
;
16 import static org
.junit
.Assert
.assertEquals
;
17 import static org
.junit
.Assume
.assumeTrue
;
19 import org
.eclipse
.linuxtools
.tmf
.core
.ctfadaptor
.CtfEnumPair
;
20 import org
.eclipse
.linuxtools
.tmf
.core
.ctfadaptor
.CtfTmfEvent
;
21 import org
.eclipse
.linuxtools
.tmf
.core
.ctfadaptor
.CtfTmfTrace
;
22 import org
.eclipse
.linuxtools
.tmf
.core
.event
.ITmfEvent
;
23 import org
.eclipse
.linuxtools
.tmf
.core
.event
.ITmfEventField
;
24 import org
.eclipse
.linuxtools
.tmf
.core
.request
.TmfEventRequest
;
25 import org
.eclipse
.linuxtools
.tmf
.core
.tests
.shared
.CtfTmfTestTrace
;
26 import org
.eclipse
.linuxtools
.tmf
.core
.timestamp
.TmfTimeRange
;
27 import org
.junit
.AfterClass
;
28 import org
.junit
.BeforeClass
;
29 import org
.junit
.Rule
;
30 import org
.junit
.Test
;
31 import org
.junit
.rules
.TestRule
;
32 import org
.junit
.rules
.Timeout
;
35 * More advanced CTF tests using "funky_trace", a trace generated with the
36 * Babeltrace CTF writer API, which has lots of fun things like different
37 * integer/float sizes and non-standard struct alignments.
39 * @author Alexandre Montplaisir
41 public class FunkyTraceTest
{
43 /** Time-out tests after 20 seconds */
45 public TestRule globalTimeout
= new Timeout(20000);
47 // ------------------------------------------------------------------------
49 // ------------------------------------------------------------------------
51 private static final CtfTmfTestTrace testTrace
= CtfTmfTestTrace
.FUNKY_TRACE
;
52 private static final double DELTA
= 0.0000001;
54 private static CtfTmfTrace fTrace
;
56 // ------------------------------------------------------------------------
58 // ------------------------------------------------------------------------
64 public static void setupClass() {
65 assumeTrue(testTrace
.exists());
66 fTrace
= testTrace
.getTrace();
67 fTrace
.indexTrace(true);
74 public static void tearDownClass() {
78 // ------------------------------------------------------------------------
80 // ------------------------------------------------------------------------
83 * Verify the contents of the first event
86 public void testFirstEvent() {
87 CtfTmfEvent event
= getEvent(0);
88 assertEquals("Simple Event", event
.getType().getName());
89 assertEquals(1234567, event
.getTimestamp().getValue());
90 assertEquals(42, ((Long
) event
.getContent().getField("integer_field").getValue()).intValue());
91 assertEquals(3.1415, ((Double
) event
.getContent().getField("float_field").getValue()).doubleValue(), DELTA
);
95 * Verify the contents of the second event (the first "spammy event")
98 public void testSecondEvent() {
99 CtfTmfEvent event
= getEvent(1);
100 assertEquals("Spammy_Event", event
.getType().getName());
101 assertEquals(1234568, event
.getTimestamp().getValue());
102 assertEquals(0, ((Long
) event
.getContent().getField("field_1").getValue()).intValue());
103 assertEquals("This is a test", event
.getContent().getField("a_string").getValue());
107 * Verify the contents of the last "spammy event"
110 public void testSecondToLastEvent() {
111 CtfTmfEvent event
= getEvent(100000);
112 assertEquals("Spammy_Event", event
.getType().getName());
113 assertEquals(1334567, event
.getTimestamp().getValue());
114 assertEquals(99999, ((Long
) event
.getContent().getField("field_1").getValue()).intValue());
115 assertEquals("This is a test", event
.getContent().getField("a_string").getValue());
119 * Verify the contents of the last, complex event
122 public void testLastEvent() {
124 * Last event as seen in Babeltrace:
125 * [19:00:00.001334568] (+0.000000001) Complex Test Event: { }, {
126 * uint_35 = 0xDDF00D,
128 * complex_structure = {
129 * variant_selector = ( INT16_TYPE : container = 1 ),
130 * a_string = "Test string",
131 * variant_value = { INT16_TYPE = -200 },
132 * inner_structure = {
134 * a_sequence = [ [0] = 4, [1] = 3, [2] = 2, [3] = 1, [4] = 0, [5] = -1, [6] = -2, [7] = -3, [8] = -4, [9] = -5 ]
140 CtfTmfEvent event
= getEvent(100001);
141 assertEquals("Complex Test Event", event
.getType().getName());
142 assertEquals(1334568, event
.getTimestamp().getValue());
143 assertEquals(0xddf00d, ((Long
) event
.getContent().getField("uint_35").getValue()).intValue());
144 assertEquals(-12345, ((Long
) event
.getContent().getField("int_16").getValue()).intValue());
146 ITmfEventField
[] complexStruct
=
147 (ITmfEventField
[]) event
.getContent().getField("complex_structure").getValue();
149 assertEquals("variant_selector", complexStruct
[0].getName());
150 CtfEnumPair variant1
= (CtfEnumPair
) complexStruct
[0].getValue();
151 assertEquals("INT16_TYPE", variant1
.getStringValue());
152 assertEquals(Long
.valueOf(1), variant1
.getLongValue());
154 assertEquals("a_string", complexStruct
[1].getName());
155 assertEquals("Test string", complexStruct
[1].getValue());
157 assertEquals("variant_value", complexStruct
[2].getName());
158 ITmfEventField variantField
= (ITmfEventField
) complexStruct
[2].getValue();
159 assertEquals("INT16_TYPE", variantField
.getName());
160 assertEquals(Long
.valueOf(-200), variantField
.getValue());
162 ITmfEventField
[] innerStruct
= (ITmfEventField
[]) complexStruct
[3].getValue();
164 assertEquals("seq_len", innerStruct
[0].getName());
165 assertEquals(Long
.valueOf(10), innerStruct
[0].getValue());
167 assertEquals("a_sequence", innerStruct
[1].getName());
168 long[] seqValues
= (long[]) innerStruct
[1].getValue();
169 long[] expectedValues
= { 4, 3, 2, 1, 0, -1, -2, -3, -4, -5 };
170 assertArrayEquals(expectedValues
, seqValues
);
173 // ------------------------------------------------------------------------
175 // ------------------------------------------------------------------------
177 private synchronized CtfTmfEvent
getEvent(long index
) {
178 TestEventRequest req
= new TestEventRequest(index
);
179 fTrace
.sendRequest(req
);
181 req
.waitForCompletion();
182 } catch (InterruptedException e
) {
185 return req
.getEvent();
188 private class TestEventRequest
extends TmfEventRequest
{
190 private CtfTmfEvent fRetEvent
= null;
192 public TestEventRequest(long index
) {
193 super(CtfTmfEvent
.class,
194 TmfTimeRange
.ETERNITY
,
197 ExecutionType
.FOREGROUND
);
201 public void handleData(ITmfEvent event
) {
202 fRetEvent
= (CtfTmfEvent
) event
;
205 public CtfTmfEvent
getEvent() {