blob: 161e9e7adc7d75e3a6ccb68449703fe083b98335 [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:
* Bernd Hufmann - Initial API and implementation
* Alexandre Montplaisir - Port to JUnit4
* Marc-Andre Laperle - Support for creating a live session
**********************************************************************/
package org.eclipse.tracecompass.lttng2.control.ui.tests.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IBaseEventInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IChannelInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IDomainInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IEventInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IFieldInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ISessionInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ISnapshotInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IUstProviderInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceChannelOutputType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEventType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceSessionState;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.BufferType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.ChannelInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.SessionInfo;
import org.eclipse.tracecompass.internal.lttng2.control.stubs.shells.LTTngToolsFileShell;
import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.logging.ControlCommandLogger;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.preferences.ControlPreferences;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.service.ILttngControlService;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.service.LTTngControlService;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.service.LTTngControlServiceFactory;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.service.LttngVersion;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.osgi.framework.FrameworkUtil;
/**
* The class <code>LTTngControlServiceTest</code> contains test for the class
* <code>{@link LTTngControlService}</code>.
*/
@SuppressWarnings("javadoc")
public class LTTngControlServiceTest {
private static final String DIRECTORY = "testfiles";
private static final String TEST_STREAM = "LTTngServiceTest.cfg";
private static final String SCEN_LTTNG_NOT_INSTALLED = "LttngNotInstalled";
protected static final String SCEN_LTTNG_VERSION = "LttngVersion";
protected static final String SCEN_LTTNG_VERSION_WITH_PROMPT = "LttngVersionWithPrompt";
private static final String SCEN_LTTNG_UNSUPPORTED_VERSION = "LttngUnsupportedVersion";
private static final String SCEN_LTTNG_NO_VERSION = "LttngNoVersion";
protected static final String SCEN_LTTNG_COMPILED_VERSION = "LttngVersionCompiled";
private static final String SCEN_NO_SESSION_AVAILABLE = "NoSessionAvailable";
private static final String SCEN_GET_SESSION_NAMES1 = "GetSessionNames1";
private static final String SCEN_GET_SESSION_WITH_GROUP = "GetSessionWithTracingGroup";
private static final String SCEN_GET_SESSION_NAME_NOT_EXIST = "GetSessionNameNotExist";
private static final String SCEN_GET_SESSION_NAME_NOT_EXIST_VERBOSE = "GetSessionNameNotExistVerbose";
protected static final String SCEN_GET_SESSION_GARBAGE_OUT = "GetSessionGarbageOut";
private static final String SCEN_GET_SESSION1 = "GetSession1";
private static final String SCEN_GET_SESSION_WITH_LIVE = "GetSessionWithLiveInterval";
private static final String SCEN_GET_KERNEL_PROVIDER1 = "GetKernelProvider1";
private static final String SCEN_LIST_WITH_NO_KERNEL1 = "ListWithNoKernel1";
private static final String SCEN_LIST_WITH_NO_KERNEL2 = "ListWithNoKernel2";
private static final String SCEN_LIST_WITH_NO_KERNEL_VERBOSE = "ListWithNoKernelVerbose";
private static final String SCEN_GET_UST_PROVIDER1 = "GetUstProvider1";
private static final String SCEN_GET_UST_PROVIDER2 = "GetUstProvider2";
private static final String SCEN_GET_UST_PROVIDER3 = "GetUstProvider3";
private static final String SCEN_LIST_WITH_NO_UST1 = "ListWithNoUst1";
private static final String SCEN_LIST_WITH_NO_UST2 = "ListWithNoUst2";
private static final String SCEN_LIST_WITH_NO_UST3 = "ListWithNoUst3";
private static final String SCEN_LIST_WITH_NO_UST_VERBOSE = "ListWithNoUstVerbose";
private static final String SCEN_CREATE_SESSION1 = "CreateSession1";
private static final String SCEN_CREATE_SESSION_WITH_PROMPT = "CreateSessionWithPrompt";
private static final String SCEN_CREATE_SESSION_VARIANTS = "CreateSessionVariants";
private static final String SCEN_DESTROY_SESSION1 = "DestroySession1";
private static final String SCEN_DESTROY_SESSION_VERBOSE = "DestroySessionVerbose";
private static final String SCEN_CHANNEL_HANDLING = "ChannelHandling";
private static final String SCEN_EVENT_HANDLING = "EventHandling";
private static final String SCEN_EVENT_EXCLUDED = "EventExcluded";
private static final String SCEN_CONTEXT_HANDLING = "ContextHandling";
private static final String SCEN_CONTEXT_ERROR_HANDLING = "ContextErrorHandling";
private static final String SCEN_CREATE_SESSION_2_1 = "CreateSessionLttng2.1";
private static final String SCEN_CREATE_SESSION_VERBOSE_2_1 = "CreateSessionLttngVerbose2.1";
private static final String SCEN_CREATE_SNAPSHOT_SESSION = "CreateSessionSnapshot";
private static final String SCEN_CREATE_SNAPSHOT_SESSION_2_5 = "CreateSessionSnapshot2.5";
private static final String SCEN_CREATE_STREAMED_SNAPSHOT_SESSION = "CreateSessionStreamedSnapshot";
private static final String SCEN_CREATE_SNAPSHOT_SESSION_ERRORS = "CreateSessionSnapshotErrors";
protected static final String SCEN_CREATE_LIVE_SESSION = "CreateSessionLive";
private static final String SCEN_CREATE_LIVE_SESSION_ERRORS = "CreateSessionLiveErrors";
private static final String SCEN_SESSION_PROFILES = "SessionProfile";
// ------------------------------------------------------------------------
// Test data
// ------------------------------------------------------------------------
private String fTestfile;
protected final @NonNull LTTngToolsFileShell fShell = new LTTngToolsFileShell();
protected ILttngControlService fService;
// ------------------------------------------------------------------------
// Housekeeping
// ------------------------------------------------------------------------
/**
* Perform pre-test initialization.
*
* @throws Exception
* if the initialization fails for some reason
*/
@Before
public void setUp() throws Exception {
URL location = FileLocator.find(FrameworkUtil.getBundle(this.getClass()), new Path(getTestDirectory() + File.separator + getTestStream()), null);
File testfile = new File(FileLocator.toFileURL(location).toURI());
fTestfile = testfile.getAbsolutePath();
fShell.loadScenarioFile(fTestfile);
fService = getControlService();
if (fService == null) {
throw new Exception("Unable to obtain a valid ControlService");
}
ControlPreferences.getInstance().init(Activator.getDefault().getPreferenceStore());
}
/**
* @return the string of the test directory to use
*/
protected String getTestDirectory() {
return DIRECTORY;
}
/**
* @return the LttngCon
*/
protected ILttngControlService getControlService() {
return new LTTngControlService(fShell);
}
/**
* @return the shell implementation
*/
public @NonNull LTTngToolsFileShell getShell() {
return fShell;
}
/**
* @return
*/
protected String getTestStream() {
return TEST_STREAM;
}
@After
public void tearDown() {
disableVerbose();
ControlPreferences.getInstance().dispose();
}
// ------------------------------------------------------------------------
// Test Cases
// ------------------------------------------------------------------------
@Test
public void testVersion() {
try {
fShell.setScenario(SCEN_LTTNG_VERSION);
ILttngControlService service = LTTngControlServiceFactory.getLttngControlService(fShell);
assertNotNull(service);
assertEquals("2.1.0", service.getVersionString());
} catch (ExecutionException e) {
fail("Exeption thrown " + e);
}
}
@Test
public void testVersionWithPrompt() {
try {
fShell.setScenario(SCEN_LTTNG_VERSION_WITH_PROMPT);
ILttngControlService service = LTTngControlServiceFactory.getLttngControlService(fShell);
assertNotNull(service);
assertEquals("2.0.0", service.getVersionString());
} catch (ExecutionException e) {
fail("Exeption thrown " + e);
}
}
@Test(expected=ExecutionException.class)
public void testUnsupportedVersion() throws ExecutionException {
fShell.setScenario(SCEN_LTTNG_UNSUPPORTED_VERSION);
LTTngControlServiceFactory.getLttngControlService(fShell);
}
@Test
public void testNoVersion() {
try {
fShell.setScenario(SCEN_LTTNG_NO_VERSION);
LTTngControlServiceFactory.getLttngControlService(fShell);
fail("No exeption thrown");
} catch (ExecutionException e) {
// success
}
}
@Test
public void testVersionCompiled() {
try {
fShell.setScenario(SCEN_LTTNG_COMPILED_VERSION);
ILttngControlService service = LTTngControlServiceFactory.getLttngControlService(fShell);
assertNotNull(service);
assertEquals("2.5.0", service.getVersionString());
} catch (ExecutionException e) {
fail("Exeption thrown " + e);
}
}
@Test
public void testLttngNotInstalled() {
try {
fShell.setScenario(SCEN_LTTNG_NOT_INSTALLED);
fService.getSessionNames(new NullProgressMonitor());
fail("No exeption thrown");
} catch (ExecutionException e) {
// success
}
}
@Test
public void testGetSessionNames1() {
try {
fShell.setScenario(SCEN_NO_SESSION_AVAILABLE);
List<String> result = fService.getSessionNames(new NullProgressMonitor());
assertNotNull(result);
assertEquals(0, result.size());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetSessionNames2() {
try {
fShell.setScenario(SCEN_GET_SESSION_NAMES1);
List<String> result = fService.getSessionNames(new NullProgressMonitor());
assertNotNull(result);
assertEquals(2, result.size());
assertEquals("mysession1", result.get(0));
assertEquals("mysession", result.get(1));
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetSessionNamesWithTracingGroup() {
try {
fShell.setScenario(SCEN_GET_SESSION_WITH_GROUP);
ControlPreferences.getInstance().getPreferenceStore().setValue(
ControlPreferences.TRACE_CONTROL_TRACING_GROUP_PREF, "group");
List<String> result = fService.getSessionNames(new NullProgressMonitor());
assertNotNull(result);
assertEquals(2, result.size());
assertEquals("mysession1", result.get(0));
assertEquals("mysession", result.get(1));
ControlCommandLogger.init(ControlPreferences.getInstance().getLogfilePath(), false);
ControlPreferences.getInstance().getPreferenceStore().setValue(
ControlPreferences.TRACE_CONTROL_TRACING_GROUP_PREF, ControlPreferences.TRACE_CONTROL_DEFAULT_TRACING_GROUP);
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetSessionNotExist() {
try {
fShell.setScenario(SCEN_GET_SESSION_NAME_NOT_EXIST);
fService.getSessionNames(new NullProgressMonitor());
fail("No exeption thrown");
} catch (ExecutionException e) {
// success
}
}
@Test
public void testGetSessionNotExistVerbose() {
try {
enableVerbose();
fShell.setScenario(SCEN_GET_SESSION_NAME_NOT_EXIST_VERBOSE);
fService.getSessionNames(new NullProgressMonitor());
fail("No exeption thrown");
} catch (ExecutionException e) {
// success
} finally {
disableVerbose();
}
}
@Test
public void testGetSessionNameGarbage() {
try {
fShell.setScenario(SCEN_GET_SESSION_GARBAGE_OUT);
List<String> result = fService.getSessionNames(new NullProgressMonitor());
assertNotNull(result);
assertEquals(0, result.size());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetSession1() {
try {
fShell.setScenario(SCEN_GET_SESSION1);
ISessionInfo session = fService.getSession("mysession", new NullProgressMonitor());
// Verify Session
assertNotNull(session);
assertEquals("mysession", session.getName());
assertEquals("/home/user/lttng-traces/mysession-20120129-084256", session.getSessionPath());
assertEquals(TraceSessionState.ACTIVE, session.getSessionState());
IDomainInfo[] domains = session.getDomains();
assertNotNull(domains);
assertEquals(2, domains.length);
// Verify Kernel domain
assertEquals("Kernel", domains[0].getName());
IChannelInfo[] channels = domains[0].getChannels();
assertNotNull(channels);
assertEquals(2, channels.length);
// Verify Kernel's channel0
assertEquals("channel0", channels[0].getName());
assertEquals(4, channels[0].getNumberOfSubBuffers());
assertEquals("splice()", channels[0].getOutputType().getInName());
assertEquals(TraceChannelOutputType.SPLICE, channels[0].getOutputType());
assertEquals(false, channels[0].isOverwriteMode());
assertEquals(200, channels[0].getReadTimer());
assertEquals(TraceEnablement.ENABLED, channels[0].getState());
assertEquals(262144, channels[0].getSubBufferSize());
assertEquals(0, channels[0].getSwitchTimer());
// Verify event info
IEventInfo[] channel0Events = channels[0].getEvents();
assertNotNull(channel0Events);
assertEquals(2, channel0Events.length);
assertEquals("block_rq_remap", channel0Events[0].getName());
assertEquals(TraceLogLevel.TRACE_EMERG, channel0Events[0].getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, channel0Events[0].getEventType());
assertEquals(TraceEnablement.ENABLED, channel0Events[0].getState());
assertEquals("block_bio_remap", channel0Events[1].getName());
assertEquals(TraceLogLevel.TRACE_EMERG, channel0Events[1].getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, channel0Events[1].getEventType());
assertEquals(TraceEnablement.DISABLED, channel0Events[1].getState());
// Verify Kernel's channel1
assertEquals("channel1", channels[1].getName());
assertEquals(4, channels[1].getNumberOfSubBuffers());
assertEquals("splice()", channels[1].getOutputType().getInName());
assertEquals(TraceChannelOutputType.SPLICE, channels[1].getOutputType());
assertEquals(true, channels[1].isOverwriteMode());
assertEquals(400, channels[1].getReadTimer());
assertEquals(TraceEnablement.DISABLED, channels[1].getState());
assertEquals(524288, channels[1].getSubBufferSize());
assertEquals(100, channels[1].getSwitchTimer());
// Verify event info
IEventInfo[] channel1Events = channels[1].getEvents();
assertEquals(0, channel1Events.length);
// Verify domain UST global
assertEquals("UST global", domains[1].getName());
IChannelInfo[] ustChannels = domains[1].getChannels();
// Verify UST global's mychannel1
assertEquals("mychannel1", ustChannels[0].getName());
assertEquals(8, ustChannels[0].getNumberOfSubBuffers());
assertEquals("mmap()", ustChannels[0].getOutputType().getInName());
assertEquals(TraceChannelOutputType.MMAP, ustChannels[0].getOutputType());
assertEquals(true, ustChannels[0].isOverwriteMode());
assertEquals(100, ustChannels[0].getReadTimer());
assertEquals(TraceEnablement.DISABLED, ustChannels[0].getState());
assertEquals(8192, ustChannels[0].getSubBufferSize());
assertEquals(200, ustChannels[0].getSwitchTimer());
// Verify event info
IEventInfo[] ustEvents = ustChannels[0].getEvents();
assertEquals(0, ustEvents.length);
// Verify UST global's channel0
assertEquals("channel0", ustChannels[1].getName());
assertEquals(4, ustChannels[1].getNumberOfSubBuffers());
assertEquals("mmap()", ustChannels[1].getOutputType().getInName());
assertEquals(TraceChannelOutputType.MMAP, ustChannels[1].getOutputType());
assertEquals(false, ustChannels[1].isOverwriteMode());
assertEquals(200, ustChannels[1].getReadTimer());
assertEquals(TraceEnablement.ENABLED, ustChannels[1].getState());
assertEquals(4096, ustChannels[1].getSubBufferSize());
assertEquals(0, ustChannels[1].getSwitchTimer());
// Verify event info
ustEvents = ustChannels[1].getEvents();
assertEquals(2, ustEvents.length);
assertEquals("ust_tests_hello:tptest_sighandler", ustEvents[0].getName());
assertEquals(TraceLogLevel.TRACE_DEBUG_LINE, ustEvents[0].getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, ustEvents[0].getEventType());
assertEquals(TraceEnablement.DISABLED, ustEvents[0].getState());
assertEquals("*", ustEvents[1].getName());
assertEquals(getAllEventTraceLogLevel(), ustEvents[1].getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, ustEvents[1].getEventType());
assertEquals(TraceEnablement.ENABLED, ustEvents[1].getState());
// next session (no detailed information available)
session = fService.getSession("mysession1", new NullProgressMonitor());
assertNotNull(session);
assertEquals("mysession1", session.getName());
assertEquals("/home/user/lttng-traces/mysession1-20120203-133225", session.getSessionPath());
assertEquals(TraceSessionState.INACTIVE, session.getSessionState());
domains = session.getDomains();
assertNotNull(domains);
assertEquals(0, domains.length);
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
@Ignore
public void testGetSessionWithLive() {
try {
fShell.setScenario(SCEN_GET_SESSION_WITH_LIVE);
// Verify Session (snapshot session, non-live)
ISessionInfo session = fService.getSession("mysession", new NullProgressMonitor());
assertNotNull(session);
assertEquals("mysession", session.getName());
assertEquals("/home/user/lttng-traces/mysession-20120129-084256", session.getSessionPath());
assertEquals(TraceSessionState.INACTIVE, session.getSessionState());
assertFalse(session.isLive());
// Verify Session (regular session, non-live)
session = fService.getSession("mysession1", new NullProgressMonitor());
assertNotNull(session);
assertEquals("mysession1", session.getName());
assertEquals("/home/user/lttng-traces/mysession1-20120129-084256", session.getSessionPath());
assertEquals(TraceSessionState.ACTIVE, session.getSessionState());
assertFalse(session.isLive());
// Verify Session (regular session, live)
session = fService.getSession("mysession2", new NullProgressMonitor());
assertNotNull(session);
assertEquals("mysession2", session.getName());
assertEquals("tcp4://172.0.0.1:5342/ [data: 5343]", session.getSessionPath());
assertEquals("net://127.0.0.1", session.getLiveUrl());
assertEquals(Integer.valueOf(5344), session.getLivePort());
assertEquals(1000000, session.getLiveDelay());
assertEquals(TraceSessionState.INACTIVE, session.getSessionState());
assertTrue(session.isLive());
} catch (ExecutionException e) {
fail(e.toString());
}
}
/**
* @return
*/
protected TraceLogLevel getAllEventTraceLogLevel() {
return TraceLogLevel.LEVEL_UNKNOWN;
}
public void testGetKernelProvider() {
try {
fShell.setScenario(SCEN_GET_KERNEL_PROVIDER1);
List<IBaseEventInfo> events = fService.getKernelProvider(new NullProgressMonitor());
// Verify event info
assertNotNull(events);
assertEquals(3, events.size());
IBaseEventInfo baseEventInfo = events.get(0);
assertNotNull(baseEventInfo);
assertEquals("sched_kthread_stop", baseEventInfo.getName());
assertEquals(TraceLogLevel.TRACE_EMERG, baseEventInfo.getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, baseEventInfo.getEventType());
baseEventInfo = events.get(1);
assertEquals("sched_kthread_stop_ret", baseEventInfo.getName());
assertEquals(TraceLogLevel.TRACE_EMERG, baseEventInfo.getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, baseEventInfo.getEventType());
baseEventInfo = events.get(2);
assertEquals("sched_wakeup_new", baseEventInfo.getName());
assertEquals(TraceLogLevel.TRACE_EMERG, baseEventInfo.getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, baseEventInfo.getEventType());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetKernelProviderNoKernel1() {
try {
fShell.setScenario(SCEN_LIST_WITH_NO_KERNEL1);
List<IBaseEventInfo> events = fService.getKernelProvider(new NullProgressMonitor());
// Verify event info
assertNotNull(events);
assertEquals(0, events.size());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetKernelProviderNoKernel2() {
try {
fShell.setScenario(SCEN_LIST_WITH_NO_KERNEL2);
List<IBaseEventInfo> events = fService.getKernelProvider(new NullProgressMonitor());
// Verify event info
assertNotNull(events);
assertEquals(0, events.size());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetKernelProviderNoKernelVerbose() {
try {
enableVerbose();
fShell.setScenario(SCEN_LIST_WITH_NO_KERNEL_VERBOSE);
List<IBaseEventInfo> events = fService.getKernelProvider(new NullProgressMonitor());
// Verify event info
assertNotNull(events);
assertEquals(0, events.size());
} catch (ExecutionException e) {
fail(e.toString());
} finally {
disableVerbose();
}
}
@Test
public void testGetUstProvider() {
try {
fShell.setScenario(SCEN_GET_UST_PROVIDER1);
List<IUstProviderInfo> providers = fService.getUstProvider();
// Check all providers
assertNotNull(providers);
assertEquals(2, providers.size());
//Verify first provider
assertEquals("/home/user/git/lttng-ust/tests/hello.cxx/.libs/lt-hello", providers.get(0).getName());
assertEquals(9379, providers.get(0).getPid());
// Verify event info
IBaseEventInfo[] events = providers.get(0).getEvents();
assertNotNull(events);
assertEquals(2, events.length);
IBaseEventInfo baseEventInfo = events[0];
assertNotNull(baseEventInfo);
assertEquals("ust_tests_hello:tptest_sighandler", baseEventInfo.getName());
assertEquals(TraceLogLevel.TRACE_DEBUG_MODULE, baseEventInfo.getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, baseEventInfo.getEventType());
baseEventInfo = events[1];
assertEquals("ust_tests_hello:tptest", baseEventInfo.getName());
assertEquals(TraceLogLevel.TRACE_INFO, baseEventInfo.getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, baseEventInfo.getEventType());
//Verify second provider
assertEquals("/home/user/git/lttng-ust/tests/hello.cxx/.libs/lt-hello", providers.get(1).getName());
assertEquals(4852, providers.get(1).getPid());
// Verify event info
events = providers.get(1).getEvents();
assertNotNull(events);
assertEquals(2, events.length);
baseEventInfo = events[0];
assertNotNull(baseEventInfo);
assertEquals("ust_tests_hello:tptest_sighandler", baseEventInfo.getName());
assertEquals(TraceLogLevel.TRACE_WARNING, baseEventInfo.getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, baseEventInfo.getEventType());
baseEventInfo = events[1];
assertEquals("ust_tests_hello:tptest", baseEventInfo.getName());
assertEquals(TraceLogLevel.TRACE_DEBUG_FUNCTION, baseEventInfo.getLogLevel());
assertEquals(TraceEventType.TRACEPOINT, baseEventInfo.getEventType());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testUstProvider2() {
try {
fShell.setScenario(SCEN_GET_UST_PROVIDER2);
List<IUstProviderInfo> providers = fService.getUstProvider();
assertNotNull(providers);
assertEquals(0, providers.size());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetUstProvider3() {
try {
fShell.setScenario(SCEN_GET_UST_PROVIDER3);
// Set version
((LTTngControlService)fService).setVersion("2.1.0");
List<IUstProviderInfo> providers = fService.getUstProvider();
// Check all providers
assertNotNull(providers);
assertEquals(2, providers.size());
//Verify first provider
assertEquals("/home/user/git/lttng-ust/tests/hello.cxx/.libs/lt-hello", providers.get(0).getName());
assertEquals(9379, providers.get(0).getPid());
// Verify event info
IBaseEventInfo[] events = providers.get(0).getEvents();
assertNotNull(events);
assertEquals(2, events.length);
IBaseEventInfo baseEventInfo = events[0];
assertNotNull(baseEventInfo);
IFieldInfo[] fields = baseEventInfo.getFields();
assertNotNull(fields);
assertEquals(0, fields.length);
baseEventInfo = events[1];
fields = baseEventInfo.getFields();
assertNotNull(fields);
assertEquals(3, fields.length);
assertEquals("doublefield", fields[0].getName());
assertEquals("float", fields[0].getFieldType());
assertEquals("floatfield", fields[1].getName());
assertEquals("float", fields[1].getFieldType());
assertEquals("stringfield", fields[2].getName());
assertEquals("string", fields[2].getFieldType());
//Verify second provider
assertEquals("/home/user/git/lttng-ust/tests/hello.cxx/.libs/lt-hello", providers.get(1).getName());
assertEquals(4852, providers.get(1).getPid());
// Verify event info
events = providers.get(1).getEvents();
assertNotNull(events);
assertEquals(2, events.length);
baseEventInfo = events[0];
assertNotNull(baseEventInfo);
fields = baseEventInfo.getFields();
assertNotNull(fields);
assertEquals(0, fields.length);
baseEventInfo = events[1];
fields = baseEventInfo.getFields();
assertNotNull(fields);
assertEquals(3, fields.length);
assertEquals("doublefield", fields[0].getName());
assertEquals("float", fields[0].getFieldType());
assertEquals("floatfield", fields[1].getName());
assertEquals("float", fields[1].getFieldType());
assertEquals("stringfield", fields[2].getName());
assertEquals("string", fields[2].getFieldType());
// Reset version
((LTTngControlService)fService).setVersion("2.0.0");
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetKernelProviderNoUst1() {
try {
fShell.setScenario(SCEN_LIST_WITH_NO_UST1);
List<IUstProviderInfo> providerList = fService.getUstProvider(new NullProgressMonitor());
// Verify Provider info
assertNotNull(providerList);
assertEquals(0, providerList.size());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetKernelProviderNoUst2() {
try {
// Set version
((LTTngControlService)fService).setVersion("2.1.0");
fShell.setScenario(SCEN_LIST_WITH_NO_UST2);
List<IUstProviderInfo> providerList = fService.getUstProvider(new NullProgressMonitor());
// Verify Provider info
assertNotNull(providerList);
assertEquals(0, providerList.size());
// Reset version
((LTTngControlService)fService).setVersion("2.0.0");
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetKernelProviderNoUst3() {
try {
// Set version
((LTTngControlService)fService).setVersion("2.1.0");
fShell.setScenario(SCEN_LIST_WITH_NO_UST3);
List<IUstProviderInfo> providerList = fService.getUstProvider(new NullProgressMonitor());
// Verify provider info
assertNotNull(providerList);
assertEquals(0, providerList.size());
// Reset version
((LTTngControlService)fService).setVersion("2.0.0");
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testGetKernelProviderNoUstVerbose() {
try {
enableVerbose();
// Set version
((LTTngControlService)fService).setVersion("2.1.0");
fShell.setScenario(SCEN_LIST_WITH_NO_UST_VERBOSE);
List<IUstProviderInfo> providerList = fService.getUstProvider(new NullProgressMonitor());
// Verify provider info
assertNotNull(providerList);
assertEquals(0, providerList.size());
// Reset version
((LTTngControlService)fService).setVersion("2.0.0");
} catch (ExecutionException e) {
fail(e.toString());
} finally {
disableVerbose();
}
}
@Test
public void testCreateSession() {
try {
fShell.setScenario(SCEN_CREATE_SESSION1);
ISessionInfo info = fService.createSession(new SessionInfo("mysession2"), new NullProgressMonitor());
assertNotNull(info);
assertEquals("mysession2", info.getName());
assertNotNull(info.getSessionPath());
assertTrue(info.getSessionPath().contains("mysession2"));
assertEquals(TraceSessionState.INACTIVE, info.getSessionState());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testCreateSessionWithPrompt() {
try {
// First line has the shell prompt before the command output
// This can happen in a real application if the command line is not echoed by the shell.
fShell.setScenario(SCEN_CREATE_SESSION_WITH_PROMPT);
// First line has no shell prompt before the output
ISessionInfo info = fService.createSession(new SessionInfo("mysession2"), new NullProgressMonitor());
assertNotNull(info);
assertEquals("mysession2", info.getName());
assertNotNull(info.getSessionPath());
assertTrue(info.getSessionPath().contains("mysession2"));
assertEquals(TraceSessionState.INACTIVE, info.getSessionState());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testCreateSessionVariants() {
fShell.setScenario(SCEN_CREATE_SESSION_VARIANTS);
try {
fService.createSession(new SessionInfo("alreadyExist"), new NullProgressMonitor());
fail("No exeption thrown");
} catch (ExecutionException e) {
// success
}
try {
fService.createSession(new SessionInfo("wrongName"), new NullProgressMonitor());
fail("No exeption thrown");
} catch (ExecutionException e) {
// success
}
try {
ISessionInfo sessionInfo = new SessionInfo("withPath");
sessionInfo.setSessionPath("/home/user/hallo");
fService.createSession(sessionInfo, new NullProgressMonitor());
fail("No exeption thrown");
} catch (ExecutionException e) {
// success
}
try {
ISessionInfo info = fService.createSession(new SessionInfo("session with spaces"), new NullProgressMonitor());
assertNotNull(info);
assertEquals("session with spaces", info.getName());
assertNotNull(info.getSessionPath());
assertTrue(info.getSessionPath().contains("session with spaces"));
assertEquals(TraceSessionState.INACTIVE, info.getSessionState());
} catch (ExecutionException e) {
fail(e.toString());
}
try {
ISessionInfo sessionInfo = new SessionInfo("pathWithSpaces");
sessionInfo.setSessionPath("/home/user/hallo user/here");
ISessionInfo info = fService.createSession(sessionInfo, new NullProgressMonitor());
assertNotNull(info);
assertEquals("pathWithSpaces", info.getName());
assertNotNull(info.getSessionPath());
assertTrue(info.getSessionPath().contains("/home/user/hallo user/here"));
assertEquals(TraceSessionState.INACTIVE, info.getSessionState());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testDestroySession() {
try {
fShell.setScenario(SCEN_DESTROY_SESSION1);
fService.destroySession("mysession2", new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testDestroySessionVerbose() {
try {
enableVerbose();
fShell.setScenario(SCEN_DESTROY_SESSION_VERBOSE);
fService.destroySession("mysession2", new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
} finally {
disableVerbose();
}
}
@Test
public void testCreateChannel() {
try {
((LTTngControlService)fService).setVersion("2.2.0");
String sessionName = "mysession2";
List<String> list = new ArrayList<>();
String kernelChannel0 = "mychannel0";
String kernelChannel1 = "mychannel1";
list.add(kernelChannel0);
list.add(kernelChannel1);
fShell.setScenario(SCEN_CHANNEL_HANDLING);
// Create/enable/configure 2 kernel channels
ChannelInfo chanInfo = new ChannelInfo("");
chanInfo.setOverwriteMode(true);
chanInfo.setSubBufferSize(16384);
chanInfo.setReadTimer(100);
chanInfo.setSwitchTimer(200);
chanInfo.setNumberOfSubBuffers(2);
chanInfo.setMaxNumberTraceFiles(10);
chanInfo.setMaxSizeTraceFiles(0);
fService.enableChannels(sessionName, list, TraceDomainType.KERNEL, chanInfo, new NullProgressMonitor());
// Create/enable/configure 1 UST channel
list.clear();
list.add("ustChannel");
chanInfo = new ChannelInfo("");
chanInfo.setOverwriteMode(true);
chanInfo.setSubBufferSize(32768);
chanInfo.setReadTimer(200);
chanInfo.setSwitchTimer(100);
chanInfo.setNumberOfSubBuffers(1);
chanInfo.setMaxNumberTraceFiles(20);
chanInfo.setMaxSizeTraceFiles(0);
fService.enableChannels(sessionName, list, TraceDomainType.UST, chanInfo, new NullProgressMonitor());
((LTTngControlService)fService).setVersion("2.0.0");
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testCreateChannelUIDBuffer() {
try {
((LTTngControlService)fService).setVersion("2.2.0");
String sessionName = "mysession2";
List<String> list = new ArrayList<>();
String USTChannel = "ustChannel";
list.add(USTChannel);
fShell.setScenario(SCEN_CHANNEL_HANDLING);
ChannelInfo chanInfo = new ChannelInfo("");
chanInfo.setOverwriteMode(true);
chanInfo.setSubBufferSize(32768);
chanInfo.setReadTimer(200);
chanInfo.setSwitchTimer(100);
chanInfo.setNumberOfSubBuffers(1);
chanInfo.setMaxNumberTraceFiles(20);
chanInfo.setMaxSizeTraceFiles(0);
chanInfo.setBufferType(BufferType.BUFFER_PER_UID);
fService.enableChannels(sessionName, list, TraceDomainType.UST, chanInfo, new NullProgressMonitor());
((LTTngControlService)fService).setVersion("2.0.0");
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testCreateChannelPIDBuffer() {
try {
((LTTngControlService)fService).setVersion("2.2.0");
String sessionName = "mysession2";
List<String> list = new ArrayList<>();
String USTChannel = "ustChannel";
list.add(USTChannel);
fShell.setScenario(SCEN_CHANNEL_HANDLING);
ChannelInfo chanInfo = new ChannelInfo("");
chanInfo.setOverwriteMode(true);
chanInfo.setSubBufferSize(-1);
chanInfo.setReadTimer(-1);
chanInfo.setSwitchTimer(-1);
chanInfo.setNumberOfSubBuffers(-1);
chanInfo.setMaxNumberTraceFiles(-1);
chanInfo.setMaxSizeTraceFiles(-1);
chanInfo.setBufferType(BufferType.BUFFER_PER_PID);
fService.enableChannels(sessionName, list, TraceDomainType.UST, chanInfo, new NullProgressMonitor());
((LTTngControlService)fService).setVersion("2.0.0");
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testDisableChannel() {
try {
String sessionName = "mysession2";
List<String> list = new ArrayList<>();
String kernelChannel0 = "mychannel0";
String kernelChannel1 = "mychannel1";
list.add(kernelChannel0);
list.add(kernelChannel1);
fShell.setScenario(SCEN_CHANNEL_HANDLING);
fService.disableChannels(sessionName, list, TraceDomainType.KERNEL, new NullProgressMonitor());
list.clear();
list.add("ustChannel");
fService.disableChannels(sessionName, list, TraceDomainType.UST, new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testEnableChannel() {
try {
String sessionName = "mysession2";
List<String> list = new ArrayList<>();
String kernelChannel0 = "mychannel0";
String kernelChannel1 = "mychannel1";
list.add(kernelChannel0);
list.add(kernelChannel1);
fShell.setScenario(SCEN_CHANNEL_HANDLING);
fService.enableChannels(sessionName, list, TraceDomainType.KERNEL, null, new NullProgressMonitor());
// Create/enable/configure 1 UST channel
list.clear();
list.add("ustChannel");
fService.enableChannels(sessionName, list, TraceDomainType.UST, null, new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testEnableEvents() {
try {
String sessionName = "mysession2";
String channelName = "mychannel";
// Lists
List<String> eventList = new ArrayList<>();
List<String> excludeList = new ArrayList<>();
// Events
String eventName0 = "block_rq_remap";
String eventName1 = "block_bio_remap";
String eventName2 = "softirq_entry";
String ustEventName0 = "ust_tests_hello:tptest_sighandler";
String ustEventName1 = "ust_tests_bye:tptest_sighandler";
String ustEventWildcard = "ust*";
fShell.setScenario(SCEN_EVENT_HANDLING);
// 1) session name, channel = null, 3 event names, kernel
eventList.add(eventName0);
eventList.add(eventName1);
eventList.add(eventName2);
fService.enableEvents(sessionName, null, eventList, TraceDomainType.KERNEL, null, null, new NullProgressMonitor());
// 2) session name, channel = mychannel, event name= null, kernel
fService.enableEvents(sessionName, channelName, null, TraceDomainType.KERNEL, null, null, new NullProgressMonitor());
// 3) session name, channel = mychannel, 1 event name, ust, no filter
eventList.clear();
eventList.add(ustEventName0);
fService.enableEvents(sessionName, channelName, eventList, TraceDomainType.UST, null, null, new NullProgressMonitor());
// 4) session name, channel = mychannel, no event name, ust, with filter
fService.enableEvents(sessionName, channelName, eventList, TraceDomainType.UST, "intfield==10", null, new NullProgressMonitor());
// 5) session name, channel = mychannel, no event name, ust, no filter
eventList.clear();
fService.enableEvents(sessionName, channelName, eventList, TraceDomainType.UST, null, null, new NullProgressMonitor());
// 6) session name, channel = null,
fService.enableEvents(sessionName, null, ILttngControlService.ALL_EVENTS, TraceDomainType.KERNEL, null, null, new NullProgressMonitor());
// 7) session name, channel = mychannel, all events, ust, exclude 1 event
excludeList.add(ustEventName0);
fService.enableEvents(sessionName, channelName, null, TraceDomainType.UST, null, excludeList, new NullProgressMonitor());
// 8) session name, channel = mychannel, all events, ust, exclude 2 events
excludeList.add(ustEventName1);
fService.enableEvents(sessionName, channelName, null, TraceDomainType.UST, null, excludeList, new NullProgressMonitor());
// 9) session name, channel = mychannel, enable 'ust*', ust, exclude 2 events
eventList.add(ustEventWildcard);
fService.enableEvents(sessionName, channelName, eventList, TraceDomainType.UST, null, excludeList, new NullProgressMonitor());
// 10) session name, channel = mychannel, enable 'ust*', ust, with filter, exclude 2 events
fService.enableEvents(sessionName, channelName, eventList, TraceDomainType.UST, "ust==\"Challenger\"", excludeList, new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testEnableJulLoggers() {
// Trace Compass only supports JUL starting with LTTng 2.6 that supports MI.
// The implementation of this test is in the LTTngControlServiceMiTest.java file.
}
@Test
public void testEnableLog4jLoggers() {
// Trace Compass only supports LOG4J starting with LTTng 2.6 that supports MI.
// The implementation of this test is in the LTTngControlServiceMiTest.java file.
}
@Test
public void testEnablePythonLoggers() {
// LTTng only support Python logging starting with LTTng 2.7 that supports MI.
// The implementation of this test is in the LTTngControlServiceMiTest.java file.
}
@Test
public void testEventExcluded() {
try {
String sessionName = "mysession2";
String channelName = "mychannel";
// Lists
List<String> eventList = new ArrayList<>();
List<String> excludeList = new ArrayList<>();
// Events
String ustEventName0 = "ust_tests_hello:tptest_sighandler";
String ustEventName1 = "ust_tests_bye:tptest_sighandler";
String ustEventWildcard = "ust*";
@NonNull
LttngVersion version = fService.getVersion();
fShell.setScenario(SCEN_EVENT_EXCLUDED);
// 1) 1 event excluded
eventList.add(ustEventWildcard);
excludeList.add(ustEventName0);
fService.enableEvents(sessionName, channelName, eventList, TraceDomainType.UST, null, excludeList, new NullProgressMonitor());
@Nullable
ISessionInfo session = fService.getSession(sessionName, new NullProgressMonitor());
assertNotNull(session);
IEventInfo eventInfo = session.getDomains()[0].getChannels()[0].getEvents()[0];
assertNotNull(eventInfo);
// version 2.8 and above supports the excluded events list
if (version.getMajor() > 1 && version.getMinor() > 7) {
assertTrue(eventInfo.getExcludedEvents().contains(ustEventName0));
} else {
assertEquals("has exclusions", eventInfo.getExcludedEvents());
}
// 2) 2 events excluded
excludeList.add(ustEventName1);
fService.enableEvents(sessionName, channelName, eventList, TraceDomainType.UST, null, excludeList, new NullProgressMonitor());
session = fService.getSession(sessionName, new NullProgressMonitor());
assertNotNull(session);
eventInfo = session.getDomains()[0].getChannels()[0].getEvents()[0];
assertNotNull(eventInfo);
// version 2.8 and above supports the excluded events list
if (version.getMajor() > 1 && version.getMinor() > 7) {
assertTrue(eventInfo.getExcludedEvents().contains(ustEventName0));
assertTrue(eventInfo.getExcludedEvents().contains(ustEventName1));
} else {
assertEquals("has exclusions", eventInfo.getExcludedEvents());
}
// 3) 2 events excluded and using a filter
fService.enableEvents(sessionName, channelName, eventList, TraceDomainType.UST, "ust==\"Challenger\"", excludeList, new NullProgressMonitor());
session = fService.getSession(sessionName, new NullProgressMonitor());
assertNotNull(session);
eventInfo = session.getDomains()[0].getChannels()[0].getEvents()[0];
assertNotNull(eventInfo);
// version 2.8 and above supports the excluded events list
if (version.getMajor() > 1 && version.getMinor() > 7) {
assertTrue(eventInfo.getExcludedEvents().contains(ustEventName0));
assertTrue(eventInfo.getExcludedEvents().contains(ustEventName1));
} else {
assertEquals("has exclusions", eventInfo.getExcludedEvents());
}
if (version.getMajor() > 1 && version.getMinor() > 7) {
assertTrue(eventInfo.getFilterExpression().equals("ust==Challenger"));
} else {
assertEquals("with filter", eventInfo.getFilterExpression());
}
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testEnableSyscalls() {
try {
// 1) session name, channel = null, 3 event names, kernel
String sessionName = "mysession2";
String channelName = "mychannel";
List<String> syscalls = new ArrayList<>();
fShell.setScenario(SCEN_EVENT_HANDLING);
// 1) session name, channel = null, syscall = all
fService.enableSyscalls(sessionName, null, null, new NullProgressMonitor());
// 2) session name, channel = mychannel, syscall = all
fService.enableSyscalls(sessionName, channelName, null, new NullProgressMonitor());
// 3) session name, channel = mychannel, syscall = close
syscalls.add("close");
fService.enableSyscalls(sessionName, channelName, syscalls, new NullProgressMonitor());
// 4) session name, channel = mychannel, syscall = close,read,write
syscalls.add("read");
syscalls.add("write");
fService.enableSyscalls(sessionName, channelName, syscalls, new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testDynamicProbe() {
try {
// 1) session name, channel = null, 3 event names, kernel
String sessionName = "mysession2";
String channelName = "mychannel";
String eventName0 = "myevent0";
String eventName1 = "myevent1";
String functionProbe = "0xc0101340";
String dynProbe = "init_post";
fShell.setScenario(SCEN_EVENT_HANDLING);
// 1) session name, channel = null, event name, function probe, probe
fService.enableProbe(sessionName, null, eventName0, true, functionProbe, new NullProgressMonitor());
// 2) session name, channel = mychannel
fService.enableProbe(sessionName, channelName, eventName1, false, dynProbe, new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testEnableLogLevel() {
try {
// 1) session name, channel = null, 3 event names, kernel
String sessionName = "mysession2";
String channelName = "mychannel";
String eventName4 = "myevent4";
String eventName5 = "myevent5";
fShell.setScenario(SCEN_EVENT_HANDLING);
// 1) session name, channel = null, event name, loglevel-only, TRACE_DEBUG
fService.enableLogLevel(sessionName, null, Arrays.asList(eventName4), LogLevelType.LOGLEVEL_ONLY, TraceLogLevel.TRACE_DEBUG, null, TraceDomainType.UST, new NullProgressMonitor());
// 2) session name, channel = mychannel, null, loglevel, TRACE_DEBUG_FUNCTION
fService.enableLogLevel(sessionName, channelName, Arrays.asList(eventName5), LogLevelType.LOGLEVEL, TraceLogLevel.TRACE_DEBUG_FUNCTION, null, TraceDomainType.UST, new NullProgressMonitor());
// TODO add test with filters
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testAddContext() {
try {
// 1) session name, channel = null, 3 event names, kernel
String sessionName = "mysession2";
String channelName = "mychannel";
String eventName = "ust_tests_hello:tptest_sighandler";
List<String> contexts = new ArrayList<>();
contexts.add("prio");
contexts.add("pid");
fShell.setScenario(SCEN_CONTEXT_HANDLING);
List<String> availContexts = fService.getContextList(new NullProgressMonitor());
assertNotNull(availContexts);
assertEquals(12, availContexts.size());
// A very "hard-coded" way to verify but it works ...
Set<String> expectedContexts = new HashSet<>();
expectedContexts.add("pid");
expectedContexts.add("procname");
expectedContexts.add("prio");
expectedContexts.add("nice");
expectedContexts.add("vpid");
expectedContexts.add("tid");
expectedContexts.add("pthread_id");
expectedContexts.add("vtid");
expectedContexts.add("ppid");
expectedContexts.add("vppid");
expectedContexts.add("perf:cpu-cycles");
expectedContexts.add("perf:cycles");
assertTrue(expectedContexts.containsAll(availContexts));
// 1) session name, channel = null, event name, loglevel-only, TRACE_DEBUG
fService.addContexts(sessionName, channelName, eventName, TraceDomainType.UST, contexts, new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testAddContextFailure() {
// 1) session name, channel = null, 3 event names, kernel
String sessionName = "mysession2";
String channelName = "mychannel";
String eventName = "ust_tests_hello:tptest_sighandler";
List<String> contexts = new ArrayList<>();
contexts.add("prio");
contexts.add("pid");
fShell.setScenario(SCEN_CONTEXT_ERROR_HANDLING);
try {
fService.getContextList(new NullProgressMonitor());
fail("No exeption generated");
} catch (ExecutionException e) {
// success
}
try {
// 1) session name, channel = null, event name, loglevel-only, TRACE_DEBUG
fService.addContexts(sessionName, channelName, eventName, TraceDomainType.UST, contexts, new NullProgressMonitor());
fail("No exeption generated");
} catch (ExecutionException e) {
// success
}
}
@Test
public void testCreateSession2_1() {
try {
fShell.setScenario(SCEN_CREATE_SESSION_2_1);
ISessionInfo sessionInfo = new SessionInfo("mysession");
sessionInfo.setNetworkUrl("net://172.0.0.1");
sessionInfo.setStreamedTrace(true);
ISessionInfo info = fService.createSession(sessionInfo, new NullProgressMonitor());
assertNotNull(info);
assertEquals("mysession", info.getName());
assertEquals("net://172.0.0.1", info.getSessionPath());
assertTrue(info.isStreamedTrace());
fService.destroySession("mysession", new NullProgressMonitor());
sessionInfo = new SessionInfo("mysession");
sessionInfo.setStreamedTrace(true);
sessionInfo.setNetworkUrl("file:///tmp");
info = fService.createSession(sessionInfo, new NullProgressMonitor());
assertNotNull(info);
assertEquals("mysession", info.getName());
assertEquals("file:///tmp", info.getSessionPath());
assertTrue(!info.isStreamedTrace());
fService.destroySession("mysession", new NullProgressMonitor());
sessionInfo = new SessionInfo("mysession");
sessionInfo.setStreamedTrace(true);
sessionInfo.setNetworkUrl("file:///tmp");
info = fService.createSession(sessionInfo, new NullProgressMonitor());
assertNotNull(info);
assertEquals("mysession", info.getName());
assertEquals("file:///tmp", info.getSessionPath());
assertTrue(!info.isStreamedTrace());
fService.destroySession("mysession", new NullProgressMonitor());
sessionInfo = new SessionInfo("mysession");
sessionInfo.setStreamedTrace(true);
sessionInfo.setControlUrl("tcp://172.0.0.1");
sessionInfo.setDataUrl("tcp://172.0.0.1:5343");
info = fService.createSession(sessionInfo, new NullProgressMonitor());
assertNotNull(info);
assertEquals("mysession", info.getName());
assertEquals("", info.getSessionPath()); // the complete network path is not available at this point
assertTrue(info.isStreamedTrace());
fService.destroySession("mysession", new NullProgressMonitor());
sessionInfo = new SessionInfo("mysession");
sessionInfo.setStreamedTrace(true);
sessionInfo.setNetworkUrl("net://172.0.0.1:1234:2345");
info = fService.createSession(sessionInfo, new NullProgressMonitor());
assertNotNull(info);
assertEquals("mysession", info.getName());
assertEquals("net://172.0.0.1:1234:2345", info.getSessionPath());
assertTrue(info.isStreamedTrace());
fService.destroySession("mysession", new NullProgressMonitor());
// verbose
enableVerbose();
sessionInfo = new SessionInfo("mysession");
sessionInfo.setStreamedTrace(true);
sessionInfo.setNetworkUrl("net://172.0.0.1");
info = fService.createSession(sessionInfo, new NullProgressMonitor());
assertNotNull(info);
assertEquals("mysession", info.getName());
assertEquals("net://172.0.0.1", info.getSessionPath());
assertTrue(info.isStreamedTrace());
disableVerbose();
fService.destroySession("mysession", new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testCreateSessionVerbose2_1() {
try {
fShell.setScenario(SCEN_CREATE_SESSION_VERBOSE_2_1);
enableVerbose();
ISessionInfo sessionInfo = new SessionInfo("mysession");
sessionInfo.setStreamedTrace(true);
sessionInfo.setNetworkUrl("net://172.0.0.1");
ISessionInfo info = fService.createSession(sessionInfo, new NullProgressMonitor());
assertNotNull(info);
assertEquals("mysession", info.getName());
assertEquals("net://172.0.0.1", info.getSessionPath());
assertTrue(info.isStreamedTrace());
fService.destroySession("mysession", new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
} finally {
disableVerbose();
}
}
@Test
public void testCreateSnapshotSession() {
try {
fShell.setScenario(SCEN_CREATE_SNAPSHOT_SESSION);
ISessionInfo params = new SessionInfo("mysession");
params.setSnapshot(true);
ISessionInfo sessionInfo = fService.createSession(params, new NullProgressMonitor());
assertNotNull(sessionInfo);
assertEquals("mysession", sessionInfo.getName());
assertTrue(sessionInfo.isSnapshotSession());
assertEquals("", sessionInfo.getSessionPath());
assertTrue(!sessionInfo.isStreamedTrace());
assertEquals(TraceSessionState.INACTIVE, sessionInfo.getSessionState());
List<String> names = fService.getSessionNames(new NullProgressMonitor());
assertEquals(names.get(0), "mysession");
ISnapshotInfo snapshotInfo = fService.getSnapshotInfo("mysession", new NullProgressMonitor());
assertNotNull(snapshotInfo);
assertEquals("snapshot-1", snapshotInfo.getName());
assertEquals("/home/user/lttng-traces/mysession-20130913-141651", snapshotInfo.getSnapshotPath());
assertEquals(1, snapshotInfo.getId());
assertTrue(!snapshotInfo.isStreamedSnapshot());
// we need to set the snapshotInfo to so that the session path is set correctly
sessionInfo.setSnapshotInfo(snapshotInfo);
assertEquals("/home/user/lttng-traces/mysession-20130913-141651", sessionInfo.getSessionPath());
fService.recordSnapshot("mysession", new NullProgressMonitor());
fService.destroySession("mysession", new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testCreateSnapshotSession2_5() {
try {
fShell.setScenario(SCEN_CREATE_SNAPSHOT_SESSION_2_5);
ISessionInfo params = new SessionInfo("mysession");
params.setSnapshot(true);
ISessionInfo sessionInfo = fService.createSession(params, new NullProgressMonitor());
assertNotNull(sessionInfo);
assertEquals("mysession", sessionInfo.getName());
assertTrue(sessionInfo.isSnapshotSession());
assertEquals("", sessionInfo.getSessionPath());
assertTrue(!sessionInfo.isStreamedTrace());
assertEquals(TraceSessionState.INACTIVE, sessionInfo.getSessionState());
List<String> names = fService.getSessionNames(new NullProgressMonitor());
assertEquals(names.get(0), "mysession");
ISnapshotInfo snapshotInfo = fService.getSnapshotInfo("mysession", new NullProgressMonitor());
assertNotNull(snapshotInfo);
assertEquals("snapshot-1", snapshotInfo.getName());
assertEquals("/home/user/lttng-traces/mysession-20130913-141651", snapshotInfo.getSnapshotPath());
assertEquals(1, snapshotInfo.getId());
assertTrue(!snapshotInfo.isStreamedSnapshot());
// we need to set the snapshotInfo to so that the session path is set correctly
sessionInfo.setSnapshotInfo(snapshotInfo);
assertEquals("/home/user/lttng-traces/mysession-20130913-141651", sessionInfo.getSessionPath());
fService.recordSnapshot("mysession", new NullProgressMonitor());
fService.destroySession("mysession", new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
public void testCreateStreamedSnapshotSession() {
try {
fShell.setScenario(SCEN_CREATE_STREAMED_SNAPSHOT_SESSION);
ISessionInfo params = new SessionInfo("mysession");
params.setNetworkUrl("net://172.0.0.1");
ISessionInfo sessionInfo = fService.createSession(params, new NullProgressMonitor());
assertNotNull(sessionInfo);
assertEquals("mysession", sessionInfo.getName());
assertTrue(sessionInfo.isSnapshotSession());
assertEquals(TraceSessionState.INACTIVE, sessionInfo.getSessionState());
assertTrue(sessionInfo.isStreamedTrace());
List<String> names = fService.getSessionNames(new NullProgressMonitor());
assertEquals(names.get(0), "mysession");
ISnapshotInfo snapshotInfo = sessionInfo.getSnapshotInfo();
assertNotNull(sessionInfo);
assertEquals("snapshot-2", snapshotInfo.getName());
assertEquals("net4://172.0.0.1:5342/", snapshotInfo.getSnapshotPath());
assertEquals(2, snapshotInfo.getId());
assertTrue(snapshotInfo.isStreamedSnapshot());
// we need to set the snapshotInfo to so that the session path is set correctly
sessionInfo.setSnapshotInfo(snapshotInfo);
assertEquals("net4://172.0.0.1:5342/", sessionInfo.getSessionPath());
fService.recordSnapshot("mysession", new NullProgressMonitor());
fService.destroySession("mysession", new NullProgressMonitor());
} catch (ExecutionException e) {
fail(e.toString());
}
}
@Test
public void testCreateSnapshotSessionErrors() {
try {
fShell.setScenario(SCEN_CREATE_SNAPSHOT_SESSION_ERRORS);
List<String> names = fService.getSessionNames(new NullProgressMonitor());
assertEquals(names.get(0), "mysession");
} catch (ExecutionException e) {
fail(e.toString());
}
try {
fService.getSnapshotInfo("blabla", new NullProgressMonitor());
fail("getSnapshoInfo() didn't fail");
} catch (ExecutionException e) {
// successful
}
try {
fService.recordSnapshot("blabla", new NullProgressMonitor());
fail("getSnapshoInfo() didn't fail");
} catch (ExecutionException e) {
// successful
}
try {
fService.recordSnapshot("mysession", new NullProgressMonitor());
fail("getSnapshoInfo() didn't fail");
} catch (ExecutionException e) {
// successful
}
}
@Test
@Ignore
public void testCreateLiveSession() throws ExecutionException {
fShell.setScenario(SCEN_CREATE_LIVE_SESSION);
ISessionInfo params = new SessionInfo("mysession");
params.setLive(true);
params.setStreamedTrace(true);
params.setNetworkUrl("net://127.0.0.1");
ISessionInfo sessionInfo = fService.createSession(params, new NullProgressMonitor());
assertNotNull(sessionInfo);
assertEquals("mysession", sessionInfo.getName());
assertEquals(TraceSessionState.INACTIVE, sessionInfo.getSessionState());
assertTrue(sessionInfo.isStreamedTrace());
assertTrue(sessionInfo.isLive());
assertEquals("net://127.0.0.1", sessionInfo.getSessionPath());
List<String> names = fService.getSessionNames(new NullProgressMonitor());
assertEquals(names.get(0), "mysession");
fService.destroySession("mysession", new NullProgressMonitor());
}
@Test
@Ignore
public void testCreateLiveSessionErrors() {
try {
fShell.setScenario(SCEN_CREATE_LIVE_SESSION_ERRORS);
ISessionInfo parameters = new SessionInfo("mysession");
parameters.setLive(true);
parameters.setSnapshot(true);
fService.createSession(parameters, new NullProgressMonitor());
fail("createSession() didn't fail");
} catch (ExecutionException e) {
// successful
}
try {
ISessionInfo parameters = new SessionInfo("mysession");
parameters.setNetworkUrl("blah");
parameters.setLive(true);
fService.createSession(parameters, new NullProgressMonitor());
fail("createSession() didn't fail");
} catch (ExecutionException e) {
// successful
}
try {
ISessionInfo parameters = new SessionInfo("mysession");
parameters.setControlUrl("net://127.0.0.1");
parameters.setLive(true);
fService.createSession(parameters, new NullProgressMonitor());
fail("createSession() didn't fail");
} catch (ExecutionException e) {
// successful
}
}
@Test
public void testSessionProfile() {
fShell.setScenario(SCEN_SESSION_PROFILES);
final String profile = "/home/user/.lttng/sessions/mysession.lttng";
try {
fService.loadSession(profile, false, new NullProgressMonitor());
} catch (ExecutionException e) {
fail("load session failed: " + e);
}
try {
fService.loadSession(profile, true, new NullProgressMonitor());
} catch (ExecutionException e) {
fail("load session failed: " + e);
}
try {
fService.saveSession(null, null, false, new NullProgressMonitor());
} catch (ExecutionException e) {
fail("save session failed: " + e);
}
final String sessionName = "mysession";
try {
fService.saveSession(sessionName, null, false, new NullProgressMonitor());
} catch (ExecutionException e) {
fail("save session failed: " + e);
}
try {
fService.saveSession(sessionName, null, true, new NullProgressMonitor());
} catch (ExecutionException e) {
fail("save session failed: " + e);
}
try {
fService.saveSession(sessionName, "/tmp/test", true, new NullProgressMonitor());
} catch (ExecutionException e) {
fail("save session failed: " + e);
}
}
private static void enableVerbose() {
// verbose
ControlCommandLogger.init(ControlPreferences.getInstance().getLogfilePath(), false);
ControlPreferences.getInstance().getPreferenceStore().setDefault(ControlPreferences.TRACE_CONTROL_LOG_COMMANDS_PREF, true);
ControlPreferences.getInstance().getPreferenceStore().setDefault(ControlPreferences.TRACE_CONTROL_VERBOSE_LEVEL_PREF, ControlPreferences.TRACE_CONTROL_VERBOSE_LEVEL_V_V_VERBOSE);
}
private static void disableVerbose() {
ControlPreferences.getInstance().getPreferenceStore().setDefault(ControlPreferences.TRACE_CONTROL_LOG_COMMANDS_PREF, false);
}
}