@Test
public void testDfsReservedForDifferentStorageTypes() throws IOException {

  Configuration conf = new Configuration();
  conf.setLong(DFSConfigKeys.DFS_DATANODE_DU_RESERVED_KEY, 100L);
  File volDir = new File(baseDir, "volume-0");
  volDir.mkdirs();
  // when storage type reserved is not configured,should consider
  // dfs.datanode.du.reserved.
  FsVolumeImpl volume = new FsVolumeImplBuilder().setDataset(dataset)
      .setStorageDirectory(
          new StorageDirectory(
              StorageLocation.parse("[RAM_DISK]"+volDir.getPath())))
      .setStorageID("storage-id")
      .setConf(conf)
      .build();
  assertEquals("", 100L, volume.getReserved());
  // when storage type reserved is configured.
  conf.setLong(
      DFSConfigKeys.DFS_DATANODE_DU_RESERVED_KEY + "."
          + StringUtils.toLowerCase(StorageType.RAM_DISK.toString()), 1L);
  conf.setLong(
      DFSConfigKeys.DFS_DATANODE_DU_RESERVED_KEY + "."
          + StringUtils.toLowerCase(StorageType.SSD.toString()), 2L);
  conf.setLong(
      DFSConfigKeys.DFS_DATANODE_DU_RESERVED_KEY + "."
          + StringUtils.toLowerCase(StorageType.NVDIMM.toString()), 3L);
  FsVolumeImpl volume1 = new FsVolumeImplBuilder().setDataset(dataset)
      .setStorageDirectory(
          new StorageDirectory(
              StorageLocation.parse("[RAM_DISK]"+volDir.getPath())))
      .setStorageID("storage-id")
      .setConf(conf)
      .build();
  assertEquals("", 1L, volume1.getReserved());
  FsVolumeImpl volume2 = new FsVolumeImplBuilder().setDataset(dataset)
      .setStorageDirectory(
          new StorageDirectory(
              StorageLocation.parse("[SSD]"+volDir.getPath())))
      .setStorageID("storage-id")
      .setConf(conf)
      .build();
  assertEquals("", 2L, volume2.getReserved());
  FsVolumeImpl volume3 = new FsVolumeImplBuilder().setDataset(dataset)
      .setStorageDirectory(
          new StorageDirectory(
              StorageLocation.parse("[DISK]"+volDir.getPath())))
      .setStorageID("storage-id")
      .setConf(conf)
      .build();
  assertEquals("", 100L, volume3.getReserved());
  FsVolumeImpl volume4 = new FsVolumeImplBuilder().setDataset(dataset)
      .setStorageDirectory(
          new StorageDirectory(
              StorageLocation.parse(volDir.getPath())))
      .setStorageID("storage-id")
      .setConf(conf)
      .build();
  assertEquals("", 100L, volume4.getReserved());
  FsVolumeImpl volume5 = new FsVolumeImplBuilder().setDataset(dataset)
      .setStorageDirectory(
          new StorageDirectory(
              StorageLocation.parse("[NVDIMM]"+volDir.getPath())))
      .setStorageID("storage-id")
      .setConf(conf)
      .build();
  assertEquals(3L, volume5.getReserved());
}