@Test
public void testNetworkTopologyInstantiation() throws Exception {

  // case 1, dfs.use.dfs.network.topology=true, use the default
  // DFSNetworkTopology impl.
  Configuration conf1 = new HdfsConfiguration();
  FSNamesystem fsn = Mockito.mock(FSNamesystem.class);
  DatanodeManager dm1 = mockDatanodeManager(fsn, conf1);
  assertEquals(DFSNetworkTopology.class, dm1.getNetworkTopology().getClass());
  // case 2, dfs.use.dfs.network.topology=false, use the default
  // NetworkTopology impl.
  Configuration conf2 = new HdfsConfiguration();
  conf2.setBoolean(DFSConfigKeys.DFS_USE_DFS_NETWORK_TOPOLOGY_KEY, false);
  DatanodeManager dm2 = mockDatanodeManager(fsn, conf2);
  assertEquals(NetworkTopology.class, dm2.getNetworkTopology()
      .getClass());
  // case 3, dfs.use.dfs.network.topology=false, and specify the
  // net.topology.impl property.
  Configuration conf3 = new HdfsConfiguration();
  conf3.setClass(CommonConfigurationKeysPublic.NET_TOPOLOGY_IMPL_KEY,
      MockDfsNetworkTopology.class, NetworkTopology.class);
  conf3.setBoolean(DFSConfigKeys.DFS_USE_DFS_NETWORK_TOPOLOGY_KEY, false);
  DatanodeManager dm3 = mockDatanodeManager(fsn, conf3);
  assertEquals(MockDfsNetworkTopology.class, dm3.getNetworkTopology()
      .getClass());
  // case 4, dfs.use.dfs.network.topology=true, and specify the
  // dfs.net.topology.impl property.
  Configuration conf4 = new HdfsConfiguration();
  conf4.setClass(DFSConfigKeys.DFS_NET_TOPOLOGY_IMPL_KEY,
          MockDfsNetworkTopology.class, NetworkTopology.class);
  conf4.setBoolean(DFSConfigKeys.DFS_USE_DFS_NETWORK_TOPOLOGY_KEY, true);
  DatanodeManager dm4 = mockDatanodeManager(fsn, conf4);
  assertEquals(MockDfsNetworkTopology.class, dm4.getNetworkTopology()
      .getClass());
}