Add tests to RegisteredTypes.arePlansEquivilant

Hopefully these show that we now ignore things like comments and strings
with surrounding quotes


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/c5e4e299
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/c5e4e299
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/c5e4e299

Branch: refs/heads/master
Commit: c5e4e2993e8f2448286cbf08295cd7eebb006daf
Parents: 066cbbf
Author: Duncan Grant <duncan.gr...@cloudsoftcorp.com>
Authored: Tue Jun 5 16:24:23 2018 +0100
Committer: Duncan Grant <duncan.gr...@cloudsoftcorp.com>
Committed: Tue Jun 5 16:24:23 2018 +0100

----------------------------------------------------------------------
 .../brooklyn/core/typereg/RegisteredTypes.java  |   2 +
 .../core/typereg/RegisteredTypesTest.java       | 123 +++++++++++++++++++
 2 files changed, 125 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c5e4e299/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java 
b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
index 83e7f05..f76fcb1 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
@@ -25,10 +25,12 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.StreamSupport;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import com.google.common.collect.Iterators;
 import org.apache.brooklyn.api.catalog.CatalogItem;
 import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
 import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c5e4e299/core/src/test/java/org/apache/brooklyn/core/typereg/RegisteredTypesTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/core/typereg/RegisteredTypesTest.java 
b/core/src/test/java/org/apache/brooklyn/core/typereg/RegisteredTypesTest.java
new file mode 100644
index 0000000..7162f61
--- /dev/null
+++ 
b/core/src/test/java/org/apache/brooklyn/core/typereg/RegisteredTypesTest.java
@@ -0,0 +1,123 @@
+package org.apache.brooklyn.core.typereg;
+
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.testng.annotations.Test;
+
+import javax.annotation.Nullable;
+
+import static org.testng.Assert.*;
+
+public class RegisteredTypesTest {
+
+    public static final String DRBD_YAML = "brooklyn.catalog:\n" +
+            "  version: \"1.0.0-SNAPSHOT\" # BROOKLYN_DRBD_VERSION\n" +
+            "  publish:\n" +
+            "    description: |\n" +
+            "      DRBD is a distributed replicated storage system for the 
Linux platform. It is implemented as a kernel driver, \n" +
+            "      several userspace management applications, and some shell 
scripts. DRBD is traditionally used in high availability (HA) computer clusters 
to provide a\n" +
+            "      RAID 1 like configuration over a network.\n" +
+            "    license_code: Apache-2.0\n" +
+            "    defaults:\n" +
+            "      drbdIconUrl: 
\"https://s3.eu-central-1.amazonaws.com/misc-csft/drbd.jpg\"\n"; +
+            "      classpathIconUrl: &drbdIconUrl 
'classpath://io.brooklyn.drbd.brooklyn-drbd:drbd.png'\n" +
+            "  items:\n" +
+            "  - 
\"https://github.com/brooklyncentral/common-catalog-utils/releases/download/v0.1.0/common.bom\"\n";
 +
+            "  - id: drbd-node\n";
+
+    public static final String DRBD_TESTS_YAML = "brooklyn.catalog:\n" +
+            "  version: \"1.0.0-SNAPSHOT\" # BROOKLYN_DRBD_VERSION\n" +
+            "  items:\n" +
+            "  - 
https://github.com/brooklyncentral/common-catalog-utils/releases/download/v0.1.0/common.tests.bom\n";
 +
+            "  - id: drbd-test\n" +
+            "    name: DRBD Test\n" +
+            "    itemType: template\n" +
+            "    iconUrl: 
https://s3.eu-central-1.amazonaws.com/misc-csft/drbd.jpg\n"; +
+            "    license: Apache-2.0\n" +
+            "    item:\n" +
+            "      booklyn.config:\n" +
+            "        defaultDisplayName: DRBD Test\n" +
+            "      services:\n" +
+            "      - type: drbd-webapp\n";
+
+    public static final String DRBR_YAML_WITH_COMMENTS = DRBD_YAML + "\n" +
+            "# this is a comment";
+    private static final String DRBR_YAML_WITHOUT_QUOTES = 
"brooklyn.catalog:\n" +
+            "  version: 1.0.0-SNAPSHOT # BROOKLYN_DRBD_VERSION\n" +
+            "  publish:\n" +
+            "    description: |\n" +
+            "      DRBD is a distributed replicated storage system for the 
Linux platform. It is implemented as a kernel driver, \n" +
+            "      several userspace management applications, and some shell 
scripts. DRBD is traditionally used in high availability (HA) computer clusters 
to provide a\n" +
+            "      RAID 1 like configuration over a network.\n" +
+            "    license_code: Apache-2.0\n" +
+            "    defaults:\n" +
+            "      drbdIconUrl: 
https://s3.eu-central-1.amazonaws.com/misc-csft/drbd.jpg\n"; +
+            "      classpathIconUrl: &drbdIconUrl 
'classpath://io.brooklyn.drbd.brooklyn-drbd:drbd.png'\n" +
+            "  items:\n" +
+            "  - 
https://github.com/brooklyncentral/common-catalog-utils/releases/download/v0.1.0/common.bom\n";
 +
+            "  - id: drbd-node\n";
+
+    @Test
+    public void testIdenticalPlansAreEquivalent() {
+        BasicRegisteredType a = makeTypeWithYaml(DRBD_YAML);
+
+        BasicRegisteredType b = makeTypeWithYaml(DRBD_YAML);
+
+        boolean plansEquivalent = RegisteredTypes.arePlansEquivalent(
+                a, b);
+        assertTrue(plansEquivalent);
+    }
+
+    @Test
+    public void testDifferentPlansAreNotEquivalent() {
+        BasicRegisteredType a = makeTypeWithYaml(DRBD_YAML);
+        BasicRegisteredType b = makeTypeWithYaml(DRBD_TESTS_YAML);
+
+        boolean plansEquivalent = RegisteredTypes.arePlansEquivalent(
+                a, b);
+        assertFalse(plansEquivalent);
+    }
+
+    @Test
+    public void testComparisonIgnoresComments() {
+        BasicRegisteredType a = makeTypeWithYaml(DRBD_YAML);
+
+        BasicRegisteredType b = makeTypeWithYaml(DRBR_YAML_WITH_COMMENTS);
+
+        boolean plansEquivalent = RegisteredTypes.arePlansEquivalent(
+                a, b);
+        assertTrue(plansEquivalent);
+    }
+
+    @Test
+    public void testComparisonIgnoresQuotedStrings() {
+        BasicRegisteredType a = makeTypeWithYaml(DRBD_YAML);
+
+        BasicRegisteredType b = makeTypeWithYaml(DRBR_YAML_WITHOUT_QUOTES);
+
+        boolean plansEquivalent = RegisteredTypes.arePlansEquivalent(
+                a, b);
+        assertTrue(plansEquivalent);
+    }
+
+    BasicRegisteredType makeTypeWithYaml(final String yaml) {
+        return new BasicRegisteredType(
+                BrooklynTypeRegistry.RegisteredTypeKind.SPEC,
+                "B",
+                "1",
+                new RegisteredType.TypeImplementationPlan() {
+                    @Nullable
+                    @Override
+                    public String getPlanFormat() {
+                        return null;
+                    }
+
+                    @Override
+                    public Object getPlanData() {
+                        return yaml;
+                    }
+                });
+    }
+
+
+}
\ No newline at end of file

Reply via email to