| 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<DependencyInfo>(); |
| |
| 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<DependencyInfo>(); |
| |
| 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<DependencyInfo>(); |
| |
| 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<DependencyInfo>(); |
| |
| 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<DependencyInfo>(); |
| |
| 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<DependencyInfo>(); |
| |
| 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); |
| } |
| } |
| } |