ctf: Introduce IEventDefinition
[deliverable/tracecompass.git] / ctf / org.eclipse.tracecompass.ctf.core.tests / src / org / eclipse / tracecompass / ctf / core / tests / trace / CTFStreamInputReaderTest.java
... / ...
CommitLineData
1/*******************************************************************************
2 * Copyright (c) 2013, 2014 Ericsson
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * Matthew Khouzam - Initial API and implementation
10 *******************************************************************************/
11
12package org.eclipse.tracecompass.ctf.core.tests.trace;
13
14import static org.junit.Assert.assertEquals;
15import static org.junit.Assert.assertNotNull;
16
17import java.io.File;
18import java.io.IOException;
19import java.util.Set;
20
21import org.eclipse.tracecompass.ctf.core.CTFException;
22import org.eclipse.tracecompass.ctf.core.event.IEventDefinition;
23import org.eclipse.tracecompass.ctf.core.event.types.Definition;
24import org.eclipse.tracecompass.ctf.core.event.types.Encoding;
25import org.eclipse.tracecompass.ctf.core.event.types.ICompositeDefinition;
26import org.eclipse.tracecompass.ctf.core.event.types.StringDeclaration;
27import org.eclipse.tracecompass.ctf.core.event.types.StringDefinition;
28import org.eclipse.tracecompass.ctf.core.event.types.StructDeclaration;
29import org.eclipse.tracecompass.ctf.core.event.types.StructDefinition;
30import org.eclipse.tracecompass.ctf.core.tests.shared.CtfTestTraceUtils;
31import org.eclipse.tracecompass.ctf.core.trace.CTFResponse;
32import org.eclipse.tracecompass.ctf.core.trace.CTFStreamInput;
33import org.eclipse.tracecompass.ctf.core.trace.CTFStreamInputReader;
34import org.eclipse.tracecompass.ctf.core.trace.CTFTrace;
35import org.eclipse.tracecompass.ctf.core.trace.ICTFStream;
36import org.eclipse.tracecompass.internal.ctf.core.event.EventDeclaration;
37import org.eclipse.tracecompass.internal.ctf.core.event.EventDefinition;
38import org.eclipse.tracecompass.internal.ctf.core.trace.CTFStream;
39import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
40import org.junit.Before;
41import org.junit.Test;
42
43/**
44 * The class <code>StreamInputReaderTest</code> contains tests for the class
45 * <code>{@link CTFStreamInputReader}</code>.
46 *
47 * @author Matthew Khouzam
48 */
49@SuppressWarnings("javadoc")
50public class CTFStreamInputReaderTest {
51
52 private static final CtfTestTrace testTrace = CtfTestTrace.KERNEL;
53
54 private CTFStreamInputReader fixture;
55
56 /**
57 * Perform pre-test initialization.
58 *
59 * @throws CTFException
60 */
61 @Before
62 public void setUp() throws CTFException {
63 fixture = getStreamInputReader();
64 fixture.setName(1);
65 fixture.setCurrentEvent(new EventDefinition(new EventDeclaration(),
66 fixture.getCPU(), 0, null, null, null,
67 new StructDefinition(
68 new StructDeclaration(0),
69 null,
70 "packet",
71 new Definition[] { new StringDefinition(StringDeclaration.getStringDeclaration(Encoding.UTF8), null, "field", "test") }),
72 null, fixture.getCurrentPacketReader().getCurrentPacket()));
73 }
74
75 private static CTFStreamInputReader getStreamInputReader() throws CTFException {
76 CTFTrace trace = CtfTestTraceUtils.getTrace(testTrace);
77 ICTFStream s = trace.getStream((long) 0);
78 Set<CTFStreamInput> streamInput = s.getStreamInputs();
79 CTFStreamInputReader retVal = null;
80 for (CTFStreamInput si : streamInput) {
81 /*
82 * For the tests, we'll use the stream input corresponding to the
83 * CPU 0
84 */
85 if (si.getFilename().endsWith("0_0")) {
86 retVal = new CTFStreamInputReader(si);
87 break;
88 }
89 }
90 return retVal;
91 }
92
93 /**
94 * Run the StreamInputReader(StreamInput) constructor test, with a valid
95 * trace.
96 */
97 @Test
98 public void testStreamInputReader_valid() {
99 assertNotNull(fixture);
100 }
101
102 /**
103 * Run the StreamInputReader(StreamInput) constructor test, with an invalid
104 * trace.
105 *
106 * @throws CTFException
107 * @throws IOException
108 */
109 @Test(expected = CTFException.class)
110 public void testStreamInputReader_invalid() throws CTFException, IOException {
111 CTFStreamInput streamInput = new CTFStreamInput(new CTFStream(new CTFTrace("")), new File(""));
112 try (CTFStreamInputReader result = new CTFStreamInputReader(streamInput)) {
113 assertNotNull(result);
114 }
115 }
116
117 /**
118 * Run the int getCPU() method test.
119 */
120 @Test
121 public void testGetCPU() {
122 int result = fixture.getCPU();
123 assertEquals(0, result);
124 }
125
126 /**
127 * Run the EventDefinition getCurrentEvent() method test.
128 */
129 @Test
130 public void testGetCurrentEvent() {
131 assertNotNull(fixture.getCurrentEvent());
132 }
133
134 /**
135 * Run the StructDefinition getCurrentPacketContext() method test.
136 */
137 @Test
138 public void testGetCurrentPacketContext() {
139 IEventDefinition currentEvent = fixture.getCurrentEvent();
140 assertNotNull(currentEvent);
141 ICompositeDefinition result = currentEvent.getPacketContext();
142 assertNotNull(result);
143 }
144
145 /**
146 * Run the int getName() method test.
147 */
148 @Test
149 public void testGetName() {
150 int result = fixture.getName();
151 assertEquals(1, result);
152 }
153
154 /**
155 * Run the void goToLastEvent() method test.
156 *
157 * @throws CTFException
158 * error
159 */
160 @Test
161 public void testGoToLastEvent1() throws CTFException {
162 final long endTimestamp = goToEnd();
163 final long endTime = 4287422460315L;
164 assertEquals(endTime, endTimestamp);
165 }
166
167 /**
168 * Run the void goToLastEvent() method test.
169 *
170 * @throws CTFException
171 * error
172 */
173 @Test
174 public void testGoToLastEvent2() throws CTFException {
175 long timestamp = -1;
176 while (fixture.readNextEvent().equals(CTFResponse.OK)) {
177 IEventDefinition currentEvent = fixture.getCurrentEvent();
178 assertNotNull(currentEvent);
179 timestamp = currentEvent.getTimestamp();
180 }
181 long endTimestamp = goToEnd();
182 assertEquals(0, timestamp - endTimestamp);
183 }
184
185 private long goToEnd() throws CTFException {
186 fixture.goToLastEvent();
187 IEventDefinition currentEvent = fixture.getCurrentEvent();
188 assertNotNull(currentEvent);
189 return currentEvent.getTimestamp();
190 }
191
192 /**
193 * Run the boolean readNextEvent() method test.
194 *
195 * @throws CTFException
196 * error
197 */
198 @Test
199 public void testReadNextEvent() throws CTFException {
200 assertEquals(CTFResponse.OK, fixture.readNextEvent());
201 }
202
203 /**
204 * Run the void seek(long) method test. Seek by direct timestamp
205 *
206 * @throws CTFException
207 * error
208 */
209 @Test
210 public void testSeek_timestamp() throws CTFException {
211 long timestamp = 1L;
212 fixture.seek(timestamp);
213 }
214
215 /**
216 * Run the seek test. Seek by passing an EventDefinition to which we've
217 * given the timestamp we want.
218 *
219 * @throws CTFException
220 * error
221 * @throws IOException
222 * file not there
223 */
224 @Test
225 public void testSeek_eventDefinition() throws CTFException, IOException {
226 try (CTFStreamInputReader streamInputReader = getStreamInputReader()) {
227 EventDefinition eventDefinition = new EventDefinition(
228 new EventDeclaration(), streamInputReader.getCPU(), 1L, null, null, null, null, null, streamInputReader.getCurrentPacketReader().getCurrentPacket());
229 fixture.setCurrentEvent(eventDefinition);
230 }
231 }
232}
This page took 0.032065 seconds and 5 git commands to generate.