| /** |
| * 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; |
| |
| import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_DRIVER_FILENAME; |
| import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOST_SYS_PREPPED; |
| import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JAVA_VERSION; |
| import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.NOT_MANAGED_HDFS_PATH_LIST; |
| import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_NAME; |
| import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_VERSION; |
| import static org.easymock.EasyMock.anyBoolean; |
| import static org.easymock.EasyMock.anyObject; |
| import static org.easymock.EasyMock.capture; |
| import static org.easymock.EasyMock.captureBoolean; |
| import static org.easymock.EasyMock.createMock; |
| import static org.easymock.EasyMock.createMockBuilder; |
| import static org.easymock.EasyMock.createNiceMock; |
| import static org.easymock.EasyMock.createStrictMock; |
| import static org.easymock.EasyMock.eq; |
| import static org.easymock.EasyMock.expect; |
| import static org.easymock.EasyMock.expectLastCall; |
| import static org.easymock.EasyMock.replay; |
| import static org.easymock.EasyMock.reset; |
| import static org.easymock.EasyMock.verify; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertSame; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| import java.lang.reflect.Field; |
| import java.lang.reflect.Modifier; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Properties; |
| import java.util.Set; |
| |
| import javax.persistence.RollbackException; |
| |
| import org.apache.ambari.server.AmbariException; |
| import org.apache.ambari.server.ClusterNotFoundException; |
| import org.apache.ambari.server.HostNotFoundException; |
| import org.apache.ambari.server.ParentObjectNotFoundException; |
| import org.apache.ambari.server.ServiceComponentHostNotFoundException; |
| import org.apache.ambari.server.ServiceComponentNotFoundException; |
| import org.apache.ambari.server.ServiceNotFoundException; |
| import org.apache.ambari.server.actionmanager.ActionDBAccessorImpl; |
| import org.apache.ambari.server.actionmanager.ActionManager; |
| import org.apache.ambari.server.api.services.AmbariMetaInfo; |
| import org.apache.ambari.server.configuration.Configuration; |
| import org.apache.ambari.server.controller.internal.RequestStageContainer; |
| import org.apache.ambari.server.controller.spi.Resource; |
| import org.apache.ambari.server.orm.InMemoryDefaultTestModule; |
| import org.apache.ambari.server.orm.dao.ClusterVersionDAO; |
| import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; |
| import org.apache.ambari.server.orm.entities.ClusterVersionEntity; |
| import org.apache.ambari.server.orm.entities.LdapSyncSpecEntity; |
| import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; |
| import org.apache.ambari.server.security.authorization.Users; |
| import org.apache.ambari.server.security.authorization.internal.InternalAuthenticationToken; |
| import org.apache.ambari.server.security.encryption.CredentialStoreService; |
| import org.apache.ambari.server.security.encryption.CredentialStoreType; |
| import org.apache.ambari.server.security.ldap.AmbariLdapDataPopulator; |
| import org.apache.ambari.server.security.ldap.LdapBatchDto; |
| import org.apache.ambari.server.state.Cluster; |
| import org.apache.ambari.server.state.Clusters; |
| import org.apache.ambari.server.state.ComponentInfo; |
| import org.apache.ambari.server.state.ConfigHelper; |
| import org.apache.ambari.server.state.ConfigImpl; |
| import org.apache.ambari.server.state.DesiredConfig; |
| import org.apache.ambari.server.state.Host; |
| import org.apache.ambari.server.state.MaintenanceState; |
| import org.apache.ambari.server.state.PropertyInfo; |
| import org.apache.ambari.server.state.RepositoryInfo; |
| import org.apache.ambari.server.state.RepositoryVersionState; |
| import org.apache.ambari.server.state.SecurityType; |
| import org.apache.ambari.server.state.Service; |
| import org.apache.ambari.server.state.ServiceComponent; |
| import org.apache.ambari.server.state.ServiceComponentHost; |
| import org.apache.ambari.server.state.ServiceInfo; |
| import org.apache.ambari.server.state.ServiceOsSpecific; |
| import org.apache.ambari.server.state.StackId; |
| import org.apache.ambari.server.state.StackInfo; |
| import org.apache.ambari.server.state.State; |
| import org.easymock.Capture; |
| import org.junit.Before; |
| import org.junit.BeforeClass; |
| import org.junit.Ignore; |
| import org.junit.Test; |
| import org.springframework.security.core.context.SecurityContextHolder; |
| |
| import com.google.common.collect.ImmutableList; |
| import com.google.common.collect.Maps; |
| import com.google.gson.Gson; |
| import com.google.inject.Binder; |
| import com.google.inject.Guice; |
| import com.google.inject.Injector; |
| import com.google.inject.Module; |
| import com.google.inject.util.Modules; |
| |
| import junit.framework.Assert; |
| |
| /** |
| * AmbariManagementControllerImpl unit tests |
| */ |
| public class AmbariManagementControllerImplTest { |
| |
| // Mocks |
| private static final AmbariLdapDataPopulator ldapDataPopulator = createMock(AmbariLdapDataPopulator.class); |
| private static final Clusters clusters = createNiceMock(Clusters.class); |
| private static final ActionDBAccessorImpl actionDBAccessor = createNiceMock(ActionDBAccessorImpl.class); |
| private static final AmbariMetaInfo ambariMetaInfo = createMock(AmbariMetaInfo.class); |
| private static final Users users = createMock(Users.class); |
| private static final AmbariSessionManager sessionManager = createNiceMock(AmbariSessionManager.class); |
| |
| @BeforeClass |
| public static void setupAuthentication() { |
| // Set authenticated user so that authorization checks will pass |
| InternalAuthenticationToken authenticationToken = new InternalAuthenticationToken("admin"); |
| authenticationToken.setAuthenticated(true); |
| SecurityContextHolder.getContext().setAuthentication(authenticationToken); |
| } |
| |
| @Before |
| public void before() throws Exception { |
| reset(ldapDataPopulator, clusters, actionDBAccessor, ambariMetaInfo, users, sessionManager); |
| } |
| |
| @Test |
| public void testgetAmbariServerURI() throws Exception { |
| // create mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| |
| // set expectations |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| //replay |
| replay(injector); |
| |
| |
| AmbariManagementControllerImpl controller = new AmbariManagementControllerImpl(null, null, injector); |
| |
| class AmbariConfigsSetter { |
| public void setConfigs(AmbariManagementController controller, String masterProtocol, String masterHostname, Integer masterPort) throws Exception { |
| // masterProtocol |
| Class<?> c = controller.getClass(); |
| Field f = c.getDeclaredField("masterProtocol"); |
| f.setAccessible(true); |
| |
| Field modifiersField = Field.class.getDeclaredField("modifiers"); |
| modifiersField.setAccessible(true); |
| modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); |
| |
| f.set(controller, masterProtocol); |
| |
| // masterHostname |
| f = c.getDeclaredField("masterHostname"); |
| f.setAccessible(true); |
| |
| modifiersField = Field.class.getDeclaredField("modifiers"); |
| modifiersField.setAccessible(true); |
| modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); |
| |
| f.set(controller, masterHostname); |
| |
| // masterPort |
| f = c.getDeclaredField("masterPort"); |
| f.setAccessible(true); |
| |
| modifiersField = Field.class.getDeclaredField("modifiers"); |
| modifiersField.setAccessible(true); |
| modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); |
| |
| f.set(controller, masterPort); |
| } |
| } |
| |
| AmbariConfigsSetter ambariConfigsSetter = new AmbariConfigsSetter(); |
| |
| ambariConfigsSetter.setConfigs(controller, "http", "hostname", 8080); |
| assertEquals("http://hostname:8080/jdk_path", controller.getAmbariServerURI("/jdk_path")); |
| |
| ambariConfigsSetter.setConfigs(controller, "https", "somesecuredhost", 8443); |
| assertEquals("https://somesecuredhost:8443/mysql_path", controller.getAmbariServerURI("/mysql_path")); |
| |
| ambariConfigsSetter.setConfigs(controller, "https", "othersecuredhost", 8443); |
| assertEquals("https://othersecuredhost:8443/oracle/ojdbc/", controller.getAmbariServerURI("/oracle/ojdbc/")); |
| |
| ambariConfigsSetter.setConfigs(controller, "http", "hostname", 8080); |
| assertEquals("http://hostname:8080/jdk_path?query", controller.getAmbariServerURI("/jdk_path?query")); |
| |
| verify(injector); |
| } |
| |
| @Test |
| public void testGetClusters() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| |
| ClusterRequest request1 = new ClusterRequest(null, "cluster1", "1", Collections.<String>emptySet()); |
| Cluster cluster = createNiceMock(Cluster.class); |
| ClusterResponse response = createNiceMock(ClusterResponse.class); |
| |
| Set<ClusterRequest> setRequests = new HashSet<ClusterRequest>(); |
| setRequests.add(request1); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getCluster |
| expect(clusters.getCluster("cluster1")).andReturn(cluster); |
| expect(cluster.convertToResponse()).andReturn(response); |
| |
| CredentialStoreService credentialStoreService = createNiceMock(CredentialStoreService.class); |
| expect(credentialStoreService.isInitialized(anyObject(CredentialStoreType.class))).andReturn(true).anyTimes(); |
| |
| // replay mocks |
| replay(injector, clusters, cluster, response, credentialStoreService); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| |
| Field f = controller.getClass().getDeclaredField("credentialStoreService"); |
| f.setAccessible(true); |
| f.set(controller, credentialStoreService); |
| |
| Set<ClusterResponse> setResponses = controller.getClusters(setRequests); |
| |
| // assert and verify |
| assertEquals(1, setResponses.size()); |
| assertTrue(setResponses.contains(response)); |
| |
| verify(injector, clusters, cluster, response, credentialStoreService); |
| } |
| |
| @Test |
| public void testGetClientHostForRunningAction_componentIsNull() throws Exception { |
| Injector injector = createNiceMock(Injector.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent component = null; |
| |
| replay(cluster, service, injector); |
| |
| AmbariManagementControllerImpl controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| String host = controller.getClientHostForRunningAction(cluster, service, component); |
| |
| assertNull(host); |
| verify(cluster, service, injector); |
| } |
| |
| @Test |
| public void testGetClientHostForRunningAction_componentMapIsEmpty() throws Exception { |
| Injector injector = createNiceMock(Injector.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| Map<String, ServiceComponentHost> hostMap = new HashMap<String, ServiceComponentHost>(); |
| expect(component.getServiceComponentHosts()).andReturn(hostMap); |
| |
| replay(cluster, service, component, injector); |
| |
| AmbariManagementControllerImpl controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| String host = controller.getClientHostForRunningAction(cluster, service, component); |
| |
| verify(cluster, service, component, injector); |
| assertNull(host); |
| } |
| |
| @Test |
| public void testGetClientHostForRunningAction_returnsHelathyHost() throws Exception { |
| Injector injector = createNiceMock(Injector.class); |
| ActionManager actionManager = createNiceMock(ActionManager.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| Map<String, ServiceComponentHost> hostMap = createNiceMock(Map.class); |
| Set<String> hostsSet = createNiceMock(Set.class); |
| expect(hostMap.isEmpty()).andReturn(false); |
| expect(hostMap.keySet()).andReturn(hostsSet); |
| expect(component.getServiceComponentHosts()).andReturn(hostMap).times(2); |
| |
| replay(cluster, service, component, injector, actionManager, hostMap, hostsSet); |
| |
| AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class) |
| .addMockedMethod("filterHostsForAction") |
| .addMockedMethod("getHealthyHost") |
| .withConstructor(actionManager, clusters, injector) |
| .createMock(); |
| expect(controller.getHealthyHost(hostsSet)).andReturn("healthy_host"); |
| controller.filterHostsForAction(hostsSet, service, cluster, Resource.Type.Cluster); |
| expectLastCall().once(); |
| |
| replay(controller); |
| String host = controller.getClientHostForRunningAction(cluster, service, component); |
| |
| assertEquals("healthy_host", host); |
| verify(controller, cluster, service, component, injector, hostMap); |
| } |
| |
| @Test |
| public void testGetClientHostForRunningAction_clientComponent() throws Exception { |
| Injector injector = createNiceMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| Service service = createNiceMock(Service.class); |
| StackId stackId = createNiceMock(StackId.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| |
| expect(service.getName()).andReturn("service"); |
| expect(service.getServiceComponent("component")).andReturn(component); |
| expect(service.getDesiredStackVersion()).andReturn(stackId); |
| expect(stackId.getStackName()).andReturn("stack"); |
| expect(stackId.getStackVersion()).andReturn("1.0"); |
| |
| ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class); |
| ComponentInfo compInfo = createNiceMock(ComponentInfo.class); |
| expect(serviceInfo.getClientComponent()).andReturn(compInfo); |
| expect(compInfo.getName()).andReturn("component"); |
| expect(component.getServiceComponentHosts()).andReturn(Collections.<String, ServiceComponentHost>singletonMap("host", null)); |
| expect(ambariMetaInfo.getService("stack", "1.0", "service")).andReturn(serviceInfo); |
| |
| replay(injector, cluster, service, component, serviceInfo, compInfo, ambariMetaInfo, stackId); |
| |
| AmbariManagementControllerImpl controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| ServiceComponent resultComponent = controller.getClientComponentForRunningAction(cluster, service); |
| |
| assertNotNull(resultComponent); |
| assertEquals(component, resultComponent); |
| verify(injector, cluster, service, component, serviceInfo, compInfo, ambariMetaInfo, stackId); |
| } |
| |
| @Test |
| public void testGetClientHostForRunningAction_clientComponentThrowsException() throws Exception { |
| Injector injector = createNiceMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| Service service = createNiceMock(Service.class); |
| StackId stackId = createNiceMock(StackId.class); |
| ServiceComponent component1 = createNiceMock(ServiceComponent.class); |
| ServiceComponent component2 = createNiceMock(ServiceComponent.class); |
| |
| expect(service.getName()).andReturn("service"); |
| expect(service.getServiceComponent("component")).andThrow( |
| new ServiceComponentNotFoundException("cluster", "service", "component")); |
| expect(service.getDesiredStackVersion()).andReturn(stackId); |
| expect(stackId.getStackName()).andReturn("stack"); |
| expect(stackId.getStackVersion()).andReturn("1.0"); |
| Map<String, ServiceComponent> componentsMap = new HashMap<String, ServiceComponent>(); |
| componentsMap.put("component1", component1); |
| componentsMap.put("component2", component2); |
| expect(service.getServiceComponents()).andReturn(componentsMap); |
| expect(component1.getServiceComponentHosts()).andReturn(Collections.EMPTY_MAP); |
| expect(component2.getServiceComponentHosts()).andReturn( |
| Collections.<String, ServiceComponentHost>singletonMap("anyHost", null)); |
| |
| ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class); |
| ComponentInfo compInfo = createNiceMock(ComponentInfo.class); |
| expect(serviceInfo.getClientComponent()).andReturn(compInfo); |
| expect(compInfo.getName()).andReturn("component"); |
| expect(ambariMetaInfo.getService("stack", "1.0", "service")).andReturn(serviceInfo); |
| |
| replay(injector, cluster, service, component1, component2, serviceInfo, compInfo, ambariMetaInfo, stackId); |
| |
| AmbariManagementControllerImpl controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| ServiceComponent resultComponent = controller.getClientComponentForRunningAction(cluster, service); |
| |
| assertNotNull(resultComponent); |
| assertEquals(component2, resultComponent); |
| verify(injector, cluster, service, component1, component2, serviceInfo, compInfo, ambariMetaInfo, stackId); |
| } |
| |
| @Test |
| public void testGetClientHostForRunningAction_noClientComponent() throws Exception { |
| Injector injector = createNiceMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| Service service = createNiceMock(Service.class); |
| StackId stackId = createNiceMock(StackId.class); |
| ServiceComponent component1 = createNiceMock(ServiceComponent.class); |
| ServiceComponent component2 = createNiceMock(ServiceComponent.class); |
| |
| expect(service.getName()).andReturn("service"); |
| expect(service.getDesiredStackVersion()).andReturn(stackId); |
| expect(stackId.getStackName()).andReturn("stack"); |
| expect(stackId.getStackVersion()).andReturn("1.0"); |
| Map<String, ServiceComponent> componentsMap = new HashMap<String, ServiceComponent>(); |
| componentsMap.put("component1", component1); |
| componentsMap.put("component2", component2); |
| expect(service.getServiceComponents()).andReturn(componentsMap); |
| expect(component1.getServiceComponentHosts()).andReturn(Collections.EMPTY_MAP); |
| expect(component2.getServiceComponentHosts()).andReturn( |
| Collections.<String, ServiceComponentHost>singletonMap("anyHost", null)); |
| |
| ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class); |
| expect(serviceInfo.getClientComponent()).andReturn(null); |
| expect(ambariMetaInfo.getService("stack", "1.0", "service")).andReturn(serviceInfo); |
| |
| replay(injector, cluster, service, component1, component2, serviceInfo, ambariMetaInfo, stackId); |
| |
| AmbariManagementControllerImpl controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| ServiceComponent resultComponent = controller.getClientComponentForRunningAction(cluster, service); |
| |
| assertNotNull(resultComponent); |
| assertEquals(component2, resultComponent); |
| verify(injector, cluster, service, component1, component2, serviceInfo, ambariMetaInfo, stackId); |
| } |
| |
| /** |
| * Ensure that ClusterNotFoundException is propagated in case where there is a single request. |
| */ |
| @Test |
| public void testGetClusters___ClusterNotFoundException() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| |
| // requests |
| ClusterRequest request1 = new ClusterRequest(null, "cluster1", "1", Collections.<String>emptySet()); |
| |
| Set<ClusterRequest> setRequests = new HashSet<ClusterRequest>(); |
| setRequests.add(request1); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getCluster |
| expect(clusters.getCluster("cluster1")).andThrow(new ClusterNotFoundException("cluster1")); |
| |
| // replay mocks |
| replay(injector, clusters); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| |
| // assert that exception is thrown in case where there is a single request |
| try { |
| controller.getClusters(setRequests); |
| fail("expected ClusterNotFoundException"); |
| } catch (ClusterNotFoundException e) { |
| // expected |
| } |
| |
| verify(injector, clusters); |
| } |
| |
| /** |
| * Ensure that ClusterNotFoundException is handled where there are multiple requests as would be the |
| * case when an OR predicate is provided in the query. |
| */ |
| @Test |
| public void testGetClusters___OR_Predicate_ClusterNotFoundException() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| Cluster cluster2 = createNiceMock(Cluster.class); |
| ClusterResponse response = createNiceMock(ClusterResponse.class); |
| ClusterResponse response2 = createNiceMock(ClusterResponse.class); |
| |
| // requests |
| ClusterRequest request1 = new ClusterRequest(null, "cluster1", "1", Collections.<String>emptySet()); |
| ClusterRequest request2 = new ClusterRequest(null, "cluster2", "1", Collections.<String>emptySet()); |
| ClusterRequest request3 = new ClusterRequest(null, "cluster3", "1", Collections.<String>emptySet()); |
| ClusterRequest request4 = new ClusterRequest(null, "cluster4", "1", Collections.<String>emptySet()); |
| |
| Set<ClusterRequest> setRequests = new HashSet<ClusterRequest>(); |
| setRequests.add(request1); |
| setRequests.add(request2); |
| setRequests.add(request3); |
| setRequests.add(request4); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getCluster |
| expect(clusters.getCluster("cluster1")).andThrow(new ClusterNotFoundException("cluster1")); |
| expect(clusters.getCluster("cluster2")).andReturn(cluster); |
| expect(clusters.getCluster("cluster3")).andReturn(cluster2); |
| expect(clusters.getCluster("cluster4")).andThrow(new ClusterNotFoundException("cluster4")); |
| |
| expect(cluster.convertToResponse()).andReturn(response); |
| expect(cluster2.convertToResponse()).andReturn(response2); |
| |
| CredentialStoreService credentialStoreService = createNiceMock(CredentialStoreService.class); |
| expect(credentialStoreService.isInitialized(anyObject(CredentialStoreType.class))).andReturn(true).anyTimes(); |
| |
| // replay mocks |
| replay(injector, clusters, cluster, cluster2, response, response2, credentialStoreService); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| |
| Field f = controller.getClass().getDeclaredField("credentialStoreService"); |
| f.setAccessible(true); |
| f.set(controller, credentialStoreService); |
| |
| Set<ClusterResponse> setResponses = controller.getClusters(setRequests); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertEquals(2, setResponses.size()); |
| assertTrue(setResponses.contains(response)); |
| assertTrue(setResponses.contains(response2)); |
| |
| verify(injector, clusters, cluster, cluster2, response, response2, credentialStoreService); |
| } |
| |
| /** |
| * Ensure that when the cluster id is provided and the given cluster name is different from the cluster's name |
| * then the cluster rename logic is executed. |
| */ |
| @Test |
| public void testUpdateClusters() throws Exception { |
| // member state mocks |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| Injector injector = createStrictMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| ActionManager actionManager = createNiceMock(ActionManager.class); |
| ClusterRequest clusterRequest = createNiceMock(ClusterRequest.class); |
| |
| // requests |
| Set<ClusterRequest> setRequests = Collections.singleton(clusterRequest); |
| |
| KerberosHelper kerberosHelper = createStrictMock(KerberosHelper.class); |
| // expectations |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper); |
| expect(clusterRequest.getClusterName()).andReturn("clusterNew").times(3); |
| expect(clusterRequest.getClusterId()).andReturn(1L).times(6); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).times(2); |
| expect(cluster.getClusterName()).andReturn("clusterOld").times(1); |
| |
| cluster.addSessionAttributes(anyObject(Map.class)); |
| expectLastCall().once(); |
| |
| cluster.setClusterName("clusterNew"); |
| expectLastCall(); |
| |
| // replay mocks |
| replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(actionManager, clusters, injector); |
| controller.updateClusters(setRequests, null); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager); |
| } |
| |
| /** |
| * Ensure that processing update request does not fail on configuration |
| * properties with no value specified (no value = null reference value) |
| * TODO disabled for now as tests nothing, check what exactly should be tested here |
| * updateCluster request was noop due to equality on cluster and request configs (both contained null) |
| * mocks are too limited to pass further these base checks |
| */ |
| @Test |
| @Ignore |
| public void testUpdateClustersWithNullConfigPropertyValues() throws Exception { |
| // member state mocks |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| Injector injector = createStrictMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| ActionManager actionManager = createNiceMock(ActionManager.class); |
| ClusterRequest clusterRequest = createNiceMock(ClusterRequest.class); |
| |
| // requests |
| Set<ClusterRequest> setRequests = Collections.singleton(clusterRequest); |
| |
| KerberosHelper kerberosHelper = createStrictMock(KerberosHelper.class); |
| // expectations |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper); |
| expect(clusterRequest.getClusterName()).andReturn("clusterNew").anyTimes(); |
| expect(clusterRequest.getClusterId()).andReturn(1L).anyTimes(); |
| |
| ConfigurationRequest configReq = new ConfigurationRequest(); |
| final Map<String, String> configReqProps = Maps.newHashMap(); |
| configReqProps.put("p1", null); |
| configReq.setProperties(configReqProps); |
| |
| expect(clusterRequest.getDesiredConfig()).andReturn(ImmutableList.of(configReq)).anyTimes(); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).anyTimes(); |
| expect(cluster.getClusterName()).andReturn("clusterOld").anyTimes(); |
| expect(cluster.getConfigPropertiesTypes(anyObject(String.class))).andReturn(Maps.<PropertyInfo.PropertyType, Set<String>>newHashMap()).anyTimes(); |
| expect(cluster.getDesiredConfigByType(anyObject(String.class))).andReturn(new ConfigImpl("config-type") { |
| @Override |
| public Map<String, Map<String, String>> getPropertiesAttributes() { |
| return Maps.newHashMap(); |
| } |
| |
| @Override |
| public Map<String, String> getProperties() { |
| return configReqProps; |
| } |
| |
| }).anyTimes(); |
| |
| cluster.addSessionAttributes(anyObject(Map.class)); |
| expectLastCall().once(); |
| |
| cluster.setClusterName("clusterNew"); |
| expectLastCall(); |
| |
| // replay mocks |
| replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(actionManager, clusters, injector); |
| controller.updateClusters(setRequests, null); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager); |
| } |
| |
| /** |
| * Ensure that when the cluster is updated KerberosHandler.toggleKerberos is not invoked unless |
| * the security type is altered |
| */ |
| @Test |
| public void testUpdateClustersToggleKerberosNotInvoked() throws Exception { |
| // member state mocks |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| Injector injector = createStrictMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| ActionManager actionManager = createNiceMock(ActionManager.class); |
| ClusterRequest clusterRequest = createNiceMock(ClusterRequest.class); |
| |
| // requests |
| Set<ClusterRequest> setRequests = Collections.singleton(clusterRequest); |
| |
| KerberosHelper kerberosHelper = createStrictMock(KerberosHelper.class); |
| // expectations |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper); |
| expect(clusterRequest.getClusterId()).andReturn(1L).times(6); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).times(2); |
| expect(cluster.getClusterName()).andReturn("cluster").times(1); |
| |
| cluster.addSessionAttributes(anyObject(Map.class)); |
| expectLastCall().once(); |
| |
| // replay mocks |
| replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(actionManager, clusters, injector); |
| controller.updateClusters(setRequests, null); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| } |
| |
| /** |
| * Ensure that when the cluster security type updated from KERBEROS to KERBEROS, |
| * KerberosHandler.toggleKerberos IS NOT invoked |
| */ |
| |
| @Test |
| public void testUpdateClustersToggleKerberosReenable() throws Exception { |
| // member state mocks |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| Injector injector = createStrictMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| ActionManager actionManager = createNiceMock(ActionManager.class); |
| ClusterRequest clusterRequest = createNiceMock(ClusterRequest.class); |
| |
| // requests |
| Set<ClusterRequest> setRequests = Collections.singleton(clusterRequest); |
| |
| KerberosHelper kerberosHelper = createStrictMock(KerberosHelper.class); |
| // expectations |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper); |
| expect(clusterRequest.getClusterId()).andReturn(1L).times(6); |
| expect(clusterRequest.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes(); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).times(2); |
| expect(cluster.getClusterName()).andReturn("cluster").times(1); |
| expect(cluster.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes(); |
| |
| cluster.addSessionAttributes(anyObject(Map.class)); |
| expectLastCall().once(); |
| |
| expect(kerberosHelper.shouldExecuteCustomOperations(SecurityType.KERBEROS, null)) |
| .andReturn(false) |
| .once(); |
| expect(kerberosHelper.getForceToggleKerberosDirective(anyObject(Map.class))) |
| .andReturn(false) |
| .once(); |
| // Note: kerberosHelper.toggleKerberos is not called |
| |
| // replay mocks |
| replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(actionManager, clusters, injector); |
| controller.updateClusters(setRequests, null); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| } |
| /** |
| * Ensure that when the cluster security type updated from NONE to KERBEROS, KerberosHandler.toggleKerberos |
| * IS invoked |
| */ |
| @Test |
| public void testUpdateClustersToggleKerberosEnable() throws Exception { |
| // member state mocks |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| Injector injector = createStrictMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| ActionManager actionManager = createNiceMock(ActionManager.class); |
| ClusterRequest clusterRequest = createNiceMock(ClusterRequest.class); |
| |
| // requests |
| Set<ClusterRequest> setRequests = Collections.singleton(clusterRequest); |
| |
| KerberosHelper kerberosHelper = createStrictMock(KerberosHelper.class); |
| // expectations |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper); |
| expect(clusterRequest.getClusterId()).andReturn(1L).times(6); |
| expect(clusterRequest.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes(); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).times(2); |
| expect(cluster.getClusterName()).andReturn("cluster").times(1); |
| expect(cluster.getSecurityType()).andReturn(SecurityType.NONE).anyTimes(); |
| |
| cluster.addSessionAttributes(anyObject(Map.class)); |
| expectLastCall().once(); |
| |
| expect(kerberosHelper.shouldExecuteCustomOperations(SecurityType.KERBEROS, null)) |
| .andReturn(false) |
| .once(); |
| expect(kerberosHelper.getForceToggleKerberosDirective(null)) |
| .andReturn(false) |
| .once(); |
| expect(kerberosHelper.getManageIdentitiesDirective(null)) |
| .andReturn(null) |
| .once(); |
| expect(kerberosHelper.toggleKerberos(anyObject(Cluster.class), anyObject(SecurityType.class), anyObject(RequestStageContainer.class), anyBoolean())) |
| .andReturn(null) |
| .once(); |
| |
| // replay mocks |
| replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(actionManager, clusters, injector); |
| controller.updateClusters(setRequests, null); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| } |
| |
| /** |
| * Ensure that when the cluster security type updated from KERBEROS to NONE, KerberosHandler.toggleKerberos |
| * IS invoked |
| */ |
| @Test |
| public void testUpdateClustersToggleKerberosDisable_Default() throws Exception { |
| testUpdateClustersToggleKerberosDisable(null); |
| } |
| |
| /** |
| * Ensure that when the cluster security type updated from KERBEROS to NONE, KerberosHandler.toggleKerberos |
| * IS invoked and identities are not managed |
| */ |
| @Test |
| public void testUpdateClustersToggleKerberosDisable_NoManageIdentities() throws Exception { |
| testUpdateClustersToggleKerberosDisable(Boolean.FALSE); |
| } |
| |
| /** |
| * Ensure that when the cluster security type updated from KERBEROS to NONE, KerberosHandler.toggleKerberos |
| * IS invoked and identities are managed |
| */ |
| @Test |
| public void testUpdateClustersToggleKerberosDisable_ManageIdentities() throws Exception { |
| testUpdateClustersToggleKerberosDisable(Boolean.TRUE); |
| } |
| |
| /** |
| * Ensure that when the cluster security type updated from KERBEROS to NONE, KerberosHandler.toggleKerberos |
| * IS invoked |
| */ |
| private void testUpdateClustersToggleKerberosDisable(Boolean manageIdentities) throws Exception { |
| // member state mocks |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| Injector injector = createStrictMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| ActionManager actionManager = createNiceMock(ActionManager.class); |
| ClusterRequest clusterRequest = createNiceMock(ClusterRequest.class); |
| |
| // requests |
| Set<ClusterRequest> setRequests = Collections.singleton(clusterRequest); |
| |
| Capture<Boolean> manageIdentitiesCapture = new Capture<Boolean>(); |
| |
| KerberosHelper kerberosHelper = createStrictMock(KerberosHelper.class); |
| // expectations |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper); |
| expect(clusterRequest.getClusterId()).andReturn(1L).times(6); |
| expect(clusterRequest.getSecurityType()).andReturn(SecurityType.NONE).anyTimes(); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).times(2); |
| expect(cluster.getClusterName()).andReturn("cluster").times(1); |
| expect(cluster.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes(); |
| |
| cluster.addSessionAttributes(anyObject(Map.class)); |
| expectLastCall().once(); |
| |
| expect(kerberosHelper.shouldExecuteCustomOperations(SecurityType.NONE, null)) |
| .andReturn(false) |
| .once(); |
| expect(kerberosHelper.getForceToggleKerberosDirective(anyObject(Map.class))) |
| .andReturn(false) |
| .once(); |
| expect(kerberosHelper.getManageIdentitiesDirective(anyObject(Map.class))) |
| .andReturn(manageIdentities) |
| .once(); |
| expect(kerberosHelper.toggleKerberos(anyObject(Cluster.class), anyObject(SecurityType.class), anyObject(RequestStageContainer.class), captureBoolean(manageIdentitiesCapture))) |
| .andReturn(null) |
| .once(); |
| |
| // replay mocks |
| replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(actionManager, clusters, injector); |
| controller.updateClusters(setRequests, null); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertEquals(manageIdentities, manageIdentitiesCapture.getValue()); |
| verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| } |
| |
| /** |
| * Ensure that when the cluster security type updated from KERBEROS to NONE, KerberosHandler.toggleKerberos |
| * IS invoked |
| */ |
| @Test |
| public void testUpdateClustersToggleKerberos_Fail() throws Exception { |
| // member state mocks |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| Injector injector = createStrictMock(Injector.class); |
| Cluster cluster = createMock(Cluster.class); |
| ActionManager actionManager = createNiceMock(ActionManager.class); |
| ClusterRequest clusterRequest = createNiceMock(ClusterRequest.class); |
| |
| // requests |
| Set<ClusterRequest> setRequests = Collections.singleton(clusterRequest); |
| |
| KerberosHelper kerberosHelper = createStrictMock(KerberosHelper.class); |
| // expectations |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper); |
| expect(clusterRequest.getClusterId()).andReturn(1L).times(6); |
| expect(clusterRequest.getSecurityType()).andReturn(SecurityType.NONE).anyTimes(); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).times(2); |
| expect(cluster.getResourceId()).andReturn(1L).times(3); |
| expect(cluster.getClusterName()).andReturn("cluster").times(1); |
| expect(cluster.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes(); |
| expect(cluster.getCurrentClusterVersion()).andReturn(null).anyTimes(); |
| expect(cluster.getCurrentStackVersion()).andReturn(null).anyTimes(); |
| expect(cluster.getDesiredStackVersion()).andReturn(null).anyTimes(); |
| |
| cluster.setCurrentStackVersion(anyObject(StackId.class)); |
| expectLastCall().once(); |
| |
| cluster.setClusterName(anyObject(String.class)); |
| expectLastCall().once(); |
| |
| cluster.addSessionAttributes(anyObject(Map.class)); |
| expectLastCall().once(); |
| |
| expect(kerberosHelper.shouldExecuteCustomOperations(SecurityType.NONE, null)) |
| .andReturn(false) |
| .once(); |
| expect(kerberosHelper.getForceToggleKerberosDirective(anyObject(Map.class))) |
| .andReturn(false) |
| .once(); |
| expect(kerberosHelper.getManageIdentitiesDirective(anyObject(Map.class))) |
| .andReturn(null) |
| .once(); |
| expect(kerberosHelper.toggleKerberos(anyObject(Cluster.class), anyObject(SecurityType.class), anyObject(RequestStageContainer.class), anyBoolean())) |
| .andThrow(new IllegalArgumentException("bad args!")) |
| .once(); |
| |
| // replay mocks |
| replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(actionManager, clusters, injector); |
| |
| try { |
| controller.updateClusters(setRequests, null); |
| Assert.fail("IllegalArgumentException not thrown"); |
| } catch (IllegalArgumentException e) { |
| // This is expected |
| } |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, kerberosHelper); |
| } |
| |
| /** |
| * Ensure that RollbackException is thrown outside the updateClusters method |
| * when a unique constraint violation occurs. |
| */ |
| @Test |
| public void testUpdateClusters__RollbackException() throws Exception { |
| // member state mocks |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| Injector injector = createStrictMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| ActionManager actionManager = createNiceMock(ActionManager.class); |
| ClusterRequest clusterRequest = createNiceMock(ClusterRequest.class); |
| |
| // requests |
| Set<ClusterRequest> setRequests = Collections.singleton(clusterRequest); |
| |
| // expectations |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| expect(clusterRequest.getClusterName()).andReturn("clusterNew").times(3); |
| expect(clusterRequest.getClusterId()).andReturn(1L).times(6); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).times(2); |
| expect(cluster.getClusterName()).andReturn("clusterOld").times(1); |
| cluster.setClusterName("clusterNew"); |
| expectLastCall().andThrow(new RollbackException()); |
| |
| // replay mocks |
| replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(actionManager, clusters, injector); |
| try { |
| controller.updateClusters(setRequests, null); |
| fail("Expected RollbackException"); |
| } catch (RollbackException e) { |
| //expected |
| } |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager); |
| } |
| |
| @Test |
| public void testGetHostComponents() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| final Host host = createNiceMock(Host.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| final ServiceComponentHost componentHost = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHostResponse response = createNiceMock(ServiceComponentHostResponse.class); |
| |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| expect(maintHelper.getEffectiveState(componentHost)).andReturn(MaintenanceState.OFF).anyTimes(); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", "host1", null); |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper).anyTimes(); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster); |
| expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster)); |
| expect(clusters.getHostsForCluster((String) anyObject())).andReturn( |
| new HashMap<String, Host>() {{ |
| put("host1", host); |
| }}).anyTimes(); |
| |
| expect(cluster.getDesiredStackVersion()).andReturn(stack); |
| expect(stack.getStackName()).andReturn("stackName"); |
| expect(stack.getStackVersion()).andReturn("stackVersion"); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component1")).andReturn(component); |
| expect(component.getName()).andReturn("component1"); |
| expect(component.getServiceComponentHosts()).andReturn( |
| new HashMap<String, ServiceComponentHost>() {{ |
| put("host1", componentHost); |
| }}); |
| expect(componentHost.convertToResponse(null)).andReturn(response); |
| expect(componentHost.getHostName()).andReturn("host1").anyTimes(); |
| expect(maintHelper.getEffectiveState(componentHost, host)).andReturn(MaintenanceState.OFF); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, cluster, host, response, stack, |
| ambariMetaInfo, service, component, componentHost); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| Set<ServiceComponentHostResponse> setResponses = controller.getHostComponents(setRequests); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertEquals(1, setResponses.size()); |
| assertTrue(setResponses.contains(response)); |
| |
| verify(injector, clusters, cluster, host, response, stack, ambariMetaInfo, service, component, componentHost); |
| } |
| |
| @Test |
| public void testGetHostComponents___ServiceComponentHostNotFoundException() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| Host host = createNiceMock(Host.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", "host1", null); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster); |
| expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster)); |
| |
| expect(cluster.getDesiredStackVersion()).andReturn(stack); |
| expect(stack.getStackName()).andReturn("stackName"); |
| expect(stack.getStackVersion()).andReturn("stackVersion"); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component1")).andReturn(component); |
| expect(component.getName()).andReturn("component1").anyTimes(); |
| expect(component.getServiceComponentHosts()).andReturn(null); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, cluster, host, stack, ambariMetaInfo, |
| service, component); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| try { |
| controller.getHostComponents(setRequests); |
| fail("expected ServiceComponentHostNotFoundException"); |
| } catch (ServiceComponentHostNotFoundException e) { |
| //expected |
| } |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, component); |
| } |
| |
| @Test |
| public void testGetHostComponents___ServiceComponentHostFilteredByState() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| final Host host = createNiceMock(Host.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| final ServiceComponentHost componentHost1 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHostResponse response1 = createNiceMock(ServiceComponentHostResponse.class); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", "host1", null); |
| request1.setState("INSTALLED"); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| expect(maintHelper.getEffectiveState( |
| anyObject(ServiceComponentHost.class), |
| anyObject(Host.class))).andReturn(MaintenanceState.OFF).anyTimes(); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster); |
| expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster)); |
| expect(clusters.getHostsForCluster((String) anyObject())).andReturn( |
| new HashMap<String, Host>() {{ |
| put("host1", host); |
| }}).anyTimes(); |
| |
| expect(cluster.getDesiredStackVersion()).andReturn(stack); |
| expect(cluster.getClusterName()).andReturn("cl1"); |
| expect(stack.getStackName()).andReturn("stackName"); |
| expect(stack.getStackVersion()).andReturn("stackVersion"); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component1")).andReturn(component); |
| expect(component.getName()).andReturn("component1").anyTimes(); |
| expect(component.getServiceComponentHosts()).andReturn(new HashMap<String, ServiceComponentHost>() {{ |
| put("host1", componentHost1); |
| }}); |
| |
| expect(componentHost1.getState()).andReturn(State.INSTALLED); |
| expect(componentHost1.convertToResponse(null)).andReturn(response1); |
| expect(componentHost1.getHostName()).andReturn("host1"); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, cluster, host, stack, ambariMetaInfo, |
| service, component, componentHost1, response1); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| Set<ServiceComponentHostResponse> responses = controller.getHostComponents(setRequests); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertTrue(responses.size() == 1); |
| verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, component, componentHost1, response1); |
| } |
| |
| @Test |
| public void testGetHostComponents___OR_Predicate_ServiceComponentHostNotFoundException() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| final Host host = createNiceMock(Host.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| ServiceComponent component2 = createNiceMock(ServiceComponent.class); |
| ServiceComponent component3 = createNiceMock(ServiceComponent.class); |
| |
| final ServiceComponentHost componentHost1 = createNiceMock(ServiceComponentHost.class); |
| final ServiceComponentHost componentHost2 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHostResponse response1 = createNiceMock(ServiceComponentHostResponse.class); |
| ServiceComponentHostResponse response2 = createNiceMock(ServiceComponentHostResponse.class); |
| MaintenanceStateHelper stateHelper = createNiceMock(MaintenanceStateHelper.class); |
| expect(stateHelper.getEffectiveState( |
| anyObject(ServiceComponentHost.class), |
| anyObject(Host.class))).andReturn(MaintenanceState.OFF).anyTimes(); |
| |
| expect(clusters.getHostsForCluster((String) anyObject())).andReturn( |
| new HashMap<String, Host>() {{ |
| put("host1", host); |
| }}).anyTimes(); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", "host1", null); |
| |
| ServiceComponentHostRequest request2 = new ServiceComponentHostRequest( |
| "cluster1", null, "component2", "host1", null); |
| |
| ServiceComponentHostRequest request3 = new ServiceComponentHostRequest( |
| "cluster1", null, "component3", "host1", null); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| setRequests.add(request2); |
| setRequests.add(request3); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(stateHelper).anyTimes(); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster).times(3); |
| expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster)).anyTimes(); |
| expect(cluster.getService("service1")).andReturn(service).times(3); |
| |
| expect(cluster.getDesiredStackVersion()).andReturn(stack).anyTimes(); |
| expect(stack.getStackName()).andReturn("stackName").anyTimes(); |
| expect(stack.getStackVersion()).andReturn("stackVersion").anyTimes(); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1"); |
| expect(service.getServiceComponent("component1")).andReturn(component); |
| expect(component.getName()).andReturn("component1"); |
| expect(component.getServiceComponentHosts()).andReturn( |
| new HashMap<String, ServiceComponentHost>() {{ |
| put("host1", componentHost1); |
| }}); |
| expect(componentHost1.convertToResponse(null)).andReturn(response1); |
| expect(componentHost1.getHostName()).andReturn("host1"); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component2")).andReturn("service1"); |
| expect(service.getServiceComponent("component2")).andReturn(component2); |
| expect(component2.getName()).andReturn("component2"); |
| expect(component2.getServiceComponentHosts()).andReturn(null); |
| expect(componentHost2.getHostName()).andReturn("host1"); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component3")).andReturn("service1"); |
| expect(service.getServiceComponent("component3")).andReturn(component3); |
| expect(component3.getName()).andReturn("component3"); |
| expect(component3.getServiceComponentHosts()).andReturn( |
| new HashMap<String, ServiceComponentHost>() {{ |
| put("host1", componentHost2); |
| }}); |
| expect(componentHost2.convertToResponse(null)).andReturn(response2); |
| |
| // replay mocks |
| replay(stateHelper, injector, clusters, cluster, host, stack, |
| ambariMetaInfo, service, component, component2, component3, componentHost1, |
| componentHost2, response1, response2); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| Set<ServiceComponentHostResponse> setResponses = controller.getHostComponents(setRequests); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertEquals(2, setResponses.size()); |
| assertTrue(setResponses.contains(response1)); |
| assertTrue(setResponses.contains(response2)); |
| |
| verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, component, component2, component3, |
| componentHost1, componentHost2, response1, response2); |
| } |
| |
| @Test |
| public void testGetHostComponents___OR_Predicate_ServiceNotFoundException() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| final Host host = createNiceMock(Host.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| ServiceComponent component2 = createNiceMock(ServiceComponent.class); |
| ServiceComponent component3 = createNiceMock(ServiceComponent.class); |
| |
| final ServiceComponentHost componentHost1 = createNiceMock(ServiceComponentHost.class); |
| final ServiceComponentHost componentHost2 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHostResponse response1 = createNiceMock(ServiceComponentHostResponse.class); |
| ServiceComponentHostResponse response2 = createNiceMock(ServiceComponentHostResponse.class); |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| expect(maintHelper.getEffectiveState( |
| anyObject(ServiceComponentHost.class), |
| anyObject(Host.class))).andReturn(MaintenanceState.OFF).anyTimes(); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", "host1", null); |
| |
| ServiceComponentHostRequest request2 = new ServiceComponentHostRequest( |
| "cluster1", null, "component2", "host1", null); |
| |
| ServiceComponentHostRequest request3 = new ServiceComponentHostRequest( |
| "cluster1", null, "component3", "host1", null); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| setRequests.add(request2); |
| setRequests.add(request3); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper).anyTimes(); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster).times(3); |
| expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster)).anyTimes(); |
| expect(cluster.getDesiredStackVersion()).andReturn(stack).anyTimes(); |
| expect(stack.getStackName()).andReturn("stackName").anyTimes(); |
| expect(stack.getStackVersion()).andReturn("stackVersion").anyTimes(); |
| expect(clusters.getHostsForCluster((String) anyObject())).andReturn( |
| new HashMap<String, Host>() {{ |
| put("host1", host); |
| }}).anyTimes(); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component1")).andReturn(component); |
| expect(component.getName()).andReturn("component1"); |
| expect(component.getServiceComponentHosts()).andReturn(new |
| HashMap<String, ServiceComponentHost>() {{ |
| put("host1", componentHost1); |
| }}); |
| expect(componentHost1.convertToResponse(null)).andReturn(response1); |
| expect(componentHost1.getHostName()).andReturn("host1"); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component2")).andReturn("service2"); |
| expect(cluster.getService("service2")).andThrow(new ServiceNotFoundException("cluster1", "service2")); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component3")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component3")).andReturn(component3); |
| expect(component3.getName()).andReturn("component3"); |
| expect(component3.getServiceComponentHosts()).andReturn(new |
| HashMap<String, ServiceComponentHost>() {{ |
| put("host1", componentHost2); |
| }}); |
| expect(componentHost2.convertToResponse(null)).andReturn(response2); |
| expect(componentHost2.getHostName()).andReturn("host1"); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, cluster, host, stack, ambariMetaInfo, |
| service, component, component2, component3, componentHost1, |
| componentHost2, response1, response2); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| Set<ServiceComponentHostResponse> setResponses = controller.getHostComponents(setRequests); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertEquals(2, setResponses.size()); |
| assertTrue(setResponses.contains(response1)); |
| assertTrue(setResponses.contains(response2)); |
| |
| verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, component, component2, component3, |
| componentHost1, componentHost2, response1, response2); |
| } |
| |
| @Test |
| public void testGetHostComponents___OR_Predicate_ServiceComponentNotFoundException() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| final Host host = createNiceMock(Host.class); |
| Service service = createNiceMock(Service.class); |
| Service service2 = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| ServiceComponent component2 = createNiceMock(ServiceComponent.class); |
| ServiceComponent component3 = createNiceMock(ServiceComponent.class); |
| |
| final ServiceComponentHost componentHost1 = createNiceMock(ServiceComponentHost.class); |
| final ServiceComponentHost componentHost2 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHostResponse response1 = createNiceMock(ServiceComponentHostResponse.class); |
| ServiceComponentHostResponse response2 = createNiceMock(ServiceComponentHostResponse.class); |
| |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| expect(maintHelper.getEffectiveState( |
| anyObject(ServiceComponentHost.class), |
| anyObject(Host.class))).andReturn(MaintenanceState.OFF).anyTimes(); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", "host1", null); |
| |
| ServiceComponentHostRequest request2 = new ServiceComponentHostRequest( |
| "cluster1", null, "component2", "host1", null); |
| |
| ServiceComponentHostRequest request3 = new ServiceComponentHostRequest( |
| "cluster1", null, "component3", "host1", null); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| setRequests.add(request2); |
| setRequests.add(request3); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper).anyTimes(); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster).times(3); |
| expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster)).anyTimes(); |
| expect(clusters.getHostsForCluster((String) anyObject())).andReturn( |
| new HashMap<String, Host>() {{ |
| put("host1", host); |
| }}).anyTimes(); |
| expect(cluster.getDesiredStackVersion()).andReturn(stack).anyTimes(); |
| expect(stack.getStackName()).andReturn("stackName").anyTimes(); |
| expect(stack.getStackVersion()).andReturn("stackVersion").anyTimes(); |
| |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component1")).andReturn(component); |
| expect(component.getName()).andReturn("component1"); |
| expect(component.getServiceComponentHosts()).andReturn( |
| new HashMap<String, ServiceComponentHost>() {{ |
| put("host1", componentHost1); |
| }}); |
| expect(componentHost1.convertToResponse(null)).andReturn(response1); |
| expect(componentHost1.getHostName()).andReturn("host1"); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component2")).andReturn("service2"); |
| expect(cluster.getService("service2")).andReturn(service2); |
| expect(service2.getServiceComponent("component2")). |
| andThrow(new ServiceComponentNotFoundException("cluster1", "service2", "component2")); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component3")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component3")).andReturn(component3); |
| expect(component3.getName()).andReturn("component3"); |
| expect(component3.getServiceComponentHosts()).andReturn( |
| new HashMap<String, ServiceComponentHost>() {{ |
| put("host1", componentHost2); |
| }}); |
| expect(componentHost2.convertToResponse(null)).andReturn(response2); |
| expect(componentHost2.getHostName()).andReturn("host1"); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, cluster, host, stack, ambariMetaInfo, |
| service, service2, component, component2, component3, componentHost1, |
| componentHost2, response1, response2); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| Set<ServiceComponentHostResponse> setResponses = controller.getHostComponents(setRequests); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertEquals(2, setResponses.size()); |
| assertTrue(setResponses.contains(response1)); |
| assertTrue(setResponses.contains(response2)); |
| |
| verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, service2, component, component2, component3, |
| componentHost1, componentHost2, response1, response2); |
| } |
| |
| @Test |
| public void testGetHostComponents___OR_Predicate_HostNotFoundException_hostProvidedInQuery() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| final Host host = createNiceMock(Host.class); |
| Service service = createNiceMock(Service.class); |
| Service service2 = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| ServiceComponent component2 = createNiceMock(ServiceComponent.class); |
| ServiceComponent component3 = createNiceMock(ServiceComponent.class); |
| |
| final ServiceComponentHost componentHost1 = createNiceMock(ServiceComponentHost.class); |
| final ServiceComponentHost componentHost2 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHostResponse response1 = createNiceMock(ServiceComponentHostResponse.class); |
| ServiceComponentHostResponse response2 = createNiceMock(ServiceComponentHostResponse.class); |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| expect(maintHelper.getEffectiveState( |
| anyObject(ServiceComponentHost.class), |
| anyObject(Host.class))).andReturn(MaintenanceState.OFF).anyTimes(); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", null, null); |
| |
| ServiceComponentHostRequest request2 = new ServiceComponentHostRequest( |
| "cluster1", null, "component2", "host2", null); |
| |
| ServiceComponentHostRequest request3 = new ServiceComponentHostRequest( |
| "cluster1", null, "component3", null, null); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| setRequests.add(request2); |
| setRequests.add(request3); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper).anyTimes(); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster).times(3); |
| expect(clusters.getHostsForCluster((String) anyObject())).andReturn( |
| new HashMap<String, Host>() {{ |
| put("host1", host); |
| }}).anyTimes(); |
| |
| expect(cluster.getDesiredStackVersion()).andReturn(stack).anyTimes(); |
| expect(stack.getStackName()).andReturn("stackName").anyTimes(); |
| expect(stack.getStackVersion()).andReturn("stackVersion").anyTimes(); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component1")).andReturn(component); |
| expect(component.getName()).andReturn("component1"); |
| expect(component.getServiceComponentHosts()).andReturn(Collections.singletonMap("foo", componentHost1)); |
| expect(componentHost1.convertToResponse(null)).andReturn(response1); |
| expect(componentHost1.getHostName()).andReturn("host1"); |
| |
| expect(clusters.getClustersForHost("host2")).andThrow(new HostNotFoundException("host2")); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component3")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component3")).andReturn(component3); |
| expect(component3.getName()).andReturn("component3"); |
| expect(component3.getServiceComponentHosts()).andReturn(Collections.singletonMap("foo", componentHost2)); |
| expect(componentHost2.convertToResponse(null)).andReturn(response2); |
| expect(componentHost2.getHostName()).andReturn("host1"); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, cluster, host, stack, ambariMetaInfo, |
| service, service2, component, component2, component3, componentHost1, |
| componentHost2, response1, response2); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| Set<ServiceComponentHostResponse> setResponses = controller.getHostComponents(setRequests); |
| Assert.assertNotNull(setResponses); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertEquals(2, setResponses.size()); |
| assertTrue(setResponses.contains(response1)); |
| assertTrue(setResponses.contains(response2)); |
| |
| verify(injector, clusters, cluster, host, stack, ambariMetaInfo, service, service2, component, component2, component3, |
| componentHost1, componentHost2, response1, response2); |
| } |
| |
| @Test |
| public void testGetHostComponents___OR_Predicate_HostNotFoundException_hostProvidedInURL() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", "host1", null); |
| |
| ServiceComponentHostRequest request2 = new ServiceComponentHostRequest( |
| "cluster1", null, "component2", "host1", null); |
| |
| ServiceComponentHostRequest request3 = new ServiceComponentHostRequest( |
| "cluster1", null, "component3", "host1", null); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| setRequests.add(request2); |
| setRequests.add(request3); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster); |
| expect(clusters.getClustersForHost("host1")).andThrow(new HostNotFoundException("host1")); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, cluster, stack, ambariMetaInfo); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| try { |
| controller.getHostComponents(setRequests); |
| fail("expected exception"); |
| } catch (AmbariException e) { |
| // expected |
| } |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| |
| verify(injector, clusters, cluster, stack, ambariMetaInfo); |
| } |
| |
| @Test |
| public void testGetHostComponents___OR_Predicate_ClusterNotFoundException() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", "host1", null); |
| |
| ServiceComponentHostRequest request2 = new ServiceComponentHostRequest( |
| "cluster1", null, "component2", "host2", null); |
| |
| ServiceComponentHostRequest request3 = new ServiceComponentHostRequest( |
| "cluster1", null, "component3", "host1", null); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| setRequests.add(request2); |
| setRequests.add(request3); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andThrow(new ClusterNotFoundException("cluster1")); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, stack, ambariMetaInfo); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| try { |
| controller.getHostComponents(setRequests); |
| fail("expected exception"); |
| } catch (ParentObjectNotFoundException e) { |
| //expected |
| } |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| |
| verify(injector, clusters, stack, ambariMetaInfo); |
| } |
| |
| @Test |
| public void testGetHostComponents___NullHostName() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent component = createNiceMock(ServiceComponent.class); |
| ServiceComponentHost componentHost1 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHost componentHost2 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHostResponse response1 = createNiceMock(ServiceComponentHostResponse.class); |
| ServiceComponentHostResponse response2 = createNiceMock(ServiceComponentHostResponse.class); |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| expect(maintHelper.getEffectiveState( |
| anyObject(ServiceComponentHost.class), |
| anyObject(Host.class))).andReturn(MaintenanceState.OFF).anyTimes(); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, "component1", null, null); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| |
| Map<String, ServiceComponentHost> mapHostComponents = new HashMap<String, ServiceComponentHost>(); |
| mapHostComponents.put("foo", componentHost1); |
| mapHostComponents.put("bar", componentHost2); |
| |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper).anyTimes(); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster); |
| expect(clusters.getHostsForCluster((String) anyObject())).andReturn( |
| new HashMap<String, Host>() {{ |
| put("host1", createNiceMock(Host.class)); |
| }}).anyTimes(); |
| expect(cluster.getDesiredStackVersion()).andReturn(stack); |
| expect(stack.getStackName()).andReturn("stackName"); |
| expect(stack.getStackVersion()).andReturn("stackVersion"); |
| |
| expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", "component1")).andReturn("service1"); |
| expect(cluster.getService("service1")).andReturn(service); |
| expect(service.getServiceComponent("component1")).andReturn(component); |
| expect(component.getName()).andReturn("component1").anyTimes(); |
| |
| expect(component.getServiceComponentHosts()).andReturn(mapHostComponents); |
| expect(componentHost1.convertToResponse(null)).andReturn(response1); |
| expect(componentHost2.convertToResponse(null)).andReturn(response2); |
| expect(componentHost1.getHostName()).andReturn("host1"); |
| expect(componentHost2.getHostName()).andReturn("host1"); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, cluster, response1, response2, |
| stack, ambariMetaInfo, service, component, componentHost1, componentHost2); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| Set<ServiceComponentHostResponse> setResponses = controller.getHostComponents(setRequests); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertEquals(2, setResponses.size()); |
| assertTrue(setResponses.contains(response1)); |
| assertTrue(setResponses.contains(response2)); |
| |
| verify(injector, clusters, cluster, response1, response2, stack, ambariMetaInfo, service, component, componentHost1, componentHost2); |
| } |
| |
| @Test |
| public void testGetHostComponents___NullHostName_NullComponentName() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| StackId stack = createNiceMock(StackId.class); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| Service service1 = createNiceMock(Service.class); |
| Service service2 = createNiceMock(Service.class); |
| ServiceComponent component1 = createNiceMock(ServiceComponent.class); |
| ServiceComponent component2 = createNiceMock(ServiceComponent.class); |
| ServiceComponentHost componentHost1 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHost componentHost2 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHost componentHost3 = createNiceMock(ServiceComponentHost.class); |
| ServiceComponentHostResponse response1 = createNiceMock(ServiceComponentHostResponse.class); |
| ServiceComponentHostResponse response2 = createNiceMock(ServiceComponentHostResponse.class); |
| ServiceComponentHostResponse response3 = createNiceMock(ServiceComponentHostResponse.class); |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| expect(maintHelper.getEffectiveState( |
| anyObject(ServiceComponentHost.class), |
| anyObject(Host.class))).andReturn(MaintenanceState.OFF).anyTimes(); |
| |
| // requests |
| ServiceComponentHostRequest request1 = new ServiceComponentHostRequest( |
| "cluster1", null, null, null, null); |
| |
| |
| Set<ServiceComponentHostRequest> setRequests = new HashSet<ServiceComponentHostRequest>(); |
| setRequests.add(request1); |
| |
| Map<String, Service> mapServices = new HashMap<String, Service>(); |
| mapServices.put("foo", service1); |
| mapServices.put("bar", service2); |
| |
| Map<String, ServiceComponentHost> mapHostComponents = new HashMap<String, ServiceComponentHost>(); |
| mapHostComponents.put("foo", componentHost1); |
| mapHostComponents.put("bar", componentHost2); |
| |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper).anyTimes(); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| // getHostComponent |
| expect(clusters.getCluster("cluster1")).andReturn(cluster); |
| expect(clusters.getHostsForCluster((String) anyObject())).andReturn( |
| new HashMap<String, Host>() {{ |
| put("host1", createNiceMock(Host.class)); |
| }}).anyTimes(); |
| |
| expect(cluster.getServices()).andReturn(mapServices); |
| expect(service1.getServiceComponents()).andReturn(Collections.singletonMap("foo", component1)); |
| expect(service2.getServiceComponents()).andReturn(Collections.singletonMap("bar", component2)); |
| |
| expect(component1.getName()).andReturn("component1").anyTimes(); |
| expect(component2.getName()).andReturn("component2").anyTimes(); |
| |
| expect(component1.getServiceComponentHosts()).andReturn(mapHostComponents); |
| expect(componentHost1.convertToResponse(null)).andReturn(response1); |
| expect(componentHost2.convertToResponse(null)).andReturn(response2); |
| expect(componentHost1.getHostName()).andReturn("host1"); |
| expect(componentHost2.getHostName()).andReturn("host1"); |
| expect(componentHost3.getHostName()).andReturn("host1"); |
| |
| expect(component2.getServiceComponentHosts()).andReturn(Collections.singletonMap("foobar", componentHost3)); |
| expect(componentHost3.convertToResponse(null)).andReturn(response3); |
| |
| // replay mocks |
| replay(maintHelper, injector, clusters, cluster, response1, response2, |
| response3, stack, ambariMetaInfo, service1, service2, component1, component2, |
| componentHost1, componentHost2, componentHost3); |
| |
| //test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| Set<ServiceComponentHostResponse> setResponses = controller.getHostComponents(setRequests); |
| |
| // assert and verify |
| assertSame(controller, controllerCapture.getValue()); |
| assertEquals(3, setResponses.size()); |
| assertTrue(setResponses.contains(response1)); |
| assertTrue(setResponses.contains(response2)); |
| assertTrue(setResponses.contains(response3)); |
| |
| verify(injector, clusters, cluster, response1, response2, response3, stack, ambariMetaInfo, service1, service2, |
| component1, component2, componentHost1, componentHost2, componentHost3); |
| } |
| |
| @Test |
| public void testPopulateServicePackagesInfo() throws Exception { |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| Injector injector = createStrictMock(Injector.class); |
| MaintenanceStateHelper maintHelper = createNiceMock(MaintenanceStateHelper.class); |
| |
| ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class); |
| Map<String, String> hostParams = new HashMap<String, String>(); |
| String osFamily = "testOSFamily"; |
| |
| Map<String, ServiceOsSpecific> osSpecifics = new HashMap<String, ServiceOsSpecific>(); |
| |
| ServiceOsSpecific.Package package1 = new ServiceOsSpecific.Package(); |
| package1.setName("testrpm1"); |
| ServiceOsSpecific.Package package2 = new ServiceOsSpecific.Package(); |
| package2.setName("testrpm2"); |
| ServiceOsSpecific.Package package3 = new ServiceOsSpecific.Package(); |
| package3.setName("testrpm3"); |
| |
| List<ServiceOsSpecific.Package> packageList1 = new ArrayList<ServiceOsSpecific.Package>(); |
| packageList1.add(package1); |
| List<ServiceOsSpecific.Package> packageList2 = new ArrayList<ServiceOsSpecific.Package>(); |
| packageList2.add(package2); |
| packageList2.add(package3); |
| |
| ServiceOsSpecific osSpecific1 = new ServiceOsSpecific("testOSFamily"); |
| osSpecific1.addPackages(packageList1); |
| ServiceOsSpecific osSpecific2 = new ServiceOsSpecific("testOSFamily1,testOSFamily,testOSFamily2"); |
| osSpecific2.addPackages(packageList2); |
| |
| osSpecifics.put("testOSFamily", osSpecific1); |
| osSpecifics.put("testOSFamily1,testOSFamily,testOSFamily2", osSpecific2); |
| |
| expect(serviceInfo.getOsSpecifics()).andReturn(osSpecifics); |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(maintHelper).anyTimes(); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| replay(maintHelper, injector, clusters, serviceInfo); |
| |
| AmbariManagementControllerImplTest.NestedTestClass nestedTestClass = this.new NestedTestClass(null, clusters, |
| injector); |
| |
| ServiceOsSpecific serviceOsSpecific = nestedTestClass.populateServicePackagesInfo(serviceInfo, hostParams, osFamily); |
| |
| assertEquals(serviceOsSpecific.getPackages().size(), 3); |
| } |
| |
| @Test |
| public void testCreateDefaultHostParams() throws Exception { |
| String clusterName = "c1"; |
| String SOME_STACK_NAME = "SomeStackName"; |
| String SOME_STACK_VERSION = "1.0"; |
| String MYSQL_JAR = "MYSQL_JAR"; |
| String JAVA_HOME = "javaHome"; |
| String JDK_NAME = "jdkName"; |
| String JCE_NAME = "jceName"; |
| String OJDBC_JAR_NAME = "OjdbcJarName"; |
| String SERVER_DB_NAME = "ServerDBName"; |
| Set<String> notManagedHdfsPathSet = new HashSet<>(Arrays.asList("/tmp", "/apps/falcon")); |
| Gson gson = new Gson(); |
| |
| ActionManager manager = createNiceMock(ActionManager.class); |
| StackId stackId = createNiceMock(StackId.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| Injector injector = createNiceMock(Injector.class); |
| Configuration configuration = createNiceMock(Configuration.class); |
| ClusterVersionDAO clusterVersionDAO = createNiceMock(ClusterVersionDAO.class); |
| ClusterVersionEntity clusterVersionEntity = createNiceMock(ClusterVersionEntity.class); |
| RepositoryVersionEntity repositoryVersionEntity = createNiceMock(RepositoryVersionEntity.class); |
| ConfigHelper configHelper = createNiceMock(ConfigHelper.class); |
| |
| Map<String, DesiredConfig> desiredConfigs = new HashMap<>(); |
| |
| expect(cluster.getClusterName()).andReturn(clusterName); |
| expect(cluster.getDesiredStackVersion()).andReturn(stackId); |
| expect(cluster.getDesiredConfigs()).andReturn(desiredConfigs); |
| expect(stackId.getStackName()).andReturn(SOME_STACK_NAME).anyTimes(); |
| expect(stackId.getStackVersion()).andReturn(SOME_STACK_VERSION).anyTimes(); |
| expect(configuration.getMySQLJarName()).andReturn(MYSQL_JAR); |
| expect(configuration.getJavaHome()).andReturn(JAVA_HOME); |
| expect(configuration.getJDKName()).andReturn(JDK_NAME); |
| expect(configuration.getJCEName()).andReturn(JCE_NAME); |
| expect(configuration.getOjdbcJarName()).andReturn(OJDBC_JAR_NAME); |
| expect(configuration.getServerDBName()).andReturn(SERVER_DB_NAME); |
| expect(configuration.getJavaVersion()).andReturn(8); |
| expect(configuration.areHostsSysPrepped()).andReturn("true"); |
| expect(configuration.getDatabaseConnectorNames()).andReturn(new HashMap<String, String>()).anyTimes(); |
| expect(configuration.getPreviousDatabaseConnectorNames()).andReturn(new HashMap<String, String>()).anyTimes(); |
| expect(clusterVersionDAO.findByClusterAndStateCurrent(clusterName)).andReturn(clusterVersionEntity).anyTimes(); |
| expect(clusterVersionEntity.getRepositoryVersion()).andReturn(repositoryVersionEntity).anyTimes(); |
| expect(repositoryVersionEntity.getVersion()).andReturn("1234").anyTimes(); |
| expect(configHelper.getPropertyValuesWithPropertyType(stackId, |
| PropertyInfo.PropertyType.NOT_MANAGED_HDFS_PATH, cluster, desiredConfigs)).andReturn( |
| notManagedHdfsPathSet); |
| |
| replay(manager, clusters, cluster, injector, stackId, configuration, clusterVersionDAO, clusterVersionEntity, |
| repositoryVersionEntity, configHelper); |
| |
| AmbariManagementControllerImpl ambariManagementControllerImpl = |
| createMockBuilder(AmbariManagementControllerImpl.class) |
| .addMockedMethod("getRcaParameters") |
| .withConstructor(manager, clusters, injector).createNiceMock(); |
| |
| expect(ambariManagementControllerImpl. |
| getRcaParameters()).andReturn(new HashMap<String, String>()); |
| replay(ambariManagementControllerImpl); |
| |
| // Inject configuration manually |
| Class<?> amciClass = AmbariManagementControllerImpl.class; |
| Field f = amciClass.getDeclaredField("configs"); |
| f.setAccessible(true); |
| f.set(ambariManagementControllerImpl, configuration); |
| |
| AmbariCustomCommandExecutionHelper helper = new AmbariCustomCommandExecutionHelper(); |
| Class<?> helperClass = AmbariCustomCommandExecutionHelper.class; |
| f = helperClass.getDeclaredField("managementController"); |
| f.setAccessible(true); |
| f.set(helper, ambariManagementControllerImpl); |
| |
| f = helperClass.getDeclaredField("configs"); |
| f.setAccessible(true); |
| f.set(helper, configuration); |
| |
| f = helperClass.getDeclaredField("clusterVersionDAO"); |
| f.setAccessible(true); |
| f.set(helper, clusterVersionDAO); |
| |
| f = helperClass.getDeclaredField("configHelper"); |
| f.setAccessible(true); |
| f.set(helper, configHelper); |
| |
| f = helperClass.getDeclaredField("gson"); |
| f.setAccessible(true); |
| f.set(helper, gson); |
| |
| Map<String, String> defaultHostParams = helper.createDefaultHostParams(cluster); |
| |
| assertEquals(defaultHostParams.size(), 16); |
| assertEquals(defaultHostParams.get(DB_DRIVER_FILENAME), MYSQL_JAR); |
| assertEquals(defaultHostParams.get(STACK_NAME), SOME_STACK_NAME); |
| assertEquals(defaultHostParams.get(STACK_VERSION), SOME_STACK_VERSION); |
| assertEquals("true", defaultHostParams.get(HOST_SYS_PREPPED)); |
| assertEquals("8", defaultHostParams.get(JAVA_VERSION)); |
| assertNotNull(defaultHostParams.get(NOT_MANAGED_HDFS_PATH_LIST)); |
| assertTrue(defaultHostParams.get(NOT_MANAGED_HDFS_PATH_LIST).contains("/tmp")); |
| } |
| |
| @Test |
| public void testSynchronizeLdapUsersAndGroups() throws Exception { |
| |
| Set<String> userSet = new HashSet<String>(); |
| userSet.add("user1"); |
| |
| Set<String> groupSet = new HashSet<String>(); |
| groupSet.add("group1"); |
| |
| Injector injector = Guice.createInjector(Modules.override(new InMemoryDefaultTestModule()).with(new MockModule())); |
| |
| // create mocks |
| |
| LdapBatchDto ldapBatchDto = createNiceMock(LdapBatchDto.class); |
| |
| |
| Capture<LdapBatchDto> ldapBatchDtoCapture = new Capture<LdapBatchDto>(); |
| |
| // set expectations |
| expect(ldapDataPopulator.synchronizeAllLdapUsers(capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); |
| expect(ldapDataPopulator.synchronizeAllLdapGroups(capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); |
| |
| expect(ldapDataPopulator.synchronizeExistingLdapUsers(capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); |
| expect(ldapDataPopulator.synchronizeExistingLdapGroups(capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); |
| |
| expect(ldapDataPopulator.synchronizeLdapUsers(eq(userSet), capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); |
| expect(ldapDataPopulator.synchronizeLdapGroups(eq(groupSet), capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); |
| |
| users.processLdapSync(capture(ldapBatchDtoCapture)); |
| expectLastCall().anyTimes(); |
| |
| //replay |
| replay(ldapDataPopulator, clusters, actionDBAccessor, ambariMetaInfo, users, ldapBatchDto); |
| |
| AmbariManagementControllerImpl controller = injector.getInstance(AmbariManagementControllerImpl.class); |
| |
| LdapSyncRequest userRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.ALL); |
| LdapSyncRequest groupRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.ALL); |
| |
| controller.synchronizeLdapUsersAndGroups(userRequest, groupRequest); |
| |
| userRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.EXISTING); |
| groupRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.EXISTING); |
| |
| controller.synchronizeLdapUsersAndGroups(userRequest, groupRequest); |
| |
| userRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC, userSet); |
| groupRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC, groupSet); |
| |
| controller.synchronizeLdapUsersAndGroups(userRequest, groupRequest); |
| |
| verify(ldapDataPopulator, clusters, users, ldapBatchDto); |
| } |
| |
| private void setAmbariMetaInfo(AmbariMetaInfo metaInfo, AmbariManagementController controller) throws NoSuchFieldException, IllegalAccessException { |
| //need to set private field 'ambariMetaInfo' which is injected at runtime |
| Class<?> c = controller.getClass(); |
| Field f = c.getDeclaredField("ambariMetaInfo"); |
| f.setAccessible(true); |
| f.set(controller, metaInfo); |
| } |
| |
| private class MockModule implements Module { |
| |
| @Override |
| public void configure(Binder binder) { |
| binder.bind(AmbariLdapDataPopulator.class).toInstance(ldapDataPopulator); |
| binder.bind(Clusters.class).toInstance(clusters); |
| binder.bind(ActionDBAccessorImpl.class).toInstance(actionDBAccessor); |
| binder.bind(AmbariMetaInfo.class).toInstance(ambariMetaInfo); |
| binder.bind(Users.class).toInstance(users); |
| binder.bind(AmbariSessionManager.class).toInstance(sessionManager); |
| } |
| } |
| |
| private class NestedTestClass extends AmbariManagementControllerImpl { |
| |
| public NestedTestClass(ActionManager actionManager, Clusters clusters, Injector injector) throws Exception { |
| super(actionManager, clusters, injector); |
| } |
| |
| public ServiceOsSpecific testPopulateServicePackagesInfo(ServiceInfo serviceInfo, Map<String, String> hostParams, |
| String osFamily) { |
| return super.populateServicePackagesInfo(serviceInfo, hostParams, osFamily); |
| } |
| |
| } |
| |
| @Test |
| public void testVerifyRepositories() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| RepositoryInfo dummyRepoInfo = new RepositoryInfo(); |
| dummyRepoInfo.setRepoName("repo_name"); |
| |
| expect(ambariMetaInfo.getRepository("stackName", "stackVersion", "redhat6", "repoId")).andReturn(dummyRepoInfo); |
| |
| Configuration configuration = createNiceMock(Configuration.class); |
| String[] suffices = {"/repodata/repomd.xml"}; |
| expect(configuration.getRepoValidationSuffixes("redhat6")).andReturn(suffices); |
| |
| // replay mocks |
| replay(injector, clusters, ambariMetaInfo, configuration); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| // Manually injected |
| Class<?> c = controller.getClass(); |
| Field f = c.getDeclaredField("configs"); |
| f.setAccessible(true); |
| f.set(controller, configuration); |
| |
| Set<RepositoryRequest> requests = new HashSet<RepositoryRequest>(); |
| RepositoryRequest request = new RepositoryRequest("stackName", "stackVersion", "redhat6", "repoId"); |
| request.setBaseUrl("file:///some/repo"); |
| requests.add(request); |
| |
| // A wrong file path is passed and IllegalArgumentException is expected |
| try { |
| controller.verifyRepositories(requests); |
| Assert.fail("IllegalArgumentException is expected"); |
| } catch (IllegalArgumentException e) { |
| Assert.assertEquals("Could not access base url . file:///some/repo/repodata/repomd.xml . ", e.getMessage()); |
| } |
| |
| verify(injector, clusters, ambariMetaInfo, configuration); |
| } |
| |
| @Test |
| public void testRegisterRackChange() throws Exception { |
| // member state mocks |
| Injector injector = createStrictMock(Injector.class); |
| Cluster cluster = createNiceMock(Cluster.class); |
| Service service = createNiceMock(Service.class); |
| ServiceComponent serviceComponent = createNiceMock(ServiceComponent.class); |
| ServiceComponentHost serviceComponentHost = createNiceMock(ServiceComponentHost.class); |
| StackId stackId = createNiceMock(StackId.class); |
| Capture<AmbariManagementController> controllerCapture = new Capture<AmbariManagementController>(); |
| |
| // expectations |
| // constructor init |
| injector.injectMembers(capture(controllerCapture)); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| |
| RepositoryInfo dummyRepoInfo = new RepositoryInfo(); |
| dummyRepoInfo.setRepoName("repo_name"); |
| |
| expect(clusters.getCluster("c1")).andReturn(cluster).anyTimes(); |
| expect(cluster.getCurrentStackVersion()).andReturn(stackId); |
| expect(service.getName()).andReturn("HDFS").anyTimes(); |
| |
| Map<String, ServiceComponent> serviceComponents = new HashMap<String, ServiceComponent>(); |
| serviceComponents.put("NAMENODE", serviceComponent); |
| expect(service.getServiceComponents()).andReturn(serviceComponents).anyTimes(); |
| |
| |
| Map<String, ServiceComponentHost> schMap = new HashMap<String, ServiceComponentHost>(); |
| schMap.put("host1", serviceComponentHost); |
| expect(serviceComponent.getServiceComponentHosts()).andReturn(schMap).anyTimes(); |
| |
| serviceComponentHost.setRestartRequired(true); |
| |
| Set<String> services = new HashSet<String>(); |
| services.add("HDFS"); |
| |
| expect(ambariMetaInfo.getRackSensitiveServicesNames(null, null)).andReturn(services); |
| |
| Map<String, Service> serviceMap = new HashMap<String, Service>(); |
| |
| serviceMap.put("HDFS", service); |
| expect(cluster.getServices()).andReturn(serviceMap).anyTimes(); |
| |
| // replay mocks |
| replay(injector, cluster, clusters, ambariMetaInfo, service, serviceComponent, serviceComponentHost, stackId); |
| |
| // test |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| |
| controller.registerRackChange("c1"); |
| |
| verify(injector, cluster, clusters, ambariMetaInfo, service, serviceComponent, serviceComponentHost, stackId); |
| } |
| |
| @Test |
| public void testCreateClusterWithRepository() throws Exception { |
| Injector injector = createNiceMock(Injector.class); |
| |
| ClusterVersionDAO clusterVersionDAO = createNiceMock(ClusterVersionDAO.class); |
| expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class), |
| anyObject(StackId.class), anyObject(String.class))).andReturn(null).once(); |
| |
| RepositoryVersionEntity repoVersion = createNiceMock(RepositoryVersionEntity.class); |
| RepositoryVersionDAO repoVersionDAO = createNiceMock(RepositoryVersionDAO.class); |
| expect(repoVersionDAO.findByStackAndVersion(anyObject(StackId.class), |
| anyObject(String.class))).andReturn(repoVersion).anyTimes(); |
| |
| expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null).atLeastOnce(); |
| expect(injector.getInstance(Gson.class)).andReturn(null); |
| expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)); |
| expect(injector.getInstance(ClusterVersionDAO.class)).andReturn(clusterVersionDAO); |
| |
| Cluster cluster = createNiceMock(Cluster.class); |
| expect(cluster.getDesiredStackVersion()).andReturn(new StackId("HDP-2.1")).atLeastOnce(); |
| |
| // this getting called one time means the cluster version is getting created |
| cluster.createClusterVersion(anyObject(StackId.class), anyObject(String.class), anyObject(String.class), anyObject(RepositoryVersionState.class)); |
| expectLastCall().once(); |
| |
| expect(clusters.getCluster("c1")).andReturn(cluster).atLeastOnce(); |
| |
| StackInfo stackInfo = createNiceMock(StackInfo.class); |
| expect(stackInfo.getWidgetsDescriptorFileLocation()).andReturn(null).once(); |
| |
| expect(ambariMetaInfo.getStack("HDP", "2.1")).andReturn(stackInfo).atLeastOnce(); |
| |
| replay(injector, clusters, ambariMetaInfo, stackInfo, cluster, repoVersionDAO, repoVersion, clusterVersionDAO); |
| |
| AmbariManagementController controller = new AmbariManagementControllerImpl(null, clusters, injector); |
| setAmbariMetaInfo(ambariMetaInfo, controller); |
| Class<?> c = controller.getClass(); |
| |
| Field f = c.getDeclaredField("repositoryVersionDAO"); |
| f.setAccessible(true); |
| f.set(controller, repoVersionDAO); |
| |
| Properties p = new Properties(); |
| p.setProperty("", ""); |
| Configuration configuration = new Configuration(p); |
| f = c.getDeclaredField("configs"); |
| f.setAccessible(true); |
| f.set(controller, configuration); |
| |
| ClusterRequest cr = new ClusterRequest(null, "c1", "HDP-2.1", null); |
| cr.setRepositoryVersion("2.1.1.0-1234"); |
| controller.createCluster(cr); |
| |
| // verification |
| verify(injector, clusters, ambariMetaInfo, stackInfo, cluster, repoVersionDAO, repoVersion, clusterVersionDAO); |
| } |
| |
| |
| } |