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
----------------------------------------------------------------------