diff options
Diffstat (limited to 'tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/wizards/StandardImportGzipTraceTest.java')
-rw-r--r-- | tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/wizards/StandardImportGzipTraceTest.java | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/wizards/StandardImportGzipTraceTest.java b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/wizards/StandardImportGzipTraceTest.java new file mode 100644 index 0000000000..a070b9100c --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/wizards/StandardImportGzipTraceTest.java @@ -0,0 +1,242 @@ +/******************************************************************************* + * Copyright (c) 2015 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.tmf.ui.swtbot.tests.wizards; + +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.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.zip.GZIPOutputStream; + +import org.apache.log4j.Logger; +import org.apache.log4j.varia.NullAppender; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.swt.widgets.Shell; +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.VoidResult; +import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences; +import org.eclipse.swtbot.swt.finder.waits.Conditions; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotButton; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotCheckBox; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotCombo; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotRadio; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotText; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem; +import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.importtrace.ImportTraceWizard; +import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.importtrace.Messages; +import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace; +import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers; +import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * + * Import operation for gz traces + * + */ +@RunWith(SWTBotJunit4ClassRunner.class) +public class StandardImportGzipTraceTest { + private static final String ROOT_FOLDER = "/"; + private static final String PROJECT_NAME = "Tracing"; + private static File fGzipTrace; + private Wizard fWizard; + private SWTWorkbenchBot fBot; + + /** The Log4j logger instance. */ + protected static final Logger fLogger = Logger.getRootLogger(); + + /** + * create a gzip file + */ + @BeforeClass + public static void init() { + SWTBotUtils.failIfUIThread(); + zipTrace(); + fLogger.removeAllAppenders(); + fLogger.addAppender(new NullAppender()); + } + + /** + * create the project + */ + @Before + public void setup() { + createProject(); + SWTBotPreferences.TIMEOUT = 20000; + } + + /** + * cleanup + */ + @AfterClass + public static void destroy() { + fLogger.removeAllAppenders(); + } + + private void createProject() { + fBot = new SWTWorkbenchBot(); + /* Close welcome view */ + SWTBotUtils.closeView("Welcome", fBot); + + SWTBotUtils.createProject(PROJECT_NAME); + } + + /** + * Import a gzip trace + */ + @Test + public void testGzipImport() { + final String traceType = "Test trace : TMF Tests"; + final String tracesNode = "Traces [1]"; + + /* + * Actual importing + */ + openImportWizard(); + selectImportFromArchive(fGzipTrace.getAbsolutePath()); + selectFolder(ROOT_FOLDER); + SWTBotCheckBox checkBox = fBot.checkBox(Messages.ImportTraceWizard_CreateLinksInWorkspace); + assertFalse(checkBox.isEnabled()); + SWTBotCombo comboBox = fBot.comboBoxWithLabel(Messages.ImportTraceWizard_TraceType); + comboBox.setSelection(traceType); + importFinish(); + /* + * Remove .gz extension + */ + assertNotNull(fGzipTrace); + String name = fGzipTrace.getName(); + assertNotNull(name); + assertTrue(name.length() > 3); + String traceName = name.substring(0, name.length() - 3); + assertNotNull(traceName); + assertFalse(traceName.isEmpty()); + + /* + * Open trace + */ + SWTBotView projectExplorer = fBot.viewById(IPageLayout.ID_PROJECT_EXPLORER); + projectExplorer.setFocus(); + final SWTBotTree tree = projectExplorer.bot().tree(); + /* + * This appears to be problematic due to the length of the file name and + * the resolution in our CI. + */ + tree.expandNode(PROJECT_NAME, true); + SWTBotTreeItem treeItem = tree.getTreeItem(PROJECT_NAME); + fBot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(tracesNode, treeItem)); + treeItem = treeItem.getNode(tracesNode); + fBot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(traceName, treeItem)); + treeItem = treeItem.getNode(traceName); + treeItem.doubleClick(); + SWTBotUtils.waitForJobs(); + /* + * Check results + */ + SWTBotTable editor = fBot.activeEditor().bot().table(); + String c22 = editor.cell(2, 2); + String c10 = editor.cell(1, 0); + assertEquals("Type-1", c22); + assertEquals("", c10); + } + + private static void zipTrace() { + try { + fGzipTrace = File.createTempFile("trace", ".gz"); + byte[] buffer = new byte[1024]; + + try (GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream(fGzipTrace));) { + + try (FileInputStream in = new FileInputStream(TmfTestTrace.A_TEST_10K2.getFullPath());) { + + int len; + while ((len = in.read(buffer)) > 0) { + gzos.write(buffer, 0, len); + } + } + gzos.finish(); + } + } catch (IOException e) { + fail(e.getMessage()); + } + } + + private void selectImportFromArchive(String archivePath) { + SWTBotRadio button = fBot.radio("Select &archive file:"); + button.click(); + + SWTBotCombo sourceCombo = fBot.comboBox(1); + + sourceCombo.setText(new File(archivePath).getAbsolutePath()); + + SWTBotText text = fBot.text(); + text.setFocus(); + } + + private void openImportWizard() { + fWizard = new ImportTraceWizard(); + + UIThreadRunnable.asyncExec(new VoidResult() { + @Override + public void run() { + final IWorkbench workbench = PlatformUI.getWorkbench(); + // Fire the Import Trace Wizard + if (workbench != null) { + final IWorkbenchWindow activeWorkbenchWindow = workbench.getActiveWorkbenchWindow(); + Shell shell = activeWorkbenchWindow.getShell(); + assertNotNull(shell); + ((ImportTraceWizard) fWizard).init(PlatformUI.getWorkbench(), StructuredSelection.EMPTY); + WizardDialog dialog = new WizardDialog(shell, fWizard); + dialog.open(); + } + } + }); + + fBot.waitUntil(ConditionHelpers.isWizardReady(fWizard)); + } + + private void selectFolder(String... treePath) { + SWTBotTree tree = fBot.tree(); + fBot.waitUntil(Conditions.widgetIsEnabled(tree)); + SWTBotTreeItem folderNode = SWTBotUtils.getTreeItem(fBot, tree, treePath); + folderNode.check(); + } + + private void importFinish() { + SWTBotShell shell = fBot.activeShell(); + final SWTBotButton finishButton = fBot.button("Finish"); + finishButton.click(); + fBot.waitUntil(Conditions.shellCloses(shell)); + SWTBotUtils.waitForJobs(); + } +} |