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:41 UTC

[4/6] brooklyn-server git commit: BROOKLYN-249: test JcloudsLocation external config

BROOKLYN-249: test JcloudsLocation external config


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

Branch: refs/heads/master
Commit: bd2e812468b9c04fbc0acaf2ee2246dbd26c90e5
Parents: b35ec4a
Author: Aled Sage <al...@gmail.com>
Authored: Tue Apr 5 18:05:43 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Apr 5 18:35:45 2016 +0100

----------------------------------------------------------------------
 camp/camp-brooklyn/pom.xml                      | 13 ++++
 .../core/mgmt/rebind/RebindTestFixture.java     | 11 ++++
 .../byon/ByonLocationResolverRebindTest.java    | 69 ++++++++++++++++++++
 .../jclouds/AbstractJcloudsLiveTest.java        |  2 +-
 .../location/jclouds/JcloudsRebindStubTest.java | 34 +++++++---
 5 files changed, 118 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/bd2e8124/camp/camp-brooklyn/pom.xml
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/pom.xml b/camp/camp-brooklyn/pom.xml
index 5e2f3bf..ac12285 100644
--- a/camp/camp-brooklyn/pom.xml
+++ b/camp/camp-brooklyn/pom.xml
@@ -140,6 +140,19 @@
         </dependency>
         <dependency>
             <groupId>org.apache.brooklyn</groupId>
+            <artifactId>brooklyn-locations-jclouds</artifactId>
+            <version>${project.version}</version>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <!-- jsr311 excluded from jclouds; see jclouds module's pom for further comments. -->
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.brooklyn</groupId>
             <artifactId>brooklyn-test-support</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/bd2e8124/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
index f43042f..8bbd04d 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
@@ -39,6 +39,7 @@ import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.entity.EntityFunctions;
 import org.apache.brooklyn.core.entity.StartableApplication;
 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.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore;
@@ -86,12 +87,21 @@ public abstract class RebindTestFixture<T extends StartableApplication> {
         LOG.info("Test "+getClass()+" persisting to "+mementoDir);
     }
 
+    protected BrooklynProperties createBrooklynProperties() {
+        if (useLiveManagementContext()) {
+            return BrooklynProperties.Factory.newDefault();
+        } else {
+            return BrooklynProperties.Factory.newEmpty();
+        }
+    }
+
     /** @return A started management context */
     protected LocalManagementContext createOrigManagementContext() {
         return RebindTestUtils.managementContextBuilder(mementoDir, classLoader)
                 .persistPeriodMillis(getPersistPeriodMillis())
                 .forLive(useLiveManagementContext())
                 .emptyCatalog(useEmptyCatalog())
+                .properties(createBrooklynProperties())
                 .buildStarted();
     }
 
