| /** |
| * 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.createMock; |
| import static org.easymock.EasyMock.createNiceMock; |
| import static org.easymock.EasyMock.replay; |
| |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.apache.ambari.server.controller.AmbariManagementController; |
| import org.apache.ambari.server.controller.ClusterRequest; |
| import org.apache.ambari.server.controller.ConfigurationRequest; |
| import org.apache.ambari.server.controller.GroupRequest; |
| import org.apache.ambari.server.controller.HostRequest; |
| import org.apache.ambari.server.controller.MaintenanceStateHelper; |
| import org.apache.ambari.server.controller.MemberRequest; |
| import org.apache.ambari.server.controller.RequestStatusResponse; |
| import org.apache.ambari.server.controller.ServiceComponentHostRequest; |
| import org.apache.ambari.server.controller.StackConfigurationDependencyRequest; |
| import org.apache.ambari.server.controller.StackConfigurationRequest; |
| import org.apache.ambari.server.controller.StackLevelConfigurationRequest; |
| import org.apache.ambari.server.controller.UserRequest; |
| import org.apache.ambari.server.controller.predicate.AlwaysPredicate; |
| import org.apache.ambari.server.controller.spi.NoSuchParentResourceException; |
| import org.apache.ambari.server.controller.spi.NoSuchResourceException; |
| import org.apache.ambari.server.controller.spi.Predicate; |
| 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.ResourceAlreadyExistsException; |
| 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.state.SecurityType; |
| import org.easymock.EasyMock; |
| import org.easymock.IArgumentMatcher; |
| import org.junit.Assert; |
| import org.junit.Test; |
| |
| /** |
| * Resource provider tests. |
| */ |
| public class AbstractResourceProviderTest { |
| |
| @Test |
| public void testCheckPropertyIds() { |
| Set<String> propertyIds = new HashSet<String>(); |
| propertyIds.add("foo"); |
| propertyIds.add("cat1/foo"); |
| propertyIds.add("cat2/bar"); |
| propertyIds.add("cat2/baz"); |
| propertyIds.add("cat3/sub1/bam"); |
| propertyIds.add("cat4/sub2/sub3/bat"); |
| propertyIds.add("cat5/subcat5/map"); |
| |
| Map<Resource.Type, String> keyPropertyIds = new HashMap<Resource.Type, String>(); |
| |
| AmbariManagementController managementController = createMock(AmbariManagementController.class); |
| MaintenanceStateHelper maintenanceStateHelper = createNiceMock(MaintenanceStateHelper.class); |
| replay(maintenanceStateHelper); |
| AbstractResourceProvider provider = new ServiceResourceProvider( |
| propertyIds, |
| keyPropertyIds, |
| managementController, maintenanceStateHelper); |
| |
| Set<String> unsupported = provider.checkPropertyIds(Collections.singleton("foo")); |
| Assert.assertTrue(unsupported.isEmpty()); |
| |
| // note that key is not in the set of known property ids. We allow it if its parent is a known property. |
| // this allows for Map type properties where we want to treat the entries as individual properties |
| Assert.assertTrue(provider.checkPropertyIds(Collections.singleton("cat5/subcat5/map/key")).isEmpty()); |
| |
| unsupported = provider.checkPropertyIds(Collections.singleton("bar")); |
| Assert.assertEquals(1, unsupported.size()); |
| Assert.assertTrue(unsupported.contains("bar")); |
| |
| unsupported = provider.checkPropertyIds(Collections.singleton("cat1/foo")); |
| Assert.assertTrue(unsupported.isEmpty()); |
| |
| unsupported = provider.checkPropertyIds(Collections.singleton("cat1")); |
| Assert.assertTrue(unsupported.isEmpty()); |
| } |
| |
| @Test |
| public void testGetPropertyIds() { |
| Set<String> propertyIds = new HashSet<String>(); |
| propertyIds.add("p1"); |
| propertyIds.add("foo"); |
| propertyIds.add("cat1/foo"); |
| propertyIds.add("cat2/bar"); |
| propertyIds.add("cat2/baz"); |
| propertyIds.add("cat3/sub1/bam"); |
| propertyIds.add("cat4/sub2/sub3/bat"); |
| |
| Map<Resource.Type, String> keyPropertyIds = new HashMap<Resource.Type, String>(); |
| |
| AmbariManagementController managementController = createMock(AmbariManagementController.class); |
| MaintenanceStateHelper maintenanceStateHelper = createNiceMock(MaintenanceStateHelper.class); |
| replay(maintenanceStateHelper); |
| |
| AbstractResourceProvider provider = new ServiceResourceProvider( |
| propertyIds, |
| keyPropertyIds, |
| managementController, maintenanceStateHelper); |
| |
| Set<String> supportedPropertyIds = provider.getPropertyIds(); |
| Assert.assertTrue(supportedPropertyIds.containsAll(propertyIds)); |
| } |
| |
| @Test |
| public void testGetRequestStatus() { |
| Set<String> propertyIds = new HashSet<String>(); |
| Map<Resource.Type, String> keyPropertyIds = new HashMap<Resource.Type, String>(); |
| AmbariManagementController managementController = createMock(AmbariManagementController.class); |
| MaintenanceStateHelper maintenanceStateHelper = createNiceMock(MaintenanceStateHelper.class); |
| replay(maintenanceStateHelper); |
| |
| AbstractResourceProvider provider = new ServiceResourceProvider( |
| propertyIds, |
| keyPropertyIds, |
| managementController, maintenanceStateHelper); |
| |
| RequestStatus status = provider.getRequestStatus(null); |
| |
| Assert.assertNull(status.getRequestResource()); |
| Assert.assertEquals(Collections.emptySet(), status.getAssociatedResources()); |
| |
| RequestStatusResponse response = new RequestStatusResponse(99L); |
| |
| status = provider.getRequestStatus(response); |
| Resource resource = status.getRequestResource(); |
| |
| Assert.assertEquals(99L, resource.getPropertyValue("Requests/id")); |
| Assert.assertEquals(Collections.emptySet(), status.getAssociatedResources()); |
| |
| |
| status = provider.getRequestStatus(response, null); |
| resource = status.getRequestResource(); |
| |
| Assert.assertEquals(99L, resource.getPropertyValue("Requests/id")); |
| Assert.assertEquals(Collections.emptySet(), status.getAssociatedResources()); |
| |
| |
| Resource associatedResource = new ResourceImpl(Resource.Type.Service); |
| |
| Set<Resource> associatedResources = Collections.singleton(associatedResource); |
| status = provider.getRequestStatus(response, associatedResources); |
| resource = status.getRequestResource(); |
| |
| Assert.assertEquals(99L, resource.getPropertyValue("Requests/id")); |
| Assert.assertEquals(associatedResources, status.getAssociatedResources()); |
| } |
| |
| @Test |
| public void testGetPropertyMaps() throws Exception { |
| AbstractResourceProvider provider = new TestResourceProvider(); |
| |
| Map<String, Object> updatePropertyMap = new HashMap<String, Object>(); |
| updatePropertyMap.put("SomeProperty", "SomeUpdateValue"); |
| updatePropertyMap.put("SomeOtherProperty", 99); |
| |
| // get the property map to update resource |
| // where ClusterName=c1 and ResourceName=r1 |
| PredicateBuilder pb = new PredicateBuilder(); |
| Predicate predicate = pb.property("ClusterName").equals("c1").and().property("ResourceName").equals("r1").toPredicate(); |
| |
| Set<Map<String, Object>> propertyMaps = provider.getPropertyMaps(updatePropertyMap, predicate); |
| |
| Assert.assertEquals(1, propertyMaps.size()); |
| |
| Map<String, Object> map = propertyMaps.iterator().next(); |
| |
| Assert.assertEquals(4, map.size()); |
| Assert.assertEquals("c1", map.get("ClusterName")); |
| Assert.assertEquals("r1", map.get("ResourceName")); |
| Assert.assertEquals("SomeUpdateValue", map.get("SomeProperty")); |
| Assert.assertEquals(99, map.get("SomeOtherProperty")); |
| |
| // get the property maps to update resources |
| // where ClusterName=c1 and (ResourceName=r1 or ResourceName=r2) |
| pb = new PredicateBuilder(); |
| predicate = pb.property("ClusterName").equals("c1").and(). |
| begin(). |
| property("ResourceName").equals("r1").or().property("ResourceName").equals("r2"). |
| end().toPredicate(); |
| |
| propertyMaps = provider.getPropertyMaps(updatePropertyMap, predicate); |
| |
| Assert.assertEquals(2, propertyMaps.size()); |
| |
| for (Map<String, Object> map2 : propertyMaps) { |
| Assert.assertEquals(4, map2.size()); |
| Assert.assertEquals("c1", map2.get("ClusterName")); |
| Object resourceName = map2.get("ResourceName"); |
| Assert.assertTrue(resourceName.equals("r1") || resourceName.equals("r2")); |
| Assert.assertEquals("SomeUpdateValue", map2.get("SomeProperty")); |
| Assert.assertEquals(99, map2.get("SomeOtherProperty")); |
| } |
| |
| // get the property maps to update all resources |
| predicate = new AlwaysPredicate(); |
| |
| propertyMaps = provider.getPropertyMaps(updatePropertyMap, predicate); |
| |
| Assert.assertEquals(4, propertyMaps.size()); |
| |
| for (Map<String, Object> map2 : propertyMaps) { |
| Assert.assertEquals(4, map2.size()); |
| Assert.assertEquals("c1", map2.get("ClusterName")); |
| Object resourceName = map2.get("ResourceName"); |
| Assert.assertTrue(resourceName.equals("r1") || resourceName.equals("r2")|| |
| resourceName.equals("r3") || resourceName.equals("r4")); |
| Assert.assertEquals("SomeUpdateValue", map2.get("SomeProperty")); |
| Assert.assertEquals(99, map2.get("SomeOtherProperty")); |
| } |
| } |
| |
| @Test |
| public void testGetQueryParameterValue() { |
| |
| String queryParameterId1 = "qp/variable1"; |
| String queryParameterValue1 = "value1"; |
| String queryParameterId2 = "qp/variable2"; |
| String queryParameterValue2 = "value2"; |
| |
| //Array of predicates |
| Predicate predicate = new PredicateBuilder().property(queryParameterId1).equals(queryParameterValue1). |
| and().property(queryParameterId2).equals(queryParameterValue2).toPredicate(); |
| |
| Assert.assertEquals(queryParameterValue1, AbstractResourceProvider.getQueryParameterValue(queryParameterId1, predicate)); |
| Assert.assertFalse(queryParameterValue2.equals(AbstractResourceProvider.getQueryParameterValue(queryParameterId1, predicate))); |
| Assert.assertNull(AbstractResourceProvider.getQueryParameterValue("queryParameterIdNotFound", predicate)); |
| |
| String queryParameterId3 = "qp/variable3"; |
| String queryParameterValue3 = "value3"; |
| |
| // tests ServiceInfo/state=INSTALLED¶ms/run_smoke_test=true |
| //Array of arrays of predicates |
| predicate = new PredicateBuilder().property(queryParameterId3).equals(queryParameterValue3). |
| and().begin().property(queryParameterId1).equals(queryParameterValue1). |
| and().property(queryParameterId2).equals(queryParameterValue2).end().toPredicate(); |
| |
| Assert.assertEquals(queryParameterValue1, AbstractResourceProvider. |
| getQueryParameterValue(queryParameterId1, predicate)); |
| Assert.assertFalse(queryParameterValue2.equals(AbstractResourceProvider. |
| getQueryParameterValue(queryParameterId1, predicate))); |
| Assert.assertNull(AbstractResourceProvider. |
| getQueryParameterValue("queryParameterIdNotFound", predicate)); |
| |
| Assert.assertEquals(queryParameterValue3, AbstractResourceProvider. |
| getQueryParameterValue(queryParameterId3, predicate)); |
| |
| } |
| |
| |
| // ----- helper methods ---------------------------------------------------- |
| |
| /** |
| * Equals check that accounts for nulls. |
| * |
| * @param left the left object |
| * @param right the right object |
| * |
| * @return true if the left and right object are equal or both null |
| */ |
| private static boolean eq(Object left, Object right) { |
| return left == null ? right == null : right != null && left.equals(right); |
| } |
| |
| |
| // ----- inner classes ----------------------------------------------------- |
| |
| /** |
| * Utility class for getting various AmbariManagmentController request related matchers. |
| */ |
| public static class Matcher |
| { |
| public static ClusterRequest getClusterRequest( |
| Long clusterId, String clusterName, String stackVersion, Set<String> hostNames) |
| { |
| EasyMock.reportMatcher(new ClusterRequestMatcher(clusterId, clusterName, stackVersion, hostNames)); |
| return null; |
| } |
| |
| public static Set<ClusterRequest> getClusterRequestSet( |
| Long clusterId, String clusterName, String provisioningState, SecurityType securityType, String stackVersion, Set<String> hostNames) |
| { |
| EasyMock.reportMatcher(new ClusterRequestSetMatcher(clusterId, clusterName, provisioningState, securityType, stackVersion, hostNames)); |
| return null; |
| } |
| |
| public static ConfigurationRequest getConfigurationRequest( |
| String clusterName, String type, String tag, Map<String, String> configs, Map<String, Map<String, String>> configAttributes) |
| { |
| EasyMock.reportMatcher(new ConfigurationRequestMatcher(clusterName, type, tag, configs, configAttributes)); |
| return null; |
| } |
| |
| public static Set<HostRequest> getHostRequestSet(String hostname, String clusterName, |
| Map<String, String> hostAttributes) |
| { |
| EasyMock.reportMatcher(new HostRequestSetMatcher(hostname, clusterName, hostAttributes)); |
| return null; |
| } |
| |
| public static Set<ServiceComponentHostRequest> getHostComponentRequestSet( |
| String clusterName, String serviceName, String componentName, String hostName, |
| Map<String, String> configVersions, String desiredState) |
| { |
| EasyMock.reportMatcher(new HostComponentRequestSetMatcher( |
| clusterName, serviceName, componentName, hostName, configVersions, desiredState)); |
| return null; |
| } |
| |
| public static Set<UserRequest> getUserRequestSet(String name) |
| { |
| EasyMock.reportMatcher(new UserRequestSetMatcher(name)); |
| return null; |
| } |
| |
| public static Set<GroupRequest> getGroupRequestSet(String name) |
| { |
| EasyMock.reportMatcher(new GroupRequestSetMatcher(name)); |
| return null; |
| } |
| |
| public static Set<MemberRequest> getMemberRequestSet(String groupname, String username) |
| { |
| EasyMock.reportMatcher(new MemberRequestSetMatcher(groupname, username)); |
| return null; |
| } |
| |
| public static Set<StackConfigurationRequest> getStackConfigurationRequestSet(String stackName, String stackVersion, |
| String serviceName, String propertyName) |
| { |
| EasyMock.reportMatcher(new StackConfigurationRequestSetMatcher(stackName, stackVersion, serviceName, propertyName)); |
| return null; |
| } |
| |
| public static Set<StackConfigurationDependencyRequest> getStackConfigurationDependencyRequestSet(String stackName, String stackVersion, |
| String serviceName, String propertyName, String dependencyName) |
| { |
| EasyMock.reportMatcher(new StackConfigurationDependencyRequestSetMatcher(stackName, stackVersion, serviceName, propertyName, dependencyName)); |
| return null; |
| } |
| |
| public static Set<StackLevelConfigurationRequest> getStackLevelConfigurationRequestSet(String stackName, String stackVersion, |
| String propertyName) |
| { |
| EasyMock.reportMatcher(new StackLevelConfigurationRequestSetMatcher(stackName, stackVersion, propertyName)); |
| return null; |
| } |
| } |
| |
| /** |
| * Matcher for a ClusterRequest. |
| */ |
| public static class ClusterRequestMatcher extends ClusterRequest implements IArgumentMatcher { |
| |
| public ClusterRequestMatcher(Long clusterId, String clusterName, String stackVersion, Set<String> hostNames) { |
| super(clusterId, clusterName, stackVersion, hostNames); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| return o instanceof ClusterRequest && |
| eq(((ClusterRequest) o).getClusterId(), getClusterId()) && |
| eq(((ClusterRequest) o).getClusterName(), getClusterName()) && |
| eq(((ClusterRequest) o).getStackVersion(), getStackVersion()) && |
| eq(((ClusterRequest) o).getHostNames(), getHostNames()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("ClusterRequestMatcher(").append(super.toString()).append(")"); |
| } |
| } |
| |
| /** |
| * Matcher for a ClusterRequest set. |
| */ |
| public static class ClusterRequestSetMatcher extends ClusterRequest implements IArgumentMatcher { |
| |
| public ClusterRequestSetMatcher(Long clusterId, String clusterName, String provisioningState, |
| SecurityType securityType, String stackVersion, Set<String> hostNames) { |
| super(clusterId, clusterName, provisioningState, securityType, stackVersion, hostNames); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| if (!(o instanceof Set)) { |
| return false; |
| } |
| |
| Set set = (Set) o; |
| |
| if (set.size() != 1) { |
| return false; |
| } |
| |
| Object request = set.iterator().next(); |
| |
| return eq(((ClusterRequest) request).getClusterId(), getClusterId()) && |
| eq(((ClusterRequest) request).getClusterName(), getClusterName()) && |
| eq(((ClusterRequest) request).getStackVersion(), getStackVersion()) && |
| eq(((ClusterRequest) request).getHostNames(), getHostNames()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("ClusterRequestSetMatcher(").append(super.toString()).append(")"); |
| } |
| } |
| |
| /** |
| * Matcher for a ConfigurationRequest. |
| */ |
| public static class ConfigurationRequestMatcher extends ConfigurationRequest implements IArgumentMatcher { |
| |
| public ConfigurationRequestMatcher(String clusterName, String type, String tag, Map<String, String> configs, Map<String, Map<String, String>> configsAttributes) { |
| super(clusterName, type, tag, configs, configsAttributes); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| return o instanceof ConfigurationRequest && |
| eq(((ConfigurationRequest) o).getClusterName(), getClusterName()) && |
| eq(((ConfigurationRequest) o).getType(), getType()) && |
| eq(((ConfigurationRequest) o).getVersionTag(), getVersionTag()) && |
| eq(((ConfigurationRequest) o).getProperties(), getProperties()) && |
| eq(((ConfigurationRequest) o).getPropertiesAttributes(), getPropertiesAttributes()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("ConfigurationRequestMatcher(").append(super.toString()).append(")"); |
| } |
| } |
| |
| |
| /** |
| * Matcher for a HostRequest set containing a single request. |
| */ |
| public static class HostRequestSetMatcher extends HashSet<HostRequest> implements IArgumentMatcher { |
| |
| private final HostRequest hostRequest; |
| |
| public HostRequestSetMatcher(String hostname, String clusterName, Map<String, String> hostAttributes) { |
| hostRequest = new HostRequest(hostname, clusterName, hostAttributes); |
| add(hostRequest); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| if (!(o instanceof Set)) { |
| return false; |
| } |
| |
| Set set = (Set) o; |
| |
| if (set.size() != 1) { |
| return false; |
| } |
| |
| Object request = set.iterator().next(); |
| |
| return request instanceof HostRequest && |
| eq(((HostRequest) request).getClusterName(), hostRequest.getClusterName()) && |
| eq(((HostRequest) request).getHostname(), hostRequest.getHostname()) && |
| eq(((HostRequest) request).getHostAttributes(), hostRequest.getHostAttributes()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("HostRequestSetMatcher(").append(hostRequest).append(")"); |
| } |
| } |
| |
| /** |
| * Matcher for a ServiceComponentHostRequest set containing a single request. |
| */ |
| public static class HostComponentRequestSetMatcher extends HashSet<ServiceComponentHostRequest> |
| implements IArgumentMatcher { |
| |
| private final ServiceComponentHostRequest hostComponentRequest; |
| |
| public HostComponentRequestSetMatcher(String clusterName, String serviceName, String componentName, String hostName, |
| Map<String, String> configVersions, String desiredState) { |
| hostComponentRequest = |
| new ServiceComponentHostRequest(clusterName, serviceName, componentName, |
| hostName, desiredState); |
| add(hostComponentRequest); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| |
| if (!(o instanceof Set)) { |
| return false; |
| } |
| |
| Set set = (Set) o; |
| |
| if (set.size() != 1) { |
| return false; |
| } |
| |
| Object request = set.iterator().next(); |
| |
| return request instanceof ServiceComponentHostRequest && |
| eq(((ServiceComponentHostRequest) request).getClusterName(), hostComponentRequest.getClusterName()) && |
| eq(((ServiceComponentHostRequest) request).getServiceName(), hostComponentRequest.getServiceName()) && |
| eq(((ServiceComponentHostRequest) request).getComponentName(), hostComponentRequest.getComponentName()) && |
| eq(((ServiceComponentHostRequest) request).getHostname(), hostComponentRequest.getHostname()) && |
| eq(((ServiceComponentHostRequest) request).getDesiredState(), hostComponentRequest.getDesiredState()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("HostComponentRequestSetMatcher(").append(hostComponentRequest).append(")"); |
| } |
| } |
| |
| /** |
| * Matcher for a UserRequest set containing a single request. |
| */ |
| public static class UserRequestSetMatcher extends HashSet<UserRequest> implements IArgumentMatcher { |
| |
| private final UserRequest userRequest; |
| |
| public UserRequestSetMatcher(String name) { |
| userRequest = new UserRequest(name); |
| add(userRequest); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| |
| if (!(o instanceof Set)) { |
| return false; |
| } |
| |
| Set set = (Set) o; |
| |
| if (set.size() != 1) { |
| return false; |
| } |
| |
| Object request = set.iterator().next(); |
| |
| return request instanceof UserRequest && |
| eq(((UserRequest) request).getUsername(), userRequest.getUsername()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("UserRequestSetMatcher(").append(userRequest).append(")"); |
| } |
| } |
| |
| /** |
| * Matcher for a GroupRequest set containing a single request. |
| */ |
| public static class GroupRequestSetMatcher extends HashSet<GroupRequest> implements IArgumentMatcher { |
| |
| private final GroupRequest groupRequest; |
| |
| public GroupRequestSetMatcher(String name) { |
| groupRequest = new GroupRequest(name); |
| add(groupRequest); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| |
| if (!(o instanceof Set)) { |
| return false; |
| } |
| |
| Set set = (Set) o; |
| |
| if (set.size() != 1) { |
| return false; |
| } |
| |
| Object request = set.iterator().next(); |
| |
| return request instanceof GroupRequest && |
| eq(((GroupRequest) request).getGroupName(), groupRequest.getGroupName()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("GroupRequestSetMatcher(").append(groupRequest).append(")"); |
| } |
| } |
| |
| /** |
| * Matcher for a MemberRequest set containing a single request. |
| */ |
| public static class MemberRequestSetMatcher extends HashSet<MemberRequest> implements IArgumentMatcher { |
| |
| private final MemberRequest memberRequest; |
| |
| public MemberRequestSetMatcher(String groupname, String username) { |
| memberRequest = new MemberRequest(groupname, username); |
| add(memberRequest); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| |
| if (!(o instanceof Set)) { |
| return false; |
| } |
| |
| Set set = (Set) o; |
| |
| if (set.size() != 1) { |
| return false; |
| } |
| |
| Object request = set.iterator().next(); |
| |
| return request instanceof MemberRequest && |
| eq(((MemberRequest) request).getGroupName(), memberRequest.getGroupName()) && |
| eq(((MemberRequest) request).getUserName(), memberRequest.getUserName()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("MemberRequestSetMatcher(").append(memberRequest).append(")"); |
| } |
| } |
| |
| /** |
| * Matcher for a Stack set containing a single request. |
| */ |
| public static class StackConfigurationRequestSetMatcher extends HashSet<StackConfigurationRequest> implements IArgumentMatcher { |
| |
| private final StackConfigurationRequest stackConfigurationRequest; |
| |
| public StackConfigurationRequestSetMatcher(String stackName, String stackVersion, |
| String serviceName, String propertyName) { |
| stackConfigurationRequest = new StackConfigurationRequest(stackName, stackVersion, serviceName, propertyName); |
| add(stackConfigurationRequest); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| |
| if (!(o instanceof Set)) { |
| return false; |
| } |
| |
| Set set = (Set) o; |
| |
| if (set.size() != 1) { |
| return false; |
| } |
| |
| Object request = set.iterator().next(); |
| |
| return request instanceof StackConfigurationRequest && |
| eq(((StackConfigurationRequest) request).getPropertyName(), stackConfigurationRequest.getPropertyName()) && |
| eq(((StackConfigurationRequest) request).getServiceName(), stackConfigurationRequest.getServiceName()) && |
| eq(((StackConfigurationRequest) request).getStackName(), stackConfigurationRequest.getStackName()) && |
| eq(((StackConfigurationRequest) request).getStackVersion(), stackConfigurationRequest.getStackVersion()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("StackConfigurationRequestSetMatcher(").append(stackConfigurationRequest).append(")"); |
| } |
| } |
| |
| /** |
| * Matcher for a StackConfigurationDependency set containing a single request. |
| */ |
| public static class StackConfigurationDependencyRequestSetMatcher extends HashSet<StackConfigurationRequest> implements IArgumentMatcher { |
| |
| private final StackConfigurationDependencyRequest stackConfigurationDependencyRequest; |
| |
| public StackConfigurationDependencyRequestSetMatcher(String stackName, String stackVersion, |
| String serviceName, String propertyName, String dependencyName) { |
| stackConfigurationDependencyRequest = new StackConfigurationDependencyRequest(stackName, stackVersion, serviceName, propertyName, dependencyName); |
| add(stackConfigurationDependencyRequest); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| |
| if (!(o instanceof Set)) { |
| return false; |
| } |
| |
| Set set = (Set) o; |
| |
| if (set.size() != 1) { |
| return false; |
| } |
| |
| Object request = set.iterator().next(); |
| |
| return request instanceof StackConfigurationRequest && |
| eq(((StackConfigurationRequest) request).getPropertyName(), stackConfigurationDependencyRequest.getPropertyName()) && |
| eq(((StackConfigurationRequest) request).getServiceName(), stackConfigurationDependencyRequest.getServiceName()) && |
| eq(((StackConfigurationRequest) request).getStackName(), stackConfigurationDependencyRequest.getStackName()) && |
| eq(((StackConfigurationRequest) request).getStackVersion(), stackConfigurationDependencyRequest.getStackVersion()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("StackConfigurationRequestSetMatcher(").append(stackConfigurationDependencyRequest).append(")"); |
| } |
| } |
| |
| public static class StackLevelConfigurationRequestSetMatcher extends HashSet<StackLevelConfigurationRequest> implements IArgumentMatcher { |
| |
| private final StackLevelConfigurationRequest stackLevelConfigurationRequest; |
| |
| public StackLevelConfigurationRequestSetMatcher(String stackName, String stackVersion, |
| String propertyName) { |
| stackLevelConfigurationRequest = new StackLevelConfigurationRequest(stackName, stackVersion, propertyName); |
| add(stackLevelConfigurationRequest); |
| } |
| |
| @Override |
| public boolean matches(Object o) { |
| |
| if (!(o instanceof Set)) { |
| return false; |
| } |
| |
| Set set = (Set) o; |
| |
| if (set.size() != 1) { |
| return false; |
| } |
| |
| Object request = set.iterator().next(); |
| |
| return request instanceof StackLevelConfigurationRequest && |
| eq(((StackLevelConfigurationRequest) request).getPropertyName(), stackLevelConfigurationRequest.getPropertyName()) && |
| eq(((StackLevelConfigurationRequest) request).getStackName(), stackLevelConfigurationRequest.getStackName()) && |
| eq(((StackLevelConfigurationRequest) request).getStackVersion(), stackLevelConfigurationRequest.getStackVersion()); |
| } |
| |
| @Override |
| public void appendTo(StringBuffer stringBuffer) { |
| stringBuffer.append("StackLevelConfigurationRequestSetMatcher(").append(stackLevelConfigurationRequest).append(")"); |
| } |
| } |
| |
| /** |
| * A test observer that records the last event. |
| */ |
| public static class TestObserver implements ResourceProviderObserver { |
| |
| ResourceProviderEvent lastEvent = null; |
| |
| @Override |
| public void update(ResourceProviderEvent event) { |
| lastEvent = event; |
| } |
| |
| public ResourceProviderEvent getLastEvent() { |
| return lastEvent; |
| } |
| } |
| |
| |
| // ----- Test resource adapter --------------------------------------------- |
| |
| private static Resource.Type testResourceType = new Resource.Type("testResource"); |
| |
| private static Set<String> pkPropertyIds = |
| new HashSet<String>(Arrays.asList(new String[]{ |
| "ClusterName", |
| "ResourceName"})); |
| |
| private static Set<String> propertyIds = |
| new HashSet<String>(Arrays.asList(new String[]{ |
| "ClusterName", |
| "ResourceName", |
| "SomeProperty", |
| "SomeOtherProperty"})); |
| |
| private static Map<Resource.Type, String> keyPropertyIds = |
| new HashMap<Resource.Type, String>(); |
| |
| static { |
| keyPropertyIds.put(Resource.Type.Cluster, "ClusterName"); |
| keyPropertyIds.put(testResourceType, "ResourceName" ); |
| } |
| |
| private static Set<Resource> allResources = new HashSet<Resource>(); |
| |
| static { |
| Resource resource = new ResourceImpl(testResourceType); |
| resource.setProperty("ClusterName", "c1"); |
| resource.setProperty("ResourceName", "r1"); |
| resource.setProperty("SomeProperty", "SomeValue1"); |
| resource.setProperty("SomeOtherProperty", 10); |
| allResources.add(resource); |
| |
| resource = new ResourceImpl(testResourceType); |
| resource.setProperty("ClusterName", "c1"); |
| resource.setProperty("ResourceName", "r2"); |
| resource.setProperty("SomeProperty", "SomeValue2"); |
| resource.setProperty("SomeOtherProperty", 100); |
| allResources.add(resource); |
| |
| resource = new ResourceImpl(testResourceType); |
| resource.setProperty("ClusterName", "c1"); |
| resource.setProperty("ResourceName", "r3"); |
| resource.setProperty("SomeProperty", "SomeValue3"); |
| resource.setProperty("SomeOtherProperty", 1000); |
| allResources.add(resource); |
| |
| resource = new ResourceImpl(testResourceType); |
| resource.setProperty("ClusterName", "c1"); |
| resource.setProperty("ResourceName", "r4"); |
| resource.setProperty("SomeProperty", "SomeValue4"); |
| resource.setProperty("SomeOtherProperty", 9999); |
| allResources.add(resource); |
| } |
| |
| public static class TestResourceProvider extends AbstractResourceProvider { |
| |
| protected TestResourceProvider() { |
| super(propertyIds, keyPropertyIds); |
| } |
| |
| @Override |
| protected Set<String> getPKPropertyIds() { |
| return pkPropertyIds; |
| |
| } |
| |
| @Override |
| public RequestStatus createResources(Request request) |
| throws SystemException, UnsupportedPropertyException, ResourceAlreadyExistsException, NoSuchParentResourceException { |
| return new RequestStatusImpl(null); |
| } |
| |
| @Override |
| public Set<Resource> getResources(Request request, Predicate predicate) |
| throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { |
| |
| Set<Resource> resources = new HashSet<Resource>(); |
| |
| for(Resource resource : allResources) { |
| if (predicate.evaluate(resource)) { |
| resources.add(new ResourceImpl(resource, request.getPropertyIds())); |
| } |
| } |
| return resources; |
| } |
| |
| @Override |
| public RequestStatus updateResources(Request request, Predicate predicate) |
| throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { |
| return new RequestStatusImpl(null); |
| } |
| |
| @Override |
| public RequestStatus deleteResources(Request request, Predicate predicate) |
| throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { |
| return new RequestStatusImpl(null); |
| } |
| } |
| } |