/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* 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:
* Camilo Bernal <cabernal@redhat.com> - Initial Implementation.
*******************************************************************************/
package org.eclipse.linuxtools.internal.perf.tests;
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.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.linuxtools.internal.perf.PerfPlugin;
import org.eclipse.linuxtools.internal.perf.StatData;
import org.eclipse.linuxtools.internal.perf.handlers.AbstractSaveDataHandler;
import org.eclipse.linuxtools.internal.perf.handlers.PerfSaveSessionHandler;
import org.eclipse.linuxtools.internal.perf.handlers.PerfSaveStatsHandler;
import org.eclipse.linuxtools.profiling.tests.AbstractTest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.FrameworkUtil;
public class SaveSessionTest extends AbstractTest {
private static final String WORKING_DIR = "resources/"; //$NON-NLS-1$
private static final String DATA_FILE_PATH = "/mock/data/path"; //$NON-NLS-1$
private static final String PERF_DATA_FILE_PATH = "resources/perf.data"; //$NON-NLS-1$
private static final String PERF_STATS_FILE_PATH = "stat_data"; //$NON-NLS-1$
private static final String DATA_FILE_NAME = "data"; //$NON-NLS-1$
private static final String DATA_FILE_EXT = "ext"; //$NON-NLS-1$
private ArrayList<IPath> testFiles = new ArrayList<>();
private IProject proj;
@Before
public void setUp() {
try {
proj = createProjectAndBuild(FrameworkUtil.getBundle(this.getClass()), "fibTest").getProject();
PerfPlugin.getDefault().setWorkingDir(proj.getLocation());
} catch (InvocationTargetException | CoreException | URISyntaxException | InterruptedException | IOException e) {
e.printStackTrace();
fail("Failed to create test project");
}
}
@After
public void tearDown(){
for (IPath f : testFiles) {
File file = f.toFile();
assertTrue(file.delete());
}
}
@Test
public void testGenericHandler() {
GenericSaveDataHandler handler = new GenericSaveDataHandler();
assertTrue(handler.canSave(Path.fromOSString(DATA_FILE_PATH)));
assertEquals(WORKING_DIR, handler.getWorkingDir().toOSString());
IPath path = handler.getNewDataLocation(DATA_FILE_NAME, DATA_FILE_EXT);
assertEquals(WORKING_DIR + DATA_FILE_NAME + '.' + DATA_FILE_EXT,
path.toOSString());
assertTrue(handler.isEnabled());
assertTrue(handler.isHandled());
}
@Test
public void testPerfSaveSessionHandler() {
PerfSaveSessionTestHandler handler = new PerfSaveSessionTestHandler();
PerfPlugin.getDefault().setPerfProfileData(null);
assertFalse(handler.verifyData());
PerfPlugin.getDefault().setPerfProfileData(
new Path(PERF_DATA_FILE_PATH));
assertTrue(handler.verifyData());
IPath data = handler.saveData(DATA_FILE_NAME);
assertNotNull(data);
assertTrue(!data.toFile().canWrite());
testFiles.add(data);
}
// mock handlers
@Test
public void testPerfSaveStatsHandler() {
PerfSaveStatsTestHandler handler = new PerfSaveStatsTestHandler();
PerfPlugin.getDefault().setStatData(null);
assertFalse(handler.verifyData());
PerfPlugin.getDefault().setStatData(
new StatData("title", null, "prog", new String[] {}, 1, null, proj) { //$NON-NLS-1$ //$NON-NLS-2$
@Override
public String getPerfData() {
return PERF_STATS_FILE_PATH;
}
});
assertTrue(handler.verifyData());
IPath stats = handler.saveData(DATA_FILE_NAME);
assertNotNull(stats);
assertTrue(!stats.toFile().canWrite());
testFiles.add(stats);
}
private static class GenericSaveDataHandler extends AbstractSaveDataHandler {
@Override
public Object execute(ExecutionEvent event) {
return null;
}
@Override
public IPath saveData(String filename) {
return null;
}
@Override
public boolean verifyData() {
return true;
}
@Override
protected IPath getWorkingDir() {
return new Path(WORKING_DIR);
}
}
private static class PerfSaveSessionTestHandler extends PerfSaveSessionHandler {
@Override
protected IPath getWorkingDir() {
return new Path(WORKING_DIR);
}
}
private static class PerfSaveStatsTestHandler extends PerfSaveStatsHandler {
@Override
protected IPath getWorkingDir() {
return new Path(WORKING_DIR);
}
}
@Override
protected ILaunchConfigurationType getLaunchConfigType() {
return null;
}
@Override
protected void setProfileAttributes(ILaunchConfigurationWorkingCopy wc) {
}
}