blob: 09f3a86d5912b9440ed67e16daf938a693a999ea [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017, 2018 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Simon Delisle - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ui.tests.actions;
import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.tracecompass.tmf.ui.actions.HttpTraceImportOperation;
import org.eclipse.tracecompass.tmf.ui.project.model.ITmfProjectModelElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Test the {@link HttpTraceImportOperation} class
*
* @author Simon Delisle
*/
public class HttpTraceImportOperationTest {
private static TmfTraceFolder fDestFolder;
private static String fTestTrace1Url = "http://archive.eclipse.org/tracecompass/test-traces/tmf/syslog";
private static String fTestTrace2Url = "http://archive.eclipse.org/tracecompass/test-traces/tmf/syslog_collapse";
private static String fTraceArchiveUrl = "http://archive.eclipse.org/tracecompass/test-traces/tmf/syslogs.zip";
private static final String TEST_FOLDER = "Folder";
private static List<String> fImportedTraceNameList;
/**
* Setup class
*
* @throws Exception
* if an exception occurs
*/
@BeforeClass
public static void beforeClass() throws Exception {
// Create the destination folder/project
IProject project = TmfProjectRegistry.createProject("Test Project", null, null);
final TmfProjectElement projectElement = TmfProjectRegistry.getProject(project, true);
TmfTraceFolder tracesFolder = checkNotNull(projectElement.getTracesFolder());
tracesFolder.getResource().getFolder(TEST_FOLDER).create(false, true, null);
tracesFolder.refresh();
WaitUtils.waitUntil(t -> t.getChild(TEST_FOLDER) != null, tracesFolder, "Test folder \"" + TEST_FOLDER + "\" doesn't exist", 20000);
fDestFolder = (TmfTraceFolder) tracesFolder.getChild(TEST_FOLDER);
fImportedTraceNameList = new ArrayList<>();
fImportedTraceNameList.add("syslog");
fImportedTraceNameList.add("syslog_collapse");
}
/**
* Cleanup class
*
* @throws CoreException
* if an exception occurs
*/
@AfterClass
public static void afterClass() throws CoreException {
if (fDestFolder != null) {
fDestFolder.getProject().getResource().delete(true, null);
}
}
/**
* Test the download and import operation for a trace file
*
* @throws Exception
* if an exception occurs
*/
@Test
public void testTraceImport() throws Exception {
WorkspaceModifyOperation operation = new HttpTraceImportOperation(fTestTrace1Url, fDestFolder);
try {
PlatformUI.getWorkbench().getProgressService().run(true, true, operation);
} catch (InterruptedException e) {
assumeTrue(false);
}
validateImport(Collections.singletonList("syslog"));
}
/**
* Test the download and import operation for multiple traces
*
* @throws Exception
* if an exception occurs
*/
@Test
public void testMultipleTracesImport() throws Exception {
List<String> tracesUrl = new ArrayList<>();
tracesUrl.add(fTestTrace1Url);
tracesUrl.add(fTestTrace2Url);
WorkspaceModifyOperation operation = new HttpTraceImportOperation(tracesUrl, fDestFolder);
try {
PlatformUI.getWorkbench().getProgressService().run(true, true, operation);
} catch (InterruptedException e) {
assumeTrue(false);
}
validateImport(fImportedTraceNameList);
}
/**
* Test the download and import operation for an archive
*
* @throws Exception
* if an exception occurs
*/
@Test
public void testArchiveImport() throws Exception {
WorkspaceModifyOperation operation = new HttpTraceImportOperation(fTraceArchiveUrl, fDestFolder);
try {
PlatformUI.getWorkbench().getProgressService().run(true, true, operation);
} catch (InterruptedException e) {
assumeTrue(false);
}
validateImport(fImportedTraceNameList);
}
private static void validateImport(List<String> expectedImportFiles) {
List<ITmfProjectModelElement> destFolderChildren = fDestFolder.getChildren();
assertEquals(expectedImportFiles.size(), destFolderChildren.size());
for (ITmfProjectModelElement element : destFolderChildren) {
assertTrue(expectedImportFiles.contains(element.getName()));
}
}
}