timing.ui: add Export to TSV to tables and statistics
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests / src / org / eclipse / tracecompass / analysis / os / linux / ui / swtbot / tests / latency / SystemCallLatencyTableAnalysisTest.java
index 2ebc595fb4bcb4a9bc934998ebf5a9fefc3a9eb6..a5b312f3280fdc70476eb41ec15756fd3e23285c 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015 Ericsson
+ * Copyright (c) 2015, 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
 
 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 static org.junit.Assert.*;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Random;
 
@@ -29,16 +29,18 @@ import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
+import org.eclipse.swtbot.swt.finder.SWTBot;
 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.SWTBotMenu;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable;
-import org.eclipse.tracecompass.analysis.os.linux.core.latency.SystemCall;
-import org.eclipse.tracecompass.analysis.os.linux.core.latency.SystemCall.InitialInfo;
-import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.AbstractSegmentStoreTableViewer;
+import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.table.AbstractSegmentStoreTableView;
+import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.table.AbstractSegmentStoreTableViewer;
 import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.latency.SystemCallLatencyView;
+import org.eclipse.tracecompass.segmentstore.core.BasicSegment;
 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;
@@ -160,19 +162,20 @@ public class SystemCallLatencyTableAnalysisTest {
      */
     @Test
     public void climbTest() {
-        List<@NonNull SystemCall> fixture = new ArrayList<>();
+        List<@NonNull BasicSegment> fixture = new ArrayList<>();
         for (int i = 0; i < 100; i++) {
-            fixture.add(new SystemCall(new InitialInfo(i, "", Collections.EMPTY_MAP), 2 * i, 0));
+            fixture.add(new BasicSegment(i, 2 * i));
         }
 
         assertNotNull(fTable);
         fTable.updateModel(fixture);
         SWTBotTable tableBot = new SWTBotTable(fTable.getTableViewer().getTable());
-        assertEquals("0", tableBot.cell(0, 2));
+        SWTBot bot = new SWTBot();
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "0", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("0", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "0", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("99", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "99", 0, 2));
     }
 
     /**
@@ -180,18 +183,19 @@ public class SystemCallLatencyTableAnalysisTest {
      */
     @Test
     public void decrementingTest() {
-        List<@NonNull SystemCall> fixture = new ArrayList<>();
+        List<@NonNull BasicSegment> fixture = new ArrayList<>();
         for (int i = 100; i >= 0; i--) {
-            fixture.add(new SystemCall(new InitialInfo(i, "", Collections.EMPTY_MAP), 2 * i, 0));
+            fixture.add(new BasicSegment(i, 2 * i));
         }
         assertNotNull(fTable);
         fTable.updateModel(fixture);
         SWTBotTable tableBot = new SWTBotTable(fTable.getTableViewer().getTable());
-        assertEquals("100", tableBot.cell(0, 2));
+        SWTBot bot = new SWTBot();
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "100", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("0", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "0", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("100", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "100", 0, 2));
     }
 
     /**
@@ -199,18 +203,19 @@ public class SystemCallLatencyTableAnalysisTest {
      */
     @Test
     public void smallTest() {
-        List<@NonNull SystemCall> fixture = new ArrayList<>();
+        List<@NonNull BasicSegment> fixture = new ArrayList<>();
         for (int i = 1; i >= 0; i--) {
-            fixture.add(new SystemCall(new InitialInfo(i, "", Collections.EMPTY_MAP), 2 * i, 0));
+            fixture.add(new BasicSegment(i, 2 * i));
         }
         assertNotNull(fTable);
         fTable.updateModel(fixture);
         SWTBotTable tableBot = new SWTBotTable(fTable.getTableViewer().getTable());
-        assertEquals("1", tableBot.cell(0, 2));
+        SWTBot bot = new SWTBot();
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "1", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("0", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "0", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("1", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "1", 0, 2));
     }
 
     /**
@@ -219,18 +224,19 @@ public class SystemCallLatencyTableAnalysisTest {
     @Test
     public void largeTest() {
         final int size = 1000000;
-        SystemCall[] fixture = new SystemCall[size];
+        BasicSegment[] fixture = new BasicSegment[size];
         for (int i = 0; i < size; i++) {
-            fixture[i] = (new SystemCall(new InitialInfo(i, "", Collections.EMPTY_MAP), 2 * i, 0));
+            fixture[i] = (new BasicSegment(i, 2 * i));
         }
         assertNotNull(fTable);
         fTable.updateModel(fixture);
         SWTBotTable tableBot = new SWTBotTable(fTable.getTableViewer().getTable());
-        assertEquals("0", tableBot.cell(0, 2));
+        SWTBot bot = new SWTBot();
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "0", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("0", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "0", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("999999", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "999,999", 0, 2));
     }
 
     /**
@@ -241,20 +247,21 @@ public class SystemCallLatencyTableAnalysisTest {
         Random rnd = new Random();
         rnd.setSeed(1234);
         final int size = 1000000;
-        SystemCall[] fixture = new SystemCall[size];
+        BasicSegment[] fixture = new BasicSegment[size];
         for (int i = 0; i < size; i++) {
             int start = Math.abs(rnd.nextInt(100000000));
             int end = start + Math.abs(rnd.nextInt(1000000));
-            fixture[i] = (new SystemCall(new InitialInfo(start, "", Collections.EMPTY_MAP), end, 0));
+            fixture[i] = (new BasicSegment(start, end));
         }
         assertNotNull(fTable);
         fTable.updateModel(fixture);
         SWTBotTable tableBot = new SWTBotTable(fTable.getTableViewer().getTable());
-        assertEquals("894633", tableBot.cell(0, 2));
+        SWTBot bot = new SWTBot();
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "894,633", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("0", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "0", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("999999", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "999,999", 0, 2));
     }
 
     /**
@@ -264,21 +271,74 @@ public class SystemCallLatencyTableAnalysisTest {
     public void gaussianNoiseTest() {
         Random rnd = new Random();
         rnd.setSeed(1234);
-        List<@NonNull SystemCall> fixture = new ArrayList<>();
+        List<@NonNull BasicSegment> fixture = new ArrayList<>();
         for (int i = 1; i <= 1000000; i++) {
             int start = Math.abs(rnd.nextInt(100000000));
             final int delta = Math.abs(rnd.nextInt(1000));
             int end = start + delta * delta;
-            fixture.add(new SystemCall(new InitialInfo(start, "", Collections.EMPTY_MAP), end, 0));
+            fixture.add(new BasicSegment(start, end));
         }
         assertNotNull(fTable);
         fTable.updateModel(fixture);
         SWTBotTable tableBot = new SWTBotTable(fTable.getTableViewer().getTable());
-        assertEquals("400689", tableBot.cell(0, 2));
+        SWTBot bot = new SWTBot();
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "400,689", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("0", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "0", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("998001", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "998,001", 0, 2));
+    }
+
+    /**
+     * Test creating a tsv
+     *
+     * @throws NoSuchMethodException
+     *             Error creating the tsv
+     */
+    @Test
+    public void testWriteToTsv() throws NoSuchMethodException {
+        List<@NonNull BasicSegment> fixture = new ArrayList<>();
+        for (int i = 1; i <= 20; i++) {
+            int start = i;
+            final int delta = i;
+            int end = start + delta * delta;
+            fixture.add(new BasicSegment(start, end));
+        }
+        assertNotNull(fTable);
+        fTable.updateModel(fixture);
+        SWTBotTable tableBot = new SWTBotTable(fTable.getTableViewer().getTable());
+        SWTBot bot = new SWTBot();
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "1", 0, 2));
+        SWTWorkbenchBot swtWorkbenchBot = new SWTWorkbenchBot();
+        SWTBotView viewBot = swtWorkbenchBot.viewById(VIEW_ID);
+        testToTsv(viewBot);
+        SWTBotMenu menuBot = viewBot.viewMenu().menu("Export to TSV");
+        assertTrue(menuBot.isEnabled());
+        assertTrue(menuBot.isVisible());
+    }
+
+    private void testToTsv(SWTBotView view) throws NoSuchMethodException {
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        assertNotNull(os);
+        Class<@NonNull AbstractSegmentStoreTableView> clazz = AbstractSegmentStoreTableView.class;
+        Method method = clazz.getDeclaredMethod("exportToTsv", java.io.OutputStream.class);
+        method.setAccessible(true);
+        final Exception[] except = new Exception[1];
+        UIThreadRunnable.syncExec(() -> {
+            try {
+                method.invoke(fLatencyView, os);
+            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+                except[0] = e;
+            }
+        });
+        assertNull(except[0]);
+        @SuppressWarnings("null")
+        String[] lines = String.valueOf(os).split(System.getProperty("line.separator"));
+        assertNotNull(lines);
+        assertEquals("number of lines", 21, lines.length);
+        assertEquals("header", "Start Time\tEnd Time\tDuration", lines[0]);
+        // not a straight up string compare due to time zones. Kathmandu and Eucla have 15 minute time zones.
+        assertTrue("line 1", lines[1].matches("\\d\\d:\\d\\d:00\\.000\\s000\\s001\\t\\d\\d:\\d\\d:00.000 000 002\\t1"));
     }
 
     /**
@@ -304,11 +364,11 @@ public class SystemCallLatencyTableAnalysisTest {
         createTable();
         SWTBotUtils.waitForJobs();
         SWTBotTable tableBot = new SWTBotTable(fTable.getTableViewer().getTable());
-        assertEquals("24100", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "24,100", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("1000", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "1,000", 0, 2));
         tableBot.header("Duration").click();
-        assertEquals("5904091700", tableBot.cell(0, 2));
+        bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "5,904,091,700", 0, 2));
         bot.closeAllEditors();
         SWTBotUtils.deleteProject(PROJECT_NAME, bot);
     }
This page took 0.027688 seconds and 5 git commands to generate.