analysis: add Latency Statistics UI test
authorMatthew Khouzam <matthew.khouzam@ericsson.com>
Sat, 12 Dec 2015 13:31:09 +0000 (08:31 -0500)
committerMatthew Khouzam <matthew.khouzam@ericsson.com>
Sat, 21 May 2016 01:13:50 +0000 (21:13 -0400)
This tests the total, the number of distinct syscalls
and tests some random nodes.

Change-Id: Ied0aab3958b75de20eb2368d0beafb1c123c6987
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/62555
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyStatisticsTableAnalysisTest.java [new file with mode: 0644]

diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyStatisticsTableAnalysisTest.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyStatisticsTableAnalysisTest.java
new file mode 100644 (file)
index 0000000..1e41b80
--- /dev/null
@@ -0,0 +1,201 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Matthew Khouzam - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests.latency;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.Logger;
+import org.apache.log4j.SimpleLayout;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
+import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
+import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
+import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
+import org.eclipse.swtbot.swt.finder.results.BoolResult;
+import org.eclipse.swtbot.swt.finder.results.Result;
+import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
+import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.latency.statistics.SystemCallLatencyStatisticsView;
+import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
+import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
+import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.WorkbenchException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests of the latency table
+ *
+ * @author Matthew Khouzam
+ */
+@RunWith(SWTBotJunit4ClassRunner.class)
+public class SystemCallLatencyStatisticsTableAnalysisTest {
+
+    private static final int MIN_COL = 1;
+    private static final int MAX_COL = 2;
+    private static final int AVERAGE_COL = 3;
+    private static final int STDEV_COL = 4;
+    private static final int COUNT_COL = 5;
+    private static final String TRACE_TYPE = "org.eclipse.linuxtools.lttng2.kernel.tracetype";
+    private static final String PROJECT_NAME = "test";
+    private static final String VIEW_ID = SystemCallLatencyStatisticsView.ID;
+    private static final String TRACING_PERSPECTIVE_ID = "org.eclipse.linuxtools.tmf.ui.perspective";
+
+    /** The Log4j logger instance. */
+    private static final Logger fLogger = Logger.getRootLogger();
+    private SWTBotTree fTreeBot;
+
+    /**
+     * Things to setup
+     */
+    @BeforeClass
+    public static void beforeClass() {
+        SWTBotUtils.initialize();
+        Thread.currentThread().setName("SWTBotTest");
+        /* set up for swtbot */
+        SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
+        SWTBotPreferences.KEYBOARD_LAYOUT = "EN_US";
+        fLogger.removeAllAppenders();
+        fLogger.addAppender(new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT));
+        SWTWorkbenchBot bot = new SWTWorkbenchBot();
+        final List<SWTBotView> openViews = bot.views();
+        for (SWTBotView view : openViews) {
+            if (view.getTitle().equals("Welcome")) {
+                view.close();
+                bot.waitUntil(ConditionHelpers.ViewIsClosed(view));
+            }
+        }
+        /* Switch perspectives */
+        switchTracingPerspective();
+        /* Finish waiting for eclipse to load */
+        SWTBotUtils.waitForJobs();
+
+    }
+
+    /**
+     * Opens a latency table
+     */
+    @Before
+    public void createTree() {
+        /*
+         * Open latency view
+         */
+        SWTBotUtils.openView(VIEW_ID);
+        SWTWorkbenchBot bot = new SWTWorkbenchBot();
+        SWTBotView viewBot = bot.viewById(VIEW_ID);
+        final IViewReference viewReference = viewBot.getViewReference();
+        IViewPart viewPart = UIThreadRunnable.syncExec(new Result<IViewPart>() {
+            @Override
+            public IViewPart run() {
+                return viewReference.getView(true);
+            }
+        });
+        assertNotNull(viewPart);
+        if (!(viewPart instanceof SystemCallLatencyStatisticsView)) {
+            fail("Could not instanciate view");
+        }
+        fTreeBot = viewBot.bot().tree();
+        assertNotNull(fTreeBot);
+    }
+
+    /**
+     * Closes the view
+     */
+    @After
+    public void closeTree() {
+        final SWTWorkbenchBot swtWorkbenchBot = new SWTWorkbenchBot();
+        SWTBotView viewBot = swtWorkbenchBot.viewById(VIEW_ID);
+        viewBot.close();
+    }
+
+    private static void switchTracingPerspective() {
+        final Exception retE[] = new Exception[1];
+        if (!UIThreadRunnable.syncExec(new BoolResult() {
+            @Override
+            public Boolean run() {
+                try {
+                    PlatformUI.getWorkbench().showPerspective(TRACING_PERSPECTIVE_ID,
+                            PlatformUI.getWorkbench().getActiveWorkbenchWindow());
+                } catch (WorkbenchException e) {
+                    retE[0] = e;
+                    return false;
+                }
+                return true;
+            }
+        })) {
+            fail(retE[0].getMessage());
+        }
+
+    }
+
+    /**
+     * Test with an actual trace, this is more of an integration test than a
+     * unit test. This test is a slow one too. If some analyses are not well
+     * configured, this test will also generates null pointer exceptions. These
+     * are will be logged.
+     *
+     * @throws IOException
+     *             trace not found?
+     */
+    @Test
+    public void testWithTrace() throws IOException {
+        String tracePath;
+        tracePath = FileLocator.toFileURL(CtfTestTrace.ARM_64_BIT_HEADER.getTraceURL()).getPath();
+        SWTWorkbenchBot bot = new SWTWorkbenchBot();
+        SWTBotView view = bot.viewById(VIEW_ID);
+        view.close();
+        bot.waitUntil(ConditionHelpers.ViewIsClosed(view));
+        SWTBotUtils.createProject(PROJECT_NAME);
+        SWTBotUtils.openTrace(PROJECT_NAME, tracePath, TRACE_TYPE);
+        SWTBotUtils.waitForJobs();
+        createTree();
+        SWTBotUtils.waitForJobs();
+        assertEquals("1.000 µs", fTreeBot.cell(0, MIN_COL));
+        assertEquals("5.904 s", fTreeBot.cell(0, MAX_COL));
+        assertEquals("15.628 ms", fTreeBot.cell(0, AVERAGE_COL)); // double
+        assertEquals("175.875 ms", fTreeBot.cell(0, STDEV_COL));
+        assertEquals("1801", fTreeBot.cell(0, COUNT_COL));
+        SWTBotTreeItem treeItem = fTreeBot.getTreeItem("Total");
+        treeItem = treeItem.getNode(0);
+        assertEquals(55, treeItem.getNodes().size());
+        validate(treeItem.getNode(2), "select", "13.600 µs", "1.509 s", "192.251 ms", "386.369 ms", "58");
+        validate(treeItem.getNode(3), "poll", "6.300 µs", "6.800 µs", "6.550 µs", "---", "2");
+        validate(treeItem.getNode(5), "set_tid_address", "2.300 µs", "2.300 µs", "2.300 µs", "---", "1");
+        validate(treeItem.getNode(7), "pipe", "27.900 µs", "29.700 µs", "28.800 µs", "---", "2");
+
+        bot.closeAllEditors();
+        SWTBotUtils.deleteProject(PROJECT_NAME, bot);
+    }
+
+    private static void validate(SWTBotTreeItem treeItem, final String nodeName, final String min, final String max, final String avg, final String stdev, final String count) {
+        assertEquals(nodeName, treeItem.cell(0));
+        assertEquals(min, treeItem.cell(MIN_COL));
+        assertEquals(max, treeItem.cell(MAX_COL));
+        assertEquals(avg, treeItem.cell(AVERAGE_COL)); // double
+        assertEquals(stdev, treeItem.cell(STDEV_COL));
+        assertEquals(count, treeItem.cell(COUNT_COL));
+    }
+}
This page took 0.02739 seconds and 5 git commands to generate.