lttng.ui: Add SWTBot test for CPU selection signals.
authorMatthew Khouzam <matthew.khouzam@ericsson.com>
Tue, 10 May 2016 00:59:04 +0000 (20:59 -0400)
committerMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Thu, 12 May 2016 17:57:22 +0000 (12:57 -0500)
This changes the behavior of the TmfTreeViewer by converting
a thread to a job.

Change-Id: I4369c8ef9cddf7b64dc1e526cce401a0e2472bec
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/META-INF/MANIFEST.MF
lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesAndCpuViewTest.java [new file with mode: 0644]
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/tree/AbstractTmfTreeViewer.java

index deafc42c91314af39e55bbaad0cae0ee09356df7..47e70dfd278a072849b08d62426a377274cf26a7 100644 (file)
@@ -13,6 +13,7 @@ Require-Bundle: org.apache.log4j,
  org.eclipse.core.runtime,
  org.eclipse.tracecompass.lttng2.kernel.core,
  org.eclipse.tracecompass.lttng2.kernel.ui,
+ org.eclipse.tracecompass.analysis.os.linux.core,
  org.eclipse.tracecompass.lttng2.control.ui,
  org.eclipse.tracecompass.analysis.os.linux.ui,
  org.eclipse.tracecompass.tmf.core,
@@ -28,4 +29,5 @@ Require-Bundle: org.apache.log4j,
  org.eclipse.ui.ide,
  org.eclipse.ui.views,
  org.junit
-Import-Package: org.eclipse.tracecompass.testtraces.ctf
+Import-Package: org.eclipse.tracecompass.testtraces.ctf,
+ org.swtchart;version="0.7.0"
diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesAndCpuViewTest.java b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ResourcesAndCpuViewTest.java
new file mode 100644 (file)
index 0000000..28dcc42
--- /dev/null
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Paths;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
+import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
+import org.eclipse.swtbot.swt.finder.matchers.WidgetOfType;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
+import org.eclipse.tracecompass.analysis.os.linux.core.signals.TmfCpuSelectedSignal;
+import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.cpuusage.CpuUsageView;
+import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
+import org.hamcrest.Matcher;
+import org.junit.Before;
+import org.junit.Test;
+import org.swtchart.Chart;
+
+/**
+ * SWTBot tests for Resources view
+ *
+ * @author Matthew Khouzam
+ */
+public class ResourcesAndCpuViewTest extends KernelTestBase {
+
+    private SWTBotView fViewBotRv;
+    private SWTBotView fViewBotCpu;
+
+    /**
+     * Before Test
+     */
+    @Override
+    @Before
+    public void before() {
+        fViewBotRv = fBot.viewByPartName("Resources");
+        SWTBotUtils.openView(CpuUsageView.ID);
+        fViewBotCpu = fBot.viewById(CpuUsageView.ID);
+        fViewBotCpu.show();
+        fViewBotRv.show();
+        try {
+            SWTBotUtils.openTrace(TRACE_PROJECT_NAME, Paths.get(FileLocator.toFileURL(CtfTestTrace.ARM_64_BIT_HEADER.getTraceURL()).toURI()).toString(), KERNEL_TRACE_TYPE);
+        } catch (IOException | URISyntaxException e) {
+            fail(e.getMessage());
+        }
+        SWTBotUtils.activateEditor(fBot, "bug446190");
+        fViewBotRv.setFocus();
+    }
+
+    /**
+     * Simple test to check the CPU Usage view after getting signals.
+     */
+    @Test
+    public void testSignals() {
+        Widget widget = fViewBotRv.getWidget();
+        assertNotNull(widget);
+        ITmfTrace activeTrace = TmfTraceManager.getInstance().getActiveTrace();
+        assertNotNull(activeTrace);
+
+        // clear everything
+        TmfCpuSelectedSignal signal = new TmfCpuSelectedSignal(widget, -1, activeTrace);
+        broadcast(signal);
+        assertEquals("Before signal - CPU Usage Title", "CPU Usage", getTitle());
+        assertEquals("Before signal - Thread Table", 12, getTableCount());
+        fViewBotRv.setFocus();
+
+        // select cpu 1
+        signal = new TmfCpuSelectedSignal(widget, 1, activeTrace);
+        broadcast(signal);
+        assertEquals("After signal - CPU Usage Title", "CPU Usage 1", getTitle());
+        assertEquals("After signal - Thread Table", 4, getTableCount());
+
+        // select cpu 3 and 1
+        signal = new TmfCpuSelectedSignal(widget, 3, activeTrace);
+        broadcast(signal);
+        assertEquals("After signal 2 - CPU Usage Title", "CPU Usage 1, 3", getTitle());
+        assertEquals("After signal 2 - Thread Table", 8, getTableCount());
+
+        // reset
+        signal = new TmfCpuSelectedSignal(widget, -1, activeTrace);
+        broadcast(signal);
+        assertEquals("After signal clear - CPU Usage Title", "CPU Usage", getTitle());
+        assertEquals("After signal clear - Thread Table", 12, getTableCount());
+    }
+
+    private static void broadcast(TmfCpuSelectedSignal signal) {
+        UIThreadRunnable.syncExec(() -> TmfSignalManager.dispatchSignal(signal));
+        SWTBotUtils.waitForJobs();
+    }
+
+    private String getTitle() {
+        fViewBotCpu.setFocus();
+        // Do some basic validation
+        Matcher<Chart> matcher = WidgetOfType.widgetOfType(Chart.class);
+        Chart chart = fViewBotCpu.bot().widget(matcher);
+        return chart.getTitle().getText();
+    }
+
+    private int getTableCount() {
+        fViewBotCpu.setFocus();
+        // Do some basic validation
+        Matcher<Tree> matcher = WidgetOfType.widgetOfType(Tree.class);
+        SWTBotTree treeBot = new SWTBotTree(fViewBotCpu.bot().widget(matcher));
+        int count = 0;
+        for (SWTBotTreeItem bot : treeBot.getAllItems()) {
+            final String text = bot.getText();
+            if (!text.isEmpty()) {
+                count++;
+            }
+        }
+        return count;
+    }
+}
index 97fe501b6244e064145b9973a02a71f89df2bf06..c44108b21bfb9555350ee500e8294bcd0a1bf321 100644 (file)
@@ -14,6 +14,10 @@ package org.eclipse.tracecompass.tmf.ui.viewers.tree;
 
 import java.util.List;
 
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.IBaseLabelProvider;
@@ -399,9 +403,9 @@ public abstract class AbstractTmfTreeViewer extends TmfTimeViewer {
      *            <code>false</code> for the visible time range
      */
     protected void updateContent(final long start, final long end, final boolean isSelection) {
-        Thread thread = new Thread() {
+        Job thread = new Job("") { //$NON-NLS-1$
             @Override
-            public void run() {
+            public IStatus run(IProgressMonitor monitor) {
                 final ITmfTreeViewerEntry rootEntry = updateElements(start, end, isSelection);
                 /* Set the input in main thread only if it didn't change */
                 if (rootEntry != null) {
@@ -426,9 +430,11 @@ public abstract class AbstractTmfTreeViewer extends TmfTimeViewer {
                         }
                     });
                 }
+                return Status.OK_STATUS;
             }
         };
-        thread.start();
+        thread.setSystem(true);
+        thread.schedule();
     }
 
     /**
This page took 0.028519 seconds and 5 git commands to generate.