blob: f5d3f1935884b5fe29a8ba38999ca5d4a9b03617 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
* Alexander Kurtakov <akurtako@redhat.com> - Bug 459343
*******************************************************************************/
package org.eclipse.core.tests.resources.perf;
import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.tests.harness.PerformanceTestRunner;
import org.eclipse.core.tests.internal.builders.SortBuilder;
import org.eclipse.core.tests.internal.builders.TestBuilder;
/**
* Automated performance tests for builders.
*/
public class BuilderPerformanceTest extends WorkspacePerformanceTest {
private static final int PROJECT_COUNT = 100;
private static final int REPEAT = 20;
public BuilderPerformanceTest(String name) {
super(name);
}
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new BuilderPerformanceTest("testManualBuildWithAutobuildOn"));
return suite;
}
IProject[] otherProjects;
/**
* Creates a project and fills it with contents
*/
void createAndPopulateProject(final IProject project, final IFolder folder, final int totalResources) {
try {
getWorkspace().run((IWorkspaceRunnable) monitor -> {
IProjectDescription desc = project.getWorkspace().newProjectDescription(project.getName());
desc.setBuildSpec(new ICommand[] {createCommand(desc, "Builder1"), createCommand(desc, "Builder2"), createCommand(desc, "Builder3"), createCommand(desc, "Builder4"), createCommand(desc, "Builder5")});
project.create(desc, getMonitor());
project.open(getMonitor());
createFolder(folder, totalResources);
}, getMonitor());
} catch (CoreException e) {
fail("Failed to create project in performance test", e);
}
}
/**
* Creates and returns a new command with the SortBuilder, and the TestBuilder.BUILD_ID
* parameter set to the given value.
*/
protected ICommand createCommand(IProjectDescription description, String buildID) {
return createCommand(description, SortBuilder.BUILDER_NAME, buildID);
}
/**
* Creates and returns a new command with the given builder name, and the TestBuilder.BUILD_ID
* parameter set to the given value.
*/
protected ICommand createCommand(IProjectDescription description, String builderName, String buildID) {
ICommand command = description.newCommand();
Map<String, String> args = command.getArguments();
args.put(TestBuilder.BUILD_ID, buildID);
command.setBuilderName(builderName);
command.setArguments(args);
return command;
}
@Override
protected void setUp() throws Exception {
super.setUp();
otherProjects = new IProject[PROJECT_COUNT];
for (int i = 0; i < otherProjects.length; i++) {
otherProjects[i] = getWorkspace().getRoot().getProject("Project " + i);
IFolder folder = otherProjects[i].getFolder("Folder");
createAndPopulateProject(otherProjects[i], folder, 100);
}
}
/**
* Tests performing manual project-level increment builds when autobuild is on.
* See bug 261225 for details.
*/
public void testManualBuildWithAutobuildOn() {
PerformanceTestRunner runner = new PerformanceTestRunner() {
IProject[] projects;
@Override
protected void setUp() {
waitForBackgroundActivity();
projects = getWorkspace().computeProjectOrder(getWorkspace().getRoot().getProjects()).projects;
}
@Override
protected void tearDown() {
}
@Override
protected void test() {
try {
for (int repeats = 0; repeats < REPEAT; repeats++) {
for (IProject project : projects) {
project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, getMonitor());
}
}
} catch (CoreException e) {
fail("1.99", e);
}
}
};
//this test simulates a manual build before launch with autobuild enabled
runner.setFingerprintName("Build workspace before launch");
runner.run(this, REPEATS, 1);
}
}