|
@@ -23,7 +23,6 @@ import org.apache.ambari.server.metadata.ActionMetadata;
|
|
import org.apache.ambari.server.state.*;
|
|
import org.apache.ambari.server.state.*;
|
|
|
|
|
|
import java.io.File;
|
|
import java.io.File;
|
|
-import java.io.IOException;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Arrays;
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
@@ -37,16 +36,12 @@ import static org.junit.Assert.*;
|
|
|
|
|
|
import org.apache.ambari.server.state.stack.ConfigurationXml;
|
|
import org.apache.ambari.server.state.stack.ConfigurationXml;
|
|
import org.junit.Test;
|
|
import org.junit.Test;
|
|
-import org.xml.sax.SAXException;
|
|
|
|
|
|
|
|
import com.google.inject.AbstractModule;
|
|
import com.google.inject.AbstractModule;
|
|
import com.google.inject.Guice;
|
|
import com.google.inject.Guice;
|
|
import com.google.inject.Injector;
|
|
import com.google.inject.Injector;
|
|
|
|
|
|
-import javax.xml.bind.JAXBException;
|
|
|
|
import javax.xml.namespace.QName;
|
|
import javax.xml.namespace.QName;
|
|
-import javax.xml.parsers.ParserConfigurationException;
|
|
|
|
-import javax.xml.xpath.XPathExpressionException;
|
|
|
|
|
|
|
|
public class StackExtensionHelperTest {
|
|
public class StackExtensionHelperTest {
|
|
|
|
|
|
@@ -249,7 +244,7 @@ public class StackExtensionHelperTest {
|
|
for (ServiceInfo serviceInfo : allServices) {
|
|
for (ServiceInfo serviceInfo : allServices) {
|
|
if (serviceInfo.getName().equals("HDFS")) {
|
|
if (serviceInfo.getName().equals("HDFS")) {
|
|
assertEquals(5, serviceInfo.getConfigDependencies().size());
|
|
assertEquals(5, serviceInfo.getConfigDependencies().size());
|
|
- assertEquals(4, serviceInfo.getConfigTypes().size());
|
|
|
|
|
|
+ assertEquals(5, serviceInfo.getConfigTypes().size());
|
|
assertTrue(serviceInfo.getConfigDependencies().contains("core-site"));
|
|
assertTrue(serviceInfo.getConfigDependencies().contains("core-site"));
|
|
assertTrue(serviceInfo.getConfigDependencies().contains("global"));
|
|
assertTrue(serviceInfo.getConfigDependencies().contains("global"));
|
|
assertTrue(serviceInfo.getConfigDependencies().contains("hdfs-site"));
|
|
assertTrue(serviceInfo.getConfigDependencies().contains("hdfs-site"));
|
|
@@ -285,6 +280,31 @@ public class StackExtensionHelperTest {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ public void testrequiredServicesPropertyInheritance() throws Exception{
|
|
|
|
+ File stackRoot = new File(stackRootStr);
|
|
|
|
+ StackInfo stackInfo = new StackInfo();
|
|
|
|
+ stackInfo.setName("HDP");
|
|
|
|
+ stackInfo.setVersion("2.0.7");
|
|
|
|
+ StackExtensionHelper helper = new StackExtensionHelper(injector, stackRoot);
|
|
|
|
+ helper.populateServicesForStack(stackInfo);
|
|
|
|
+ helper.fillInfo();
|
|
|
|
+ List<ServiceInfo> allServices = helper.getAllApplicableServices(stackInfo);
|
|
|
|
+ assertEquals(13, allServices.size());
|
|
|
|
+
|
|
|
|
+ List<String> expectedRequiredServices = new ArrayList<String>();
|
|
|
|
+ expectedRequiredServices.add("HDFS");
|
|
|
|
+ expectedRequiredServices.add("TEZ");
|
|
|
|
+
|
|
|
|
+ for (ServiceInfo serviceInfo : allServices) {
|
|
|
|
+ if (serviceInfo.getName().equals("HBASE")) {
|
|
|
|
+ assertTrue(serviceInfo.getRequiredServices().equals(expectedRequiredServices));
|
|
|
|
+ } else {
|
|
|
|
+ assertTrue((serviceInfo.getRequiredServices() == null || serviceInfo.getRequiredServices().isEmpty()));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void getSchemaVersion() throws Exception {
|
|
public void getSchemaVersion() throws Exception {
|
|
@@ -300,37 +320,60 @@ public class StackExtensionHelperTest {
|
|
version = helper.getSchemaVersion(v2MetaInfoFile);
|
|
version = helper.getSchemaVersion(v2MetaInfoFile);
|
|
assertEquals("2.0", version);
|
|
assertEquals("2.0", version);
|
|
}
|
|
}
|
|
-
|
|
|
|
- public StackExtensionHelper getStackExtensionHelper() {
|
|
|
|
- File stackRoot = new File(stackRootStr);
|
|
|
|
- return new StackExtensionHelper(injector, stackRoot);
|
|
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ public void testPopulateConfigTypes() {
|
|
|
|
+ File stackRoot = new File(stackRootStr);
|
|
|
|
+ StackExtensionHelper helper = new StackExtensionHelper(injector, stackRoot);
|
|
|
|
+ List<String> configDependencies = Arrays.asList("dep1", "dep2");
|
|
|
|
+ ServiceInfo serviceInfo = new ServiceInfo();
|
|
|
|
+ serviceInfo.setConfigDependencies(configDependencies);
|
|
|
|
+ helper.populateConfigTypesFromDependencies(serviceInfo);
|
|
|
|
+
|
|
|
|
+ Map<String, Map<String, Map<String, String>>> configTypes = serviceInfo.getConfigTypes();
|
|
|
|
+ assertEquals(2, configTypes.size());
|
|
|
|
+ assertTrue(configTypes.containsKey("dep1"));
|
|
|
|
+ assertTrue(configTypes.containsKey("dep2"));
|
|
|
|
+ Map<String, Map<String, String>> properties;
|
|
|
|
+ properties= configTypes.get("dep1");
|
|
|
|
+ assertEquals(1, properties.size());
|
|
|
|
+ assertTrue(properties.containsKey("supports"));
|
|
|
|
+ assertEquals(1, properties.get("supports").size());
|
|
|
|
+ assertTrue(properties.get("supports").containsKey("final"));
|
|
|
|
+ assertEquals("false", properties.get("supports").get("final"));
|
|
|
|
+ properties= configTypes.get("dep2");
|
|
|
|
+ assertEquals(1, properties.size());
|
|
|
|
+ assertTrue(properties.containsKey("supports"));
|
|
|
|
+ assertEquals(1, properties.get("supports").size());
|
|
|
|
+ assertTrue(properties.get("supports").containsKey("final"));
|
|
|
|
+ assertEquals("false", properties.get("supports").get("final"));
|
|
}
|
|
}
|
|
-
|
|
|
|
- public ServiceInfo getServiceFromStack(StackExtensionHelper helper, String stackName, String stackVersion, String serviceName) throws XPathExpressionException, ParserConfigurationException, SAXException, IOException, JAXBException {
|
|
|
|
- StackInfo stackInfo = new StackInfo();
|
|
|
|
- stackInfo.setName(stackName);
|
|
|
|
- stackInfo.setVersion(stackVersion);
|
|
|
|
-
|
|
|
|
- helper.populateServicesForStack(stackInfo);
|
|
|
|
-
|
|
|
|
- for(ServiceInfo service:stackInfo.getServices()) {
|
|
|
|
- if(service.getName().equals(serviceName)) {
|
|
|
|
- return service;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return null;
|
|
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ public void testPopulateConfigTypes_emptyList() {
|
|
|
|
+ File stackRoot = new File(stackRootStr);
|
|
|
|
+ StackExtensionHelper helper = new StackExtensionHelper(injector, stackRoot);
|
|
|
|
+ List<String> configDependencies = Collections.emptyList();
|
|
|
|
+ ServiceInfo serviceInfo = new ServiceInfo();
|
|
|
|
+ serviceInfo.setConfigDependencies(configDependencies);
|
|
|
|
+ helper.populateConfigTypesFromDependencies(serviceInfo);
|
|
|
|
+
|
|
|
|
+ Map<String, Map<String, Map<String, String>>> configTypes = serviceInfo.getConfigTypes();
|
|
|
|
+ assertNotNull(configTypes);
|
|
|
|
+ assertEquals(0, configTypes.size());
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
- public void testPopulateConfigTypes() throws XPathExpressionException, ParserConfigurationException, SAXException, IOException, JAXBException {
|
|
|
|
- StackExtensionHelper helper = getStackExtensionHelper();
|
|
|
|
- ServiceInfo serviceInfo = getServiceFromStack(helper, "HDP", "2.0.7", "HDFS");
|
|
|
|
- String expectedConfigTypes =
|
|
|
|
- "{global={supports={final=true}}, hdfs-site={supports={final=false}}, hadoop-policy={supports={final=false}}, core-site={supports={final=false}}}";
|
|
|
|
|
|
+ public void testPopulateConfigTypes_null() {
|
|
|
|
+ File stackRoot = new File(stackRootStr);
|
|
|
|
+ StackExtensionHelper helper = new StackExtensionHelper(injector, stackRoot);
|
|
|
|
+ List<String> configDependencies = null;
|
|
|
|
+ ServiceInfo serviceInfo = new ServiceInfo();
|
|
|
|
+ serviceInfo.setConfigDependencies(configDependencies);
|
|
|
|
+ helper.populateConfigTypesFromDependencies(serviceInfo);
|
|
|
|
|
|
Map<String, Map<String, Map<String, String>>> configTypes = serviceInfo.getConfigTypes();
|
|
Map<String, Map<String, Map<String, String>>> configTypes = serviceInfo.getConfigTypes();
|
|
- assertEquals(4, configTypes.size());
|
|
|
|
- assertEquals(expectedConfigTypes, configTypes.toString());
|
|
|
|
|
|
+ assertNull(configTypes);
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
@@ -429,38 +472,81 @@ public class StackExtensionHelperTest {
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void testPopulateServiceProperties_noSupportsFinalFlag() throws Exception {
|
|
public void testPopulateServiceProperties_noSupportsFinalFlag() throws Exception {
|
|
- StackExtensionHelper helper = getStackExtensionHelper();
|
|
|
|
- ServiceInfo serviceInfo = getServiceFromStack(helper, "HDP", "2.0.7", "YARN");
|
|
|
|
-
|
|
|
|
- File configFile = new File(stackRootStr
|
|
|
|
|
|
+ // init
|
|
|
|
+ File stackRoot = new File(stackRootStr);
|
|
|
|
+ StackExtensionHelper helper = createMockBuilder(StackExtensionHelper.class).addMockedMethod("addConfigTypeProperty")
|
|
|
|
+ .withConstructor(injector, stackRoot).createMock();
|
|
|
|
+ File config = new File(stackRootStr
|
|
+ "HDP/2.0.7/services/YARN/configuration/yarn-site.xml".replaceAll("/", File.separator));
|
|
+ "HDP/2.0.7/services/YARN/configuration/yarn-site.xml".replaceAll("/", File.separator));
|
|
-
|
|
|
|
- helper.populateServiceProperties(configFile, serviceInfo);
|
|
|
|
-
|
|
|
|
- assertEquals("{yarn-site={supports={final=false}}}", serviceInfo.getConfigTypes().toString());
|
|
|
|
|
|
+ ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class);
|
|
|
|
+ List<PropertyInfo> properties = createNiceMock(List.class);
|
|
|
|
+
|
|
|
|
+ // expectations
|
|
|
|
+ expect(serviceInfo.getProperties()).andReturn(properties).times(1);
|
|
|
|
+ expect(properties.addAll((Collection) anyObject())).andReturn(true).times(1);
|
|
|
|
+ replay(properties);
|
|
|
|
+ replay(serviceInfo);
|
|
|
|
+ replay(helper);
|
|
|
|
+
|
|
|
|
+ // eval
|
|
|
|
+ helper.populateServiceProperties(config, serviceInfo);
|
|
|
|
+
|
|
|
|
+ // verification
|
|
|
|
+ verify(properties, serviceInfo, helper);
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void testPopulateServiceProperties_supportsFinalTrue() throws Exception {
|
|
public void testPopulateServiceProperties_supportsFinalTrue() throws Exception {
|
|
- StackExtensionHelper helper = getStackExtensionHelper();
|
|
|
|
- ServiceInfo serviceInfo = getServiceFromStack(helper, "HDP", "2.0.7", "HDFS");
|
|
|
|
-
|
|
|
|
- File configFile = new File(stackRootStr
|
|
|
|
|
|
+ // init
|
|
|
|
+ File stackRoot = new File(stackRootStr);
|
|
|
|
+ StackExtensionHelper helper = createMockBuilder(StackExtensionHelper.class).addMockedMethod("addConfigTypeProperty")
|
|
|
|
+ .withConstructor(injector, stackRoot).createMock();
|
|
|
|
+ File config = new File(stackRootStr
|
|
+ "HDP/2.0.7/services/HDFS/configuration/global.xml".replaceAll("/", File.separator));
|
|
+ "HDP/2.0.7/services/HDFS/configuration/global.xml".replaceAll("/", File.separator));
|
|
- helper.populateServiceProperties(configFile, serviceInfo);
|
|
|
|
-
|
|
|
|
- assertEquals("{global={supports={final=true}}, hdfs-site={supports={final=false}}, hadoop-policy={supports={final=false}}, core-site={supports={final=false}}}", serviceInfo.getConfigTypes().toString());
|
|
|
|
|
|
+ ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class);
|
|
|
|
+ List<PropertyInfo> properties = createNiceMock(List.class);
|
|
|
|
+
|
|
|
|
+ // expectations
|
|
|
|
+ expect(serviceInfo.getProperties()).andReturn(properties).times(1);
|
|
|
|
+ expect(properties.addAll((Collection) anyObject())).andReturn(true).times(1);
|
|
|
|
+ helper.addConfigTypeProperty(serviceInfo, "global", StackExtensionHelper.Supports.KEYWORD,
|
|
|
|
+ StackExtensionHelper.Supports.FINAL.getPropertyName(), "true");
|
|
|
|
+ replay(properties);
|
|
|
|
+ replay(serviceInfo);
|
|
|
|
+ replay(helper);
|
|
|
|
+
|
|
|
|
+ // eval
|
|
|
|
+ helper.populateServiceProperties(config, serviceInfo);
|
|
|
|
+
|
|
|
|
+ // verification
|
|
|
|
+ verify(properties, serviceInfo, helper);
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void testPopulateServiceProperties_supportsFinalFalse() throws Exception {
|
|
public void testPopulateServiceProperties_supportsFinalFalse() throws Exception {
|
|
- StackExtensionHelper helper = getStackExtensionHelper();
|
|
|
|
- ServiceInfo serviceInfo = getServiceFromStack(helper, "HDP", "2.0.7", "HDFS");
|
|
|
|
- File configFile = new File(stackRootStr
|
|
|
|
- + "HDP/2.0.7/services/YARN/configuration/yarn-site.xml".replaceAll("/", File.separator));
|
|
|
|
- helper.populateServiceProperties(configFile, serviceInfo);
|
|
|
|
-
|
|
|
|
- assertEquals("{global={supports={final=true}}, hdfs-site={supports={final=false}}, yarn-site={supports={final=false}}, hadoop-policy={supports={final=false}}, core-site={supports={final=false}}}", serviceInfo.getConfigTypes().toString());
|
|
|
|
|
|
+ // init
|
|
|
|
+ File stackRoot = new File(stackRootStr);
|
|
|
|
+ StackExtensionHelper helper = createMockBuilder(StackExtensionHelper.class).addMockedMethod("addConfigTypeProperty")
|
|
|
|
+ .withConstructor(injector, stackRoot).createMock();
|
|
|
|
+ File config = new File(stackRootStr
|
|
|
|
+ + "HDP/2.0.7/services/HDFS/configuration/core-site.xml".replaceAll("/", File.separator));
|
|
|
|
+ ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class);
|
|
|
|
+ List<PropertyInfo> properties = createNiceMock(List.class);
|
|
|
|
+
|
|
|
|
+ // expectations
|
|
|
|
+ expect(serviceInfo.getProperties()).andReturn(properties).times(1);
|
|
|
|
+ expect(properties.addAll((Collection) anyObject())).andReturn(true).times(1);
|
|
|
|
+ helper.addConfigTypeProperty(serviceInfo, "core-site", StackExtensionHelper.Supports.KEYWORD,
|
|
|
|
+ StackExtensionHelper.Supports.FINAL.getPropertyName(), "false");
|
|
|
|
+ replay(properties);
|
|
|
|
+ replay(serviceInfo);
|
|
|
|
+ replay(helper);
|
|
|
|
+
|
|
|
|
+ // eval
|
|
|
|
+ helper.populateServiceProperties(config, serviceInfo);
|
|
|
|
+
|
|
|
|
+ // verification
|
|
|
|
+ verify(properties, serviceInfo, helper);
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
@@ -475,7 +561,6 @@ public class StackExtensionHelperTest {
|
|
List<PropertyInfo> properties = createNiceMock(List.class);
|
|
List<PropertyInfo> properties = createNiceMock(List.class);
|
|
|
|
|
|
// expectations
|
|
// expectations
|
|
- expect(serviceInfo.getConfigTypes()).andReturn(new HashMap<String, Map<String, Map<String, String>>>()).times(2);
|
|
|
|
expect(serviceInfo.getProperties()).andReturn(properties).times(1);
|
|
expect(serviceInfo.getProperties()).andReturn(properties).times(1);
|
|
expect(properties.addAll((Collection) anyObject())).andReturn(true).times(1);
|
|
expect(properties.addAll((Collection) anyObject())).andReturn(true).times(1);
|
|
helper.addConfigTypeProperty(serviceInfo, "yarn-site", StackExtensionHelper.Supports.KEYWORD,
|
|
helper.addConfigTypeProperty(serviceInfo, "yarn-site", StackExtensionHelper.Supports.KEYWORD,
|
|
@@ -502,7 +587,6 @@ public class StackExtensionHelperTest {
|
|
List<PropertyInfo> properties = createNiceMock(List.class);
|
|
List<PropertyInfo> properties = createNiceMock(List.class);
|
|
|
|
|
|
// expectations
|
|
// expectations
|
|
- expect(serviceInfo.getConfigTypes()).andReturn(new HashMap<String, Map<String, Map<String, String>>>()).times(2);
|
|
|
|
expect(serviceInfo.getProperties()).andReturn(properties).times(1);
|
|
expect(serviceInfo.getProperties()).andReturn(properties).times(1);
|
|
expect(properties.addAll((Collection) anyObject())).andReturn(true).times(1);
|
|
expect(properties.addAll((Collection) anyObject())).andReturn(true).times(1);
|
|
expect(serviceInfo.getConfigTypes()).andReturn(null).times(1);
|
|
expect(serviceInfo.getConfigTypes()).andReturn(null).times(1);
|