f7342b54e56559cbc80e7ed60e195f2a64e2689f
[deliverable/tracecompass.git] / ctf / org.eclipse.tracecompass.ctf.core.tests / src / org / eclipse / tracecompass / ctf / core / tests / trace / CTFTraceGrowingStreamTest.java
1 /*******************************************************************************
2 * Copyright (c) 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
12 package org.eclipse.tracecompass.ctf.core.tests.trace;
13
14 import static org.junit.Assert.*;
15
16 import java.io.File;
17 import java.io.FileNotFoundException;
18 import java.io.FileOutputStream;
19 import java.io.IOException;
20 import java.io.PrintWriter;
21 import java.nio.ByteBuffer;
22 import java.nio.ByteOrder;
23 import java.nio.file.Files;
24 import java.nio.file.Path;
25 import java.nio.file.attribute.FileAttribute;
26 import java.util.UUID;
27
28 import org.eclipse.tracecompass.ctf.core.CTFException;
29 import org.eclipse.tracecompass.ctf.core.trace.CTFTrace;
30 import org.eclipse.tracecompass.ctf.core.trace.CTFTraceReader;
31 import org.junit.Before;
32 import org.junit.Test;
33
34 /**
35 * Tests growing streams
36 *
37 * @author Matthew Khouzam
38 *
39 */
40 public class CTFTraceGrowingStreamTest {
41
42 private Path fCtfDirectory;
43 private File fGrowingStream;
44 private byte[][] fPackets;
45 private CTFTrace fFixture;
46 private UUID fUUID;
47
48 /**
49 * Run before every test
50 *
51 * @throws IOException won't happen
52 * @throws CTFException won't happen
53 */
54 @Before
55 public void init() throws IOException, CTFException {
56 fCtfDirectory = Files.createTempDirectory("temptrace", new FileAttribute<?>[] {});
57 File metadata = new File(fCtfDirectory.toString() + "/" + "metadata");
58 fGrowingStream = new File(fCtfDirectory.toString() + "/" + "stream");
59 fUUID = UUID.randomUUID();
60 fPackets = new byte[2][];
61 fPackets[0] = new byte[32];
62 fPackets[1] = new byte[32];
63 try (PrintWriter pw = new PrintWriter(metadata)) {
64 pw.println("/*CTF 1.8*/");
65 pw.println("typealias integer { size = 8; align = 8; signed = false; base = 10; } := uint8_t;");
66 pw.println("typealias integer { size = 32; align = 32; signed = false; base = hex; } := uint32_t;");
67
68 pw.println("trace {");
69 pw.println(" major = 0;");
70 pw.println(" minor = 1;");
71 pw.println(" uuid = \"" + fUUID.toString() + "\";");
72 pw.println(" byte_order = le;");
73 pw.println(" packet.header := struct {");
74 pw.println(" uint32_t magic;");
75 pw.println(" uint8_t uuid[16];");
76 pw.println(" };");
77 pw.println("};");
78 pw.println("");
79 pw.println("stream {");
80 pw.println(" packet.context := struct {");
81 pw.println(" uint32_t packet_size;");
82 pw.println(" uint32_t content_size;");
83 pw.println(" };");
84 pw.println("};");
85 pw.println("");
86 pw.println("event {");
87 pw.println(" name = thing;");
88 pw.println(" fields := struct { uint32_t f; };");
89 pw.println("};");
90 pw.println("");
91 pw.close();
92 }
93 setupPacket(fPackets[0], 41);
94 setupPacket(fPackets[1], 0xbab4face);
95
96 try (FileOutputStream fos = new FileOutputStream(fGrowingStream)) {
97 fos.write(fPackets[0]);
98 }
99 fFixture = new CTFTrace(fCtfDirectory.toString());
100 }
101
102 private void setupPacket(byte data[], int value) {
103 ByteBuffer bb = ByteBuffer.wrap(data);
104 bb.clear();
105 bb.order(ByteOrder.LITTLE_ENDIAN);
106 bb.putInt(0xc1fc1fc1);
107 bb.order(ByteOrder.BIG_ENDIAN);
108 bb.putLong(fUUID.getMostSignificantBits());
109 bb.putLong(fUUID.getLeastSignificantBits());
110 bb.order(ByteOrder.LITTLE_ENDIAN);
111 bb.putInt(256);
112 bb.putInt(256);
113 bb.putInt(value);
114 }
115
116 /**
117 * Test a growing stream
118 *
119 * @throws CTFException won't happen
120 * @throws IOException won't happen
121 * @throws FileNotFoundException won't happen
122 */
123 @Test
124 public void testGrowingLive() throws CTFException, FileNotFoundException, IOException {
125 try (CTFTraceReader reader = new CTFTraceReader(fFixture);) {
126 reader.setLive(true);
127 assertEquals("0x29", reader.getCurrentEventDef().getFields().getDefinition("f").toString());
128 reader.advance();
129 try (FileOutputStream fos = new FileOutputStream(fGrowingStream, true)) {
130 fos.write(fPackets[1]);
131 }
132 reader.advance();
133 assertNotNull(reader.getCurrentEventDef());
134 assertEquals("0xbab4face", reader.getCurrentEventDef().getFields().getDefinition("f").toString());
135 }
136 }
137
138 /**
139 * Test a growing stream
140 *
141 * @throws CTFException won't happen
142 * @throws IOException won't happen
143 * @throws FileNotFoundException won't happen
144 */
145 @Test
146 public void testGrowingNotLive() throws CTFException, FileNotFoundException, IOException {
147 try (CTFTraceReader reader = new CTFTraceReader(fFixture);) {
148 reader.setLive(false);
149 assertEquals("0x29", reader.getCurrentEventDef().getFields().getDefinition("f").toString());
150 reader.advance();
151 try (FileOutputStream fos = new FileOutputStream(fGrowingStream, true)) {
152 fos.write(fPackets[1]);
153 }
154 reader.advance();
155 assertNull(reader.getCurrentEventDef());
156 }
157 }
158 }
This page took 0.03422 seconds and 4 git commands to generate.