package org.apache.ambari.server.controller.internal; import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.isA; import static org.junit.Assert.assertEquals; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.StackConfigurationResponse; import org.apache.ambari.server.controller.StackLevelConfigurationRequest; import org.apache.ambari.server.controller.StackServiceResponse; import org.apache.ambari.server.state.DependencyInfo; import org.easymock.EasyMockSupport; import org.junit.Test; /** * 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. */ @SuppressWarnings("unchecked") public class BaseBlueprintProcessorTest { //todo: Move these tests to the correct location. //todo: BaseBluprintProcess no longer exists. @Test public void testStackRegisterConditionalDependencies() throws Exception { EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController mockMgmtController = mockSupport.createMock(AmbariManagementController.class); // setup mock expectations expect(mockMgmtController.getStackServices(isA(Set.class))).andReturn( Collections.<StackServiceResponse> emptySet()); expect(mockMgmtController.getStackLevelConfigurations((Set<StackLevelConfigurationRequest>) anyObject())).andReturn( Collections.<StackConfigurationResponse>emptySet()).anyTimes(); // test dependencies final DependencyInfo hCatDependency = new TestDependencyInfo("HIVE/HCAT"); final DependencyInfo yarnClientDependency = new TestDependencyInfo( "YARN/YARN_CLIENT"); final DependencyInfo tezClientDependency = new TestDependencyInfo( "TEZ/TEZ_CLIENT"); final DependencyInfo mapReduceTwoClientDependency = new TestDependencyInfo( "YARN/MAPREDUCE2_CLIENT"); final DependencyInfo oozieClientDependency = new TestDependencyInfo( "OOZIE/OOZIE_CLIENT"); mockSupport.replayAll(); // create stack for testing Stack testStack = new Stack("HDP", "2.1", mockMgmtController) { @Override public Collection<DependencyInfo> getDependenciesForComponent( String component) { // simulate the dependencies in a given stack by overriding this method if (component.equals("FAKE_MONITORING_SERVER")) { Set<DependencyInfo> setOfDependencies = new HashSet<>(); setOfDependencies.add(hCatDependency); setOfDependencies.add(yarnClientDependency); setOfDependencies.add(tezClientDependency); setOfDependencies.add(mapReduceTwoClientDependency); setOfDependencies.add(oozieClientDependency); return setOfDependencies; } return Collections.emptySet(); } /** * {@inheritDoc} */ @Override void registerConditionalDependencies() { // TODO Auto-generated method stub super.registerConditionalDependencies(); Map<DependencyInfo, String> dependencyConditionalServiceMap = getDependencyConditionalServiceMap(); Collection<DependencyInfo> monitoringDependencies = getDependenciesForComponent("FAKE_MONITORING_SERVER"); for (DependencyInfo dependency : monitoringDependencies) { if (dependency.getComponentName().equals("HCAT")) { dependencyConditionalServiceMap.put(dependency, "HIVE"); } else if (dependency.getComponentName().equals("OOZIE_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "OOZIE"); } else if (dependency.getComponentName().equals("YARN_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "YARN"); } else if (dependency.getComponentName().equals("TEZ_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "TEZ"); } else if (dependency.getComponentName().equals("MAPREDUCE2_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "MAPREDUCE2"); } } } }; assertEquals("Initial conditional dependency map should be empty", 0, testStack.getDependencyConditionalServiceMap().size()); testStack.registerConditionalDependencies(); assertEquals("Set of conditional service mappings is an incorrect size", 5, testStack.getDependencyConditionalServiceMap().size()); assertEquals("Incorrect service dependency for HCAT", "HIVE", testStack.getDependencyConditionalServiceMap().get(hCatDependency)); assertEquals( "Incorrect service dependency for YARN_CLIENT", "YARN", testStack.getDependencyConditionalServiceMap().get(yarnClientDependency)); assertEquals("Incorrect service dependency for TEZ_CLIENT", "TEZ", testStack.getDependencyConditionalServiceMap().get(tezClientDependency)); assertEquals( "Incorrect service dependency for MAPREDUCE2_CLIENT", "MAPREDUCE2", testStack.getDependencyConditionalServiceMap().get( mapReduceTwoClientDependency)); assertEquals( "Incorrect service dependency for OOZIE_CLIENT", "OOZIE", testStack.getDependencyConditionalServiceMap().get( oozieClientDependency)); mockSupport.verifyAll(); } @Test public void testStackRegisterConditionalDependenciesNoHCAT() throws Exception { EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController mockMgmtController = mockSupport.createMock(AmbariManagementController.class); // setup mock expectations expect(mockMgmtController.getStackServices(isA(Set.class))).andReturn( Collections.<StackServiceResponse> emptySet()); expect(mockMgmtController.getStackLevelConfigurations((Set<StackLevelConfigurationRequest>) anyObject())).andReturn( Collections.<StackConfigurationResponse>emptySet()).anyTimes(); // test dependencies final DependencyInfo yarnClientDependency = new TestDependencyInfo( "YARN/YARN_CLIENT"); final DependencyInfo tezClientDependency = new TestDependencyInfo( "TEZ/TEZ_CLIENT"); final DependencyInfo mapReduceTwoClientDependency = new TestDependencyInfo( "YARN/MAPREDUCE2_CLIENT"); final DependencyInfo oozieClientDependency = new TestDependencyInfo( "OOZIE/OOZIE_CLIENT"); mockSupport.replayAll(); // create stack for testing Stack testStack = new Stack("HDP", "2.1", mockMgmtController) { @Override public Collection<DependencyInfo> getDependenciesForComponent( String component) { // simulate the dependencies in a given stack by overriding this method if (component.equals("FAKE_MONITORING_SERVER")) { Set<DependencyInfo> setOfDependencies = new HashSet<>(); setOfDependencies.add(yarnClientDependency); setOfDependencies.add(tezClientDependency); setOfDependencies.add(mapReduceTwoClientDependency); setOfDependencies.add(oozieClientDependency); return setOfDependencies; } return Collections.emptySet(); } /** * {@inheritDoc} */ @Override void registerConditionalDependencies() { // TODO Auto-generated method stub super.registerConditionalDependencies(); Map<DependencyInfo, String> dependencyConditionalServiceMap = getDependencyConditionalServiceMap(); Collection<DependencyInfo> monitoringDependencies = getDependenciesForComponent("FAKE_MONITORING_SERVER"); for (DependencyInfo dependency : monitoringDependencies) { if (dependency.getComponentName().equals("HCAT")) { dependencyConditionalServiceMap.put(dependency, "HIVE"); } else if (dependency.getComponentName().equals("OOZIE_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "OOZIE"); } else if (dependency.getComponentName().equals("YARN_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "YARN"); } else if (dependency.getComponentName().equals("TEZ_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "TEZ"); } else if (dependency.getComponentName().equals("MAPREDUCE2_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "MAPREDUCE2"); } } } }; assertEquals("Initial conditional dependency map should be empty", 0, testStack.getDependencyConditionalServiceMap().size()); testStack.registerConditionalDependencies(); assertEquals("Set of conditional service mappings is an incorrect size", 4, testStack.getDependencyConditionalServiceMap().size()); assertEquals( "Incorrect service dependency for YARN_CLIENT", "YARN", testStack.getDependencyConditionalServiceMap().get(yarnClientDependency)); assertEquals("Incorrect service dependency for TEZ_CLIENT", "TEZ", testStack.getDependencyConditionalServiceMap().get(tezClientDependency)); assertEquals( "Incorrect service dependency for MAPREDUCE2_CLIENT", "MAPREDUCE2", testStack.getDependencyConditionalServiceMap().get( mapReduceTwoClientDependency)); assertEquals( "Incorrect service dependency for OOZIE_CLIENT", "OOZIE", testStack.getDependencyConditionalServiceMap().get( oozieClientDependency)); mockSupport.verifyAll(); } @Test public void testStackRegisterConditionalDependenciesNoYarnClient() throws Exception { EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController mockMgmtController = mockSupport.createMock(AmbariManagementController.class); // setup mock expectations expect(mockMgmtController.getStackServices(isA(Set.class))).andReturn( Collections.<StackServiceResponse> emptySet()); expect(mockMgmtController.getStackLevelConfigurations((Set<StackLevelConfigurationRequest>) anyObject())).andReturn( Collections.<StackConfigurationResponse>emptySet()).anyTimes(); // test dependencies final DependencyInfo hCatDependency = new TestDependencyInfo("HIVE/HCAT"); final DependencyInfo tezClientDependency = new TestDependencyInfo( "TEZ/TEZ_CLIENT"); final DependencyInfo mapReduceTwoClientDependency = new TestDependencyInfo( "YARN/MAPREDUCE2_CLIENT"); final DependencyInfo oozieClientDependency = new TestDependencyInfo( "OOZIE/OOZIE_CLIENT"); mockSupport.replayAll(); // create stack for testing Stack testStack = new Stack("HDP", "2.1", mockMgmtController) { @Override public Collection<DependencyInfo> getDependenciesForComponent( String component) { // simulate the dependencies in a given stack by overriding this method if (component.equals("FAKE_MONITORING_SERVER")) { Set<DependencyInfo> setOfDependencies = new HashSet<>(); setOfDependencies.add(hCatDependency); setOfDependencies.add(tezClientDependency); setOfDependencies.add(mapReduceTwoClientDependency); setOfDependencies.add(oozieClientDependency); return setOfDependencies; } return Collections.emptySet(); } /** * {@inheritDoc} */ @Override void registerConditionalDependencies() { // TODO Auto-generated method stub super.registerConditionalDependencies(); Map<DependencyInfo, String> dependencyConditionalServiceMap = getDependencyConditionalServiceMap(); Collection<DependencyInfo> monitoringDependencies = getDependenciesForComponent("FAKE_MONITORING_SERVER"); for (DependencyInfo dependency : monitoringDependencies) { if (dependency.getComponentName().equals("HCAT")) { dependencyConditionalServiceMap.put(dependency, "HIVE"); } else if (dependency.getComponentName().equals("OOZIE_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "OOZIE"); } else if (dependency.getComponentName().equals("YARN_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "YARN"); } else if (dependency.getComponentName().equals("TEZ_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "TEZ"); } else if (dependency.getComponentName().equals("MAPREDUCE2_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "MAPREDUCE2"); } } } }; assertEquals("Initial conditional dependency map should be empty", 0, testStack.getDependencyConditionalServiceMap().size()); testStack.registerConditionalDependencies(); assertEquals("Set of conditional service mappings is an incorrect size", 4, testStack.getDependencyConditionalServiceMap().size()); assertEquals("Incorrect service dependency for HCAT", "HIVE", testStack.getDependencyConditionalServiceMap().get(hCatDependency)); assertEquals("Incorrect service dependency for TEZ_CLIENT", "TEZ", testStack.getDependencyConditionalServiceMap().get(tezClientDependency)); assertEquals( "Incorrect service dependency for MAPREDUCE2_CLIENT", "MAPREDUCE2", testStack.getDependencyConditionalServiceMap().get( mapReduceTwoClientDependency)); assertEquals( "Incorrect service dependency for OOZIE_CLIENT", "OOZIE", testStack.getDependencyConditionalServiceMap().get( oozieClientDependency)); mockSupport.verifyAll(); } @Test public void testStackRegisterConditionalDependenciesNoTezClient() throws Exception { EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController mockMgmtController = mockSupport.createMock(AmbariManagementController.class); // setup mock expectations expect(mockMgmtController.getStackServices(isA(Set.class))).andReturn( Collections.<StackServiceResponse> emptySet()); expect(mockMgmtController.getStackLevelConfigurations((Set<StackLevelConfigurationRequest>) anyObject())).andReturn( Collections.<StackConfigurationResponse>emptySet()).anyTimes(); // test dependencies final DependencyInfo hCatDependency = new TestDependencyInfo("HIVE/HCAT"); final DependencyInfo yarnClientDependency = new TestDependencyInfo( "YARN/YARN_CLIENT"); final DependencyInfo mapReduceTwoClientDependency = new TestDependencyInfo( "YARN/MAPREDUCE2_CLIENT"); final DependencyInfo oozieClientDependency = new TestDependencyInfo( "OOZIE/OOZIE_CLIENT"); mockSupport.replayAll(); // create stack for testing Stack testStack = new Stack("HDP", "2.1", mockMgmtController) { @Override public Collection<DependencyInfo> getDependenciesForComponent( String component) { // simulate the dependencies in a given stack by overriding this method if (component.equals("FAKE_MONITORING_SERVER")) { Set<DependencyInfo> setOfDependencies = new HashSet<>(); setOfDependencies.add(hCatDependency); setOfDependencies.add(yarnClientDependency); setOfDependencies.add(mapReduceTwoClientDependency); setOfDependencies.add(oozieClientDependency); return setOfDependencies; } return Collections.emptySet(); } /** * {@inheritDoc} */ @Override void registerConditionalDependencies() { // TODO Auto-generated method stub super.registerConditionalDependencies(); Map<DependencyInfo, String> dependencyConditionalServiceMap = getDependencyConditionalServiceMap(); Collection<DependencyInfo> monitoringDependencies = getDependenciesForComponent("FAKE_MONITORING_SERVER"); for (DependencyInfo dependency : monitoringDependencies) { if (dependency.getComponentName().equals("HCAT")) { dependencyConditionalServiceMap.put(dependency, "HIVE"); } else if (dependency.getComponentName().equals("OOZIE_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "OOZIE"); } else if (dependency.getComponentName().equals("YARN_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "YARN"); } else if (dependency.getComponentName().equals("TEZ_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "TEZ"); } else if (dependency.getComponentName().equals("MAPREDUCE2_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "MAPREDUCE2"); } } } }; assertEquals("Initial conditional dependency map should be empty", 0, testStack.getDependencyConditionalServiceMap().size()); testStack.registerConditionalDependencies(); assertEquals("Set of conditional service mappings is an incorrect size", 4, testStack.getDependencyConditionalServiceMap().size()); assertEquals("Incorrect service dependency for HCAT", "HIVE", testStack.getDependencyConditionalServiceMap().get(hCatDependency)); assertEquals( "Incorrect service dependency for YARN_CLIENT", "YARN", testStack.getDependencyConditionalServiceMap().get(yarnClientDependency)); assertEquals( "Incorrect service dependency for MAPREDUCE2_CLIENT", "MAPREDUCE2", testStack.getDependencyConditionalServiceMap().get( mapReduceTwoClientDependency)); assertEquals( "Incorrect service dependency for OOZIE_CLIENT", "OOZIE", testStack.getDependencyConditionalServiceMap().get( oozieClientDependency)); mockSupport.verifyAll(); } @Test public void testStackRegisterConditionalDependenciesNoMapReduceClient() throws Exception { EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController mockMgmtController = mockSupport.createMock(AmbariManagementController.class); // setup mock expectations expect(mockMgmtController.getStackServices(isA(Set.class))).andReturn( Collections.<StackServiceResponse> emptySet()); expect(mockMgmtController.getStackLevelConfigurations((Set<StackLevelConfigurationRequest>) anyObject())).andReturn( Collections.<StackConfigurationResponse>emptySet()).anyTimes(); // test dependencies final DependencyInfo hCatDependency = new TestDependencyInfo("HIVE/HCAT"); final DependencyInfo yarnClientDependency = new TestDependencyInfo( "YARN/YARN_CLIENT"); final DependencyInfo tezClientDependency = new TestDependencyInfo( "TEZ/TEZ_CLIENT"); final DependencyInfo oozieClientDependency = new TestDependencyInfo( "OOZIE/OOZIE_CLIENT"); mockSupport.replayAll(); // create stack for testing Stack testStack = new Stack("HDP", "2.1", mockMgmtController) { @Override public Collection<DependencyInfo> getDependenciesForComponent( String component) { // simulate the dependencies in a given stack by overriding this method if (component.equals("FAKE_MONITORING_SERVER")) { Set<DependencyInfo> setOfDependencies = new HashSet<>(); setOfDependencies.add(hCatDependency); setOfDependencies.add(yarnClientDependency); setOfDependencies.add(tezClientDependency); setOfDependencies.add(oozieClientDependency); return setOfDependencies; } return Collections.emptySet(); } /** * {@inheritDoc} */ @Override void registerConditionalDependencies() { // TODO Auto-generated method stub super.registerConditionalDependencies(); Map<DependencyInfo, String> dependencyConditionalServiceMap = getDependencyConditionalServiceMap(); Collection<DependencyInfo> monitoringDependencies = getDependenciesForComponent("FAKE_MONITORING_SERVER"); for (DependencyInfo dependency : monitoringDependencies) { if (dependency.getComponentName().equals("HCAT")) { dependencyConditionalServiceMap.put(dependency, "HIVE"); } else if (dependency.getComponentName().equals("OOZIE_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "OOZIE"); } else if (dependency.getComponentName().equals("YARN_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "YARN"); } else if (dependency.getComponentName().equals("TEZ_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "TEZ"); } else if (dependency.getComponentName().equals("MAPREDUCE2_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "MAPREDUCE2"); } } } }; assertEquals("Initial conditional dependency map should be empty", 0, testStack.getDependencyConditionalServiceMap().size()); testStack.registerConditionalDependencies(); assertEquals("Set of conditional service mappings is an incorrect size", 4, testStack.getDependencyConditionalServiceMap().size()); assertEquals("Incorrect service dependency for HCAT", "HIVE", testStack.getDependencyConditionalServiceMap().get(hCatDependency)); assertEquals( "Incorrect service dependency for YARN_CLIENT", "YARN", testStack.getDependencyConditionalServiceMap().get(yarnClientDependency)); assertEquals("Incorrect service dependency for TEZ_CLIENT", "TEZ", testStack.getDependencyConditionalServiceMap().get(tezClientDependency)); assertEquals( "Incorrect service dependency for OOZIE_CLIENT", "OOZIE", testStack.getDependencyConditionalServiceMap().get( oozieClientDependency)); mockSupport.verifyAll(); } @Test public void testStackRegisterConditionalDependenciesNoOozieClient() throws Exception { EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController mockMgmtController = mockSupport.createMock(AmbariManagementController.class); // setup mock expectations expect(mockMgmtController.getStackServices(isA(Set.class))).andReturn( Collections.<StackServiceResponse> emptySet()); expect(mockMgmtController.getStackLevelConfigurations((Set<StackLevelConfigurationRequest>) anyObject())).andReturn( Collections.<StackConfigurationResponse>emptySet()).anyTimes(); // test dependencies final DependencyInfo hCatDependency = new TestDependencyInfo("HIVE/HCAT"); final DependencyInfo yarnClientDependency = new TestDependencyInfo( "YARN/YARN_CLIENT"); final DependencyInfo tezClientDependency = new TestDependencyInfo( "TEZ/TEZ_CLIENT"); final DependencyInfo mapReduceTwoClientDependency = new TestDependencyInfo( "YARN/MAPREDUCE2_CLIENT"); mockSupport.replayAll(); // create stack for testing Stack testStack = new Stack("HDP", "2.1", mockMgmtController) { @Override public Collection<DependencyInfo> getDependenciesForComponent( String component) { // simulate the dependencies in a given stack by overriding this method if (component.equals("FAKE_MONITORING_SERVER")) { Set<DependencyInfo> setOfDependencies = new HashSet<>(); setOfDependencies.add(hCatDependency); setOfDependencies.add(yarnClientDependency); setOfDependencies.add(tezClientDependency); setOfDependencies.add(mapReduceTwoClientDependency); return setOfDependencies; } return Collections.emptySet(); } /** * {@inheritDoc} */ @Override void registerConditionalDependencies() { // TODO Auto-generated method stub super.registerConditionalDependencies(); Map<DependencyInfo, String> dependencyConditionalServiceMap = getDependencyConditionalServiceMap(); Collection<DependencyInfo> monitoringDependencies = getDependenciesForComponent("FAKE_MONITORING_SERVER"); for (DependencyInfo dependency : monitoringDependencies) { if (dependency.getComponentName().equals("HCAT")) { dependencyConditionalServiceMap.put(dependency, "HIVE"); } else if (dependency.getComponentName().equals("OOZIE_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "OOZIE"); } else if (dependency.getComponentName().equals("YARN_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "YARN"); } else if (dependency.getComponentName().equals("TEZ_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "TEZ"); } else if (dependency.getComponentName().equals("MAPREDUCE2_CLIENT")) { dependencyConditionalServiceMap.put(dependency, "MAPREDUCE2"); } } } }; assertEquals("Initial conditional dependency map should be empty", 0, testStack.getDependencyConditionalServiceMap().size()); testStack.registerConditionalDependencies(); assertEquals("Set of conditional service mappings is an incorrect size", 4, testStack.getDependencyConditionalServiceMap().size()); assertEquals("Incorrect service dependency for HCAT", "HIVE", testStack.getDependencyConditionalServiceMap().get(hCatDependency)); assertEquals( "Incorrect service dependency for YARN_CLIENT", "YARN", testStack.getDependencyConditionalServiceMap().get(yarnClientDependency)); assertEquals("Incorrect service dependency for TEZ_CLIENT", "TEZ", testStack.getDependencyConditionalServiceMap().get(tezClientDependency)); assertEquals( "Incorrect service dependency for MAPREDUCE2_CLIENT", "MAPREDUCE2", testStack.getDependencyConditionalServiceMap().get( mapReduceTwoClientDependency)); mockSupport.verifyAll(); } //todo: validate method moved // @Test // public void testValidationOverrideForSecondaryNameNodeWithHA() throws Exception { // EasyMockSupport mockSupport = new EasyMockSupport(); // // AmbariManagementController mockController = // mockSupport.createMock(AmbariManagementController.class); // // AmbariMetaInfo mockMetaInfo = // mockSupport.createMock(AmbariMetaInfo.class); // // BaseBlueprintProcessor.stackInfo = mockMetaInfo; // // ServiceInfo serviceInfo = new ServiceInfo(); // serviceInfo.setName("HDFS"); // // StackServiceResponse stackServiceResponse = // new StackServiceResponse(serviceInfo); // // ComponentInfo componentInfo = new ComponentInfo(); // componentInfo.setName("SECONDARY_NAMENODE"); // // simulate the stack requirements that there // // always be one SECONDARY_NAMENODE per cluster // componentInfo.setCardinality("1"); // // StackServiceComponentResponse stackComponentResponse = // new StackServiceComponentResponse(componentInfo); // // ComponentInfo componentInfoNameNode = new ComponentInfo(); // componentInfoNameNode.setName("NAMENODE"); // componentInfo.setCardinality("1-2"); // StackServiceComponentResponse stackServiceComponentResponseTwo = // new StackServiceComponentResponse(componentInfoNameNode); // // Set<StackServiceComponentResponse> responses = // new HashSet<StackServiceComponentResponse>(); // responses.add(stackComponentResponse); // responses.add(stackServiceComponentResponseTwo); // // expect(mockController.getStackServices(isA(Set.class))).andReturn( // Collections.singleton(stackServiceResponse)); // expect(mockController.getStackComponents(isA(Set.class))).andReturn( // responses); // expect(mockController.getStackConfigurations(isA(Set.class))).andReturn(Collections.<StackConfigurationResponse>emptySet()); // expect(mockController.getStackLevelConfigurations(isA(Set.class))).andReturn(Collections.<StackConfigurationResponse>emptySet()); // // expect(mockMetaInfo.getComponentDependencies("HDP", "2.0.6", "HDFS", "SECONDARY_NAMENODE")).andReturn(Collections.<DependencyInfo>emptyList()); // expect(mockMetaInfo.getComponentDependencies("HDP", "2.0.6", "HDFS", "NAMENODE")).andReturn(Collections.<DependencyInfo>emptyList()); // // // mockSupport.replayAll(); // // BaseBlueprintProcessor baseBlueprintProcessor = // new BaseBlueprintProcessor(Collections.<String>emptySet(), Collections.<Resource.Type, String>emptyMap(), mockController) { // @Override // protected Set<String> getPKPropertyIds() { // return null; // } // // @Override // public RequestStatus createResources(Request request) throws SystemException, UnsupportedPropertyException, ResourceAlreadyExistsException, NoSuchParentResourceException { // return null; // } // // @Override // public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { // return null; // } // // @Override // public RequestStatus updateResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { // return null; // } // // @Override // public RequestStatus deleteResources(Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { // return null; // } // }; // // HostGroupComponentEntity hostGroupComponentEntity = // new HostGroupComponentEntity(); // // don't include the SECONDARY_NAMENODE in this entity // hostGroupComponentEntity.setName("NAMENODE"); // // HostGroupEntity hostGroupEntity = // new HostGroupEntity(); // hostGroupEntity.setName("host-group-one"); // hostGroupEntity.setComponents(Collections.singleton(hostGroupComponentEntity)); // hostGroupEntity.setConfigurations(Collections.<HostGroupConfigEntity>emptyList()); // // // setup config entity to simulate the case of NameNode HA being enabled // BlueprintConfigEntity configEntity = // new BlueprintConfigEntity(); // configEntity.setConfigData("{\"dfs.nameservices\":\"mycluster\",\"key4\":\"value4\"}"); // configEntity.setType("hdfs-site"); // // BlueprintEntity testEntity = // new BlueprintEntity(); // testEntity.setBlueprintName("test-blueprint"); // testEntity.setStackName("HDP"); // testEntity.setStackVersion("2.0.6"); // testEntity.setHostGroups(Collections.singleton(hostGroupEntity)); // testEntity.setConfigurations(Collections.singleton(configEntity)); // // baseBlueprintProcessor.validateTopology(testEntity); // // mockSupport.verifyAll(); // } // @Test // public void testValidationOverrideForSecondaryNameNodeWithoutHA() throws Exception { // EasyMockSupport mockSupport = new EasyMockSupport(); // // AmbariManagementController mockController = // mockSupport.createMock(AmbariManagementController.class); // // AmbariMetaInfo mockMetaInfo = // mockSupport.createMock(AmbariMetaInfo.class); // // BaseBlueprintProcessor.stackInfo = mockMetaInfo; // // ServiceInfo serviceInfo = new ServiceInfo(); // serviceInfo.setName("HDFS"); // // StackServiceResponse stackServiceResponse = // new StackServiceResponse(serviceInfo); // // ComponentInfo componentInfo = new ComponentInfo(); // componentInfo.setName("SECONDARY_NAMENODE"); // // simulate the stack requirements that there // // always be one SECONDARY_NAMENODE per cluster // componentInfo.setCardinality("1"); // // StackServiceComponentResponse stackComponentResponse = // new StackServiceComponentResponse(componentInfo); // // ComponentInfo componentInfoNameNode = new ComponentInfo(); // componentInfoNameNode.setName("NAMENODE"); // componentInfo.setCardinality("1-2"); // StackServiceComponentResponse stackServiceComponentResponseTwo = // new StackServiceComponentResponse(componentInfoNameNode); // // Set<StackServiceComponentResponse> responses = // new HashSet<StackServiceComponentResponse>(); // responses.add(stackComponentResponse); // responses.add(stackServiceComponentResponseTwo); // // expect(mockController.getStackServices(isA(Set.class))).andReturn( // Collections.singleton(stackServiceResponse)); // expect(mockController.getStackComponents(isA(Set.class))).andReturn( // responses); // expect(mockController.getStackConfigurations(isA(Set.class))).andReturn(Collections.<StackConfigurationResponse>emptySet()); // expect(mockController.getStackLevelConfigurations(isA(Set.class))).andReturn(Collections.<StackConfigurationResponse>emptySet()); // // expect(mockMetaInfo.getComponentDependencies("HDP", "2.0.6", "HDFS", "SECONDARY_NAMENODE")).andReturn(Collections.<DependencyInfo>emptyList()); // expect(mockMetaInfo.getComponentDependencies("HDP", "2.0.6", "HDFS", "NAMENODE")).andReturn(Collections.<DependencyInfo>emptyList()); // // // mockSupport.replayAll(); // // BaseBlueprintProcessor baseBlueprintProcessor = // new BaseBlueprintProcessor(Collections.<String>emptySet(), Collections.<Resource.Type, String>emptyMap(), mockController) { // @Override // protected Set<String> getPKPropertyIds() { // return null; // } // // @Override // public RequestStatus createResources(Request request) throws SystemException, UnsupportedPropertyException, ResourceAlreadyExistsException, NoSuchParentResourceException { // return null; // } // // @Override // public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { // return null; // } // // @Override // public RequestStatus updateResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { // return null; // } // // @Override // public RequestStatus deleteResources(Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { // return null; // } // }; // // HostGroupComponentEntity hostGroupComponentEntity = // new HostGroupComponentEntity(); // // don't include the SECONDARY_NAMENODE in this entity // hostGroupComponentEntity.setName("NAMENODE"); // // HostGroupEntity hostGroupEntity = // new HostGroupEntity(); // hostGroupEntity.setName("host-group-one"); // hostGroupEntity.setComponents(Collections.singleton(hostGroupComponentEntity)); // hostGroupEntity.setConfigurations(Collections.<HostGroupConfigEntity>emptyList()); // // // // BlueprintEntity testEntity = // new BlueprintEntity(); // testEntity.setBlueprintName("test-blueprint"); // testEntity.setStackName("HDP"); // testEntity.setStackVersion("2.0.6"); // testEntity.setHostGroups(Collections.singleton(hostGroupEntity)); // testEntity.setConfigurations(Collections.<BlueprintConfigEntity>emptyList()); // // try { // baseBlueprintProcessor.validateTopology(testEntity); // fail("IllegalArgumentException should have been thrown"); // } catch (IllegalArgumentException expectedException) { // // expected exception // } // // mockSupport.verifyAll(); // } /** * Convenience class for easier setup/initialization of dependencies for unit * testing. */ private static class TestDependencyInfo extends DependencyInfo { TestDependencyInfo(String dependencyName) { setName(dependencyName); } } }