You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2016/04/06 11:42:42 UTC

[5/6] brooklyn-server git commit: BROOKLYN-249: Adds JcloudsRebindWithExternalConfigTest

BROOKLYN-249: Adds JcloudsRebindWithExternalConfigTest


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

Branch: refs/heads/master
Commit: 48cfa908a0001a3ab66a21febc7404ee34eb652d
Parents: bd2e812
Author: Aled Sage <al...@gmail.com>
Authored: Wed Apr 6 10:33:21 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Apr 6 10:40:53 2016 +0100

----------------------------------------------------------------------
 .../JcloudsRebindWithExternalConfigTest.java    | 139 +++++++++++++++++++
 1 file changed, 139 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/48cfa908/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithExternalConfigTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithExternalConfigTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithExternalConfigTest.java
new file mode 100644
index 0000000..6d0d4ec
--- /dev/null
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithExternalConfigTest.java
@@ -0,0 +1,139 @@
+package org.apache.brooklyn.camp.brooklyn;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.File;
+import java.util.Map;
+
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.camp.brooklyn.spi.creation.CampTypePlanTransformer;
+import org.apache.brooklyn.core.config.external.InPlaceExternalConfigSupplier;
+import org.apache.brooklyn.core.entity.trait.Startable;
+import org.apache.brooklyn.core.internal.BrooklynProperties;
+import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
+import org.apache.brooklyn.core.typereg.RegisteredTypeLoadingContexts;
+import org.apache.brooklyn.location.jclouds.ComputeServiceRegistry;
+import org.apache.brooklyn.location.jclouds.JcloudsLocation;
+import org.apache.brooklyn.location.jclouds.JcloudsPropertiesFromBrooklynProperties;
+import org.apache.brooklyn.location.jclouds.JcloudsRebindStubTest;
+import org.apache.brooklyn.util.collections.MutableMap;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+
+/**
+ * Implementation notes. This relies on the test {@link JcloudsRebindStubTest#testRebind()}.
+ * It changes the setup for the test in the following ways:
+ * <ul>
+ *   <li>Brooklyn properties defines external config
+ *   <li>Location is defined in YAML, and refers to the external config for the identity/credential.
+ *   <li>When creating management context, it also creates {@link BrooklynCampPlatformLauncherNoServer}.
+ *   <li>It uses {@link JcloudsRebindWithExternalConfigTest#ByonComputeServiceStaticRef} to allow
+ *       the test's {@link ComputeServiceRegistry} to be wired up via YAML.
+ * </ul>
+ * 
+ * See {@link JcloudsRebindStubTest} for explanation why this is "Live" - it will not create VMs,
+ * but does retrieve list of images etc.
+ */
+@Test(groups={"Live", "Live-sanity"})
+public class JcloudsRebindWithExternalConfigTest extends JcloudsRebindStubTest {
+
+    private BrooklynCampPlatformLauncherNoServer origLauncher;
+    private BrooklynCampPlatformLauncherNoServer newLauncher;
+
+    @Override
+    @AfterMethod(alwaysRun=true)
+    public void tearDown() throws Exception {
+        try {
+            super.tearDown();
+        } finally {
+            ByonComputeServiceStaticRef.clearInstance();
+            if (origLauncher != null) origLauncher.stopServers();
+            if (newLauncher != null) newLauncher.stopServers();
+        }
+    }
+    
+    @Override
+    protected BrooklynProperties createBrooklynProperties() {
+        BrooklynProperties result = super.createBrooklynProperties();
+        
+        Map<Object,Object> jcloudsProps = MutableMap.<Object,Object>copyOf(new JcloudsPropertiesFromBrooklynProperties().getJcloudsProperties(PROVIDER, null, "testname", result.asMapWithStringKeys()));
+        String identity = checkNotNull((String)jcloudsProps.get("identity"), "identity");
+        String credential = checkNotNull((String)jcloudsProps.get("credential"), "credential");
+        
+        result.put("brooklyn.external.creds", InPlaceExternalConfigSupplier.class.getName());
+        result.put("brooklyn.external.creds.test-identity", identity);
+        result.put("brooklyn.external.creds.test-credential", credential);
+        
+        return result;
+    }
+    
+    @Override
+    protected LocalManagementContext createOrigManagementContext() {
+        origLauncher = new BrooklynCampPlatformLauncherNoServer() {
+            @Override
+            protected LocalManagementContext newMgmtContext() {
+                return JcloudsRebindWithExternalConfigTest.super.createOrigManagementContext();
+            }
+        };
+        origLauncher.launch();
+        LocalManagementContext mgmt = (LocalManagementContext) origLauncher.getBrooklynMgmt();
+        return mgmt;
+    }
+
+    @Override
+    protected LocalManagementContext createNewManagementContext(final File mementoDir) {
+        newLauncher = new BrooklynCampPlatformLauncherNoServer() {
+            @Override
+            protected LocalManagementContext newMgmtContext() {
+                return JcloudsRebindWithExternalConfigTest.super.createNewManagementContext(mementoDir);
+            }
+        };
+        newLauncher.launch();
+        return (LocalManagementContext) newLauncher.getBrooklynMgmt();
+    }
+    
+    @Override
+    protected JcloudsLocation newJcloudsLocation(ComputeServiceRegistry computeServiceRegistry) throws Exception {
+        ByonComputeServiceStaticRef.setInstance(computeServiceRegistry);
+        
+        String yaml = Joiner.on("\n").join(
+                "location:",
+                "  jclouds:softlayer:",
+                "    identity: $brooklyn:external(\"creds\", \"test-identity\")",
+                "    credential: $brooklyn:external(\"creds\", \"test-credential\")",
+                "    jclouds.computeServiceRegistry:",
+                "      $brooklyn:object:",
+                "        type: "+ByonComputeServiceStaticRef.class.getName(),
+                "    waitForSshable: false",
+                "    useJcloudsSshInit: false",
+                "services:\n"+
+                "- type: org.apache.brooklyn.entity.stock.BasicApplication");
+        
+        EntitySpec<?> spec = 
+                mgmt().getTypeRegistry().createSpecFromPlan(CampTypePlanTransformer.FORMAT, yaml, RegisteredTypeLoadingContexts.spec(Application.class), EntitySpec.class);
+        final Entity app = mgmt().getEntityManager().createEntity(spec);
+        app.invoke(Startable.START, ImmutableMap.<String, Object>of()).get();
+
+        return (JcloudsLocation) Iterables.getOnlyElement(app.getLocations());
+    }
+
+    public static class ByonComputeServiceStaticRef {
+        private static volatile ComputeServiceRegistry instance;
+
+        public ComputeServiceRegistry asComputeServiceRegistry() {
+            return checkNotNull(instance, "instance");
+        }
+        static void setInstance(ComputeServiceRegistry val) {
+            instance = val;
+        }
+        static void clearInstance() {
+            instance = null;
+        }
+    }
+}