/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.framework.blob;
import java.io.ByteArrayInputStream;
import java.util.Set;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
public abstract class BlobStoreTest
{
private BlobStore store;
@Before
public void setUp()
throws Exception
{
this.store = createBlobStore();
}
@Test
public void testGetRecord()
{
final BlobRecord rec1 = this.store.getRecord( new BlobKey("unknown") );
Assert.assertNull(rec1);
final BlobRecord rec2 = addRecord("content");
Assert.assertNotNull(rec2);
final BlobRecord rec3 = this.store.getRecord( rec2.getKey() );
Assert.assertNotNull(rec2);
Assert.assertEquals(rec2.getKey(), rec3.getKey());
}
@Test
public void testGetAllKeys()
{
final Iterable<BlobKey> keys1 = this.store.getAllKeys();
Assert.assertNotNull(keys1);
Assert.assertEquals(0, Iterables.size( keys1 ));
final BlobKey key1 = addRecord("test1").getKey();
final BlobKey key2 = addRecord("test2").getKey();
addRecord("test1");
final Iterable<BlobKey> keys2 = this.store.getAllKeys();
Assert.assertNotNull(keys2);
Assert.assertEquals(2, Iterables.size( keys2 ));
final Set<BlobKey> set2 = Sets.newHashSet( keys2 );
Assert.assertTrue(set2.contains( key1 ));
Assert.assertTrue(set2.contains( key2 ));
}
@Test
public void testDeleteRecord()
{
final BlobKey key1 = addRecord("test1").getKey();
final BlobKey key2 = addRecord("test2").getKey();
final Iterable<BlobKey> keys1 = this.store.getAllKeys();
Assert.assertNotNull(keys1);
Assert.assertEquals(2, Iterables.size( keys1 ));
this.store.deleteRecord( key1 );
final Iterable<BlobKey> keys2 = this.store.getAllKeys();
Assert.assertNotNull(keys2);
Assert.assertEquals(1, Iterables.size( keys2 ));
Assert.assertEquals(key2, keys2.iterator().next());
}
private BlobRecord addRecord(final String content)
{
return this.store.addRecord( new ByteArrayInputStream(content.getBytes()) );
}
protected abstract BlobStore createBlobStore()
throws Exception;
}