/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.framework.blob.gc;
import java.io.ByteArrayInputStream;
import java.util.Set;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.enonic.cms.framework.blob.BlobKey;
import com.enonic.cms.framework.blob.file.FileBlobStore;
public class GarbageCollectorTest
{
@Rule
public final TemporaryFolder folder = new TemporaryFolder();
private FileBlobStore store;
private BlobKey key1;
private BlobKey key2;
private BlobKey key3;
@Before
public void setUp()
throws Exception
{
this.store = new FileBlobStore();
this.store.setDirectory( this.folder.newFolder() );
this.key1 = this.store.addRecord( new ByteArrayInputStream("test1".getBytes()) ).getKey();
this.key2 = this.store.addRecord( new ByteArrayInputStream("test2".getBytes()) ).getKey();
this.key3 = this.store.addRecord( new ByteArrayInputStream("test3".getBytes()) ).getKey();
}
@Test
public void testGarbageNone()
throws Exception
{
// Check if size is 3
assertBlobStoreSize(3);
// Run garbage collector
final GarbageCollector collector = new GarbageCollector();
collector.setFinder( createFinder( this.key1, this.key2, this.key3 ) );
collector.setStore( this.store );
collector.process();
// Check contents of blob store
assertBlobStoreContents(this.key1, this.key2, this.key3);
}
@Test
public void testGarbageOne()
throws Exception
{
// Check if size is 3
assertBlobStoreSize(3);
// Run garbage collector
final GarbageCollector collector = new GarbageCollector();
collector.setFinder( createFinder( this.key1, this.key2 ) );
collector.setStore( this.store );
collector.process();
// Check contents of blob store
assertBlobStoreContents(this.key1, this.key2);
}
private UsedBlobKeyFinder createFinder(final BlobKey... keys)
throws Exception
{
final UsedBlobKeyFinder finder = Mockito.mock( UsedBlobKeyFinder.class );
Mockito.when( finder.findKeys() ).thenReturn( Sets.newHashSet( keys ));
return finder;
}
private void assertBlobStoreSize(final int size)
{
Assert.assertEquals( size, Iterables.size( this.store.getAllKeys() ) );
}
private Set<BlobKey> getAllBlobKeys()
{
return Sets.newHashSet( this.store.getAllKeys() );
}
private void assertBlobStoreContents(final BlobKey... keys)
{
final Set<BlobKey> current = getAllBlobKeys();
Assert.assertEquals(keys.length, current.size());
for (final BlobKey key : keys) {
Assert.assertTrue(current.contains( key ));
}
}
}