@Test
  public void testGetResources() throws Exception {
    Resource.Type type = Resource.Type.Configuration;
    StackId stackId = new StackId("HDP", "0.1");

    AmbariManagementController managementController = createMock(AmbariManagementController.class);

    Set<ConfigurationResponse> allResponse = new HashSet<>();
    allResponse.add(new ConfigurationResponse("Cluster100", stackId, "type",
        "tag1", 1L, null, null));
    allResponse.add(new ConfigurationResponse("Cluster100", stackId, "type",
        "tag2", 2L, null, null));
    allResponse.add(new ConfigurationResponse("Cluster100", stackId, "type",
        "tag3", 3L, null, null));

    Set<ConfigurationResponse> orResponse = new HashSet<>();
    orResponse.add(new ConfigurationResponse("Cluster100", stackId, "type",
        "tag1", 1L, null, null));
    orResponse.add(new ConfigurationResponse("Cluster100", stackId, "type",
        "tag2", 2L, null, null));

    Capture<Set<ConfigurationRequest>> configRequestCapture1 = EasyMock.newCapture();
    Capture<Set<ConfigurationRequest>> configRequestCapture2 = EasyMock.newCapture();

    // set expectations
    //equals predicate
    expect(managementController.getConfigurations(
        capture(configRequestCapture1))).andReturn(allResponse).once();

    // OR predicate
    expect(managementController.getConfigurations(
        capture(configRequestCapture2))).andReturn(orResponse).once();

    // replay
    replay(managementController);

    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
        type,
        managementController);

    Set<String> propertyIds = new HashSet<>();

    propertyIds.add(ConfigurationResourceProvider.CLUSTER_NAME);
    propertyIds.add(ConfigurationResourceProvider.TAG);

    // equals predicate
    Predicate predicate = new PredicateBuilder().property(
        ConfigurationResourceProvider.CLUSTER_NAME).equals("Cluster100").toPredicate();
    Request request = PropertyHelper.getReadRequest(propertyIds);
    Set<Resource> resources = provider.getResources(request, predicate);

    Set<ConfigurationRequest> setRequest = configRequestCapture1.getValue();
    assertEquals(1, setRequest.size());
    ConfigurationRequest configRequest = setRequest.iterator().next();
    assertEquals("Cluster100", configRequest.getClusterName());
    assertNull(configRequest.getType());
    assertNull(configRequest.getVersionTag());

    Assert.assertEquals(3, resources.size());
    boolean containsResource1 = false;
    boolean containsResource2 = false;
    boolean containsResource3 = false;

    for (Resource resource : resources) {
      String clusterName = (String) resource.getPropertyValue(
          ConfigurationResourceProvider.CLUSTER_NAME);

      String stackIdProperty = (String) resource.getPropertyValue(ConfigurationResourceProvider.STACK_ID);

      Assert.assertEquals("Cluster100", clusterName);
      Assert.assertEquals(stackId.getStackId(), stackIdProperty);
      String tag = (String) resource.getPropertyValue(
          ConfigurationResourceProvider.TAG);

      if (tag.equals("tag1")) {
        containsResource1 = true;
      } else if (tag.equals("tag2")) {
        containsResource2 = true;
      } else if (tag.equals("tag3")) {
        containsResource3 = true;
      }
    }
    assertTrue(containsResource1);
    assertTrue(containsResource2);
    assertTrue(containsResource3);

    // OR predicate
    predicate = new PredicateBuilder().property(
        ConfigurationResourceProvider.TAG).equals("tag1").or().
        property(ConfigurationResourceProvider.TAG).equals("tag2").toPredicate();

    request = PropertyHelper.getReadRequest(propertyIds);
    resources = provider.getResources(request, predicate);

    setRequest = configRequestCapture2.getValue();
    assertEquals(2, setRequest.size());
    boolean containsTag1 = false;
    boolean containsTag2 = false;
    for (ConfigurationRequest cr : setRequest) {
      assertNull(cr.getClusterName());
      if (cr.getVersionTag().equals("tag1")) {
        containsTag1 = true;
      } else if (cr.getVersionTag().equals("tag2")) {
        containsTag2 = true;
      }
    }
    assertTrue(containsTag1);
    assertTrue(containsTag2);

    Assert.assertEquals(2, resources.size());
    containsResource1 = false;
    containsResource2 = false;

    for (Resource resource : resources) {
      String clusterName = (String) resource.getPropertyValue(
          ConfigurationResourceProvider.CLUSTER_NAME);
      Assert.assertEquals("Cluster100", clusterName);
      String tag = (String) resource.getPropertyValue(
          ConfigurationResourceProvider.TAG);

      if (tag.equals("tag1")) {
        containsResource1 = true;
      } else if (tag.equals("tag2")) {
        containsResource2 = true;
      }
    }
    assertTrue(containsResource1);
    assertTrue(containsResource2);

    // verify
    verify(managementController);
  }
Tests for the configuration resource provider.
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProviderTest.java