@Test
  public void initializeCache_withValidContext_shouldCreateNewCachesIdempotently()
      throws Exception {
    assertThat(CacheService.getDiskLruCache()).isNull();

    CacheService.initialize(context);
    DiskLruCache diskLruCache = CacheService.getDiskLruCache();
    assertThat(diskLruCache).isNotNull();

    CacheService.initialize(context);
    assertThat(diskLruCache).isEqualTo(CacheService.getDiskLruCache());
  }
 @Test
 public void diskLruCacheAsyncPut_whenEmpty_shouldReturnNull() throws Exception {
   CacheService.initialize(context);
   CacheService.putToDiskCacheAsync(key1, data1.getBytes());
   Thread.sleep(500);
   assertThat(CacheService.getFromDiskCache(key1)).isEqualTo(data1.getBytes());
 }
 @Test
 public void diskLruCachePut_withEmptyStringKey_shouldPutCorrectly() throws Exception {
   // this works because an empty string sha1 hashes to a valid key
   CacheService.initialize(context);
   CacheService.putToDiskCache("", data1.getBytes());
   assertThat(CacheService.getFromDiskCache("")).isEqualTo(data1.getBytes());
 }
 @Test
 public void diskLruCachePut_withNullKey_shouldNotPut() throws Exception {
   // null value produces empty string key which is invalid for disk lru cache
   CacheService.initialize(context);
   assertCachesAreEmpty();
   CacheService.putToDiskCache(null, data1.getBytes());
   assertCachesAreEmpty();
 }
 @Test
 public void diskLruCacheAsyncGet_whenEmpty_shouldReturnNull() throws Exception {
   CacheService.initialize(context);
   CacheService.getFromDiskCacheAsync(key1, diskCacheGetListener);
   semaphore.acquire();
   assertThat(getKey).isEqualTo(key1);
   assertThat(getBytes).isNull();
 }
 @Test
 public void diskLruCacheAsyncGet_whenPopulated_shouldReturnValue() throws Exception {
   CacheService.initialize(context);
   assertCachesAreEmpty();
   CacheService.putToDiskCache(key1, data1.getBytes());
   CacheService.getFromDiskCacheAsync(key1, diskCacheGetListener);
   semaphore.acquire();
   assertThat(getKey).isEqualTo(key1);
   assertThat(getBytes).isEqualTo(data1.getBytes());
 }
 @Test
 public void diskLruCacheGet_whenEmpty_shouldReturnNull() throws Exception {
   CacheService.initialize(context);
   assertCachesAreEmpty();
   assertThat(CacheService.getFromDiskCache(key1)).isNull();
 }
 @Test
 public void diskLruCacheGet_whenPopulated_shouldReturnValue() throws Exception {
   CacheService.initialize(context);
   CacheService.putToDiskCache(key1, data1.getBytes());
   assertThat(CacheService.getFromDiskCache(key1)).isEqualTo(data1.getBytes());
 }
 @Test
 public void createValidDiskLruCacheKey_withNullValue_shouldReturnEmptyString() throws Exception {
   CacheService.initialize(context);
   assertThat(CacheService.createValidDiskCacheKey(null)).isEqualTo("");
 }