package eu.fbk.knowledgestore.filestore; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.google.common.io.ByteStreams; import org.junit.*; import eu.fbk.knowledgestore.data.Stream; public abstract class AbstractFileStoreTest { /** Buffer size for reading data. */ public static final int BUFFER_SIZE = 1024; protected static final String FILENAME_MISSING = "non-existing-file.txt"; protected static final String FILENAME_1 = "file1.txt"; protected static final byte[] CONTENT_1 = "content1".getBytes(); private FileStore fileStore; protected abstract FileStore createFileStore(); protected final FileStore getFileStore() { return this.fileStore; } @Before public void setUp() throws IOException { this.fileStore = createFileStore(); this.fileStore.init(); } @After public void tearDown() throws IOException { this.fileStore.close(); } @Test public void testOneFile() throws IOException { Assert.assertTrue(this.fileStore.list().count() == 0); try { this.fileStore.read(AbstractFileStoreTest.FILENAME_MISSING); Assert.fail(); } catch (final FileMissingException ex) { // ok } final OutputStream out = this.fileStore.write(AbstractFileStoreTest.FILENAME_1); out.write(AbstractFileStoreTest.CONTENT_1); out.close(); try { this.fileStore.write(AbstractFileStoreTest.FILENAME_1); Assert.fail(); } catch (final FileExistsException ex) { // ok } System.out.println(fileStore.list().getUnique()); Assert.assertTrue(this.fileStore.list().getUnique() .equals(AbstractFileStoreTest.FILENAME_1)); final InputStream in = this.fileStore.read(AbstractFileStoreTest.FILENAME_1); final byte[] bytes = ByteStreams.toByteArray(in); in.close(); Assert.assertArrayEquals(AbstractFileStoreTest.CONTENT_1, bytes); this.fileStore.delete(AbstractFileStoreTest.FILENAME_1); try { this.fileStore.delete(AbstractFileStoreTest.FILENAME_1); Assert.fail(); } catch (final FileMissingException ex) { // ok } try { this.fileStore.read(AbstractFileStoreTest.FILENAME_1); Assert.fail(); } catch (final FileMissingException ex) { // ok } Assert.assertTrue(this.fileStore.list().count() == 0); } @Test public void deleteFile() { try { // writing the file OutputStream outStream; outStream = getFileStore().write(AbstractFileStoreTest.FILENAME_1); Assert.assertNotNull(outStream); outStream.write(AbstractFileStoreTest.CONTENT_1); outStream.close(); // deleting the file getFileStore().delete(AbstractFileStoreTest.FILENAME_1); } catch (final FileExistsException e) { e.printStackTrace(); } catch (final IOException e) { e.printStackTrace(); } } @Test public void readFile() { try { // writing the file final OutputStream outStream = getFileStore().write(AbstractFileStoreTest.FILENAME_1); Assert.assertNotNull(outStream); outStream.write(AbstractFileStoreTest.CONTENT_1); outStream.close(); // reading what has been written final InputStream inStream = getFileStore().read(AbstractFileStoreTest.FILENAME_1); Assert.assertNotNull(inStream); final byte[] b = new byte[AbstractFileStoreTest.BUFFER_SIZE]; final int off = 0; final int len = AbstractFileStoreTest.BUFFER_SIZE; int length = inStream.read(b, off, len); Assert.assertEquals(new String(b, 0, length).getBytes().length, AbstractFileStoreTest.CONTENT_1.length); } catch (final FileExistsException e) { e.printStackTrace(); } catch (final IOException e) { e.printStackTrace(); } } @Test public void writeFile() { try { final OutputStream outStream = getFileStore().write(AbstractFileStoreTest.FILENAME_1); Assert.assertNotNull(outStream); outStream.write(AbstractFileStoreTest.CONTENT_1); outStream.close(); } catch (final FileExistsException e) { e.printStackTrace(); } catch (final IOException e) { e.printStackTrace(); } } @Test public void listFiles() throws IOException { final Stream<String> files = getFileStore().list(); try { Assert.assertNotNull(files); Assert.assertEquals(files.count(), 0); } finally { files.close(); } } }