blob: 5ef43ba809467219e9bae5ae9f5305742ec4a060 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Ericsson
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors: Matthew Khouzam - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.ctf.core.tests.trace;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import org.eclipse.tracecompass.ctf.core.CTFException;
import org.eclipse.tracecompass.ctf.core.event.IEventDefinition;
import org.eclipse.tracecompass.ctf.core.tests.shared.LttngTraceGenerator;
import org.eclipse.tracecompass.ctf.core.trace.CTFTrace;
import org.eclipse.tracecompass.ctf.core.trace.CTFTraceReader;
import org.eclipse.tracecompass.ctf.core.trace.Metadata;
import org.junit.Before;
import org.junit.Test;
/**
* Tests for streaming support
*
* @author Matthew Khouzam
*
*/
public class CTFTraceGrowingTest {
private static final String METADATA = "metadata";
private final String fPathName = LttngTraceGenerator.getPath();
private final CTFTrace fixture = new CTFTrace();
/**
* Init
*
* @throws IOException
* an IO error
* @throws FileNotFoundException
* file's not there
* @throws CTFException
* error in metadata
*/
@Before
public void init() throws FileNotFoundException, IOException, CTFException {
Metadata md = new Metadata(fixture);
File metadata = new File(fPathName + File.separator + METADATA);
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(metadata)))) {
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
String result = sb.toString();
md.parseText(result);
}
}
/**
* Empty trace test
*
* @throws CTFException
* will not happen
*/
@Test
public void testEmptyStream() throws CTFException {
try (CTFTraceReader reader = new CTFTraceReader(fixture);) {
assertNull(reader.getCurrentEventDef());
}
}
/**
* Add a stream
*
* @throws CTFException
* should not happen
*/
@Test
public void testAddStream() throws CTFException {
File stream = new File(fPathName + File.separator + "channel1");
try (CTFTraceReader reader = new CTFTraceReader(fixture);) {
fixture.addStreamFile(stream);
reader.update();
assertTrue(reader.advance());
assertNotNull(reader.getCurrentEventDef());
}
}
/**
* Adds two a stream
*
* @throws CTFException
* should not happen
*/
@Test
public void testAddTwoStreams1() throws CTFException {
File stream = new File(fPathName + File.separator + "channel1");
try (CTFTraceReader reader = new CTFTraceReader(fixture);) {
fixture.addStreamFile(stream);
stream = new File(fPathName + File.separator + "channel2");
fixture.addStreamFile(stream);
reader.update();
assertTrue(reader.advance());
IEventDefinition currentEventDef = reader.getCurrentEventDef();
assertNotNull(reader.getCurrentEventDef());
assertEquals(16524l, currentEventDef.getTimestamp());
}
}
/**
* Adds two a stream
*
* @throws CTFException
* should not happen
*/
@Test
public void testAddTwoStreams2() throws CTFException {
File stream = new File(fPathName + File.separator + "channel1");
try (CTFTraceReader reader = new CTFTraceReader(fixture);) {
fixture.addStreamFile(stream);
stream = new File(fPathName + File.separator + "channel2");
reader.update();
assertTrue(reader.advance());
fixture.addStreamFile(stream);
reader.update();
assertTrue(reader.advance());
IEventDefinition currentEventDef = reader.getCurrentEventDef();
assertNotNull(currentEventDef);
assertEquals(223096L, currentEventDef.getTimestamp());
}
}
/**
* Tests that update does not change the position
*
* @throws CTFException
* should not happen
*/
@Test
public void testAddTwoStreams3() throws CTFException {
File stream = new File(fPathName + File.separator + "channel1");
try (CTFTraceReader reader = new CTFTraceReader(fixture);) {
fixture.addStreamFile(stream);
stream = new File(fPathName + File.separator + "channel2");
reader.update();
reader.update();
reader.update();
assertTrue(reader.advance());
fixture.addStreamFile(stream);
reader.update();
reader.update();
reader.update();
reader.update();
assertTrue(reader.advance());
IEventDefinition currentEventDef = reader.getCurrentEventDef();
assertNotNull(currentEventDef);
assertEquals(223096L, currentEventDef.getTimestamp());
}
}
/**
* Test adding a bad stream
*
* @throws CTFException
* should not happen
*/
@Test
public void testAddStreamFail() throws CTFException {
File stream = new File(fPathName + File.separator + METADATA);
try (CTFTraceReader reader = new CTFTraceReader(fixture);) {
fixture.addStreamFile(stream);
assertNull(reader.getCurrentEventDef());
}
}
}