|
@@ -0,0 +1,501 @@
|
|
|
+/*
|
|
|
+ * 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.update;
|
|
|
+
|
|
|
+
|
|
|
+import com.google.inject.AbstractModule;
|
|
|
+import com.google.inject.Guice;
|
|
|
+import com.google.inject.Injector;
|
|
|
+import org.apache.ambari.server.AmbariException;
|
|
|
+import org.apache.ambari.server.controller.AmbariManagementController;
|
|
|
+import org.apache.ambari.server.orm.DBAccessor;
|
|
|
+import org.apache.ambari.server.orm.dao.AlertDefinitionDAO;
|
|
|
+import org.apache.ambari.server.orm.dao.AlertDispatchDAO;
|
|
|
+import org.apache.ambari.server.orm.dao.AlertsDAO;
|
|
|
+import org.apache.ambari.server.orm.dao.ClusterDAO;
|
|
|
+import org.apache.ambari.server.orm.dao.HostDAO;
|
|
|
+import org.apache.ambari.server.orm.entities.AlertCurrentEntity;
|
|
|
+import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
|
|
|
+import org.apache.ambari.server.orm.entities.AlertHistoryEntity;
|
|
|
+import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
|
|
|
+import org.apache.ambari.server.orm.entities.ClusterEntity;
|
|
|
+import org.apache.ambari.server.orm.entities.HostEntity;
|
|
|
+import org.apache.ambari.server.orm.entities.StackEntity;
|
|
|
+import org.apache.ambari.server.state.Cluster;
|
|
|
+import org.apache.ambari.server.state.Clusters;
|
|
|
+import org.apache.ambari.server.state.Config;
|
|
|
+import org.apache.ambari.server.state.Host;
|
|
|
+import org.apache.ambari.server.state.stack.OsFamily;
|
|
|
+import org.easymock.EasyMockSupport;
|
|
|
+import org.junit.Test;
|
|
|
+
|
|
|
+import javax.persistence.EntityManager;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.locks.Lock;
|
|
|
+import java.util.concurrent.locks.ReadWriteLock;
|
|
|
+
|
|
|
+import static org.easymock.EasyMock.anyString;
|
|
|
+import static org.easymock.EasyMock.createNiceMock;
|
|
|
+import static org.easymock.EasyMock.expect;
|
|
|
+import static org.easymock.EasyMock.expectLastCall;
|
|
|
+
|
|
|
+public class HostUpdateHelperTest {
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testValidateHostChanges_Success() throws Exception {
|
|
|
+ EasyMockSupport easyMockSupport = new EasyMockSupport();
|
|
|
+ final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
|
|
|
+ Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
|
|
|
+ Cluster mockCluster = easyMockSupport.createNiceMock(Cluster.class);
|
|
|
+ Host host1 = easyMockSupport.createNiceMock(Host.class);
|
|
|
+ Host host2 = easyMockSupport.createNiceMock(Host.class);
|
|
|
+ Map<String, Map<String, String>> clusterHostsToChange = new HashMap<>();
|
|
|
+ Map<String, String> hosts = new HashMap<>();
|
|
|
+ List<Host> clusterHosts = new ArrayList<>();
|
|
|
+
|
|
|
+ final Injector mockInjector = Guice.createInjector(new AbstractModule() {
|
|
|
+ @Override
|
|
|
+ protected void configure() {
|
|
|
+ bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ clusterHosts.add(host1);
|
|
|
+ clusterHosts.add(host2);
|
|
|
+
|
|
|
+ hosts.put("host1","host10");
|
|
|
+ hosts.put("host2","host11");
|
|
|
+
|
|
|
+ clusterHostsToChange.put("cl1", hosts);
|
|
|
+
|
|
|
+ expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
|
|
|
+ expect(mockClusters.getCluster("cl1")).andReturn(mockCluster).once();
|
|
|
+ expect(mockCluster.getHosts()).andReturn(clusterHosts).once();
|
|
|
+ expect(host1.getHostName()).andReturn("host1");
|
|
|
+ expect(host2.getHostName()).andReturn("host2");
|
|
|
+
|
|
|
+ HostUpdateHelper hostUpdateHelper = new HostUpdateHelper(null, null, mockInjector);
|
|
|
+
|
|
|
+ hostUpdateHelper.setHostChangesFileMap(clusterHostsToChange);
|
|
|
+
|
|
|
+ easyMockSupport.replayAll();
|
|
|
+ hostUpdateHelper.validateHostChanges();
|
|
|
+ easyMockSupport.verifyAll();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testValidateHostChanges_InvalidHost() throws Exception {
|
|
|
+ EasyMockSupport easyMockSupport = new EasyMockSupport();
|
|
|
+ final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
|
|
|
+ Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
|
|
|
+ Cluster mockCluster = easyMockSupport.createNiceMock(Cluster.class);
|
|
|
+ Host host1 = easyMockSupport.createNiceMock(Host.class);
|
|
|
+ Host host2 = easyMockSupport.createNiceMock(Host.class);
|
|
|
+ Map<String, Map<String, String>> clusterHostsToChange = new HashMap<>();
|
|
|
+ Map<String, String> hosts = new HashMap<>();
|
|
|
+ List<Host> clusterHosts = new ArrayList<>();
|
|
|
+
|
|
|
+ final Injector mockInjector = Guice.createInjector(new AbstractModule() {
|
|
|
+ @Override
|
|
|
+ protected void configure() {
|
|
|
+ bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ clusterHosts.add(host1);
|
|
|
+ clusterHosts.add(host2);
|
|
|
+
|
|
|
+ hosts.put("host1","host10");
|
|
|
+ hosts.put("host3","host11");
|
|
|
+
|
|
|
+ clusterHostsToChange.put("cl1", hosts);
|
|
|
+
|
|
|
+ expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
|
|
|
+ expect(mockClusters.getCluster("cl1")).andReturn(mockCluster).once();
|
|
|
+ expect(mockCluster.getHosts()).andReturn(clusterHosts).once();
|
|
|
+ expect(host1.getHostName()).andReturn("host1");
|
|
|
+ expect(host2.getHostName()).andReturn("host2");
|
|
|
+
|
|
|
+ HostUpdateHelper hostUpdateHelper = new HostUpdateHelper(null, null, mockInjector);
|
|
|
+
|
|
|
+ hostUpdateHelper.setHostChangesFileMap(clusterHostsToChange);
|
|
|
+
|
|
|
+ easyMockSupport.replayAll();
|
|
|
+ try{
|
|
|
+ hostUpdateHelper.validateHostChanges();
|
|
|
+ } catch(AmbariException e) {
|
|
|
+ assert(e.getMessage().equals("Hostname(s): host3 was(were) not found."));
|
|
|
+ }
|
|
|
+
|
|
|
+ easyMockSupport.verifyAll();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testValidateHostChanges_InvalidCluster() throws Exception {
|
|
|
+ EasyMockSupport easyMockSupport = new EasyMockSupport();
|
|
|
+ final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
|
|
|
+ Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
|
|
|
+ Map<String, Map<String, String>> clusterHostsToChange = new HashMap<>();
|
|
|
+
|
|
|
+ final Injector mockInjector = Guice.createInjector(new AbstractModule() {
|
|
|
+ @Override
|
|
|
+ protected void configure() {
|
|
|
+ bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ clusterHostsToChange.put("cl1", null);
|
|
|
+
|
|
|
+ expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
|
|
|
+ expect(mockClusters.getCluster("cl1")).andReturn(null).once();
|
|
|
+
|
|
|
+ HostUpdateHelper hostUpdateHelper = new HostUpdateHelper(null, null, mockInjector);
|
|
|
+
|
|
|
+ hostUpdateHelper.setHostChangesFileMap(clusterHostsToChange);
|
|
|
+
|
|
|
+ easyMockSupport.replayAll();
|
|
|
+ try{
|
|
|
+ hostUpdateHelper.validateHostChanges();
|
|
|
+ } catch(AmbariException e) {
|
|
|
+ assert(e.getMessage().equals("Cluster cl1 was not found."));
|
|
|
+ }
|
|
|
+
|
|
|
+ easyMockSupport.verifyAll();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testValidateHostChanges_HostChangesNull() throws Exception {
|
|
|
+ HostUpdateHelper hostUpdateHelper = new HostUpdateHelper(null, null, null);
|
|
|
+
|
|
|
+ hostUpdateHelper.setHostChangesFileMap(null);
|
|
|
+
|
|
|
+ try{
|
|
|
+ hostUpdateHelper.validateHostChanges();
|
|
|
+ } catch(AmbariException e) {
|
|
|
+ assert(e.getMessage().equals("File with host names changes is null or empty"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testUpdateHostsInConfigurations() throws AmbariException {
|
|
|
+ EasyMockSupport easyMockSupport = new EasyMockSupport();
|
|
|
+ final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
|
|
|
+ final ClusterDAO mockClusterDAO = easyMockSupport.createNiceMock(ClusterDAO.class);
|
|
|
+ final EntityManager entityManager = createNiceMock(EntityManager.class);
|
|
|
+ final DBAccessor dbAccessor = createNiceMock(DBAccessor.class);
|
|
|
+ Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
|
|
|
+ Cluster mockCluster = easyMockSupport.createNiceMock(Cluster.class);
|
|
|
+ ClusterEntity mockClusterEntity1 = easyMockSupport.createNiceMock(ClusterEntity.class);
|
|
|
+ ClusterEntity mockClusterEntity2 = easyMockSupport.createNiceMock(ClusterEntity.class);
|
|
|
+ ClusterConfigEntity mockClusterConfigEntity1 = easyMockSupport.createNiceMock(ClusterConfigEntity.class);
|
|
|
+ ClusterConfigEntity mockClusterConfigEntity2 = easyMockSupport.createNiceMock(ClusterConfigEntity.class);
|
|
|
+ ClusterConfigEntity mockClusterConfigEntity3 = easyMockSupport.createNiceMock(ClusterConfigEntity.class);
|
|
|
+ ClusterConfigEntity mockClusterConfigEntity4 = easyMockSupport.createNiceMock(ClusterConfigEntity.class);
|
|
|
+ StackEntity mockStackEntity = easyMockSupport.createNiceMock(StackEntity.class);
|
|
|
+ ReadWriteLock mockReadWriteLock = easyMockSupport.createNiceMock(ReadWriteLock.class);
|
|
|
+ Lock mockLock = easyMockSupport.createNiceMock(Lock.class);
|
|
|
+ Map<String, Map<String, String>> clusterHostsToChange = new HashMap<>();
|
|
|
+ Map<String, String> hosts = new HashMap<>();
|
|
|
+ List<ClusterConfigEntity> clusterConfigEntities1 = new ArrayList<>();
|
|
|
+ List<ClusterConfigEntity> clusterConfigEntities2 = new ArrayList<>();
|
|
|
+
|
|
|
+ final Injector mockInjector = Guice.createInjector(new AbstractModule() {
|
|
|
+ @Override
|
|
|
+ protected void configure() {
|
|
|
+ bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
|
|
|
+ bind(DBAccessor.class).toInstance(dbAccessor);
|
|
|
+ bind(EntityManager.class).toInstance(entityManager);
|
|
|
+ bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
|
|
|
+ bind(ClusterDAO.class).toInstance(mockClusterDAO);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ hosts.put("host11","host55");
|
|
|
+ hosts.put("host5","host1");
|
|
|
+ hosts.put("host1","host5");
|
|
|
+ hosts.put("host55","host11");
|
|
|
+
|
|
|
+ clusterConfigEntities1.add(mockClusterConfigEntity1);
|
|
|
+ clusterConfigEntities1.add(mockClusterConfigEntity2);
|
|
|
+
|
|
|
+ clusterConfigEntities2.add(mockClusterConfigEntity3);
|
|
|
+ clusterConfigEntities2.add(mockClusterConfigEntity4);
|
|
|
+
|
|
|
+ clusterHostsToChange.put("cl1", hosts);
|
|
|
+
|
|
|
+ expect(mockClusterDAO.findByName("cl1")).andReturn(mockClusterEntity1).once();
|
|
|
+ expect(mockClusterDAO.findById(1L)).andReturn(mockClusterEntity2).atLeastOnce();
|
|
|
+
|
|
|
+ expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
|
|
|
+
|
|
|
+ expect(mockClusters.getCluster("cl1")).andReturn(mockCluster).once();
|
|
|
+ expect(mockCluster.getClusterGlobalLock()).andReturn(mockReadWriteLock).atLeastOnce();
|
|
|
+ expect(mockCluster.getClusterId()).andReturn(1L).atLeastOnce();
|
|
|
+
|
|
|
+ expect(mockReadWriteLock.writeLock()).andReturn(mockLock).atLeastOnce();
|
|
|
+
|
|
|
+ expect(mockClusterEntity1.getClusterConfigEntities()).andReturn(clusterConfigEntities1).atLeastOnce();
|
|
|
+ expect(mockClusterEntity2.getClusterConfigEntities()).andReturn(clusterConfigEntities2).atLeastOnce();
|
|
|
+
|
|
|
+ expect(mockClusterConfigEntity1.getStack()).andReturn(mockStackEntity).once();
|
|
|
+ expect(mockClusterConfigEntity1.getData()).andReturn("{\"testProperty1\" : \"testValue_host1\", " +
|
|
|
+ "\"testProperty2\" : \"testValue_host5\", \"testProperty3\" : \"testValue_host11\", " +
|
|
|
+ "\"testProperty4\" : \"testValue_host55\"}").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity1.getTag()).andReturn("testTag1").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity1.getType()).andReturn("testType1").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity1.getVersion()).andReturn(1L).atLeastOnce();
|
|
|
+
|
|
|
+ expect(mockClusterConfigEntity2.getStack()).andReturn(mockStackEntity).once();
|
|
|
+ expect(mockClusterConfigEntity2.getData()).andReturn("{\"testProperty5\" : \"test_host1_test_host5_test_host11_test_host55\"}").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity2.getTag()).andReturn("testTag2").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity2.getType()).andReturn("testType2").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity2.getVersion()).andReturn(2L).atLeastOnce();
|
|
|
+
|
|
|
+ expect(mockClusterConfigEntity3.getTag()).andReturn("testTag1").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity3.getType()).andReturn("testType1").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity3.getVersion()).andReturn(1L).atLeastOnce();
|
|
|
+
|
|
|
+ expect(mockClusterConfigEntity4.getTag()).andReturn("testTag2").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity4.getType()).andReturn("testType2").atLeastOnce();
|
|
|
+ expect(mockClusterConfigEntity4.getVersion()).andReturn(2L).atLeastOnce();
|
|
|
+
|
|
|
+ mockClusterConfigEntity3.setData("{\"testProperty4\":\"testValue_host11\",\"testProperty3\":\"testValue_host55\"," +
|
|
|
+ "\"testProperty2\":\"testValue_host1\",\"testProperty1\":\"testValue_host5\"}");
|
|
|
+ expectLastCall();
|
|
|
+
|
|
|
+ mockClusterConfigEntity4.setData("{\"testProperty5\":\"test_host5_test_host1_test_host55_test_host11\"}");
|
|
|
+ expectLastCall();
|
|
|
+
|
|
|
+ HostUpdateHelper hostUpdateHelper = new HostUpdateHelper(null, null, mockInjector);
|
|
|
+
|
|
|
+ hostUpdateHelper.setHostChangesFileMap(clusterHostsToChange);
|
|
|
+
|
|
|
+ easyMockSupport.replayAll();
|
|
|
+ hostUpdateHelper.updateHostsInConfigurations();
|
|
|
+ easyMockSupport.verifyAll();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testCheckForSecurity_SecureCluster() throws AmbariException {
|
|
|
+ EasyMockSupport easyMockSupport = new EasyMockSupport();
|
|
|
+ final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
|
|
|
+ Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
|
|
|
+ Cluster mockCluster = easyMockSupport.createNiceMock(Cluster.class);
|
|
|
+ Config mockConfig = easyMockSupport.createNiceMock(Config.class);
|
|
|
+ Map<String, Map<String, String>> clusterHostsToChange = new HashMap<>();
|
|
|
+ Map<String, String> clusterEnvProperties = new HashMap<>();
|
|
|
+
|
|
|
+ clusterHostsToChange.put("cl1", null);
|
|
|
+ clusterEnvProperties.put("security_enabled", "true");
|
|
|
+
|
|
|
+ final Injector mockInjector = Guice.createInjector(new AbstractModule() {
|
|
|
+ @Override
|
|
|
+ protected void configure() {
|
|
|
+ bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
|
|
|
+ expect(mockClusters.getCluster("cl1")).andReturn(mockCluster).once();
|
|
|
+ expect(mockCluster.getDesiredConfigByType("cluster-env")).andReturn(mockConfig).once();
|
|
|
+ expect(mockConfig.getProperties()).andReturn(clusterEnvProperties).once();
|
|
|
+
|
|
|
+ HostUpdateHelper hostUpdateHelper = new HostUpdateHelper(null, null, mockInjector);
|
|
|
+
|
|
|
+ hostUpdateHelper.setHostChangesFileMap(clusterHostsToChange);
|
|
|
+
|
|
|
+ easyMockSupport.replayAll();
|
|
|
+ try{
|
|
|
+ hostUpdateHelper.checkForSecurity();
|
|
|
+ } catch(AmbariException e) {
|
|
|
+ assert(e.getMessage().equals("Cluster(s) cl1 from file, is(are) in secure mode. Please, turn off security mode."));
|
|
|
+ }
|
|
|
+ easyMockSupport.verifyAll();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testCheckForSecurity_NonSecureCluster() throws AmbariException {
|
|
|
+ EasyMockSupport easyMockSupport = new EasyMockSupport();
|
|
|
+ final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
|
|
|
+ Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
|
|
|
+ Cluster mockCluster = easyMockSupport.createNiceMock(Cluster.class);
|
|
|
+ Config mockConfig = easyMockSupport.createNiceMock(Config.class);
|
|
|
+ Map<String, Map<String, String>> clusterHostsToChange = new HashMap<>();
|
|
|
+ Map<String, String> clusterEnvProperties = new HashMap<>();
|
|
|
+
|
|
|
+ clusterHostsToChange.put("cl1", null);
|
|
|
+ clusterEnvProperties.put("security_enabled", "false");
|
|
|
+
|
|
|
+ final Injector mockInjector = Guice.createInjector(new AbstractModule() {
|
|
|
+ @Override
|
|
|
+ protected void configure() {
|
|
|
+ bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
|
|
|
+ expect(mockClusters.getCluster("cl1")).andReturn(mockCluster).once();
|
|
|
+ expect(mockCluster.getDesiredConfigByType("cluster-env")).andReturn(mockConfig).once();
|
|
|
+ expect(mockConfig.getProperties()).andReturn(clusterEnvProperties).once();
|
|
|
+
|
|
|
+ HostUpdateHelper hostUpdateHelper = new HostUpdateHelper(null, null, mockInjector);
|
|
|
+
|
|
|
+ hostUpdateHelper.setHostChangesFileMap(clusterHostsToChange);
|
|
|
+
|
|
|
+ easyMockSupport.replayAll();
|
|
|
+ hostUpdateHelper.checkForSecurity();
|
|
|
+ easyMockSupport.verifyAll();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testUpdateHostsInDB() throws AmbariException {
|
|
|
+ EasyMockSupport easyMockSupport = new EasyMockSupport();
|
|
|
+ final HostDAO mockHostDAO = easyMockSupport.createNiceMock(HostDAO.class);
|
|
|
+ final ClusterDAO mockClusterDAO = easyMockSupport.createNiceMock(ClusterDAO.class);
|
|
|
+ final EntityManager entityManager = createNiceMock(EntityManager.class);
|
|
|
+ final DBAccessor dbAccessor = createNiceMock(DBAccessor.class);
|
|
|
+ ClusterEntity mockClusterEntity = easyMockSupport.createNiceMock(ClusterEntity.class);
|
|
|
+ HostEntity mockHostEntity1 = easyMockSupport.createNiceMock(HostEntity.class);
|
|
|
+ HostEntity mockHostEntity2 = easyMockSupport.createNiceMock(HostEntity.class);
|
|
|
+ Map<String, Map<String, String>> clusterHostsToChange = new HashMap<>();
|
|
|
+ List<HostEntity> hostEntities = new ArrayList<>();
|
|
|
+ Map<String, String> hosts = new HashMap<>();
|
|
|
+
|
|
|
+ hosts.put("host1","host10");
|
|
|
+ hosts.put("host2","host11");
|
|
|
+
|
|
|
+ clusterHostsToChange.put("cl1", hosts);
|
|
|
+
|
|
|
+ hostEntities.add(mockHostEntity1);
|
|
|
+ hostEntities.add(mockHostEntity2);
|
|
|
+
|
|
|
+ final Injector mockInjector = Guice.createInjector(new AbstractModule() {
|
|
|
+ @Override
|
|
|
+ protected void configure() {
|
|
|
+ bind(DBAccessor.class).toInstance(dbAccessor);
|
|
|
+ bind(EntityManager.class).toInstance(entityManager);
|
|
|
+ bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
|
|
|
+ bind(ClusterDAO.class).toInstance(mockClusterDAO);
|
|
|
+ bind(HostDAO.class).toInstance(mockHostDAO);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(mockClusterDAO.findByName("cl1")).andReturn(mockClusterEntity).once();
|
|
|
+ expect(mockClusterEntity.getHostEntities()).andReturn(hostEntities).once();
|
|
|
+ expect(mockHostEntity1.getHostName()).andReturn("host1").atLeastOnce();
|
|
|
+ expect(mockHostEntity2.getHostName()).andReturn("host2").atLeastOnce();
|
|
|
+
|
|
|
+ mockHostEntity1.setHostName("host10");
|
|
|
+ expectLastCall();
|
|
|
+
|
|
|
+ mockHostEntity2.setHostName("host11");
|
|
|
+ expectLastCall();
|
|
|
+
|
|
|
+ HostUpdateHelper hostUpdateHelper = new HostUpdateHelper(null, null, mockInjector);
|
|
|
+
|
|
|
+ hostUpdateHelper.setHostChangesFileMap(clusterHostsToChange);
|
|
|
+
|
|
|
+ easyMockSupport.replayAll();
|
|
|
+ hostUpdateHelper.updateHostsInDB();
|
|
|
+ easyMockSupport.verifyAll();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testUpdateHostsForAlertsInDB() throws AmbariException {
|
|
|
+ EasyMockSupport easyMockSupport = new EasyMockSupport();
|
|
|
+ final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
|
|
|
+ final AlertsDAO mockAlertsDAO = easyMockSupport.createNiceMock(AlertsDAO.class);
|
|
|
+ final AlertDefinitionDAO mockAlertDefinitionDAO = easyMockSupport.createNiceMock(AlertDefinitionDAO.class);
|
|
|
+ final AlertDispatchDAO mockAlertDispatchDAO = easyMockSupport.createNiceMock(AlertDispatchDAO.class);
|
|
|
+ final EntityManager entityManager = createNiceMock(EntityManager.class);
|
|
|
+ final DBAccessor dbAccessor = createNiceMock(DBAccessor.class);
|
|
|
+ final ClusterDAO mockClusterDAO = easyMockSupport.createNiceMock(ClusterDAO.class);
|
|
|
+ final Clusters mockClusters = easyMockSupport.createNiceMock(Clusters.class);
|
|
|
+ Cluster mockCluster = easyMockSupport.createNiceMock(Cluster.class);
|
|
|
+ AlertCurrentEntity mockAlertCurrentEntity1 = easyMockSupport.createNiceMock(AlertCurrentEntity.class);
|
|
|
+ AlertCurrentEntity mockAlertCurrentEntity2 = easyMockSupport.createNiceMock(AlertCurrentEntity.class);
|
|
|
+ AlertHistoryEntity mockAlertHistoryEntity1 = easyMockSupport.createNiceMock(AlertHistoryEntity.class);
|
|
|
+ AlertHistoryEntity mockAlertHistoryEntity2 = easyMockSupport.createNiceMock(AlertHistoryEntity.class);
|
|
|
+ AlertDefinitionEntity mockAlertDefinitionEntity = easyMockSupport.createNiceMock(AlertDefinitionEntity.class);
|
|
|
+ Map<String, Map<String, String>> clusterHostsToChange = new HashMap<>();
|
|
|
+ List<AlertCurrentEntity> alertCurrentEntities = new ArrayList<>();
|
|
|
+ List<AlertDefinitionEntity> alertDefinitionEntities = new ArrayList<>();
|
|
|
+ Map<String, Cluster> clusterMap = new HashMap<>();
|
|
|
+ Map<String, String> hosts = new HashMap<>();
|
|
|
+
|
|
|
+ hosts.put("host1","host10");
|
|
|
+ hosts.put("host2","host11");
|
|
|
+
|
|
|
+ clusterHostsToChange.put("cl1", hosts);
|
|
|
+
|
|
|
+ clusterMap.put("cl1", mockCluster);
|
|
|
+
|
|
|
+ alertCurrentEntities.add(mockAlertCurrentEntity1);
|
|
|
+ alertCurrentEntities.add(mockAlertCurrentEntity2);
|
|
|
+
|
|
|
+ alertDefinitionEntities.add(mockAlertDefinitionEntity);
|
|
|
+
|
|
|
+ final Injector mockInjector = Guice.createInjector(new AbstractModule() {
|
|
|
+ @Override
|
|
|
+ protected void configure() {
|
|
|
+ bind(DBAccessor.class).toInstance(dbAccessor);
|
|
|
+ bind(EntityManager.class).toInstance(entityManager);
|
|
|
+ bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
|
|
|
+ bind(ClusterDAO.class).toInstance(mockClusterDAO);
|
|
|
+ bind(Clusters.class).toInstance(mockClusters);
|
|
|
+ bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
|
|
|
+ bind(AlertDispatchDAO.class).toInstance(mockAlertDispatchDAO);
|
|
|
+ bind(AlertsDAO.class).toInstance(mockAlertsDAO);
|
|
|
+ bind(AlertDefinitionDAO.class).toInstance(mockAlertDefinitionDAO);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
|
|
|
+ expect(mockClusters.getClusters()).andReturn(clusterMap).once();
|
|
|
+ expect(mockCluster.getClusterId()).andReturn(1L).once();
|
|
|
+ expect(mockAlertsDAO.findCurrentByCluster(1L)).andReturn(alertCurrentEntities).once();
|
|
|
+ expect(mockAlertCurrentEntity1.getAlertHistory()).andReturn(mockAlertHistoryEntity1).once();
|
|
|
+ expect(mockAlertCurrentEntity2.getAlertHistory()).andReturn(mockAlertHistoryEntity2).once();
|
|
|
+ expect(mockAlertHistoryEntity1.getHostName()).andReturn("host1").atLeastOnce();
|
|
|
+ expect(mockAlertHistoryEntity2.getHostName()).andReturn("host2").atLeastOnce();
|
|
|
+ expect(mockAlertDefinitionDAO.findAll(1L)).andReturn(alertDefinitionEntities).once();
|
|
|
+
|
|
|
+ mockAlertHistoryEntity1.setHostName("host10");
|
|
|
+ expectLastCall();
|
|
|
+
|
|
|
+ mockAlertHistoryEntity2.setHostName("host11");
|
|
|
+ expectLastCall();
|
|
|
+
|
|
|
+ mockAlertDefinitionEntity.setHash(anyString());
|
|
|
+ expectLastCall();
|
|
|
+
|
|
|
+ HostUpdateHelper hostUpdateHelper = new HostUpdateHelper(null, null, mockInjector);
|
|
|
+
|
|
|
+ hostUpdateHelper.setHostChangesFileMap(clusterHostsToChange);
|
|
|
+
|
|
|
+ easyMockSupport.replayAll();
|
|
|
+ hostUpdateHelper.updateHostsForAlertsInDB();
|
|
|
+ easyMockSupport.verifyAll();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|