blob: aae8f7f9127cf5667d2a8cfe2d19a75538d7b3df [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 VMware 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:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.kernel.install.artifact.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.File;
import org.eclipse.virgo.util.io.PathReference;
import org.junit.Before;
import org.junit.Test;
public class GenerationalArtifactStoreTests {
private static final String TEST_PATH = "build/generationalArtifactStoreTests/";
private static final String TEST_FILENAME = "some.jar";
private ArtifactStore artifactStore;
@Before
public void setUp() throws Exception {
(new PathReference(TEST_PATH)).delete(true);
this.artifactStore = new GenerationalArtifactStore(new PathReference(TEST_PATH + TEST_FILENAME));
}
@Test
public void testGetCurrentPathReference() {
PathReference c = this.artifactStore.getCurrentPath();
checkPath(c);
}
@Test
public void testStash() {
PathReference original = this.artifactStore.getCurrentPath();
this.artifactStore.save();
PathReference c = this.artifactStore.getCurrentPath();
checkPath(c);
assertFalse(original.equals(c));
}
@Test
public void testUnstash() {
PathReference original = this.artifactStore.getCurrentPath();
this.artifactStore.save();
this.artifactStore.restore();
PathReference c = this.artifactStore.getCurrentPath();
checkPath(c);
assertTrue(original.equals(c));
}
@Test
public void testRepeatedStash() {
PathReference original = this.artifactStore.getCurrentPath();
this.artifactStore.save();
PathReference next = this.artifactStore.getCurrentPath();
this.artifactStore.save();
PathReference last = this.artifactStore.getCurrentPath();
checkPath(last);
assertFalse(original.equals(next));
assertFalse(original.equals(last));
}
@Test
public void testFileDeletionOnUnstash() {
this.artifactStore.save();
PathReference c = this.artifactStore.getCurrentPath();
c.createFile();
assertTrue(c.exists());
this.artifactStore.restore();
assertFalse(c.exists());
}
@Test
public void testDirectoryDeletionOnUnstash() {
this.artifactStore.save();
PathReference c = this.artifactStore.getCurrentPath();
c.createDirectory();
assertTrue(c.exists());
this.artifactStore.restore();
assertFalse(c.exists());
}
@Test
public void testFileDeletionOnDoubleStash() {
PathReference c = this.artifactStore.getCurrentPath();
c.createFile();
assertTrue(c.exists());
this.artifactStore.save();
assertTrue(c.exists());
this.artifactStore.save();
assertFalse(c.exists());
}
@Test
public void testDirectoryDeletionOnDoubleStash() {
PathReference c = this.artifactStore.getCurrentPath();
c.createDirectory();
assertTrue(c.exists());
this.artifactStore.save();
assertTrue(c.exists());
this.artifactStore.save();
assertFalse(c.exists());
}
@Test(expected=IllegalStateException.class)
public void testBadUnstash() {
this.artifactStore.restore();
}
@Test(expected=IllegalStateException.class)
public void testDoubleUnstash() {
this.artifactStore.save();
this.artifactStore.save();
this.artifactStore.restore();
this.artifactStore.restore();
}
@Test(expected=IllegalArgumentException.class)
public void testNullConstructorPath() {
new GenerationalArtifactStore(null);
}
@Test(expected=IllegalArgumentException.class)
public void testEmptyConstructorPath() {
new GenerationalArtifactStore(new PathReference(""));
}
@Test
public void testFileRecovery() {
PathReference p1 = this.artifactStore.getCurrentPath();
p1.createFile();
assertTrue(p1.exists());
this.artifactStore.save();
PathReference p2 = this.artifactStore.getCurrentPath();
p2.createFile();
assertTrue(p1.exists());
assertTrue(p2.exists());
this.artifactStore.save();
PathReference p3 = this.artifactStore.getCurrentPath();
p3.createFile();
assertFalse(p1.exists());
assertTrue(p2.exists());
assertTrue(p3.exists());
this.artifactStore.save();
PathReference p4 = this.artifactStore.getCurrentPath();
p4.createFile();
assertFalse(p1.exists());
assertFalse(p2.exists());
assertTrue(p3.exists());
assertTrue(p4.exists());
ArtifactStore newArtifactStore = new GenerationalArtifactStore(new PathReference(TEST_PATH + TEST_FILENAME));
PathReference p = newArtifactStore.getCurrentPath();
assertEquals(p4, p);
assertFalse(p1.exists());
assertFalse(p2.exists());
assertTrue(p3.exists());
assertTrue(p4.exists());
}
@Test
public void testDirectoryRecovery() {
PathReference p1 = this.artifactStore.getCurrentPath();
p1.createDirectory();
assertTrue(p1.exists());
this.artifactStore.save();
PathReference p2 = this.artifactStore.getCurrentPath();
p2.createDirectory();
assertTrue(p1.exists());
assertTrue(p2.exists());
this.artifactStore.save();
PathReference p3 = this.artifactStore.getCurrentPath();
p3.createDirectory();
assertFalse(p1.exists());
assertTrue(p2.exists());
assertTrue(p3.exists());
this.artifactStore.save();
PathReference p4 = this.artifactStore.getCurrentPath();
p4.createDirectory();
assertFalse(p1.exists());
assertFalse(p2.exists());
assertTrue(p3.exists());
assertTrue(p4.exists());
ArtifactStore newArtifactStore = new GenerationalArtifactStore(new PathReference(TEST_PATH + TEST_FILENAME));
PathReference p = newArtifactStore.getCurrentPath();
assertEquals(p4, p);
assertFalse(p1.exists());
assertFalse(p2.exists());
assertTrue(p3.exists());
assertTrue(p4.exists());
}
public void testDirectorylessConstructorPath() {
ArtifactStore ph = new GenerationalArtifactStore(new PathReference("a"));
assertEquals("a", ph.getCurrentPath().getName());
}
private void checkPath(PathReference c) {
File file = c.toFile();
assertTrue(file.toURI().toString().indexOf(TEST_PATH) != -1);
assertEquals(TEST_FILENAME, c.getName());
assertFalse(c.exists());
PathReference parent = c.getParent();
assertTrue(parent.isDirectory());
assertTrue(parent.exists());
}
}