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/09/23 11:39:55 UTC

[1/4] brooklyn-server git commit: Move usage listener tests to core from software-base

Repository: brooklyn-server
Updated Branches:
  refs/heads/master 1db462a3f -> cb9212601


Move usage listener tests to core from software-base


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

Branch: refs/heads/master
Commit: 136dd111e681ee50f13adc7435df84f635337cf2
Parents: f4281af
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Thu Sep 22 11:31:38 2016 +0100
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Thu Sep 22 11:31:38 2016 +0100

----------------------------------------------------------------------
 .../mgmt/internal/LocalUsageManagerTest.java    | 102 ++++++++++++++++++
 .../core/mgmt/usage/RecordingUsageListener.java |  69 ++++++++++++
 .../usage/ApplicationUsageTrackingTest.java     |   1 +
 .../mgmt/usage/LocationUsageTrackingTest.java   |   3 +-
 .../core/mgmt/usage/RecordingUsageListener.java |  68 ------------
 .../test/core/mgmt/usage/UsageListenerTest.java | 107 -------------------
 6 files changed, 173 insertions(+), 177 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/136dd111/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManagerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManagerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManagerTest.java
new file mode 100644
index 0000000..e29255a
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManagerTest.java
@@ -0,0 +1,102 @@
+/*
+ * 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.core.mgmt.internal;
+
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.core.internal.BrooklynProperties;
+import org.apache.brooklyn.core.mgmt.usage.RecordingUsageListener;
+import org.apache.brooklyn.core.mgmt.usage.UsageListener;
+import org.apache.brooklyn.core.mgmt.usage.UsageManager;
+import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
+import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.test.Asserts;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+public class LocalUsageManagerTest extends BrooklynAppUnitTestSupport {
+
+    // Also see {Application|Location}UsageTrackingTest for listener functionality
+
+    @Override
+    protected boolean shouldSkipOnBoxBaseDirResolution() {
+        return true;
+    }
+
+    @Override
+    @BeforeMethod(alwaysRun=true)
+    public void setUp() throws Exception {
+        RecordingStaticUsageListener.clearInstances();
+        super.setUp();
+    }
+
+    @Override
+    @AfterMethod(alwaysRun=true)
+    public void tearDown() throws Exception {
+        super.tearDown();
+        RecordingStaticUsageListener.clearInstances();
+    }
+
+    @Test
+    public void testAddUsageListenerInstance() throws Exception {
+        BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newEmpty();
+        brooklynProperties.put(UsageManager.USAGE_LISTENERS, RecordingStaticUsageListener.class.getName());
+        mgmt = LocalManagementContextForTests.newInstance(brooklynProperties);
+        assertUsageListenerCalledWhenApplicationStarted();
+    }
+
+    private void assertUsageListenerCalledWhenApplicationStarted() {
+        app = TestApplication.Factory.newManagedInstanceForTests(mgmt);
+        app.start(ImmutableList.<Location>of());
+
+        Asserts.succeedsEventually(new Runnable() {
+            @Override public void run() {
+                List<List<?>> events = RecordingStaticUsageListener.getInstance().getApplicationEvents();
+                assertTrue(events.size() > 0, "events="+events); // expect some events
+            }});
+    }
+
+    public static class RecordingStaticUsageListener extends RecordingUsageListener implements UsageListener {
+        private static final List<RecordingStaticUsageListener> STATIC_INSTANCES = Lists.newCopyOnWriteArrayList();
+
+        public static RecordingStaticUsageListener getInstance() {
+            return Iterables.getOnlyElement(STATIC_INSTANCES);
+        }
+
+        public static void clearInstances() {
+            STATIC_INSTANCES.clear();
+        }
+
+        public RecordingStaticUsageListener() {
+            // Bad to leak a ref to this before constructor finished, but we'll live with it because
+            // it's just test code!
+            STATIC_INSTANCES.add(this);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/136dd111/core/src/test/java/org/apache/brooklyn/core/mgmt/usage/RecordingUsageListener.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/usage/RecordingUsageListener.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/usage/RecordingUsageListener.java
new file mode 100644
index 0000000..73f50d6
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/usage/RecordingUsageListener.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.core.mgmt.usage;
+
+import java.util.List;
+
+import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage.ApplicationEvent;
+import org.apache.brooklyn.core.mgmt.usage.LocationUsage.LocationEvent;
+import org.apache.brooklyn.core.mgmt.usage.UsageListener;
+import org.apache.brooklyn.util.collections.MutableList;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+
+public class RecordingUsageListener implements UsageListener {
+
+    private final List<List<?>> events = Lists.newCopyOnWriteArrayList();
+    
+    @Override
+    public void onApplicationEvent(ApplicationMetadata app, ApplicationEvent event) {
+        events.add(MutableList.of("application", app, event));
+    }
+
+    @Override
+    public void onLocationEvent(LocationMetadata loc, LocationEvent event) {
+        events.add(MutableList.of("location", loc, event));
+    }
+    
+    public void clearEvents() {
+        events.clear();
+    }
+    
+    public List<List<?>> getEvents() {
+        return ImmutableList.copyOf(events);
+    }
+    
+    public List<List<?>> getLocationEvents() {
+        List<List<?>> result = Lists.newArrayList();
+        for (List<?> event : events) {
+            if (event.get(0).equals("location")) result.add(event);
+        }
+        return ImmutableList.copyOf(result);
+    }
+    
+    public List<List<?>> getApplicationEvents() {
+        List<List<?>> result = Lists.newArrayList();
+        for (List<?> event : events) {
+            if (event.get(0).equals("application")) result.add(event);
+        }
+        return ImmutableList.copyOf(result);
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/136dd111/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java
index 9fc5a0f..adcf6bc 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/ApplicationUsageTrackingTest.java
@@ -32,6 +32,7 @@ import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage;
 import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage.ApplicationEvent;
+import org.apache.brooklyn.core.mgmt.usage.RecordingUsageListener;
 import org.apache.brooklyn.core.mgmt.usage.UsageListener.ApplicationMetadata;
 import org.apache.brooklyn.core.objs.proxy.EntityProxy;
 import org.apache.brooklyn.core.test.BrooklynMgmtUnitTestSupport;

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/136dd111/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java
index 4419567..9eb1f94 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/LocationUsageTrackingTest.java
@@ -30,16 +30,15 @@ import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.location.LocationSpec;
-import org.apache.brooklyn.api.location.MachineLocation;
 import org.apache.brooklyn.api.location.NoMachinesAvailableException;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.location.Machines;
 import org.apache.brooklyn.core.mgmt.usage.LocationUsage;
 import org.apache.brooklyn.core.mgmt.usage.LocationUsage.LocationEvent;
+import org.apache.brooklyn.core.mgmt.usage.RecordingUsageListener;
 import org.apache.brooklyn.core.mgmt.usage.UsageListener.LocationMetadata;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
 import org.apache.brooklyn.entity.software.base.SoftwareProcessEntityTest;
-import org.apache.brooklyn.location.byon.FixedListMachineProvisioningLocation;
 import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.test.Asserts;

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/136dd111/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingUsageListener.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingUsageListener.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingUsageListener.java
deleted file mode 100644
index 3a54178..0000000
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/RecordingUsageListener.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.entity.software.base.test.core.mgmt.usage;
-
-import java.util.List;
-
-import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage.ApplicationEvent;
-import org.apache.brooklyn.core.mgmt.usage.LocationUsage.LocationEvent;
-import org.apache.brooklyn.core.mgmt.usage.UsageListener;
-import org.apache.brooklyn.util.collections.MutableList;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-public class RecordingUsageListener implements UsageListener {
-
-    private final List<List<?>> events = Lists.newCopyOnWriteArrayList();
-    
-    @Override
-    public void onApplicationEvent(ApplicationMetadata app, ApplicationEvent event) {
-        events.add(MutableList.of("application", app, event));
-    }
-
-    @Override
-    public void onLocationEvent(LocationMetadata loc, LocationEvent event) {
-        events.add(MutableList.of("location", loc, event));
-    }
-    
-    public void clearEvents() {
-        events.clear();
-    }
-    
-    public List<List<?>> getEvents() {
-        return ImmutableList.copyOf(events);
-    }
-    
-    public List<List<?>> getLocationEvents() {
-        List<List<?>> result = Lists.newArrayList();
-        for (List<?> event : events) {
-            if (event.get(0).equals("location")) result.add(event);
-        }
-        return ImmutableList.copyOf(result);
-    }
-    
-    public List<List<?>> getApplicationEvents() {
-        List<List<?>> result = Lists.newArrayList();
-        for (List<?> event : events) {
-            if (event.get(0).equals("application")) result.add(event);
-        }
-        return ImmutableList.copyOf(result);
-    }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/136dd111/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/UsageListenerTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/UsageListenerTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/UsageListenerTest.java
deleted file mode 100644
index b517920..0000000
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/core/mgmt/usage/UsageListenerTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.entity.software.base.test.core.mgmt.usage;
-
-import static org.testng.Assert.assertTrue;
-
-import java.util.List;
-
-import org.apache.brooklyn.test.Asserts;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
-import org.apache.brooklyn.core.mgmt.usage.UsageListener;
-import org.apache.brooklyn.core.mgmt.usage.UsageManager;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.core.test.entity.TestApplication;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-public class UsageListenerTest {
-
-    // Also see {Application|Location}UsageTrackingTest for listener functionality
-    
-    private static final Logger LOG = LoggerFactory.getLogger(ApplicationUsageTrackingTest.class);
-
-    protected TestApplication app;
-    protected ManagementContextInternal mgmt;
-
-    protected boolean shouldSkipOnBoxBaseDirResolution() {
-        return true;
-    }
-
-    @BeforeMethod(alwaysRun=true)
-    public void setUp() throws Exception {
-        RecordingStaticUsageListener.clearInstances();
-    }
-
-    @AfterMethod(alwaysRun=true)
-    public void tearDown() throws Exception {
-        try {
-            if (mgmt != null) Entities.destroyAll(mgmt);
-        } catch (Throwable t) {
-            LOG.error("Caught exception in tearDown method", t);
-        } finally {
-            mgmt = null;
-            RecordingStaticUsageListener.clearInstances();
-        }
-    }
-
-    @Test
-    public void testAddUsageListenerViaProperties() throws Exception {
-        BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newEmpty();
-        brooklynProperties.put(UsageManager.USAGE_LISTENERS, RecordingStaticUsageListener.class.getName());
-        mgmt = LocalManagementContextForTests.newInstance(brooklynProperties);
-        
-        app = TestApplication.Factory.newManagedInstanceForTests(mgmt);
-        app.start(ImmutableList.<Location>of());
-
-        Asserts.succeedsEventually(new Runnable() {
-            @Override public void run() {
-                List<List<?>> events = RecordingStaticUsageListener.getInstance().getApplicationEvents();
-                assertTrue(events.size() > 0, "events="+events); // expect some events
-            }});
-    }
-    
-    public static class RecordingStaticUsageListener extends RecordingUsageListener implements UsageListener {
-        private static final List<RecordingStaticUsageListener> STATIC_INSTANCES = Lists.newCopyOnWriteArrayList();
-        
-        public static RecordingStaticUsageListener getInstance() {
-            return Iterables.getOnlyElement(STATIC_INSTANCES);
-        }
-
-        public static void clearInstances() {
-            STATIC_INSTANCES.clear();
-        }
-        
-        public RecordingStaticUsageListener() {
-            // Bad to leak a ref to this before constructor finished, but we'll live with it because
-            // it's just test code!
-            STATIC_INSTANCES.add(this);
-        }
-    }
-}


[2/4] brooklyn-server git commit: JcloudsLocation loads image chooser class with ClassLoaderUtils

Posted by sv...@apache.org.
JcloudsLocation loads image chooser class with ClassLoaderUtils


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

Branch: refs/heads/master
Commit: 5b019f01e042b7bf49732a1e141835b2b4c099a9
Parents: 136dd11
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Thu Sep 22 16:02:59 2016 +0100
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Thu Sep 22 17:06:37 2016 +0100

----------------------------------------------------------------------
 .../apache/brooklyn/location/jclouds/JcloudsLocation.java   | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5b019f01/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index 29fbfce..b957130 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -90,6 +90,7 @@ import org.apache.brooklyn.util.collections.CollectionMerger;
 import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.collections.MutableSet;
+import org.apache.brooklyn.util.core.ClassLoaderUtils;
 import org.apache.brooklyn.util.core.ResourceUtils;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.apache.brooklyn.util.core.config.ResolvingConfigBag;
@@ -1606,7 +1607,13 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
         Object rawVal = config.getStringKey(JcloudsLocationConfig.IMAGE_CHOOSER.getName());
         if (rawVal instanceof String && Strings.isNonBlank((String)rawVal)) {
             // Configured with a string: it could be a class that we need to instantiate
-            Maybe<?> instance = Reflections.invokeConstructorFromArgs(getManagementContext().getCatalogClassLoader(), (String)rawVal);
+            Class<?> clazz;
+            try {
+                clazz = new ClassLoaderUtils(this.getClass(), getManagementContext()).loadClass((String)rawVal);
+            } catch (ClassNotFoundException e) {
+                throw new IllegalStateException("Could not load configured ImageChooser " + rawVal, e);
+            }
+            Maybe<?> instance = Reflections.invokeConstructorFromArgs(clazz);
             if (!instance.isPresent()) {
                 throw new IllegalStateException("Failed to create ImageChooser "+rawVal+" for location "+this);
             } else if (!(instance.get() instanceof Function)) {


[3/4] brooklyn-server git commit: UsageListener loads class from ClassLoaderUtils

Posted by sv...@apache.org.
UsageListener loads class from ClassLoaderUtils

Rather than using LocalUsageManager's class loader


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

Branch: refs/heads/master
Commit: 8acee9fcf1cf1e03e1c1223ffcb4c54c4602e2cf
Parents: 5b019f0
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Thu Sep 22 15:45:32 2016 +0100
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Thu Sep 22 17:06:37 2016 +0100

----------------------------------------------------------------------
 .../core/mgmt/internal/LocalUsageManager.java   | 42 ++++++++++++--------
 .../brooklyn/core/mgmt/usage/UsageManager.java  | 10 ++---
 .../mgmt/internal/LocalUsageManagerTest.java    | 15 +++++++
 3 files changed, 46 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8acee9fc/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java
index 50df5c8..ba8c665 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManager.java
@@ -48,6 +48,7 @@ import org.apache.brooklyn.core.mgmt.usage.ApplicationUsage;
 import org.apache.brooklyn.core.mgmt.usage.LocationUsage;
 import org.apache.brooklyn.core.mgmt.usage.UsageListener;
 import org.apache.brooklyn.core.mgmt.usage.UsageManager;
+import org.apache.brooklyn.util.core.ClassLoaderUtils;
 import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
@@ -140,11 +141,17 @@ public class LocalUsageManager implements UsageManager {
     static {
         TypeCoercions.registerAdapter(String.class, UsageListener.class, new Function<String, UsageListener>() {
             @Override public UsageListener apply(String input) {
-                // TODO Want to use classLoader = mgmt.getCatalog().getRootClassLoader();
-                ClassLoader classLoader = LocalUsageManager.class.getClassLoader();
-                Maybe<Object> result = Reflections.invokeConstructorFromArgs(classLoader, input);
-                if (result.isPresent()) {
+                Class<?> clazz;
+                try {
+                    clazz = new ClassLoaderUtils(this.getClass()).loadClass(input);
+                } catch (ClassNotFoundException e) {
+                    throw new IllegalStateException("Failed to load usage listener class: " + input, e);
+                }
+                Maybe<Object> result = Reflections.invokeConstructorFromArgs(clazz);
+                if (result.isPresentAndNonNull() && result.get() instanceof UsageListener) {
                     return (UsageListener) result.get();
+                } else if (result.isPresent()) {
+                    throw new IllegalStateException("Object is not a UsageListener: " + result.get());
                 } else {
                     throw new IllegalStateException("Failed to create UsageListener from class name '"+input+"' using no-arg constructor");
                 }
@@ -173,20 +180,23 @@ public class LocalUsageManager implements UsageManager {
     public LocalUsageManager(LocalManagementContext managementContext) {
         this.managementContext = checkNotNull(managementContext, "managementContext");
         
-        // TODO Once org.apache.brooklyn.core.management.internal.UsageManager.UsageListener is deleted, restore this
-        // to normal generics!
+        // Although changing listeners to Collection<UsageListener> is valid at compile time
+        // the collection will contain any objects that could not be coerced by the function
+        // declared above. Generally this means any string declared in brooklyn.properties
+        // that is not a UsageListener.
         Collection<?> listeners = managementContext.getBrooklynProperties().getConfig(UsageManager.USAGE_LISTENERS);
         if (listeners != null) {
-            for (Object listener : listeners) {
-                if (listener instanceof ManagementContextInjectable) {
-                    ((ManagementContextInjectable)listener).setManagementContext(managementContext);
-                }
-                if (listener instanceof UsageListener) {
-                    addUsageListener((UsageListener)listener);
-                } else if (listener == null) {
-                    throw new NullPointerException("null listener in config "+UsageManager.USAGE_LISTENERS);
+            for (Object obj : listeners) {
+                if (obj == null) {
+                    throw new NullPointerException("null listener in config " + UsageManager.USAGE_LISTENERS);
+                } else if (!(obj instanceof UsageListener)) {
+                    throw new ClassCastException("Configured object is not a UsageListener. This probably means coercion failed: " + obj);
                 } else {
-                    throw new ClassCastException("listener "+listener+" of type "+listener.getClass()+" is not of type "+UsageListener.class.getName());
+                    UsageListener listener = (UsageListener) obj;
+                    if (listener instanceof ManagementContextInjectable) {
+                        ((ManagementContextInjectable) listener).setManagementContext(managementContext);
+                    }
+                    addUsageListener(listener);
                 }
             }
         }
@@ -424,7 +434,7 @@ public class LocalUsageManager implements UsageManager {
 
     @Override
     public void addUsageListener(UsageListener listener) {
-        listeners.add(listener);
+        listeners.add(checkNotNull(listener, "listener"));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8acee9fc/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java
index 1bc7d78..3e74ff0 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/usage/UsageManager.java
@@ -36,13 +36,13 @@ import com.google.common.reflect.TypeToken;
 @Beta
 public interface UsageManager {
 
-    @SuppressWarnings("serial")
-    public static final ConfigKey<List<UsageListener>> USAGE_LISTENERS = ConfigKeys.newConfigKey(
+    ConfigKey<List<UsageListener>> USAGE_LISTENERS = ConfigKeys.newConfigKey(
             new TypeToken<List<UsageListener>>() {},
-            "brooklyn.usageManager.listeners", "Optional usage listeners (i.e. for metering)",
+            "brooklyn.usageManager.listeners",
+            "Optional list of usage listener instances (e.g. for metering)",
             ImmutableList.<UsageListener>of());
-    
-    public static final ConfigKey<Duration> USAGE_LISTENER_TERMINATION_TIMEOUT = ConfigKeys.newConfigKey(
+
+    ConfigKey<Duration> USAGE_LISTENER_TERMINATION_TIMEOUT = ConfigKeys.newConfigKey(
             Duration.class,
             "brooklyn.usageManager.listeners.timeout",
             "Timeout on termination, to wait for queue of usage listener events to be processed",

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8acee9fc/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManagerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManagerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManagerTest.java
index e29255a..362c390 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManagerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalUsageManagerTest.java
@@ -66,11 +66,26 @@ public class LocalUsageManagerTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testAddUsageListenerInstance() throws Exception {
         BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newEmpty();
+        brooklynProperties.put(UsageManager.USAGE_LISTENERS, ImmutableList.of(new RecordingStaticUsageListener()));
+        mgmt = LocalManagementContextForTests.newInstance(brooklynProperties);
+        assertUsageListenerCalledWhenApplicationStarted();
+    }
+
+    @Test
+    public void testAddUsageListenerViaProperties() throws Exception {
+        BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newEmpty();
         brooklynProperties.put(UsageManager.USAGE_LISTENERS, RecordingStaticUsageListener.class.getName());
         mgmt = LocalManagementContextForTests.newInstance(brooklynProperties);
         assertUsageListenerCalledWhenApplicationStarted();
     }
 
+    @Test(expectedExceptions = ClassCastException.class)
+    public void testErrorWhenConfiguredClassIsNotAUsageListener() {
+        BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newEmpty();
+        brooklynProperties.put(UsageManager.USAGE_LISTENERS, Integer.class.getName());
+        mgmt = LocalManagementContextForTests.newInstance(brooklynProperties);
+    }
+
     private void assertUsageListenerCalledWhenApplicationStarted() {
         app = TestApplication.Factory.newManagedInstanceForTests(mgmt);
         app.start(ImmutableList.<Location>of());


[4/4] brooklyn-server git commit: Closes #342

Posted by sv...@apache.org.
Closes #342

Load usage listeners from bundles

And JcloudsLocation's image choosers.


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

Branch: refs/heads/master
Commit: cb92126016e35bc80d24ab93b15221301fdc5c07
Parents: 1db462a 8acee9f
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Fri Sep 23 14:39:45 2016 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Fri Sep 23 14:39:45 2016 +0300

----------------------------------------------------------------------
 .../core/mgmt/internal/LocalUsageManager.java   |  42 ++++---
 .../brooklyn/core/mgmt/usage/UsageManager.java  |  10 +-
 .../mgmt/internal/LocalUsageManagerTest.java    | 117 +++++++++++++++++++
 .../core/mgmt/usage/RecordingUsageListener.java |  69 +++++++++++
 .../location/jclouds/JcloudsLocation.java       |   9 +-
 .../usage/ApplicationUsageTrackingTest.java     |   1 +
 .../mgmt/usage/LocationUsageTrackingTest.java   |   3 +-
 .../core/mgmt/usage/RecordingUsageListener.java |  68 -----------
 .../test/core/mgmt/usage/UsageListenerTest.java | 107 -----------------
 9 files changed, 227 insertions(+), 199 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cb921260/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------