package com.octo.android.robospice.persistence.binary; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Arrays; import org.apache.commons.io.IOUtils; import android.app.Application; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.MediumTest; import com.octo.android.robospice.persistence.DurationInMillis; @MediumTest public class InFileInputStreamObjectPersisterTest extends AndroidTestCase { private static final long FIVE_SECONDS = 5 * DurationInMillis.ONE_SECOND; private static final String TEST_CACHE_KEY = "TEST_CACHE_KEY"; private InFileInputStreamObjectPersister inputStreamCacheManager; @Override protected void setUp() throws Exception { super.setUp(); Application application = (Application) getContext().getApplicationContext(); inputStreamCacheManager = new InFileInputStreamObjectPersister(application); } public void testSaveDataToCacheAndReturnData() throws Exception { inputStreamCacheManager.saveDataToCacheAndReturnData(new ByteArrayInputStream("coucou".getBytes()), TEST_CACHE_KEY); File cachedFile = inputStreamCacheManager.getCacheFile(TEST_CACHE_KEY); assertTrue(cachedFile.exists()); ByteArrayOutputStream bos = new ByteArrayOutputStream(); FileInputStream input = new FileInputStream(cachedFile); IOUtils.copy(input, bos); IOUtils.closeQuietly(input); assertTrue(Arrays.equals("coucou".getBytes(), bos.toByteArray())); } public void testLoadDataFromCache_no_expiracy() throws Exception { File cachedFile = inputStreamCacheManager.getCacheFile(TEST_CACHE_KEY); FileOutputStream fileOutputStream = new FileOutputStream(cachedFile); IOUtils.write("coucou", fileOutputStream); IOUtils.closeQuietly(fileOutputStream); InputStream inputStream = inputStreamCacheManager.loadDataFromCache(TEST_CACHE_KEY, DurationInMillis.ALWAYS_RETURNED); byte[] actual = IOUtils.toByteArray(inputStream); IOUtils.closeQuietly(inputStream); assertTrue(Arrays.equals("coucou".getBytes(), actual)); } public void testLoadDataFromCache_not_expired() throws Exception { File cachedFile = inputStreamCacheManager.getCacheFile(TEST_CACHE_KEY); FileOutputStream fileOutputStream = new FileOutputStream(cachedFile); IOUtils.write("coucou", fileOutputStream); IOUtils.closeQuietly(fileOutputStream); InputStream inputStream = inputStreamCacheManager.loadDataFromCache(TEST_CACHE_KEY, FIVE_SECONDS); byte[] actual = IOUtils.toByteArray(inputStream); IOUtils.closeQuietly(inputStream); assertTrue(Arrays.equals("coucou".getBytes(), actual)); } public void testLoadDataFromCache_expired() throws Exception { File cachedFile = inputStreamCacheManager.getCacheFile(TEST_CACHE_KEY); FileOutputStream fileOutputStream = new FileOutputStream(cachedFile); IOUtils.write("coucou", fileOutputStream); IOUtils.closeQuietly(fileOutputStream); cachedFile.setLastModified(System.currentTimeMillis() - FIVE_SECONDS); InputStream inputStream = inputStreamCacheManager.loadDataFromCache(TEST_CACHE_KEY, DurationInMillis.ONE_SECOND); assertNull(inputStream); } @Override protected void tearDown() throws Exception { inputStreamCacheManager.removeAllDataFromCache(); super.tearDown(); } }