You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by be...@apache.org on 2017/11/14 11:14:50 UTC
[17/17] ambari git commit: AMBARI-22325 Polish blueprint v2 unit
tests (benyoka)
AMBARI-22325 Polish blueprint v2 unit tests (benyoka)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8a551874
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8a551874
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8a551874
Branch: refs/heads/branch-feature-AMBARI-14714-blueprintv2
Commit: 8a55187406646a48426c01b8f9bde79755ebaef3
Parents: 26143bc
Author: Balazs Bence Sari <be...@apache.org>
Authored: Mon Nov 13 18:34:02 2017 +0100
Committer: Balazs Bence Sari <be...@apache.org>
Committed: Tue Nov 14 11:31:17 2017 +0100
----------------------------------------------------------------------
.../server/topology/BlueprintV2Factory.java | 2 +-
.../validators/BlueprintImplV2Test.java | 167 +++++++++++++------
2 files changed, 120 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/8a551874/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java
index 47aed80..fa12173 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java
@@ -198,7 +198,7 @@ public class BlueprintV2Factory {
this.prettyPrintJson = prettyPrintJson;
}
- ObjectMapper createObjectMapper() {
+ public ObjectMapper createObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("CustomModel", Version.unknownVersion());
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver();
http://git-wip-us.apache.org/repos/asf/ambari/blob/8a551874/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java
index 611ada1..41d1ca8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java
@@ -17,30 +17,28 @@
*/
package org.apache.ambari.server.topology.validators;
-import static org.mockito.Mockito.anyString;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import org.apache.ambari.server.controller.StackV2;
import org.apache.ambari.server.controller.StackV2Factory;
import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.topology.BlueprintImplV2;
+import org.apache.ambari.server.topology.BlueprintV2;
import org.apache.ambari.server.topology.BlueprintV2Factory;
-import org.apache.ambari.server.topology.HostGroupV2;
-import org.apache.ambari.server.topology.HostGroupV2Impl;
+import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver;
-import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.base.Charsets;
-import com.google.common.collect.ImmutableMap;
import com.google.common.io.Resources;
public class BlueprintImplV2Test {
@@ -48,6 +46,7 @@ public class BlueprintImplV2Test {
static String BLUEPRINTV2_JSON;
static String BLUEPRINTV2_2_JSON;
+ BlueprintV2Factory blueprintFactory;
@BeforeClass
public static void setUpClass() throws Exception {
@@ -55,50 +54,122 @@ public class BlueprintImplV2Test {
BLUEPRINTV2_2_JSON = Resources.toString(Resources.getResource("blueprintv2/blueprintv2_2.json"), Charsets.UTF_8);
}
+ @Before
+ public void setUp() throws Exception {
+ StackV2Factory stackFactory = mock(StackV2Factory.class);
+ when(stackFactory.create(any(StackId.class))).thenAnswer(invocation -> {
+ StackId stackId = invocation.getArgumentAt(0, StackId.class);
+ StackV2 stack = new StackV2(stackId.getStackName(), stackId.getStackVersion(), stackId.getStackVersion() + ".0-1",
+ new HashMap<>(), new HashMap<>(), new HashMap<>(),
+ new HashMap<>(), new HashMap<>(), new HashMap<>(),
+ new HashMap<>(), new HashMap<>(), new HashMap<>());
+ return stack;
+ });
+ blueprintFactory = BlueprintV2Factory.create(stackFactory);
+ blueprintFactory.setPrettyPrintJson(true);
+ }
+
+ @Test
+ public void testSerialization_parseJsonAsBlueprint() throws Exception {
+ BlueprintV2 bp = blueprintFactory.convertFromJson(BLUEPRINTV2_JSON);
+ assertEquals(new StackId("HDPCORE", "3.0.0"),
+ bp.getServiceGroups().iterator().next().getServices().iterator().next().getStack().getStackId());
+ assertEquals(2, bp.getStackIds().size());
+ assertEquals(7, bp.getAllServiceIds().size());
+ assertEquals(2, bp.getServiceGroups().size());
+ }
+
@Test
- public void testSerialization() throws Exception {
- ObjectMapper mapper = new ObjectMapper();
- SimpleModule module = new SimpleModule("CustomModel", Version.unknownVersion());
- SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver();
- resolver.addMapping(HostGroupV2.class, HostGroupV2Impl.class);
- module.setAbstractTypes(resolver);
- mapper.registerModule(module);
- mapper.enable(SerializationFeature.INDENT_OUTPUT);
- BlueprintImplV2 bp = mapper.readValue(BLUEPRINTV2_JSON, BlueprintImplV2.class);
- bp.postDeserialization();
- // -- add stack --
- StackV2 hdpCore = new StackV2("HDPCORE", "3.0.0", "3.0.0.0-1", new HashMap<>(), new HashMap<>(), new HashMap<>(),
- new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>());
- StackV2 analytics = new StackV2("ANALYTICS", "1.0.0", "1.0.0.0-1", new HashMap<>(), new HashMap<>(), new HashMap<>(),
- new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>());
- bp.setStacks(ImmutableMap.of(new StackId("HDPCORE", "3.0.0"), hdpCore, new StackId("ANALYTICS", "1.0.0"), analytics));
- // ---------------
- String bpJson = mapper.writeValueAsString(bp);
- System.out.println(bpJson);
- System.out.println("\n\n====================================================================================\n\n");
- Map<String, Object> map = mapper.readValue(BLUEPRINTV2_JSON, HashMap.class);
- System.out.println(map);
- System.out.println("\n\n====================================================================================\n\n");
- String bpJson2 = mapper.writeValueAsString(map);
- System.out.println(bpJson2);
- System.out.println("\n\n====================================================================================\n\n");
- BlueprintImplV2 bp2 = mapper.readValue(bpJson2, BlueprintImplV2.class);
- System.out.println(bp2);
+ public void testSerialization_parseJsonAsMap() throws Exception {
+ ObjectMapper mapper = blueprintFactory.createObjectMapper();
+ Map<String, Object> blueprintAsMap = mapper.readValue(BLUEPRINTV2_JSON, HashMap.class);
+ assertEquals(2, getAsMap(blueprintAsMap, "cluster_settings").size());
+ assertEquals(2, getAsMap(blueprintAsMap, "Blueprints").size());
+ assertEquals("blueprint-def", getByPath(blueprintAsMap,
+ ImmutableList.of("Blueprints", "blueprint_name")));
+ assertEquals(2, getAsList(blueprintAsMap, "service_groups").size());
+ assertEquals("StreamSG", getByPath(blueprintAsMap,
+ ImmutableList.of("service_groups", 1, "name")));
+ assertEquals(2, getAsList(blueprintAsMap, "repository_versions").size());
+ assertEquals(1, getAsList(blueprintAsMap, "host_groups").size());
+ assertEquals("host_group_1", getByPath(blueprintAsMap,
+ ImmutableList.of("host_groups", 0, "name")));
+ System.out.println(blueprintAsMap);
}
@Test
- public void testSerialization2() throws Exception {
- StackV2 hdpCore = new StackV2("HDPCORE", "3.0.0", "3.0.0.0-1", new HashMap<>(), new HashMap<>(), new HashMap<>(),
- new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>()); StackV2Factory stackFactory = mock(StackV2Factory.class);
- when(stackFactory.create(anyString(), anyString())).thenReturn(hdpCore);
- BlueprintV2Factory bpFactory = BlueprintV2Factory.create(stackFactory);
- bpFactory.setPrettyPrintJson(true);
- BlueprintImplV2 bp = (BlueprintImplV2)bpFactory.convertFromJson(BLUEPRINTV2_2_JSON);
- String bpSerialized = bpFactory.convertToJson(bp);
- System.out.println(bpSerialized);
- bp = (BlueprintImplV2)bpFactory.convertFromJson(bpSerialized);
- System.out.println(bp);
+ public void testSerialization_serializeBlueprint() throws Exception {
+ BlueprintV2 bp = blueprintFactory.convertFromJson(BLUEPRINTV2_JSON);
+ String serialized = blueprintFactory.convertToJson(bp);
+ // Test that serialized blueprint can be read again
+ bp = blueprintFactory.convertFromJson(serialized);
+ assertEquals(2, bp.getStackIds().size());
+ assertEquals(7, bp.getAllServiceIds().size());
+ assertEquals(2, bp.getServiceGroups().size());
}
+ @Test
+ public void testSerialization2_parseJsonAsBlueprint() throws Exception {
+ BlueprintV2 bp = blueprintFactory.convertFromJson(BLUEPRINTV2_2_JSON);
+ assertEquals(new StackId("HDP", "3.0.0"),
+ bp.getServiceGroups().iterator().next().getServices().iterator().next().getStack().getStackId());
+ assertEquals(1, bp.getStackIds().size());
+ assertEquals(4, bp.getAllServiceIds().size());
+ assertEquals(1, bp.getServiceGroups().size());
+ }
+
+ @Test
+ public void testSerialization2_parseJsonAsMap() throws Exception {
+ ObjectMapper mapper = blueprintFactory.createObjectMapper();
+ Map<String, Object> blueprintAsMap = mapper.readValue(BLUEPRINTV2_2_JSON, HashMap.class);
+ assertEquals(2, getAsMap(blueprintAsMap, "cluster_settings").size());
+ assertEquals(2, getAsMap(blueprintAsMap, "Blueprints").size());
+ assertEquals("blueprint-def", getByPath(blueprintAsMap,
+ ImmutableList.of("Blueprints", "blueprint_name")));
+ assertEquals(1, getAsList(blueprintAsMap, "service_groups").size());
+ assertEquals("CoreSG", getByPath(blueprintAsMap,
+ ImmutableList.of("service_groups", 0, "name")));
+ assertEquals(1, getAsList(blueprintAsMap, "repository_versions").size());
+ assertEquals(1, getAsList(blueprintAsMap, "host_groups").size());
+ assertEquals("host_group_1", getByPath(blueprintAsMap,
+ ImmutableList.of("host_groups", 0, "name")));
+ System.out.println(blueprintAsMap);
+ }
+
+ @Test
+ public void testSerialization2_serializeBlueprint() throws Exception {
+ BlueprintV2 bp = blueprintFactory.convertFromJson(BLUEPRINTV2_2_JSON);
+ String serialized = blueprintFactory.convertToJson(bp);
+ // Test that serialized blueprint can be read again
+ bp = blueprintFactory.convertFromJson(serialized);
+ assertEquals(1, bp.getStackIds().size());
+ assertEquals(4, bp.getAllServiceIds().size());
+ assertEquals(1, bp.getServiceGroups().size());
+ }
+
+ private static Map<String, Object> getAsMap(Map<String, Object> parentMap, String key) {
+ return (Map<String, Object>)parentMap.get(key);
+ }
+
+ private static List<Object> getAsList(Map<String, Object> parentMap, String key) {
+ return (List<Object>)parentMap.get(key);
+ }
+
+ private static Object getByPath(Map<String, Object> initialMap, List<Object> path) {
+ Object returnValue = initialMap;
+ for(Object key: path) {
+ if (key instanceof String) { // this element is a map
+ returnValue = ((Map<String, Object>)returnValue).get(key);
+ Preconditions.checkNotNull(returnValue, "No value for key: " + key);
+ }
+ else if (key instanceof Integer) { // this element is an arraylist
+ returnValue = ((List<Object>)returnValue).get((Integer)key);
+ }
+ else {
+ throw new IllegalArgumentException("Invalid path element: " + key);
+ }
+ }
+ return returnValue;
+ }
}
\ No newline at end of file