blob: 23f56c3ab29b6ff05ae014f09f72477d658a4667 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2015 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:
* Alexandre Montplaisir - Initial API and implementation
* Bernd Hufmann - Use state system analysis module instead of factory
******************************************************************************/
package org.eclipse.tracecompass.lttng2.kernel.core.tests.analysis.kernel.statesystem;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.analysis.os.linux.core.kernel.KernelAnalysisModule;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils;
import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* State system tests using a full history back-end and the LTTng kernel state
* input.
*
* @author Alexandre Montplaisir
*/
public class StateSystemFullHistoryTest extends StateSystemTest {
private static final @NonNull String TEST_FILE_NAME = "test.ht";
private static final @NonNull String BENCHMARK_FILE_NAME = "test.benchmark.ht";
private static CtfTmfTrace trace;
private static File stateFile;
private static File stateFileBenchmark;
private static TestLttngKernelAnalysisModule module;
/**
* Test class setup
*/
@BeforeClass
public static void initialize() {
trace = CtfTmfTestTraceUtils.getTrace(testTrace);
stateFile = createStateFile(TEST_FILE_NAME);
stateFileBenchmark = createStateFile(BENCHMARK_FILE_NAME);
module = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
try {
assertTrue(module.setTrace(trace));
} catch (TmfAnalysisException e) {
fail();
}
module.schedule();
assertTrue(module.waitForCompletion());
fixture = module.getStateSystem();
}
/**
* Clean-up
*/
@AfterClass
public static void cleanup() {
if (module != null) {
module.dispose();
}
if (stateFile != null) {
stateFile.delete();
}
if (stateFileBenchmark != null) {
stateFileBenchmark.delete();
}
if (fixture != null) {
fixture.dispose();
}
if (trace != null) {
trace.dispose();
}
module = null;
fixture = null;
trace = null;
}
// ------------------------------------------------------------------------
// Tests specific to a full-history
// ------------------------------------------------------------------------
/**
* Rebuild independently so we can benchmark it. Too bad JUnit doesn't allow
* us to @Test the @BeforeClass...
*/
@Test
public void testBuild() {
TestLttngKernelAnalysisModule module2 = new TestLttngKernelAnalysisModule(BENCHMARK_FILE_NAME);
try {
assertTrue(module2.setTrace(trace));
} catch (TmfAnalysisException e) {
module2.dispose();
fail();
}
module2.schedule();
assertTrue(module2.waitForCompletion());
ITmfStateSystem ssb2 = module2.getStateSystem();
assertNotNull(ssb2);
assertEquals(startTime, ssb2.getStartTime());
assertEquals(endTime, ssb2.getCurrentEndTime());
module2.dispose();
}
/**
* Test re-opening the existing file.
*/
@Test
public void testOpenExistingStateFile() {
/* 'newStateFile' should have already been created */
TestLttngKernelAnalysisModule module2 = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
try {
assertTrue(module2.setTrace(trace));
} catch (TmfAnalysisException e) {
module2.dispose();
fail();
}
module2.schedule();
assertTrue(module2.waitForCompletion());
ITmfStateSystem ssb2 = module2.getStateSystem();
assertNotNull(ssb2);
assertEquals(startTime, ssb2.getStartTime());
assertEquals(endTime, ssb2.getCurrentEndTime());
module2.dispose();
}
@NonNullByDefault
private static class TestLttngKernelAnalysisModule extends KernelAnalysisModule {
private final String htFileName;
/**
* Constructor adding the views to the analysis
* @param htFileName
* The History File Name
*/
public TestLttngKernelAnalysisModule(String htFileName) {
super();
this.htFileName = htFileName;
}
@Override
public boolean setTrace(@Nullable ITmfTrace trace) throws TmfAnalysisException {
if (!(trace instanceof CtfTmfTrace)) {
return false;
}
return super.setTrace(trace);
}
@Override
protected StateSystemBackendType getBackendType() {
return StateSystemBackendType.FULL;
}
@Override
protected String getSsFileName() {
return htFileName;
}
}
private static File createStateFile(String name) {
File file = new File(TmfTraceManager.getSupplementaryFileDir(trace) + name);
if (file.exists()) {
file.delete();
}
return file;
}
}