blob: 2fdcdd607eb0e791aaa1a3ff8329e65daf887436 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.commons.tests.core.storage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.mylyn.commons.core.storage.CommonStore;
import org.eclipse.mylyn.commons.core.storage.ICommonStorable;
import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil;
/**
* @author Steffen Pingel
*/
public class CommonStoreTest extends TestCase {
private File location;
private CommonStore store;
public void testDelete() throws Exception {
ICommonStorable storable = store.get(Path.EMPTY);
assertFalse(storable.exists("handle"));
OutputStream out = storable.write("handle", null);
out.close();
assertTrue(storable.exists("handle"));
assertEquals(Collections.singletonList(new File(location, "handle")), Arrays.asList(location.listFiles()));
storable.delete("handle");
assertFalse(storable.exists("handle"));
assertEquals(Collections.emptyList(), Arrays.asList(location.listFiles()));
}
public void testDeleteAll() throws Exception {
ICommonStorable storable = store.get(Path.EMPTY);
writeHello(storable, "1");
writeHello(storable, "2");
storable.deleteAll();
assertFalse(storable.exists("1"));
assertFalse(location.exists());
}
public void testDeleteAllSubPath() throws Exception {
ICommonStorable storable2 = store.get(new Path("sub2"));
writeHello(storable2, "1");
ICommonStorable storable = store.get(new Path("sub"));
writeHello(storable, "1");
writeHello(storable, "2");
storable.deleteAll();
assertFalse(storable.exists("1"));
assertTrue(storable2.exists("1"));
assertTrue(location.exists());
assertFalse(new File(location, "sub").exists());
}
public void testDeleteAllSubPathException() throws Exception {
ICommonStorable storable = store.get(new Path("sub"));
writeHello(storable, "1");
ICommonStorable storable2 = store.get(new Path("sub/sub2"));
writeHello(storable2, "1");
try {
storable.deleteAll();
fail("Expected CoreException");
} catch (CoreException expected) {
assertTrue(storable.exists("1"));
assertTrue(storable2.exists("1"));
}
storable2.deleteAll();
storable.deleteAll();
assertTrue(location.exists());
assertFalse(new File(location, "sub").exists());
}
public void testExists() throws Exception {
ICommonStorable storable = store.get(Path.EMPTY);
assertFalse(storable.exists("handle"));
OutputStream out = storable.write("handle", null);
out.close();
assertTrue(storable.exists("handle"));
}
public void testGet() throws Exception {
ICommonStorable storable = store.get(Path.EMPTY);
ICommonStorable storable2 = store.get(Path.EMPTY);
assertSame(storable, storable2);
}
public void testGetPath() {
ICommonStorable storable = store.get(new Path("sub"));
ICommonStorable storable2 = store.get(Path.EMPTY);
assertNotSame(storable, storable2);
storable2 = store.get(new Path("sub"));
assertSame(storable, storable2);
}
public void testGetPathLazyCreate() {
ICommonStorable storable = store.get(new Path("sub"));
assertEquals(Collections.emptyList(), Arrays.asList(location.listFiles()));
assertFalse(storable.exists("handle"));
assertEquals(Collections.emptyList(), Arrays.asList(location.listFiles()));
}
public void testGetPathWrite() throws Exception {
ICommonStorable storable = store.get(new Path("sub"));
writeHello(storable, "handle");
File subFile = new File(location, "sub");
assertEquals(Collections.singletonList(subFile), Arrays.asList(location.listFiles()));
assertEquals(Collections.singletonList(new File(subFile, "handle")), Arrays.asList(subFile.listFiles()));
}
public void testMove() throws Exception {
ICommonStorable storable = store.get(new Path("source"));
writeHello(storable, "handle");
store.move(new Path("source"), new Path("target"));
File targetFile = new File(location, "target");
assertEquals(Collections.singletonList(targetFile), Arrays.asList(location.listFiles()));
assertEquals(Collections.singletonList(new File(targetFile, "handle")), Arrays.asList(targetFile.listFiles()));
}
public void testMoveExistant() throws Exception {
ICommonStorable storable = store.get(new Path("source"));
writeHello(storable, "handle");
ICommonStorable storable2 = store.get(new Path("target"));
writeHello(storable2, "handle2");
try {
store.move(new Path("source"), new Path("target"));
fail("Expected CoreException");
} catch (CoreException expected) {
File sourceFile = new File(location, "source");
File targetFile = new File(location, "target");
List<File> list = Arrays.asList(location.listFiles());
Collections.sort(list);
assertEquals(Arrays.asList(sourceFile, targetFile), list);
assertEquals(Collections.singletonList(new File(targetFile, "handle2")),
Arrays.asList(targetFile.listFiles()));
}
}
public void testMoveNonExistant() throws Exception {
store.move(new Path("source"), new Path("target"));
assertEquals(Collections.emptyList(), Arrays.asList(location.listFiles()));
}
public void testRelease() throws Exception {
ICommonStorable storable = store.get(Path.EMPTY);
storable.release();
ICommonStorable storable2 = store.get(Path.EMPTY);
assertNotSame(storable, storable2);
}
public void testWriteRead() throws Exception {
ICommonStorable storable = store.get(Path.EMPTY);
writeHello(storable, "handle");
assertTrue(storable.exists("handle"));
InputStream in = storable.read("handle", null);
try {
byte[] buffer = new byte[5];
in.read(buffer);
assertEquals("hello", new String(buffer));
} finally {
in.close();
}
}
private void writeHello(ICommonStorable storable, String handle) throws IOException, CoreException {
OutputStream out = storable.write(handle, null);
try {
out.write("hello".getBytes());
} finally {
out.close();
}
}
@Override
protected void setUp() throws Exception {
location = CommonTestUtil.createTempFolder(CommonStoreTest.class.getName());
store = new CommonStore(location);
}
@Override
protected void tearDown() throws Exception {
CommonTestUtil.deleteFolderRecursively(location);
}
}