@@ -106,6 +116,7 @@ public abstract class RebindTestFixture<T extends StartableApplication> {
         return RebindTestUtils.managementContextBuilder(mementoDir, classLoader)
                 .forLive(useLiveManagementContext())
                 .emptyCatalog(useEmptyCatalog())
+                .properties(createBrooklynProperties())
                 .buildUnstarted();
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/bd2e8124/core/src/test/java/org/apache/brooklyn/location/byon/ByonLocationResolverRebindTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/location/byon/ByonLocationResolverRebindTest.java b/core/src/test/java/org/apache/brooklyn/location/byon/ByonLocationResolverRebindTest.java
new file mode 100644
index 0000000..9f3b3a3
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/location/byon/ByonLocationResolverRebindTest.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.location.byon;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.apache.brooklyn.api.location.LocationSpec;
+import org.apache.brooklyn.api.location.MachineLocation;
+import org.apache.brooklyn.api.location.MachineProvisioningLocation;
+import org.apache.brooklyn.core.mgmt.rebind.RebindTestFixtureWithApp;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+public class ByonLocationResolverRebindTest extends RebindTestFixtureWithApp {
+
+    @Test
+    public void testRebindByon() throws Exception {
+        String spec = "byon(hosts=\"1.1.1.1\")";
+        MachineProvisioningLocation<MachineLocation> provisioner = resolve(spec);
+        
+        rebind();
+        
+        @SuppressWarnings("unchecked")
+        MachineProvisioningLocation<MachineLocation> newProvisioner = (MachineProvisioningLocation<MachineLocation>) mgmt().getLocationManager().getLocation(provisioner.getId());
+        MachineLocation newLocation = newProvisioner.obtain(ImmutableMap.of());
+        assertTrue(newLocation instanceof SshMachineLocation, "Expected location to be SshMachineLocation, found " + newLocation);
+    }
+
+    @Test
+    public void testRebindWhenOnlyByonLocationSpec() throws Exception {
+        int before = mgmt().getLocationManager().getLocations().size();
+        String spec = "byon(hosts=\"1.1.1.1\")";
+        getLocationSpec(spec);
+        
+        rebind();
+
+        int after = mgmt().getLocationManager().getLocations().size();
+        assertEquals(after, before);
+    }
+
+    @SuppressWarnings("unchecked")
+    private LocationSpec<FixedListMachineProvisioningLocation<MachineLocation>> getLocationSpec(String val) {
+        return (LocationSpec<FixedListMachineProvisioningLocation<MachineLocation>>) mgmt().getLocationRegistry().getLocationSpec(val).get();
+    }
+
+    @SuppressWarnings("unchecked")
+    private FixedListMachineProvisioningLocation<MachineLocation> resolve(String val) {
+        return (FixedListMachineProvisioningLocation<MachineLocation>) mgmt().getLocationRegistry().getLocationManaged(val);
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/bd2e8124/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java
index 7723a01..4313c43 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java
@@ -112,7 +112,7 @@ public class AbstractJcloudsLiveTest {
         return LocalManagementContextForTests.builder(true).useDefaultProperties().build();
     }
     
-    protected static void stripBrooklynProperties(BrooklynProperties props) {
+    public static void stripBrooklynProperties(BrooklynProperties props) {
         // remove all location properties except for identity and credential
         // (so key, scripts, etc settings don't interfere with tests) 
         for (String key : ImmutableSet.copyOf(props.asMapWithStringKeys().keySet())) {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/bd2e8124/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsRebindStubTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsRebindStubTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsRebindStubTest.java
index 1d33bc5..b89e1b2 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsRebindStubTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsRebindStubTest.java
@@ -74,10 +74,15 @@ import com.google.common.collect.Multimaps;
 public class JcloudsRebindStubTest extends RebindTestFixtureWithApp {
 
     // TODO Duplication of AbstractJcloudsLiveTest, because we're subclassing RebindTestFixture instead.
+    
+    // TODO The ByonComputeServiceRegistry extends ComputeServiceRegistryImpl, which means when it  
+    // is serialized it will try to serialize the cachedComputeServices. That will try to serialize 
+    // threads and all sorts!
 
     private static final Logger LOG = LoggerFactory.getLogger(JcloudsRebindStubTest.class);
 
-    public static final String SOFTLAYER_LOCATION_SPEC = "jclouds:" + AbstractJcloudsLiveTest.SOFTLAYER_PROVIDER;
+    public static final String PROVIDER = AbstractJcloudsLiveTest.SOFTLAYER_PROVIDER;
+    public static final String SOFTLAYER_LOCATION_SPEC = "jclouds:" + PROVIDER;
     public static final String SOFTLAYER_IMAGE_ID = "UBUNTU_14_64";
     
     protected List<ManagementContext> mgmts;
@@ -89,10 +94,6 @@ public class JcloudsRebindStubTest extends RebindTestFixtureWithApp {
         super.setUp();
         mgmts = Lists.newCopyOnWriteArrayList(ImmutableList.<ManagementContext>of(origManagementContext));
         machines = Multimaps.synchronizedMultimap(ArrayListMultimap.<ManagementContext, JcloudsSshMachineLocation>create());
-        
-        // Don't let any defaults from brooklyn.properties (except credentials) interfere with test
-        brooklynProperties = origManagementContext.getBrooklynProperties();
-        AbstractJcloudsLiveTest.stripBrooklynProperties(brooklynProperties);
     }
 
     @AfterMethod(alwaysRun=true)
@@ -120,6 +121,14 @@ public class JcloudsRebindStubTest extends RebindTestFixtureWithApp {
     }
 
     @Override
+    protected BrooklynProperties createBrooklynProperties() {
+        // Don't let any defaults from brooklyn.properties (except credentials) interfere with test
+        BrooklynProperties result = super.createBrooklynProperties();
+        AbstractJcloudsLiveTest.stripBrooklynProperties(result);
+        return result;
+    }
+    
+    @Override
     protected boolean useLiveManagementContext() {
         return true;
     }
@@ -130,7 +139,7 @@ public class JcloudsRebindStubTest extends RebindTestFixtureWithApp {
         mgmts.add(newManagementContext);
         return result;
     }
-    
+
     @Test(groups={"Live", "Live-sanity"})
     public void testRebind() throws Exception {
         LocationImpl locImpl = new LocationImpl(
@@ -181,10 +190,8 @@ public class JcloudsRebindStubTest extends RebindTestFixtureWithApp {
                 "myHostname");
         
         ByonComputeServiceRegistry computeServiceRegistry = new ByonComputeServiceRegistry(node);
-        JcloudsLocation origJcloudsLoc = (JcloudsLocation) mgmt().getLocationRegistry().getLocationManaged("jclouds:softlayer", ImmutableMap.of(
-                JcloudsLocation.COMPUTE_SERVICE_REGISTRY, computeServiceRegistry,
-                JcloudsLocation.WAIT_FOR_SSHABLE, false,
-                JcloudsLocation.USE_JCLOUDS_SSH_INIT, false));
+
+        JcloudsLocation origJcloudsLoc = newJcloudsLocation(computeServiceRegistry);
     
         JcloudsSshMachineLocation origMachine = (JcloudsSshMachineLocation) origJcloudsLoc.obtain(ImmutableMap.of("imageId", SOFTLAYER_IMAGE_ID));
         
@@ -211,6 +218,13 @@ public class JcloudsRebindStubTest extends RebindTestFixtureWithApp {
         assertEquals(newJcloudsLoc.getProvider(), origJcloudsLoc.getProvider());
     }
     
+    protected JcloudsLocation newJcloudsLocation(ComputeServiceRegistry computeServiceRegistry) throws Exception {
+        return (JcloudsLocation) mgmt().getLocationRegistry().getLocationManaged("jclouds:softlayer", ImmutableMap.of(
+                JcloudsLocation.COMPUTE_SERVICE_REGISTRY, computeServiceRegistry, 
+                JcloudsLocation.WAIT_FOR_SSHABLE, false,
+                JcloudsLocation.USE_JCLOUDS_SSH_INIT, false));
+    }
+    
     protected static class ByonComputeServiceRegistry extends ComputeServiceRegistryImpl implements ComputeServiceRegistry {
         private final NodeMetadata node;