blob: 0bcd0678d513feae1a79d84d376834558115b139 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ambari.server.controller.internal;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import junit.framework.Assert;
import org.apache.ambari.server.controller.spi.ClusterController;
import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
import org.apache.ambari.server.controller.spi.NoSuchResourceException;
import org.apache.ambari.server.controller.spi.PageRequest;
import org.apache.ambari.server.controller.spi.PageResponse;
import org.apache.ambari.server.controller.spi.Predicate;
import org.apache.ambari.server.controller.spi.PropertyProvider;
import org.apache.ambari.server.controller.spi.ProviderModule;
import org.apache.ambari.server.controller.spi.Request;
import org.apache.ambari.server.controller.spi.RequestStatus;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.Resource.Type;
import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
import org.apache.ambari.server.controller.spi.ResourceProvider;
import org.apache.ambari.server.controller.spi.SortRequest;
import org.apache.ambari.server.controller.spi.SortRequestProperty;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PredicateHelper;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.easymock.EasyMock;
import org.junit.Test;
/**
* Cluster controller tests
*/
public class ClusterControllerImplTest {
private static final Set<String> propertyProviderProperties = new HashSet<String>();
private static final String UNSUPPORTED_PROPERTY = PropertyHelper.getPropertyId("c1", "unsupported");
static {
propertyProviderProperties.add(PropertyHelper.getPropertyId("c3", "p5"));
propertyProviderProperties.add(PropertyHelper.getPropertyId("c3", "p6"));
propertyProviderProperties.add(PropertyHelper.getPropertyId("c4", "p7"));
propertyProviderProperties.add(PropertyHelper.getPropertyId("c4", "p8"));
propertyProviderProperties.add(PropertyHelper.getPropertyId("alerts_summary", "WARNING"));
propertyProviderProperties.add(PropertyHelper.getPropertyId("alerts_summary", "CRITICAL"));
}
private static final PropertyProvider propertyProvider = new PropertyProvider() {
@Override
public Set<Resource> populateResources(Set<Resource> resources, Request request, Predicate predicate) {
int cnt = 0;
for (Resource resource : resources){
resource.setProperty(PropertyHelper.getPropertyId("c3", "p5"), cnt + 100);
resource.setProperty(PropertyHelper.getPropertyId("c3", "p6"), cnt % 2);
resource.setProperty(PropertyHelper.getPropertyId("c4", "p7"), "monkey");
resource.setProperty(PropertyHelper.getPropertyId("c4", "p8"), "runner");
++cnt;
}
return resources;
}
@Override
public Set<String> checkPropertyIds(Set<String> propertyIds) {
if (!propertyProviderProperties.containsAll(propertyIds)) {
Set<String> unsupportedPropertyIds = new HashSet<String>(propertyIds);
unsupportedPropertyIds.removeAll(propertyProviderProperties);
return unsupportedPropertyIds;
}
return Collections.emptySet();
}
};
private static final List<PropertyProvider> propertyProviders = new LinkedList<PropertyProvider>();
static {
propertyProviders.add(propertyProvider);
}
private static final Map<Resource.Type, String> keyPropertyIds = new HashMap<Resource.Type, String>();
static {
keyPropertyIds.put(Resource.Type.Cluster, PropertyHelper.getPropertyId("Hosts", "cluster_name"));
keyPropertyIds.put(Resource.Type.Host, PropertyHelper.getPropertyId("Hosts", "host_name"));
}
private static final Set<String> resourceProviderProperties = new HashSet<String>();
static {
resourceProviderProperties.add(PropertyHelper.getPropertyId("Hosts", "cluster_name"));
resourceProviderProperties.add(PropertyHelper.getPropertyId("Hosts", "host_name"));
resourceProviderProperties.add(PropertyHelper.getPropertyId("c1", "p1"));
resourceProviderProperties.add(PropertyHelper.getPropertyId("c1", "p2"));
resourceProviderProperties.add(PropertyHelper.getPropertyId("c1", "p3"));
resourceProviderProperties.add(PropertyHelper.getPropertyId("c2", "p4"));
// add the categories
resourceProviderProperties.add("Hosts");
resourceProviderProperties.add("c1");
resourceProviderProperties.add("c2");
}
@Test
public void testGetResources() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
propertyIds.add(PropertyHelper.getPropertyId("c1", "p1"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p3"));
Request request = PropertyHelper.getReadRequest(propertyIds);
Iterable<Resource> iterable = controller.getResourceIterable(Resource.Type.Host, request, null);
int cnt = 0;
for (Resource resource : iterable) {
Assert.assertEquals(Resource.Type.Host, resource.getType());
++cnt;
}
Assert.assertEquals(4, cnt);
}
@Test
public void testGetResourcesPageFromStart() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
Request request = PropertyHelper.getReadRequest(propertyIds);
// get the first two
PageRequest pageRequest = new PageRequestImpl(PageRequest.StartingPoint.Beginning, 2, 0, null, null);
PageResponse pageResponse = controller.getResources(Resource.Type.Host, request, null, pageRequest, null);
Iterable<Resource> iterable = pageResponse.getIterable();
List<Resource> list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(2, list.size());
Assert.assertEquals("host:0", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
Assert.assertEquals("host:1", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(1).getType());
//total hosts created in TestHostResourceProvider, not only on this page
Assert.assertEquals(4, pageResponse.getTotalResourceCount().intValue());
// get the first three
pageRequest = new PageRequestImpl(PageRequest.StartingPoint.Beginning, 3, 0, null, null);
pageResponse = controller.getResources(Resource.Type.Host, request, null, pageRequest, null);
iterable = pageResponse.getIterable();
list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(3, list.size());
Assert.assertEquals("host:0", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
Assert.assertEquals("host:1", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(1).getType());
Assert.assertEquals("host:2", (String) list.get(2).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(2).getType());
//total hosts created in TestHostResourceProvider, not only on this page
Assert.assertEquals(4, pageResponse.getTotalResourceCount().intValue());
}
@Test
public void testGetResourcesSortedByProperty() throws Exception {
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
propertyIds.add(PropertyHelper.getPropertyId("c1", "p1"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p2"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p3"));
propertyIds.add(PropertyHelper.getPropertyId("c2", "p4"));
Request request = PropertyHelper.getReadRequest(propertyIds);
// Ascending
List<SortRequestProperty> sortRequestProperties =
Collections.singletonList(new SortRequestProperty("Hosts/host_name", SortRequest.Order.ASC));
SortRequest sortRequest = new SortRequestImpl(sortRequestProperties);
Iterable<Resource> iterable = controller.getResources(Resource.Type.Host,
request, null, null, sortRequest).getIterable();
List<Resource> list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(4, list.size());
Assert.assertEquals("host:0", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:1", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:2", (String) list.get(2).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:3", (String) list.get(3).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
// Descending
sortRequestProperties = Collections.singletonList(
new SortRequestProperty("Hosts/host_name", SortRequest.Order.DESC));
sortRequest = new SortRequestImpl(sortRequestProperties);
iterable = controller.getResources(Resource.Type.Host,
request, null, null, sortRequest).getIterable();
list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(4, list.size());
Assert.assertEquals("host:3", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:2", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:1", (String) list.get(2).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:0", (String) list.get(3).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
}
@Test
public void testGetResourcesSortedByMultiProperty() throws Exception {
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
propertyIds.add(PropertyHelper.getPropertyId("c1", "p1"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p2"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p3"));
propertyIds.add(PropertyHelper.getPropertyId("c2", "p4"));
Request request = PropertyHelper.getReadRequest(propertyIds);
List<SortRequestProperty> sortRequestProperties =
new ArrayList<SortRequestProperty>() {{
add(new SortRequestProperty("c1/p2", SortRequest.Order.DESC));
add(new SortRequestProperty("c1/p1", SortRequest.Order.DESC));
}};
SortRequest sortRequest = new SortRequestImpl(sortRequestProperties);
Iterable<Resource> iterable = controller.getResources(Resource.Type.Host,
request, null, null, sortRequest).getIterable();
List<Resource> list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(4, list.size());
Assert.assertEquals("host:3", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:1", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:2", (String) list.get(2).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:0", (String) list.get(3).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
}
@Test
public void testGetResourcesPageFromOffset() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
Request request = PropertyHelper.getReadRequest(propertyIds);
// get the middle two (1 - 2)
PageRequest pageRequest = new PageRequestImpl(PageRequest.StartingPoint.OffsetStart, 2, 1, null, null);
PageResponse pageResponse = controller.getResources(Resource.Type.Host, request, null, pageRequest, null);
Assert.assertEquals(1, pageResponse.getOffset());
Assert.assertEquals("host:0", pageResponse.getPreviousResource().getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:3", pageResponse.getNextResource().getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Iterable<Resource> iterable = pageResponse.getIterable();
List<Resource> list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(2, list.size());
Assert.assertEquals("host:1", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
Assert.assertEquals("host:2", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(1).getType());
//total hosts created in TestHostResourceProvider, not only on this page
Assert.assertEquals(4, pageResponse.getTotalResourceCount().intValue());
// get the last three (0 - 2)
pageRequest = new PageRequestImpl(PageRequest.StartingPoint.OffsetStart, 3, 0, null, null);
pageResponse = controller.getResources(Resource.Type.Host, request, null, pageRequest, null);
Assert.assertEquals(0, pageResponse.getOffset());
Assert.assertNull(pageResponse.getPreviousResource());
Assert.assertEquals("host:3", pageResponse.getNextResource().getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
iterable = pageResponse.getIterable();
list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(3, list.size());
Assert.assertEquals("host:0", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
Assert.assertEquals("host:1", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(1).getType());
Assert.assertEquals("host:2", (String) list.get(2).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(2).getType());
// Check total count
Assert.assertEquals(4, pageResponse.getTotalResourceCount().intValue());
}
@Test
public void testGetResourcesPageToEnd() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
Request request = PropertyHelper.getReadRequest(propertyIds);
// get the last two
PageRequest pageRequest = new PageRequestImpl(PageRequest.StartingPoint.End, 2, 0, null, null);
PageResponse pageResponse = controller.getResources(Resource.Type.Host, request, null, pageRequest, null);
Iterable<Resource> iterable = pageResponse.getIterable();
List<Resource> list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(2, list.size());
Assert.assertEquals("host:2", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
Assert.assertEquals("host:3", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(1).getType());
//total hosts created in TestHostResourceProvider, not only on this page
Assert.assertEquals(4, pageResponse.getTotalResourceCount().intValue());
// get the last three
pageRequest = new PageRequestImpl(PageRequest.StartingPoint.End, 3, 0, null, null);
pageResponse = controller.getResources(Resource.Type.Host, request, null, pageRequest, null);
iterable = pageResponse.getIterable();
list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(3, list.size());
Assert.assertEquals("host:1", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
Assert.assertEquals("host:2", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(1).getType());
Assert.assertEquals("host:3", (String) list.get(2).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(2).getType());
// Check total count
Assert.assertEquals(4, pageResponse.getTotalResourceCount().intValue());
}
@Test
public void testGetResourcesPageToOffset() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
Request request = PropertyHelper.getReadRequest(propertyIds);
// get the middle two (1 - 2)
PageRequest pageRequest = new PageRequestImpl(PageRequest.StartingPoint.OffsetEnd, 2, 2, null, null);
PageResponse pageResponse = controller.getResources(Resource.Type.Host, request, null, pageRequest, null);
Assert.assertEquals(1, pageResponse.getOffset());
Assert.assertEquals("host:0", pageResponse.getPreviousResource().getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals("host:3", pageResponse.getNextResource().getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
//total hosts created in TestHostResourceProvider, not only on this page
Assert.assertEquals(4, pageResponse.getTotalResourceCount().intValue());
Iterable<Resource> iterable = pageResponse.getIterable();
List<Resource> list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(2, list.size());
Assert.assertEquals("host:1", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
Assert.assertEquals("host:2", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(1).getType());
// get the last three (0 - 2)
pageRequest = new PageRequestImpl(PageRequest.StartingPoint.OffsetEnd, 3, 2, null, null);
pageResponse = controller.getResources(Resource.Type.Host, request, null, pageRequest, null);
Assert.assertEquals(0, pageResponse.getOffset());
Assert.assertNull(pageResponse.getPreviousResource());
Assert.assertEquals("host:3", pageResponse.getNextResource().getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
iterable = pageResponse.getIterable();
list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(3, list.size());
Assert.assertEquals("host:0", (String) list.get(0).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
Assert.assertEquals("host:1", (String) list.get(1).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(1).getType());
Assert.assertEquals("host:2", (String) list.get(2).getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(2).getType());
// Check total count
Assert.assertEquals(4, pageResponse.getTotalResourceCount().intValue());
}
@Test
public void testGetResourcesEmptyRequest() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
Request request = PropertyHelper.getReadRequest(propertyIds);
Iterable<Resource> iterable = controller.getResourceIterable(Resource.Type.Host, request, null);
int cnt = 0;
for (Resource resource : iterable) {
Assert.assertEquals(Resource.Type.Host, resource.getType());
++cnt;
}
Assert.assertEquals(4, cnt);
}
@Test
public void testGetResourcesCheckOrder() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
Request request = PropertyHelper.getReadRequest(propertyIds);
Iterable<Resource> iterable = controller.getResourceIterable(Resource.Type.Host, request, null);
String lastHostName = null;
int cnt = 0;
for (Resource resource : iterable) {
Assert.assertEquals(Resource.Type.Host, resource.getType());
String hostName = (String) resource.getPropertyValue(PropertyHelper.getPropertyId("Hosts", "host_name"));
if (lastHostName != null) {
Assert.assertTrue(hostName.compareTo(lastHostName) > 0);
}
lastHostName = hostName;
++cnt;
}
Assert.assertEquals(4, cnt);
}
@Test
public void testGetResourcesWithPredicate() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
propertyIds.add(PropertyHelper.getPropertyId("c1", "p1"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p2"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p3"));
propertyIds.add(PropertyHelper.getPropertyId("c2", "p4"));
Request request = PropertyHelper.getReadRequest(propertyIds);
Predicate predicate = new PredicateBuilder().property("c1/p2").equals(1).toPredicate();
Iterable<Resource> iterable = controller.getResourceIterable(Resource.Type.Host, request, predicate);
int cnt = 0;
for (Resource resource : iterable) {
Assert.assertEquals(Resource.Type.Host, resource.getType());
++cnt;
}
Assert.assertEquals(2, cnt);
}
@Test
public void testGetResourcesWithUnsupportedPropertyPredicate() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
propertyIds.add(PropertyHelper.getPropertyId("c1", "p1"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p2"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p3"));
propertyIds.add(PropertyHelper.getPropertyId("c2", "p4"));
Request request = PropertyHelper.getReadRequest(propertyIds);
Predicate predicate = new PredicateBuilder().property(UNSUPPORTED_PROPERTY).equals(1).toPredicate();
try {
controller.getResourceIterable(Resource.Type.Host, request, predicate);
Assert.fail("Expected an UnsupportedPropertyException for the unsupported properties.");
} catch (UnsupportedPropertyException e) {
// Expected
}
}
@Test
public void testGetResourcesWithUnsupportedPropertyRequest() throws Exception{
ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
propertyIds.add(PropertyHelper.getPropertyId("c1", "p1"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p2"));
propertyIds.add(PropertyHelper.getPropertyId("c1", "p3"));
propertyIds.add(UNSUPPORTED_PROPERTY);
Request request = PropertyHelper.getReadRequest(propertyIds);
Predicate predicate = new PredicateBuilder().property("c1/p2").equals(1).toPredicate();
try {
controller.getResourceIterable(Resource.Type.Host, request, predicate);
Assert.fail("Expected an UnsupportedPropertyException for the unsupported properties.");
} catch (UnsupportedPropertyException e) {
// Expected
}
}
@Test
public void testGetResourcesSortedWithPredicateWithItemsTotal() throws Exception{
ClusterControllerImpl controller =
new ClusterControllerImpl(new TestProviderModule());
Set<String> propertyIds = new HashSet<String>();
Request request = PropertyHelper.getReadRequest(propertyIds);
Predicate predicate =
new PredicateBuilder().property("c1/p2").equals(1).toPredicate();
List<SortRequestProperty> sortRequestProperties = Collections.singletonList(
new SortRequestProperty("Hosts/host_name", SortRequest.Order.DESC));
SortRequest sortRequest = new SortRequestImpl(sortRequestProperties);
// get the first one
PageRequest pageRequest =
new PageRequestImpl(PageRequest.StartingPoint.Beginning, 1, 0, null, null);
PageResponse pageResponse =
controller.getResources(Resource.Type.Host, request, predicate, pageRequest, sortRequest);
Iterable<Resource> iterable = pageResponse.getIterable();
List<Resource> list = new LinkedList<Resource>();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(1, list.size());
//total hosts after applying the filter, not only on this page
Assert.assertEquals(2, pageResponse.getTotalResourceCount().intValue());
// DESC sorted
Assert.assertEquals("host:3", (String) list.get(0).getPropertyValue(
PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
pageRequest =
new PageRequestImpl(PageRequest.StartingPoint.OffsetStart, 1, 1, null, null);
pageResponse = controller.getResources(
Resource.Type.Host, request, predicate, pageRequest, sortRequest);
iterable = pageResponse.getIterable();
list.clear();
for (Resource resource : iterable) {
list.add(resource);
}
Assert.assertEquals(1, list.size());
//total hosts after applying the filter, not only on this page
Assert.assertEquals(2, pageResponse.getTotalResourceCount().intValue());
// DESC sorted
Assert.assertEquals("host:1", (String) list.get(0).getPropertyValue(
PropertyHelper.getPropertyId("Hosts", "host_name")));
Assert.assertEquals(Resource.Type.Host, list.get(0).getType());
}
@Test
public void testCreateResources() throws Exception{
TestProviderModule providerModule = new TestProviderModule();
TestHostResourceProvider resourceProvider = (TestHostResourceProvider) providerModule.getResourceProvider(Resource.Type.Host);
ClusterController controller = new ClusterControllerImpl(providerModule);
Set<Map<String, Object>> properties = new HashSet<Map<String, Object>>();
Map<String, Object> propertyMap = new HashMap<String, Object>();
propertyMap.put(PropertyHelper.getPropertyId("c1", "p1"), 99);
propertyMap.put(PropertyHelper.getPropertyId("c1", "p2"), 2);
properties.add(propertyMap);
Request request = PropertyHelper.getCreateRequest(properties, null);
controller.createResources(Resource.Type.Host, request);
Assert.assertEquals(TestHostResourceProvider.Action.Create, resourceProvider.getLastAction());
Assert.assertSame(request, resourceProvider.getLastRequest());
Assert.assertNull(resourceProvider.getLastPredicate());
}
@Test
public void testCreateResourcesWithUnsupportedProperty() throws Exception{
TestProviderModule providerModule = new TestProviderModule();
ClusterController controller = new ClusterControllerImpl(providerModule);
Set<Map<String, Object>> properties = new HashSet<Map<String, Object>>();
Map<String, Object> propertyMap = new HashMap<String, Object>();
propertyMap.put(PropertyHelper.getPropertyId("c1", "p1"), 99);
propertyMap.put(UNSUPPORTED_PROPERTY, 2);
properties.add(propertyMap);
Request request = PropertyHelper.getCreateRequest(properties, null);
try {
controller.createResources(Resource.Type.Host, request);
Assert.fail("Expected an UnsupportedPropertyException for the unsupported properties.");
} catch (UnsupportedPropertyException e) {
// Expected
}
}
@Test
public void testUpdateResources() throws Exception{
TestProviderModule providerModule = new TestProviderModule();
TestHostResourceProvider resourceProvider = (TestHostResourceProvider) providerModule.getResourceProvider(Resource.Type.Host);
ClusterController controller = new ClusterControllerImpl(providerModule);
Map<String, Object> propertyMap = new HashMap<String, Object>();
propertyMap.put(PropertyHelper.getPropertyId("c1", "p1"), 99);
propertyMap.put(PropertyHelper.getPropertyId("c1", "p2"), 2);
Request request = PropertyHelper.getUpdateRequest(propertyMap, null);
Predicate predicate = new PredicateBuilder().property("c1/p2").equals(1).toPredicate();
controller.updateResources(Resource.Type.Host, request, predicate);
Assert.assertEquals(TestHostResourceProvider.Action.Update, resourceProvider.getLastAction());
Assert.assertSame(request, resourceProvider.getLastRequest());
Assert.assertSame(predicate, resourceProvider.getLastPredicate());
}
@Test
public void testUpdateResourcesWithUnsupportedPropertyRequest() throws Exception{
TestProviderModule providerModule = new TestProviderModule();
ClusterController controller = new ClusterControllerImpl(providerModule);
Map<String, Object> propertyMap = new HashMap<String, Object>();
propertyMap.put(PropertyHelper.getPropertyId("c1", "p1"), 99);
propertyMap.put(UNSUPPORTED_PROPERTY, 2);
Request request = PropertyHelper.getUpdateRequest(propertyMap, null);
Predicate predicate = new PredicateBuilder().property("c1/p2").equals(1).toPredicate();
try {
controller.updateResources(Resource.Type.Host, request, predicate);
Assert.fail("Expected an UnsupportedPropertyException for the unsupported properties.");
} catch (UnsupportedPropertyException e) {
// Expected
}
}
@Test
public void testUpdateResourcesWithUnsupportedPropertyPredicate() throws Exception{
TestProviderModule providerModule = new TestProviderModule();
ClusterController controller = new ClusterControllerImpl(providerModule);
Map<String, Object> propertyMap = new HashMap<String, Object>();
propertyMap.put(PropertyHelper.getPropertyId("c1", "p1"), 99);
propertyMap.put(PropertyHelper.getPropertyId("c1", "p2"), 2);
Request request = PropertyHelper.getUpdateRequest(propertyMap, null);
Predicate predicate = new PredicateBuilder().property(UNSUPPORTED_PROPERTY).equals(1).toPredicate();
try {
controller.updateResources(Resource.Type.Host, request, predicate);
Assert.fail("Expected an UnsupportedPropertyException for the unsupported properties.");
} catch (UnsupportedPropertyException e) {
// Expected
}
}
@Test
public void testUpdateResourcesResolvePredicate() throws Exception{
TestProviderModule providerModule = new TestProviderModule();
TestHostResourceProvider resourceProvider = (TestHostResourceProvider) providerModule.getResourceProvider(Resource.Type.Host);
ClusterController controller = new ClusterControllerImpl(providerModule);
Map<String, Object> propertyMap = new HashMap<String, Object>();
propertyMap.put(PropertyHelper.getPropertyId("c1", "p1"), 99);
propertyMap.put(PropertyHelper.getPropertyId("c1", "p2"), 2);
Request request = PropertyHelper.getUpdateRequest(propertyMap, null);
Predicate predicate = new PredicateBuilder().property("c3/p6").equals(1).toPredicate();
controller.updateResources(Resource.Type.Host, request, predicate);
Assert.assertEquals(TestHostResourceProvider.Action.Update, resourceProvider.getLastAction());
Assert.assertSame(request, resourceProvider.getLastRequest());
Predicate lastPredicate = resourceProvider.getLastPredicate();
Assert.assertFalse(predicate.equals(lastPredicate));
Set<String> predicatePropertyIds = PredicateHelper.getPropertyIds(lastPredicate);
Collection<String> keyPropertyIds = resourceProvider.getKeyPropertyIds().values();
Assert.assertEquals(predicatePropertyIds.size(), keyPropertyIds.size());
Assert.assertTrue(keyPropertyIds.containsAll(predicatePropertyIds));
}
@Test
public void testDeleteResources() throws Exception{
TestProviderModule providerModule = new TestProviderModule();
TestHostResourceProvider resourceProvider = (TestHostResourceProvider) providerModule.getResourceProvider(Resource.Type.Host);
ClusterController controller = new ClusterControllerImpl(providerModule);
Predicate predicate = new PredicateBuilder().property("c1/p2").equals(1).toPredicate();
controller.deleteResources(Resource.Type.Host, new RequestImpl(null, null, null, null), predicate);
Assert.assertEquals(TestHostResourceProvider.Action.Delete, resourceProvider.getLastAction());
Assert.assertNull(resourceProvider.getLastRequest());
Assert.assertSame(predicate, resourceProvider.getLastPredicate());
}
@Test
public void testDeleteResourcesWithUnsupportedProperty() throws Exception{
TestProviderModule providerModule = new TestProviderModule();
ClusterController controller = new ClusterControllerImpl(providerModule);
Predicate predicate = new PredicateBuilder().property(UNSUPPORTED_PROPERTY).equals(1).toPredicate();
try {
controller.deleteResources(Resource.Type.Host, new RequestImpl(null, null, null, null), predicate);
Assert.fail("Expected an UnsupportedPropertyException for the unsupported properties.");
} catch (UnsupportedPropertyException e) {
// Expected
}
}
@Test
public void testDeleteResourcesResolvePredicate() throws Exception{
TestProviderModule providerModule = new TestProviderModule();
TestHostResourceProvider resourceProvider = (TestHostResourceProvider) providerModule.getResourceProvider(Resource.Type.Host);
ClusterController controller = new ClusterControllerImpl(providerModule);
Predicate predicate = new PredicateBuilder().property("c3/p6").equals(1).toPredicate();
controller.deleteResources(Resource.Type.Host, new RequestImpl(null, null, null, null), predicate);
Assert.assertEquals(TestHostResourceProvider.Action.Delete, resourceProvider.getLastAction());
Assert.assertNull(resourceProvider.getLastRequest());
Predicate lastPredicate = resourceProvider.getLastPredicate();
Assert.assertFalse(predicate.equals(lastPredicate));
Set<String> predicatePropertyIds = PredicateHelper.getPropertyIds(lastPredicate);
Collection<String> keyPropertyIds = resourceProvider.getKeyPropertyIds().values();
Assert.assertEquals(predicatePropertyIds.size(), keyPropertyIds.size());
Assert.assertTrue(keyPropertyIds.containsAll(predicatePropertyIds));
}
@Test
public void testComparator() {
TestProviderModule providerModule = new TestProviderModule();
ClusterControllerImpl controller = new ClusterControllerImpl(providerModule);
Comparator<Resource> comparator = controller.getComparator();
Resource resource1 = new ResourceImpl(Resource.Type.Host);
Resource resource2 = new ResourceImpl(Resource.Type.Host);
Resource resource3 = new ResourceImpl(Resource.Type.Service);
Assert.assertEquals(0, comparator.compare(resource1, resource2));
Assert.assertEquals(0, comparator.compare(resource2, resource1));
Assert.assertTrue(comparator.compare(resource1, resource3) < 0);
Assert.assertTrue(comparator.compare(resource3, resource1) > 0);
resource1.setProperty(PropertyHelper.getPropertyId("Hosts", "cluster_name"), "c1");
resource1.setProperty(PropertyHelper.getPropertyId("Hosts", "host_name"), "h1");
resource2.setProperty(PropertyHelper.getPropertyId("Hosts", "cluster_name"), "c1");
resource2.setProperty(PropertyHelper.getPropertyId("Hosts", "host_name"), "h1");
Assert.assertEquals(0, comparator.compare(resource1, resource2));
Assert.assertEquals(0, comparator.compare(resource2, resource1));
resource2.setProperty(PropertyHelper.getPropertyId("Hosts", "host_name"), "h2");
Assert.assertTrue(comparator.compare(resource1, resource2) < 0);
Assert.assertTrue(comparator.compare(resource2, resource1) > 0);
resource2.setProperty(PropertyHelper.getPropertyId("Hosts", "host_name"), "h1");
resource1.setProperty("p1", "foo");
resource2.setProperty("p1", "foo");
Assert.assertEquals(0, comparator.compare(resource1, resource2));
Assert.assertEquals(0, comparator.compare(resource2, resource1));
resource2.setProperty("p1", "bar");
Assert.assertFalse(comparator.compare(resource1, resource2) == 0);
Assert.assertFalse(comparator.compare(resource2, resource1) == 0);
}
@Test
public void testPopulateResources_allTypes() throws Exception {
TestProviderModule providerModule = new TestProviderModule();
ClusterControllerImpl controller = new ClusterControllerImpl(providerModule);
Request request = PropertyHelper.getReadRequest();
Predicate predicate = new PredicateBuilder().property("c3/p6").equals(1).toPredicate();
for (Resource.Type type : Resource.Type.values()) {
Resource resource = new ResourceImpl(type);
// verify that we can call populateResources for all resource types even if there
// are no property providers defined for that type.
controller.populateResources(type, Collections.singleton(resource), request, predicate);
}
}
/**
* Tests that when a {@link PageResponse} is present on the
* {@link Request}, in-memory paging is not performed.
*
* @throws Exception
*/
@Test
public void testResourceProviderResponse() throws Exception {
ProviderModule providerModule = createNiceMock(ProviderModule.class);
ResourceProvider resourceProvider = createNiceMock(ResourceProvider.class);
expect(providerModule.getResourceProvider(Resource.Type.AlertHistory)).andReturn(
resourceProvider).anyTimes();
expect(
resourceProvider.checkPropertyIds(Collections.singleton(AlertHistoryResourceProvider.ALERT_HISTORY_HOSTNAME))).andReturn(
Collections.<String> emptySet()).anyTimes();
expect(
resourceProvider.getResources(anyObject(Request.class),
anyObject(Predicate.class))).andReturn(
Collections.<Resource> emptySet()).anyTimes();
expect(resourceProvider.checkPropertyIds(EasyMock.anyObject(Set.class))).andReturn(
new HashSet<String>()).anyTimes();
// strict pageRequest mock to ensure that paging is not performed on
// the result set
PageRequest pageRequest = EasyMock.createStrictMock(PageRequest.class);
SortRequest sortRequest = EasyMock.createStrictMock(SortRequest.class);
expect(sortRequest.getPropertyIds()).andReturn(new ArrayList<String>()).atLeastOnce();
replay(providerModule, resourceProvider, pageRequest, sortRequest);
ClusterControllerImpl controller = new ClusterControllerImpl(providerModule);
Set<String> propertyIds = new HashSet<String>();
propertyIds.add(AlertHistoryResourceProvider.ALERT_HISTORY_HOSTNAME);
// create a result set that we will use to ensure that the contents
// were unmodified
Set<Resource> providerResources = new LinkedHashSet<Resource>();
providerResources.add(new ResourceImpl(Resource.Type.AlertHistory));
Request request = PropertyHelper.getReadRequest(propertyIds, null, null,
pageRequest, sortRequest);
Predicate predicate = new PredicateBuilder().property(
AlertHistoryResourceProvider.ALERT_HISTORY_HOSTNAME).equals(
"c6401.ambari.apache.org").toPredicate();
PageResponse pageResponse = controller.getPage(Resource.Type.AlertHistory,
new QueryResponseImpl(providerResources, true, true, 0), request, predicate, pageRequest, sortRequest);
verify(providerModule, resourceProvider, pageRequest, sortRequest);
}
public static class TestProviderModule implements ProviderModule {
private Map<Resource.Type, ResourceProvider> providers = new HashMap<Resource.Type, ResourceProvider>();
public TestProviderModule() {
for (Resource.Type type : Resource.Type.values()) {
providers.put(type, new TestResourceProvider(type));
}
providers.put(Resource.Type.Cluster, new TestClusterResourceProvider());
providers.put(Resource.Type.Host, new TestHostResourceProvider());
providers.put(Resource.Type.Stack, new TestStackResourceProvider());
providers.put(Resource.Type.StackVersion, new TestStackVersionResourceProvider());
providers.put(Resource.Type.OperatingSystem, new TestOperatingSystemResourceProvider());
providers.put(Resource.Type.Repository, new TestRepositoryResourceProvider());
providers.put(Resource.Type.RepositoryVersion, new TestRepositoryVersionResourceProvider());
providers.put(Resource.Type.CompatibleRepositoryVersion, new TestCompatibleRepositoryVersionResourceProvider());
providers.put(Type.StackArtifact, new TestStackArtifactResourceProvider());
}
@Override
public ResourceProvider getResourceProvider(Resource.Type type) {
return providers.get(type);
}
@Override
public List<PropertyProvider> getPropertyProviders(Resource.Type type) {
if (type.equals(Resource.Type.Configuration)) {
// simulate a resource type with no property providers.
return null;
}
return propertyProviders;
}
}
private static class TestResourceProvider extends AbstractResourceProvider {
private TestResourceProvider(Resource.Type type) {
super(PropertyHelper.getPropertyIds(type), PropertyHelper.getKeyPropertyIds(type));
}
private TestResourceProvider(Set<String> propertyIds, Map<Resource.Type, String> keyPropertyIds) {
super(propertyIds, keyPropertyIds);
}
@Override
public RequestStatus createResources(Request request) throws SystemException, UnsupportedPropertyException, ResourceAlreadyExistsException, NoSuchParentResourceException {
throw new UnsupportedOperationException(); // not needed for testing
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
return Collections.emptySet();
}
@Override
public RequestStatus updateResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
throw new UnsupportedOperationException(); // not needed for testing
}
@Override
public RequestStatus deleteResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
throw new UnsupportedOperationException(); // not needed for testing
}
@Override
protected Set<String> getPKPropertyIds() {
return Collections.emptySet();
}
protected Set<Resource> getResources(Resource.Type type, Predicate predicate, String keyPropertyId, Set<String> keyPropertyValues)
throws SystemException, UnsupportedPropertyException, NoSuchParentResourceException, NoSuchResourceException {
Set<Resource> resources = new HashSet<Resource>();
for (Map<String, Object> propertyMap : getPropertyMaps(predicate)) {
Set<Resource> resources2 = new HashSet<Resource>();
if (!propertyMap.containsKey(keyPropertyId)) {
for (String keyPropertyValue : keyPropertyValues) {
ResourceImpl resource = new ResourceImpl(type);
resource.setProperty(keyPropertyId, keyPropertyValue);
resources2.add(resource);
}
} else {
resources2.add(new ResourceImpl(type));
}
for (Resource resource : resources2) {
for (Map.Entry<String, Object> entry : propertyMap.entrySet()) {
resource.setProperty(entry.getKey(), entry.getValue());
}
}
resources.addAll(resources2);
}
return resources;
}
}
private static class TestClusterResourceProvider extends TestResourceProvider {
private TestClusterResourceProvider() {
super(Resource.Type.Cluster);
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
ResourceImpl resource = new ResourceImpl(Resource.Type.Cluster);
resource.setProperty(PropertyHelper.getPropertyId("Clusters", "cluster_name"), "cluster");
return Collections.<Resource>singleton(resource);
}
}
private static class TestHostResourceProvider extends TestResourceProvider {
private Action lastAction = null;
private Request lastRequest = null;
private Predicate lastPredicate = null;
private TestHostResourceProvider() {
super(Resource.Type.Host);
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
Set<Resource> resources = new HashSet<Resource>();
for (int cnt = 0; cnt < 4; ++ cnt) {
ResourceImpl resource = new ResourceImpl(Resource.Type.Host);
resource.setProperty(PropertyHelper.getPropertyId("Hosts", "cluster_name"), "cluster");
resource.setProperty(PropertyHelper.getPropertyId("Hosts", "host_name"), "host:" + (4 - cnt));
resource.setProperty(PropertyHelper.getPropertyId("Hosts", "cluster_name"), "cluster");
resource.setProperty(PropertyHelper.getPropertyId("Hosts", "host_name"), "host:" + cnt);
resource.setProperty(PropertyHelper.getPropertyId("c1", "p1"), cnt);
resource.setProperty(PropertyHelper.getPropertyId("c1", "p2"), cnt % 2);
resource.setProperty(PropertyHelper.getPropertyId("c1", "p3"), "foo");
resource.setProperty(PropertyHelper.getPropertyId("c2", "p4"), "bar");
if (cnt % 2 == 0) {
resource.setProperty(PropertyHelper.getPropertyId("alerts_summary", "CRITICAL"), "1");
} else {
resource.setProperty(PropertyHelper.getPropertyId("alerts_summary", "WARNING"), "1");
}
resources.add(resource);
}
return resources;
}
@Override
public RequestStatus createResources(Request request) {
lastAction = Action.Create;
lastRequest = request;
lastPredicate = null;
return new RequestStatusImpl(null);
}
@Override
public RequestStatus updateResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
lastAction = Action.Update;
lastRequest = request;
lastPredicate = predicate;
return new RequestStatusImpl(null);
}
@Override
public RequestStatus deleteResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
lastAction = Action.Delete;
lastRequest = null;
lastPredicate = predicate;
return new RequestStatusImpl(null);
}
@Override
public Set<String> checkPropertyIds(Set<String> propertyIds) {
if (!resourceProviderProperties.containsAll(propertyIds)) {
Set<String> unsupportedPropertyIds = new HashSet<String>(propertyIds);
unsupportedPropertyIds.removeAll(resourceProviderProperties);
return unsupportedPropertyIds;
}
return Collections.emptySet();
}
@Override
public Map<Resource.Type, String> getKeyPropertyIds() {
return keyPropertyIds;
}
public Action getLastAction() {
return lastAction;
}
public Request getLastRequest() {
return lastRequest;
}
public Predicate getLastPredicate() {
return lastPredicate;
}
public enum Action {
Create,
Update,
Delete
}
}
private static class TestStackResourceProvider extends TestResourceProvider {
private TestStackResourceProvider() {
super(Resource.Type.Stack);
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
Set<String> keyPropertyValues = new HashSet<String>();
return getResources(Resource.Type.Stack, predicate, "Stacks/stack_name", keyPropertyValues);
}
}
private static class TestStackVersionResourceProvider extends TestResourceProvider {
private TestStackVersionResourceProvider() {
super(Resource.Type.StackVersion);
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
Set<String> keyPropertyValues = new LinkedHashSet<String>();
keyPropertyValues.add("1.2.1");
keyPropertyValues.add("1.2.2");
keyPropertyValues.add("2.0.1");
return getResources(Resource.Type.StackVersion, predicate, "Versions/stack_version", keyPropertyValues);
}
}
private static class TestOperatingSystemResourceProvider extends TestResourceProvider {
private TestOperatingSystemResourceProvider() {
super(OperatingSystemResourceProvider.propertyIds, OperatingSystemResourceProvider.keyPropertyIds);
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
Set<String> keyPropertyValues = new LinkedHashSet<String>();
keyPropertyValues.add("centos5");
keyPropertyValues.add("centos6");
keyPropertyValues.add("oraclelinux5");
return getResources(Resource.Type.OperatingSystem, predicate, "OperatingSystems/os_type", keyPropertyValues);
}
}
private static class TestRepositoryResourceProvider extends TestResourceProvider {
private TestRepositoryResourceProvider() {
super(RepositoryResourceProvider.propertyIds, RepositoryResourceProvider.keyPropertyIds);
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
Set<String> keyPropertyValues = new LinkedHashSet<String>();
keyPropertyValues.add("repo1");
keyPropertyValues.add("repo2");
return getResources(Resource.Type.Repository, predicate, "Repositories/repo_id", keyPropertyValues);
}
}
private static class TestRepositoryVersionResourceProvider extends TestResourceProvider {
private TestRepositoryVersionResourceProvider() {
super(RepositoryVersionResourceProvider.propertyIds, RepositoryVersionResourceProvider.keyPropertyIds);
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
Set<String> keyPropertyValues = new LinkedHashSet<String>();
keyPropertyValues.add("1");
keyPropertyValues.add("2");
return getResources(Resource.Type.RepositoryVersion, predicate, "RepositoriVersions/id", keyPropertyValues);
}
}
private static class TestCompatibleRepositoryVersionResourceProvider extends TestResourceProvider {
private TestCompatibleRepositoryVersionResourceProvider() {
super(CompatibleRepositoryVersionResourceProvider.propertyIds, CompatibleRepositoryVersionResourceProvider.keyPropertyIds);
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
Set<String> keyPropertyValues = new LinkedHashSet<String>();
keyPropertyValues.add("1");
keyPropertyValues.add("2");
return getResources(Resource.Type.CompatibleRepositoryVersion, predicate, "CompatibleRepositoriVersions/id", keyPropertyValues);
}
}
private static class TestStackArtifactResourceProvider extends TestResourceProvider {
private TestStackArtifactResourceProvider() {
super(StackArtifactResourceProvider.propertyIds, StackArtifactResourceProvider.keyPropertyIds);
}
@Override
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
Set<String> keyPropertyValues = new LinkedHashSet<String>();
keyPropertyValues.add("kerberos_descriptor");
return getResources(Type.StackArtifact, predicate, "Artifacts/artifact_name", keyPropertyValues);
}
}
}