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
9 * Matthew Khouzam - Initial API and implementation
10 *******************************************************************************/
12 package org
.eclipse
.tracecompass
.ctf
.core
.tests
.trace
;
14 import static org
.junit
.Assert
.*;
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
;
28 import org
.eclipse
.tracecompass
.ctf
.core
.trace
.CTFReaderException
;
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
;
35 * Tests growing streams
37 * @author Matthew Khouzam
40 public class CTFTraceGrowingStreamTest
{
42 private Path fCtfDirectory
;
43 private File fGrowingStream
;
44 private byte[][] fPackets
;
45 private CTFTrace fFixture
;
49 * Run before every test
51 * @throws IOException won't happen
52 * @throws CTFReaderException won't happen
55 public void init() throws IOException
, CTFReaderException
{
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;");
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];");
79 pw
.println("stream {");
80 pw
.println(" packet.context := struct {");
81 pw
.println(" uint32_t packet_size;");
82 pw
.println(" uint32_t content_size;");
86 pw
.println("event {");
87 pw
.println(" name = thing;");
88 pw
.println(" fields := struct { uint32_t f; };");
93 setupPacket(fPackets
[0], 41);
94 setupPacket(fPackets
[1], 0xbab4face);
96 try (FileOutputStream fos
= new FileOutputStream(fGrowingStream
)) {
97 fos
.write(fPackets
[0]);
99 fFixture
= new CTFTrace(fCtfDirectory
.toString());
102 private void setupPacket(byte data
[], int value
) {
103 ByteBuffer bb
= ByteBuffer
.wrap(data
);
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
);
117 * Test a growing stream
119 * @throws CTFReaderException won't happen
120 * @throws IOException won't happen
121 * @throws FileNotFoundException won't happen
124 public void testGrowingLive() throws CTFReaderException
, FileNotFoundException
, IOException
{
125 try (CTFTraceReader reader
= new CTFTraceReader(fFixture
);) {
126 reader
.setLive(true);
127 assertEquals("0x29", reader
.getCurrentEventDef().getFields().getDefinition("f").toString());
129 try (FileOutputStream fos
= new FileOutputStream(fGrowingStream
, true)) {
130 fos
.write(fPackets
[1]);
133 assertNotNull(reader
.getCurrentEventDef());
134 assertEquals("0xbab4face", reader
.getCurrentEventDef().getFields().getDefinition("f").toString());
139 * Test a growing stream
141 * @throws CTFReaderException won't happen
142 * @throws IOException won't happen
143 * @throws FileNotFoundException won't happen
146 public void testGrowingNotLive() throws CTFReaderException
, FileNotFoundException
, IOException
{
147 try (CTFTraceReader reader
= new CTFTraceReader(fFixture
);) {
148 reader
.setLive(false);
149 assertEquals("0x29", reader
.getCurrentEventDef().getFields().getDefinition("f").toString());
151 try (FileOutputStream fos
= new FileOutputStream(fGrowingStream
, true)) {
152 fos
.write(fPackets
[1]);
155 assertNull(reader
.getCurrentEventDef());