@Test
public void testGetHostComponents___NullHostName_NullComponentName() throws Exception {

  // member state mocks
  Injector injector = createStrictMock(Injector.class);
  Capture<AmbariManagementController> controllerCapture = EasyMock.newCapture();
  StackId stack = createNiceMock(StackId.class);
  Cluster cluster = createNiceMock(Cluster.class);
  Service service1 = createNiceMock(Service.class);
  Service service2 = createNiceMock(Service.class);
  ServiceComponent component1 = createNiceMock(ServiceComponent.class);
  ServiceComponent component2 = createNiceMock(ServiceComponent.class);
  ServiceComponentHost componentHost1 = createNiceMock(ServiceComponentHost.class);
  ServiceComponentHost componentHost2 = createNiceMock(ServiceComponentHost.class);
  ServiceComponentHost componentHost3 = createNiceMock(ServiceComponentHost.class);
  ServiceComponentHostResponse response1 = createNiceMock(ServiceComponentHostResponse.class);
  ServiceComponentHostResponse response2 = createNiceMock(ServiceComponentHostResponse.class);
  ServiceComponentHostResponse response3 = createNiceMock(ServiceComponentHostResponse.class);
  MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class);
  expect(maintHelper.getEffectiveState(
      anyObject(ServiceComponentHost.class),
      anyObject(Host.class))).andReturn(MaintenanceState.OFF).anyTimes();
  // requests
  ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
      "cluster1", null, null, null, null);
  Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>();
  setRequests.add(request1);
  Map<String, Service> mapServices = new HashMap<String, Service>();
  mapServices.put("foo", service1);
  mapServices.put("bar", service2);
  Map<String, ServiceComponentHost> mapHostComponents = new HashMap<String, ServiceComponentHost>();
  mapHostComponents.put("foo", componentHost1);
  mapHostComponents.put("bar", componentHost2);
  // expectations
  // constructor init
  injector.injectMembers(capture(controllerCapture));
  expect(injector.getInstance(Gson.class)).andReturn(null);
  expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper).anyTimes();
  expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class));
  // getHostComponent
  expect(clusters.getCluster("cluster1")).andReturn(cluster);
  expect(clusters.getHostsForCluster((String) anyObject())).andReturn(
      new HashMap<String, Host>() {{
        put("host1", createNiceMock(Host.class));
      }}).anyTimes();
  expect(cluster.getServices()).andReturn(mapServices);
  expect(service1.getServiceComponents()).andReturn(Collections.singletonMap("foo", component1));
  expect(service2.getServiceComponents()).andReturn(Collections.singletonMap("bar", component2));
  expect(component1.getName()).andReturn("component1").anyTimes();
  expect(component2.getName()).andReturn("component2").anyTimes();
  expect(component1.getServiceComponentHosts()).andReturn(mapHostComponents);
  expect(componentHost1.convertToResponse(null)).andReturn(response1);
  expect(componentHost2.convertToResponse(null)).andReturn(response2);
  expect(componentHost1.getHostName()).andReturn("host1");
  expect(componentHost2.getHostName()).andReturn("host1");
  expect(componentHost3.getHostName()).andReturn("host1");
  expect(component2.getServiceComponentHosts()).andReturn(Collections.singletonMap("foobar", componentHost3));
  expect(componentHost3.convertToResponse(null)).andReturn(response3);
  // replay mocks
  replay(maintHelper, injector, clusters, cluster, response1, response2,
      response3, stack, ambariMetaInfo, service1, service2, component1, component2,
      componentHost1, componentHost2, componentHost3);
  //test
  AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector);
  setAmbariMetaInfo(ambariMetaInfo, controller);
  Set<ServiceComponentHostResponse> setResponses = controller.getHostComponents(setRequests);
  // assert and verify
  assertSame(controller, controllerCapture.getValue());
  assertEquals(3, setResponses.size());
  assertTrue(setResponses.contains(response1));
  assertTrue(setResponses.contains(response2));
  assertTrue(setResponses.contains(response3));
  verify(injector, clusters, cluster, response1, response2, response3, stack, ambariMetaInfo, service1, service2,
      component1, component2, componentHost1, componentHost2, componentHost3);
}