@Test
public void testGetResources() throws Exception{

  Resource.Type type = Resource.Type.RootServiceComponent;
  AmbariManagementController managementController = createMock(AmbariManagementController.class);
  Set<RootServiceComponentResponse> allResponse = new HashSet<RootServiceComponentResponse>();
  allResponse.add(new RootServiceComponentResponse("component1", "1.1.1", Collections.<String,String>emptyMap()));
  allResponse.add(new RootServiceComponentResponse("component2", "1.1.1", Collections.<String,String>emptyMap()));
  allResponse.add(new RootServiceComponentResponse("component3", "1.1.1", Collections.<String,String>emptyMap()));
  allResponse.add(new RootServiceComponentResponse(RootServiceResponseFactory.Components.AMBARI_SERVER.name(), "1.1.1", Collections.<String,String>emptyMap()));
  Set<RootServiceComponentResponse> nameResponse = new HashSet<RootServiceComponentResponse>();
  nameResponse.add(new RootServiceComponentResponse("component4", "1.1.1", Collections.<String,String>emptyMap()));
  // set expectations
  expect(managementController.getRootServiceComponents(EasyMock.<Set<RootServiceComponentRequest>>anyObject())).andReturn(allResponse).once();
  expect(managementController.getRootServiceComponents(EasyMock.<Set<RootServiceComponentRequest>>anyObject())).andReturn(nameResponse).once();
  // replay
  replay(managementController);
  ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
      type,
      PropertyHelper.getPropertyIds(type),
      PropertyHelper.getKeyPropertyIds(type),
      managementController);
  Set<String> propertyIds = new HashSet<String>();
  propertyIds.add(RootServiceComponentResourceProvider.SERVICE_NAME_PROPERTY_ID);
  propertyIds.add(RootServiceComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID);
  propertyIds.add(RootServiceComponentResourceProvider.PROPERTIES_PROPERTY_ID);
  propertyIds.add(RootServiceComponentResourceProvider.COMPONENT_VERSION_PROPERTY_ID);
  propertyIds.add(RootServiceComponentResourceProvider.PROPERTIES_SERVER_CLOCK);
  // create the request
  Request request = PropertyHelper.getReadRequest(propertyIds);
  // get all ... no predicate
  Set<Resource> resources = provider.getResources(request, null);
  Assert.assertEquals(allResponse.size(), resources.size());
  for (Resource resource : resources) {
    String componentName = (String) resource.getPropertyValue(RootServiceComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID);
    String componentVersion = (String) resource.getPropertyValue(RootServiceComponentResourceProvider.COMPONENT_VERSION_PROPERTY_ID);
    Long server_clock = (Long) resource.getPropertyValue(RootServiceComponentResourceProvider.PROPERTIES_SERVER_CLOCK);
    if (componentName.equals(RootServiceResponseFactory.Components.AMBARI_SERVER.name())){
      Assert.assertNotNull(server_clock);
    } else {
      Assert.assertNull(server_clock);
    }
    
    Assert.assertTrue(allResponse.contains(new RootServiceComponentResponse(componentName, componentVersion, Collections.<String,String>emptyMap())));
  }
  // get service named service4
  Predicate predicate =
      new PredicateBuilder().property(RootServiceComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID).
      equals("component4").toPredicate();
  resources = provider.getResources(request, predicate);
  Assert.assertEquals(1, resources.size());
  Assert.assertEquals("component4", resources.iterator().next().
      getPropertyValue(RootServiceComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID));
  // verify
  verify(managementController);
}