Repository: ambari Updated Branches: refs/heads/branch-feature-AMBARI-22457 096fedbd3 -> 1fce5650b
AMBARI-22480. Validate blueprint does not allow lzo enable without setup with license agreement. (Myroslav Papirkovskyy via swagle) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1fce5650 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1fce5650 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1fce5650 Branch: refs/heads/branch-feature-AMBARI-22457 Commit: 1fce5650ba92f68a49e8750369aea8e9d3dcf6bf Parents: 096fedb Author: Siddharth Wagle <swa...@hortonworks.com> Authored: Mon Nov 20 10:56:04 2017 -0800 Committer: Siddharth Wagle <swa...@hortonworks.com> Committed: Mon Nov 20 10:56:04 2017 -0800 ---------------------------------------------------------------------- .../internal/BlueprintResourceProvider.java | 36 +++++----- .../ambari/server/topology/Blueprint.java | 40 ++++++------ .../ambari/server/topology/BlueprintImpl.java | 17 ++--- .../server/topology/BlueprintValidator.java | 4 +- .../server/topology/BlueprintValidatorImpl.java | 21 +++++- .../server/topology/BlueprintImplTest.java | 69 ++++++++++++++++++-- .../topology/BlueprintValidatorImplTest.java | 18 +++-- 7 files changed, 143 insertions(+), 62 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/1fce5650/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java index 1c127c0..b313c8b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java @@ -18,11 +18,17 @@ package org.apache.ambari.server.controller.internal; -import com.google.common.base.Preconditions; -import com.google.common.base.Strings; -import com.google.gson.Gson; -import org.apache.ambari.server.orm.entities.BlueprintSettingEntity; -import org.apache.ambari.server.utils.SecretReference; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.DuplicateResourceException; import org.apache.ambari.server.api.services.AmbariMetaInfo; @@ -41,28 +47,24 @@ import org.apache.ambari.server.orm.dao.BlueprintDAO; import org.apache.ambari.server.orm.entities.BlueprintConfigEntity; import org.apache.ambari.server.orm.entities.BlueprintConfiguration; import org.apache.ambari.server.orm.entities.BlueprintEntity; +import org.apache.ambari.server.orm.entities.BlueprintSettingEntity; import org.apache.ambari.server.orm.entities.HostGroupComponentEntity; import org.apache.ambari.server.orm.entities.HostGroupEntity; import org.apache.ambari.server.orm.entities.StackEntity; import org.apache.ambari.server.stack.NoSuchStackException; -import org.apache.ambari.server.state.StackInfo; import org.apache.ambari.server.state.SecurityType; +import org.apache.ambari.server.state.StackInfo; import org.apache.ambari.server.topology.Blueprint; import org.apache.ambari.server.topology.BlueprintFactory; +import org.apache.ambari.server.topology.GPLLicenseNotAcceptedException; import org.apache.ambari.server.topology.InvalidTopologyException; import org.apache.ambari.server.topology.SecurityConfiguration; import org.apache.ambari.server.topology.SecurityConfigurationFactory; +import org.apache.ambari.server.utils.SecretReference; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; +import com.google.gson.Gson; /** @@ -514,7 +516,7 @@ public class BlueprintResourceProvider extends AbstractControllerResourceProvide try { blueprint.validateRequiredProperties(); - } catch (InvalidTopologyException e) { + } catch (InvalidTopologyException | GPLLicenseNotAcceptedException e) { throw new IllegalArgumentException("Blueprint configuration validation failed: " + e.getMessage(), e); } http://git-wip-us.apache.org/repos/asf/ambari/blob/1fce5650/ambari-server/src/main/java/org/apache/ambari/server/topology/Blueprint.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/Blueprint.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/Blueprint.java index c9dc728..8cacd22 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/topology/Blueprint.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/Blueprint.java @@ -18,12 +18,12 @@ package org.apache.ambari.server.topology; -import org.apache.ambari.server.controller.internal.Stack; -import org.apache.ambari.server.orm.entities.BlueprintEntity; - import java.util.Collection; import java.util.Map; +import org.apache.ambari.server.controller.internal.Stack; +import org.apache.ambari.server.orm.entities.BlueprintEntity; + /** * Blueprint representation. */ @@ -34,13 +34,13 @@ public interface Blueprint { * * @return blueprint name */ - public String getName(); + String getName(); /** * Get the hot groups contained in the blueprint. * @return map of host group name to host group */ - public Map<String, HostGroup> getHostGroups(); + Map<String, HostGroup> getHostGroups(); /** * Get a hostgroup specified by name. @@ -49,7 +49,7 @@ public interface Blueprint { * * @return the host group with the given name or null */ - public HostGroup getHostGroup(String name); + HostGroup getHostGroup(String name); /** * Get the Blueprint cluster scoped configuration. @@ -59,7 +59,7 @@ public interface Blueprint { * * @return blueprint cluster scoped configuration */ - public Configuration getConfiguration(); + Configuration getConfiguration(); /** * Get the Blueprint cluster scoped setting. @@ -68,14 +68,14 @@ public interface Blueprint { * * @return blueprint cluster scoped setting */ - public Setting getSetting(); + Setting getSetting(); /** * Get all of the services represented in the blueprint. * * @return collection of all represented service names */ - public Collection<String> getServices(); + Collection<String> getServices(); /** * Get the components that are included in the blueprint for the specified service. @@ -84,7 +84,7 @@ public interface Blueprint { * * @return collection of component names for the service. Will not return null. */ - public Collection<String> getComponents(String service); + Collection<String> getComponents(String service); /** * Get whether a component is enabled for auto start. @@ -94,7 +94,7 @@ public interface Blueprint { * * @return null if value is not specified; true or false if specified. */ - public String getRecoveryEnabled(String serviceName, String componentName); + String getRecoveryEnabled(String serviceName, String componentName); /** * Get whether a service is enabled for credential store use. @@ -103,20 +103,20 @@ public interface Blueprint { * * @return null if value is not specified; true or false if specified. */ - public String getCredentialStoreEnabled(String serviceName); + String getCredentialStoreEnabled(String serviceName); /** * Check if auto skip failure is enabled. * @return true if enabled, otherwise false. */ - public boolean shouldSkipFailure(); + boolean shouldSkipFailure(); /** * Get the stack associated with the blueprint. * * @return associated stack */ - public Stack getStack(); + Stack getStack(); /** * Get the host groups which contain components for the specified service. @@ -126,7 +126,7 @@ public interface Blueprint { * @return collection of host groups containing components for the specified service; * will not return null */ - public Collection<HostGroup> getHostGroupsForService(String service); + Collection<HostGroup> getHostGroupsForService(String service); /** * Get the host groups which contain the give component. @@ -135,23 +135,23 @@ public interface Blueprint { * * @return collection of host groups containing the specified component; will not return null */ - public Collection<HostGroup> getHostGroupsForComponent(String component); + Collection<HostGroup> getHostGroupsForComponent(String component); - public SecurityConfiguration getSecurity(); + SecurityConfiguration getSecurity(); /** * Validate the blueprint topology. * * @throws InvalidTopologyException if the topology is invalid */ - public void validateTopology() throws InvalidTopologyException; + void validateTopology() throws InvalidTopologyException; /** * Validate that the blueprint contains all of the required properties. * * @throws InvalidTopologyException if the blueprint doesn't contain all required properties */ - public void validateRequiredProperties() throws InvalidTopologyException; + void validateRequiredProperties() throws InvalidTopologyException, GPLLicenseNotAcceptedException; /** * @@ -166,5 +166,5 @@ public interface Blueprint { * * @return entity representation of the blueprint */ - public BlueprintEntity toEntity(); + BlueprintEntity toEntity(); } http://git-wip-us.apache.org/repos/asf/ambari/blob/1fce5650/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImpl.java index 1d917e0..06fd9f2 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImpl.java @@ -19,7 +19,13 @@ package org.apache.ambari.server.topology; -import com.google.gson.Gson; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.StackAccessException; import org.apache.ambari.server.controller.AmbariServer; @@ -36,12 +42,7 @@ import org.apache.ambari.server.stack.NoSuchStackException; import org.apache.ambari.server.state.ConfigHelper; import org.apache.commons.lang.StringUtils; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import com.google.gson.Gson; /** * Blueprint implementation. @@ -351,7 +352,7 @@ public class BlueprintImpl implements Blueprint { * @throws InvalidTopologyException if the blueprint configuration is invalid */ @Override - public void validateRequiredProperties() throws InvalidTopologyException { + public void validateRequiredProperties() throws InvalidTopologyException, GPLLicenseNotAcceptedException { validator.validateRequiredProperties(); } http://git-wip-us.apache.org/repos/asf/ambari/blob/1fce5650/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidator.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidator.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidator.java index 206d161..c201a7f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidator.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidator.java @@ -29,7 +29,7 @@ public interface BlueprintValidator { * * @throws InvalidTopologyException if the topology is invalid */ - public void validateTopology() throws InvalidTopologyException; + void validateTopology() throws InvalidTopologyException; /** * Validate that required properties are provided. @@ -37,5 +37,5 @@ public interface BlueprintValidator { * * @throws InvalidTopologyException if required properties are not set in blueprint */ - public void validateRequiredProperties() throws InvalidTopologyException; + void validateRequiredProperties() throws InvalidTopologyException, GPLLicenseNotAcceptedException; } http://git-wip-us.apache.org/repos/asf/ambari/blob/1fce5650/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidatorImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidatorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidatorImpl.java index 1aaa5ce..7b7f7d7 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidatorImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidatorImpl.java @@ -23,6 +23,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import org.apache.ambari.server.StaticallyInject; import org.apache.ambari.server.controller.internal.Stack; import org.apache.ambari.server.state.AutoDeployInfo; import org.apache.ambari.server.state.DependencyInfo; @@ -31,15 +32,24 @@ import org.apache.ambari.server.utils.VersionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.inject.Inject; + /** * Default blueprint validator. */ +@StaticallyInject public class BlueprintValidatorImpl implements BlueprintValidator { private static final Logger LOGGER = LoggerFactory.getLogger(BlueprintValidatorImpl.class); private final Blueprint blueprint; private final Stack stack; + public static final String LZO_CODEC_CLASS_PROPERTY_NAME = "io.compression.codec.lzo.class"; + public static final String LZO_CODEC_CLASS = "com.hadoop.compression.lzo.LzoCodec"; + + @Inject + private static org.apache.ambari.server.configuration.Configuration configuration; + public BlueprintValidatorImpl(Blueprint blueprint) { this.blueprint = blueprint; this.stack = blueprint.getStack(); @@ -80,13 +90,17 @@ public class BlueprintValidatorImpl implements BlueprintValidator { } @Override - public void validateRequiredProperties() throws InvalidTopologyException { + public void validateRequiredProperties() throws InvalidTopologyException, GPLLicenseNotAcceptedException { // we don't want to include default stack properties so we can't just use hostGroup full properties Map<String, Map<String, String>> clusterConfigurations = blueprint.getConfiguration().getProperties(); // we need to have real passwords, not references if (clusterConfigurations != null) { + + // need to reject blueprints that have LZO enabled if the Ambari Server hasn't been configured for it + boolean gplEnabled = configuration.getGplLicenseAccepted(); + StringBuilder errorMessage = new StringBuilder(); boolean containsSecretReferences = false; for (Map.Entry<String, Map<String, String>> configEntry : clusterConfigurations.entrySet()) { @@ -96,6 +110,11 @@ public class BlueprintValidatorImpl implements BlueprintValidator { String propertyName = propertyEntry.getKey(); String propertyValue = propertyEntry.getValue(); if (propertyValue != null) { + if (!gplEnabled && configType.equals("core-site") && propertyName.equals(LZO_CODEC_CLASS_PROPERTY_NAME) + && propertyValue.contains(LZO_CODEC_CLASS)) { + throw new GPLLicenseNotAcceptedException("Your Ambari server has not been configured to download LZO GPL software. " + + "Please refer to documentation to configure Ambari before proceeding."); + } if (SecretReference.isSecret(propertyValue)) { errorMessage.append(" Config:" + configType + " Property:" + propertyName + "\n"); containsSecretReferences = true; http://git-wip-us.apache.org/repos/asf/ambari/blob/1fce5650/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintImplTest.java index fdbc080..1a9fd1f 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintImplTest.java @@ -21,11 +21,13 @@ package org.apache.ambari.server.topology; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.mock; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.lang.reflect.Field; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -105,13 +107,14 @@ public class BlueprintImplTest { @Test public void testValidateConfigurations__basic_positive() throws Exception { + org.apache.ambari.server.configuration.Configuration serverConfig = setupConfigurationWithGPLLicense(true); expect(group1.getCardinality()).andReturn("1").atLeastOnce(); expect(group1.getComponents()).andReturn(Arrays.asList(new Component("c1"), new Component("c2"))).atLeastOnce(); expect(group2.getCardinality()).andReturn("1").atLeastOnce(); expect(group2.getComponents()).andReturn(Arrays.asList(new Component("c1"), new Component("c3"))).atLeastOnce(); expect(group2.getConfiguration()).andReturn(EMPTY_CONFIGURATION).atLeastOnce(); - replay(stack, group1, group2); + replay(stack, group1, group2, serverConfig); Map<String, String> category2Props = new HashMap<>(); properties.put("category2", category2Props); @@ -122,7 +125,7 @@ public class BlueprintImplTest { blueprint.validateRequiredProperties(); BlueprintEntity entity = blueprint.toEntity(); - verify(stack, group1, group2); + verify(stack, group1, group2, serverConfig); assertTrue(entity.getSecurityType() == SecurityType.KERBEROS); assertTrue(entity.getSecurityDescriptorReference().equals("testRef")); } @@ -133,6 +136,8 @@ public class BlueprintImplTest { Map<String, String> group2Category2Props = new HashMap<>(); group2Props.put("category2", group2Category2Props); group2Category2Props.put("prop2", "val"); + + org.apache.ambari.server.configuration.Configuration serverConfig = setupConfigurationWithGPLLicense(true); // set config for group2 which contains a required property Configuration group2Configuration = new Configuration(group2Props, EMPTY_ATTRIBUTES, configuration); expect(group2.getConfiguration()).andReturn(group2Configuration).atLeastOnce(); @@ -142,29 +147,67 @@ public class BlueprintImplTest { expect(group2.getCardinality()).andReturn("1").atLeastOnce(); expect(group2.getComponents()).andReturn(Arrays.asList(new Component("c1"), new Component("c3"))).atLeastOnce(); - replay(stack, group1, group2); + replay(stack, group1, group2, serverConfig); Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, null); blueprint.validateRequiredProperties(); BlueprintEntity entity = blueprint.toEntity(); - verify(stack, group1, group2); + verify(stack, group1, group2, serverConfig); assertTrue(entity.getSecurityType() == SecurityType.NONE); assertTrue(entity.getSecurityDescriptorReference() == null); } @Test(expected = InvalidTopologyException.class) - public void testValidateConfigurations__secretReference() throws InvalidTopologyException { + public void testValidateConfigurations__secretReference() throws InvalidTopologyException, + GPLLicenseNotAcceptedException, NoSuchFieldException, IllegalAccessException { Map<String, Map<String, String>> group2Props = new HashMap<>(); Map<String, String> group2Category2Props = new HashMap<>(); + + org.apache.ambari.server.configuration.Configuration serverConfig = setupConfigurationWithGPLLicense(true); group2Props.put("category2", group2Category2Props); group2Category2Props.put("prop2", "val"); hdfsProps.put("secret", "SECRET:hdfs-site:1:test"); - replay(stack, group1, group2); + replay(stack, group1, group2, serverConfig); Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, null); blueprint.validateRequiredProperties(); - verify(stack, group1, group2); + verify(stack, group1, group2, serverConfig); + } + + @Test(expected = GPLLicenseNotAcceptedException.class) + public void testValidateConfigurations__gplIsNotAllowed() throws InvalidTopologyException, + GPLLicenseNotAcceptedException, NoSuchFieldException, IllegalAccessException { + Map<String, Map<String, String>> lzoProperties = new HashMap<>(); + lzoProperties.put("core-site", new HashMap<String, String>(){{ + put(BlueprintValidatorImpl.LZO_CODEC_CLASS_PROPERTY_NAME, BlueprintValidatorImpl.LZO_CODEC_CLASS); + }}); + Configuration lzoUsageConfiguration = new Configuration(lzoProperties, EMPTY_ATTRIBUTES, EMPTY_CONFIGURATION); + + org.apache.ambari.server.configuration.Configuration serverConfig = setupConfigurationWithGPLLicense(false); + replay(stack, group1, group2, serverConfig); + + Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, lzoUsageConfiguration, null); + blueprint.validateRequiredProperties(); + verify(stack, group1, group2, serverConfig); + } + + @Test + public void testValidateConfigurations__gplISAllowed() throws InvalidTopologyException, + GPLLicenseNotAcceptedException, NoSuchFieldException, IllegalAccessException { + Map<String, Map<String, String>> lzoProperties = new HashMap<>(); + lzoProperties.put("core-site", new HashMap<String, String>(){{ + put(BlueprintValidatorImpl.LZO_CODEC_CLASS_PROPERTY_NAME, BlueprintValidatorImpl.LZO_CODEC_CLASS); + }}); + Configuration lzoUsageConfiguration = new Configuration(lzoProperties, EMPTY_ATTRIBUTES, EMPTY_CONFIGURATION); + + org.apache.ambari.server.configuration.Configuration serverConfig = setupConfigurationWithGPLLicense(true); + expect(group2.getConfiguration()).andReturn(EMPTY_CONFIGURATION).atLeastOnce(); + replay(stack, group1, group2, serverConfig); + + Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, lzoUsageConfiguration, null); + blueprint.validateRequiredProperties(); + verify(stack, group1, group2, serverConfig); } @Test @@ -191,6 +234,18 @@ public class BlueprintImplTest { verify(stack, setting); } + public static org.apache.ambari.server.configuration.Configuration setupConfigurationWithGPLLicense(boolean isGPLAllowed) + throws NoSuchFieldException, IllegalAccessException { + org.apache.ambari.server.configuration.Configuration serverConfig = + mock(org.apache.ambari.server.configuration.Configuration.class); + expect(serverConfig.getGplLicenseAccepted()).andReturn(isGPLAllowed).atLeastOnce(); + + Field field = BlueprintValidatorImpl.class.getDeclaredField("configuration"); + field.setAccessible(true); + field.set(null, serverConfig); + return serverConfig; + } + //todo: ensure coverage for these existing tests // private void validateEntity(BlueprintEntity entity, boolean containsConfig) { http://git-wip-us.apache.org/repos/asf/ambari/blob/1fce5650/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintValidatorImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintValidatorImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintValidatorImplTest.java index ea6bee3..e7268e7 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintValidatorImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintValidatorImplTest.java @@ -18,6 +18,11 @@ package org.apache.ambari.server.topology; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; +import static org.easymock.EasyMock.verify; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -38,11 +43,6 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; - /** * BlueprintValidatorImpl unit tests. */ @@ -216,6 +216,8 @@ public class BlueprintValidatorImplTest { services.addAll(Arrays.asList("HIVE")); + org.apache.ambari.server.configuration.Configuration serverConfig = + BlueprintImplTest.setupConfigurationWithGPLLicense(true); expect(group1.getConfiguration()).andReturn(new Configuration(new HashMap(), new HashMap())).anyTimes(); expect(stack.getComponents("HIVE")).andReturn(Collections.singleton("HIVE_METASTORE")).anyTimes(); @@ -224,7 +226,7 @@ public class BlueprintValidatorImplTest { expect(blueprint.getHostGroupsForComponent("HIVE_METASTORE")).andReturn(Collections.singleton(group1)).anyTimes(); - replay(blueprint, stack, group1, group2, dependency1); + replay(blueprint, stack, group1, group2, dependency1, serverConfig); BlueprintValidator validator = new BlueprintValidatorImpl(blueprint); validator.validateRequiredProperties(); } @@ -239,6 +241,8 @@ public class BlueprintValidatorImplTest { services.addAll(Arrays.asList("OOZIE")); + org.apache.ambari.server.configuration.Configuration serverConfig = + BlueprintImplTest.setupConfigurationWithGPLLicense(true); expect(group1.getConfiguration()).andReturn(new Configuration(new HashMap(), new HashMap())).anyTimes(); expect(stack.getComponents("OOZIE")).andReturn(Collections.singleton("OOZIE_SERVER")).anyTimes(); @@ -247,7 +251,7 @@ public class BlueprintValidatorImplTest { expect(blueprint.getHostGroupsForComponent("OOZIE_SERVER")).andReturn(Collections.singleton(group1)).anyTimes(); - replay(blueprint, stack, group1, group2, dependency1); + replay(blueprint, stack, group1, group2, dependency1, serverConfig); BlueprintValidator validator = new BlueprintValidatorImpl(blueprint); validator.validateRequiredProperties(); }