lttng: Fix intermittent failure in MemoryUsageViewTest
authorMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Thu, 18 Feb 2016 21:01:33 +0000 (16:01 -0500)
committerMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Fri, 19 Feb 2016 18:41:27 +0000 (13:41 -0500)
It's possible that the series are not there yet after the jobs running.
This is because of an asyncExec in the view code.
To reproduce the issue, in TmfCommonXLineChartViewer.updateDisplay,
change the asyncExec to a timerExec(5000, ...)

We can use a waitUntil to wait until the series are there.

Change-Id: Ic70d3adbec88578c155b53a4f42e51c568180511
Signed-off-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/66865
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
lttng/org.eclipse.tracecompass.lttng2.ust.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/ust/ui/swtbot/tests/MemoryUsageViewTest.java

index 5a313736891b6c180eb30cff8e9efdd799de365d..5f475950f60271e31e0f981025b0baa046446cf8 100644 (file)
@@ -23,6 +23,7 @@ import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
 import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
 import org.eclipse.swtbot.swt.finder.matchers.WidgetOfType;
 import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
+import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
 import org.eclipse.tracecompass.internal.lttng2.ust.ui.views.memusage.MemoryUsageView;
 import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
@@ -45,6 +46,8 @@ import org.swtchart.ISeriesSet;
 @RunWith(SWTBotJunit4ClassRunner.class)
 public class MemoryUsageViewTest {
 
+    private static final int EXPECTED_NUM_SERIES = 4;
+
     private static final String UST_ID = "org.eclipse.linuxtools.lttng2.ust.tracetype";
 
     private static final String PROJECT_NAME = "TestForMemory";
@@ -109,13 +112,31 @@ public class MemoryUsageViewTest {
         // Do some basic validation
         Matcher<Chart> matcher = WidgetOfType.widgetOfType(Chart.class);
         Chart chart = viewBot.bot().widget(matcher);
-        ISeriesSet seriesSet = chart.getSeriesSet();
-        assertNotNull(seriesSet);
-        ISeries[] series = seriesSet.getSeries();
-        assertNotNull(series);
 
         // Verify that the chart has 4 series
-        assertEquals(4, series.length);
+        fBot.waitUntil(new DefaultCondition() {
+            private String fFailureMessage;
+
+            @Override
+            public boolean test() throws Exception {
+                int length = chart.getSeriesSet().getSeries().length;
+                if (length != EXPECTED_NUM_SERIES){
+                    fFailureMessage = "Chart did not contain the expected number series. Actual " + length + ", expected " + EXPECTED_NUM_SERIES;
+                    return false;
+                }
+
+                return true;
+            }
+
+            @Override
+            public String getFailureMessage() {
+                return fFailureMessage;
+            }
+        });
+
+        ISeriesSet seriesSet = chart.getSeriesSet();
+        ISeries[] series = seriesSet.getSeries();
+        assertEquals(EXPECTED_NUM_SERIES, series.length);
         // Verify that each series is a ILineSeries
         for (int i = 0; i < series.length; i++) {
             assertTrue(series[i] instanceof ILineSeries);
This page took 0.025248 seconds and 5 git commands to generate.