@Test
public void testGetCachedVolumeCapacity() throws IOException {

  conf.setBoolean(DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_KEY,
      DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_DEFAULT);
  long capacity = 4000L;
  DF usage = mock(DF.class);
  when(usage.getCapacity()).thenReturn(capacity);
  FsVolumeImpl volumeChanged = new FsVolumeImplBuilder()
      .setConf(conf)
      .setDataset(dataset)
      .setStorageID("storage-id")
      .setStorageDirectory(new StorageDirectory(StorageLocation.parse(
          "[RAM_DISK]volume-changed")))
      .setUsage(usage)
      .build();
  int callTimes = 5;
  for(int i = 0; i < callTimes; i++) {
    assertEquals(capacity, volumeChanged.getCapacity());
  }
  verify(usage, times(callTimes)).getCapacity();
  conf.setBoolean(DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_KEY, true);
  FsVolumeImpl volumeFixed = new FsVolumeImplBuilder()
      .setConf(conf)
      .setDataset(dataset)
      .setStorageID("storage-id")
      .setStorageDirectory(new StorageDirectory(StorageLocation.parse(
          "[RAM_DISK]volume-fixed")))
      .setUsage(usage)
      .build();
  for(int i = 0; i < callTimes; i++) {
    assertEquals(capacity, volumeFixed.getCapacity());
  }
  // reuse the capacity for fixed sized volume, only call one time
  // getCapacity of DF
  verify(usage, times(callTimes+1)).getCapacity();
  conf.setBoolean(DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_KEY,
      DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_DEFAULT);
}