@Test
  public void testDynamicImageDiskCacheGetFailed_NoDiskCacheIdInImageRequest() {
    setUpDiskCacheProducerEnabled(true);
    when(mImageRequest.getCacheChoice()).thenReturn(ImageRequest.CacheChoice.DYNAMIC);
    setupDiskCacheGetSuccess(mBufferedDiskCache2);

    mDiskCacheReadProducer.produceResults(mConsumer, mProducerContext);
    verify(mInputProducer).produceResults(mConsumer, mProducerContext);
    verify(mProducerListener).onProducerStart(mProducerContext, PRODUCER_NAME);
    ArgumentCaptor<HashMap> captor = ArgumentCaptor.forClass(HashMap.class);
    verify(mProducerListener, times(0))
        .onProducerFinishWithSuccess(eq(mProducerContext), eq(PRODUCER_NAME), captor.capture());
    verify(mProducerListener, times(1))
        .onProducerFinishWithFailure(
            eq(mProducerContext),
            eq(PRODUCER_NAME),
            isA(DiskCacheDecision.DiskCacheDecisionNoDiskCacheChosenException.class),
            eq(null));
  }
Checks basic properties of disk cache producer operation, that is: - it delegates to the {@link
BufferedDiskCache#get(CacheKey key, AtomicBoolean isCancelled)} - it returns a 'copy' of the
cached value - if {@link BufferedDiskCache#get(CacheKey key, AtomicBoolean isCancelled)} is
unsuccessful, then it passes the request to the next producer in the sequence. - if the next
producer returns the value, then it is put into the disk cache.
imagepipeline/src/test/java/com/facebook/imagepipeline/producers/DiskCacheReadProducerTest.java