backported history clean-up tests to 2.1.3
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/LocalHistoryPerformanceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/LocalHistoryPerformanceTest.java
index e69f7bc..11f8eaf 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/LocalHistoryPerformanceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/LocalHistoryPerformanceTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
@@ -12,6 +12,8 @@
import junit.framework.Test;
import junit.framework.TestSuite;
+import org.eclipse.core.internal.localstore.HistoryStore;
+import org.eclipse.core.internal.resources.Workspace;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.tests.harness.PerformanceTestRunner;
@@ -20,7 +22,7 @@
/**
* Contains a set of use case-oriented performance tests for the local history.
- *
+ *
* @since 3.1
*/
public class LocalHistoryPerformanceTest extends ResourceTest {
@@ -28,12 +30,13 @@
private IWorkspaceDescription original;
public static Test suite() {
- // TestSuite suite = new TestSuite(LocalHistoryPerformanceTest.class.getName());
- // suite.addTest(new LocalHistoryPerformanceTest("testCopyHistory100x4"));
- // suite.addTest(new LocalHistoryPerformanceTest("testCopyHistory20x20"));
- // suite.addTest(new LocalHistoryPerformanceTest("testCopyHistory4x100"));
- // suite.addTest(new LocalHistoryPerformanceTest("testGetHistory"));
- // return suite;
+ // TestSuite suite = new
+ // TestSuite(LocalHistoryPerformanceTest.class.getName());
+ // suite.addTest(new
+ // LocalHistoryPerformanceTest("testHistoryCleanUp100x4"));
+ // suite.addTest(new
+ // LocalHistoryPerformanceTest("testHistoryCleanUp4x100"));
+ // return suite;
return new TestSuite(LocalHistoryPerformanceTest.class);
}
@@ -41,28 +44,40 @@
super(name);
}
+ private void cleanHistory() {
+ ((Workspace) getWorkspace()).getFileSystemManager().getHistoryStore().clean();
+ }
+
/**
- * Creates a tree of resources containing history.
+ * Creates a tree of resources containing history.
*/
- private void createTree(IFolder base, int filesPerFolder, int statesPerFile) {
- IFolder[] folders = new IFolder[5];
+ private void createTree(IFolder base, final int filesPerFolder, final int statesPerFile) {
+ final IFolder[] folders = new IFolder[5];
folders[0] = base.getFolder("folder1");
folders[1] = base.getFolder("folder2");
folders[2] = folders[0].getFolder("folder3");
folders[3] = folders[2].getFolder("folder4");
folders[4] = folders[3].getFolder("folder5");
- ensureExistsInWorkspace(folders, true);
- for (int i = 0; i < folders.length; i++) {
- for (int j = 0; j < filesPerFolder; j++) {
- IFile file = folders[i].getFile("file" + j);
- ensureExistsInWorkspace(file, getRandomContents());
- try {
- for (int k = 0; k < statesPerFile; k++)
- file.setContents(getRandomContents(), IResource.KEEP_HISTORY, getMonitor());
- } catch (CoreException ce) {
- fail("0.5", ce);
+ final IWorkspace workspace = getWorkspace();
+ try {
+ workspace.run(new IWorkspaceRunnable() {
+ public void run(org.eclipse.core.runtime.IProgressMonitor monitor) throws CoreException {
+ ensureExistsInWorkspace(folders, true);
+ for (int i = 0; i < folders.length; i++)
+ for (int j = 0; j < filesPerFolder; j++) {
+ IFile file = folders[i].getFile("file" + j);
+ ensureExistsInWorkspace(file, getRandomContents());
+ try {
+ for (int k = 0; k < statesPerFile; k++)
+ file.setContents(getRandomContents(), IResource.KEEP_HISTORY, getMonitor());
+ } catch (CoreException ce) {
+ fail("0.5", ce);
+ }
+ }
}
- }
+ }, getMonitor());
+ } catch (CoreException e) {
+ fail("#createTree at : " + base.getFullPath(), e);
}
}
@@ -140,7 +155,12 @@
protected void tearDown() {
try {
ensureDoesNotExistInWorkspace(getWorkspace().getRoot());
- HistoryStoreTest.wipeHistoryStore();
+ HistoryStore store = ((Workspace) getWorkspace()).getFileSystemManager().getHistoryStore();
+ // Remove all the entries from the history store index. Note that
+ // this does not cause the history store states to be removed.
+ store.removeAll(getWorkspace().getRoot());
+ // Now make sure all the states are really removed.
+ store.removeGarbage();
} catch (Exception e) {
fail("2.0", e);
}
@@ -162,12 +182,22 @@
final IFolder base = project.getFolder("base");
ensureDoesNotExistInWorkspace(base);
new PerformanceTestRunner() {
+ private IWorkspaceDescription original;
protected void setUp() {
+ original = setMaxFileStates("0.1", 1);
+ // make sure we start with no garbage
+ HistoryStoreTest.wipeHistoryStore();
+ // create our own garbage
createTree(base, filesPerFolder, statesPerFile);
ensureDoesNotExistInWorkspace(base);
}
+ protected void tearDown() throws CoreException {
+ if (original != null)
+ getWorkspace().setDescription(original);
+ }
+
protected void test() {
try {
base.clearHistory(getMonitor());
@@ -272,4 +302,44 @@
}
}.run(this, 1, 150);
}
+
+ private void testHistoryCleanUp(final int filesPerFolder, final int statesPerFile) {
+ IProject project = getWorkspace().getRoot().getProject("proj1");
+ final IFolder base = project.getFolder("base");
+ ensureDoesNotExistInWorkspace(base);
+ new PerformanceTestRunner() {
+ private IWorkspaceDescription original;
+
+ protected void setUp() {
+ original = setMaxFileStates("0.1", 1);
+ // make sure we start with no garbage
+ HistoryStoreTest.wipeHistoryStore();
+ // create our own garbage
+ createTree(base, filesPerFolder, statesPerFile);
+ ensureDoesNotExistInWorkspace(base);
+ }
+
+ protected void tearDown() throws CoreException {
+ if (original != null)
+ getWorkspace().setDescription(original);
+ }
+
+ protected void test() {
+ cleanHistory();
+ }
+
+ }.run(this, 5, 1);
+ }
+
+ public void testHistoryCleanUp100x4() {
+ testHistoryCleanUp(100, 4);
+ }
+
+ public void testHistoryCleanUp20x20() {
+ testHistoryCleanUp(20, 20);
+ }
+
+ public void testHistoryCleanUp4x100() {
+ testHistoryCleanUp(4, 100);
+ }
}