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); + } }