You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2015/08/11 22:42:48 UTC
[10/18] incubator-brooklyn git commit: Adds sensor-notifications for
GROUP_ADDED/REMOVED
Adds sensor-notifications for GROUP_ADDED/REMOVED
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/0d9372ba
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/0d9372ba
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/0d9372ba
Branch: refs/heads/master
Commit: 0d9372babc4ec92e9b85e351142b8ea57000850b
Parents: 70dfb20
Author: Aled Sage <al...@gmail.com>
Authored: Wed May 27 11:47:19 2015 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Aug 11 20:04:29 2015 +0100
----------------------------------------------------------------------
.../brooklyn/entity/basic/AbstractEntity.java | 24 +++++---
.../brooklyn/entity/basic/EntityTypeTest.java | 5 +-
.../java/brooklyn/entity/group/GroupTest.java | 58 ++++++++++++++------
.../basic/RecordingSensorEventListener.java | 2 +-
4 files changed, 62 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0d9372ba/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
index aa40158..dfc8d35 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
@@ -119,9 +119,6 @@ import com.google.common.collect.Sets;
* <p>
* Note that config is typically inherited by children, whereas the fields and attributes are not.
* <p>
- * Though currently Groovy code, this is very likely to change to pure Java in a future release of
- * Brooklyn so Groovy'isms should not be relied on.
- * <p>
* Sub-classes should have a no-argument constructor. When brooklyn creates an entity, it will:
* <ol>
* <li>Construct the entity via the no-argument constructor
@@ -172,6 +169,11 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
public static final BasicNotificationSensor<Entity> CHILD_REMOVED = new BasicNotificationSensor<Entity>(Entity.class,
"entity.children.removed", "Child dynamically removed from entity");
+ public static final BasicNotificationSensor<Group> GROUP_ADDED = new BasicNotificationSensor<Group>(Group.class,
+ "entity.group.added", "Group dynamically added to entity");
+ public static final BasicNotificationSensor<Group> GROUP_REMOVED = new BasicNotificationSensor<Group>(Group.class,
+ "entity.group.removed", "Group dynamically removed from entity");
+
static {
RendererHints.register(Entity.class, RendererHints.displayValue(EntityFunctions.displayName()));
}
@@ -673,15 +675,23 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
}
@Override
- public void addGroup(Group e) {
- groups.add(e);
+ public void addGroup(Group group) {
+ boolean changed = groups.add(group);
getApplication();
+
+ if (changed) {
+ emit(AbstractEntity.GROUP_ADDED, group);
+ }
}
@Override
- public void removeGroup(Group e) {
- groups.remove(e);
+ public void removeGroup(Group group) {
+ boolean changed = groups.remove(group);
getApplication();
+
+ if (changed) {
+ emit(AbstractEntity.GROUP_REMOVED, group);
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0d9372ba/core/src/test/java/brooklyn/entity/basic/EntityTypeTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/EntityTypeTest.java b/core/src/test/java/brooklyn/entity/basic/EntityTypeTest.java
index 7035ccd..ea27129 100644
--- a/core/src/test/java/brooklyn/entity/basic/EntityTypeTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/EntityTypeTest.java
@@ -23,6 +23,8 @@ import static brooklyn.entity.basic.AbstractEntity.CHILD_REMOVED;
import static brooklyn.entity.basic.AbstractEntity.EFFECTOR_ADDED;
import static brooklyn.entity.basic.AbstractEntity.EFFECTOR_CHANGED;
import static brooklyn.entity.basic.AbstractEntity.EFFECTOR_REMOVED;
+import static brooklyn.entity.basic.AbstractEntity.GROUP_ADDED;
+import static brooklyn.entity.basic.AbstractEntity.GROUP_REMOVED;
import static brooklyn.entity.basic.AbstractEntity.LOCATION_ADDED;
import static brooklyn.entity.basic.AbstractEntity.LOCATION_REMOVED;
import static brooklyn.entity.basic.AbstractEntity.POLICY_ADDED;
@@ -72,7 +74,8 @@ public class EntityTypeTest extends BrooklynAppUnitTestSupport {
EFFECTOR_ADDED, EFFECTOR_REMOVED, EFFECTOR_CHANGED,
POLICY_ADDED, POLICY_REMOVED,
CHILD_ADDED, CHILD_REMOVED,
- LOCATION_ADDED, LOCATION_REMOVED);
+ LOCATION_ADDED, LOCATION_REMOVED,
+ GROUP_ADDED, GROUP_REMOVED);
public static class EmptyEntityForTesting extends AbstractEntity {}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0d9372ba/core/src/test/java/brooklyn/entity/group/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/GroupTest.java b/core/src/test/java/brooklyn/entity/group/GroupTest.java
index 43a31c0..013b55e 100644
--- a/core/src/test/java/brooklyn/entity/group/GroupTest.java
+++ b/core/src/test/java/brooklyn/entity/group/GroupTest.java
@@ -20,49 +20,43 @@ package brooklyn.entity.group;
import static org.testng.Assert.assertEquals;
-import org.testng.annotations.AfterMethod;
+import org.apache.brooklyn.entity.basic.RecordingSensorEventListener;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+import brooklyn.entity.BrooklynAppUnitTestSupport;
import brooklyn.entity.Entity;
+import brooklyn.entity.Group;
+import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.basic.BasicGroup;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.proxying.EntitySpec;
import brooklyn.location.LocationSpec;
import brooklyn.location.basic.SimulatedLocation;
import brooklyn.test.Asserts;
-import brooklyn.test.entity.TestApplication;
import brooklyn.test.entity.TestEntity;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-
-public class GroupTest {
+public class GroupTest extends BrooklynAppUnitTestSupport {
- private static final int TIMEOUT_MS = 2000;
-
- private TestApplication app;
private BasicGroup group;
private TestEntity entity1;
private TestEntity entity2;
SimulatedLocation loc;
-
- @BeforeMethod
- public void setUp() {
- app = TestApplication.Factory.newManagedInstanceForTests();
+ @BeforeMethod(alwaysRun=true)
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
loc = app.getManagementContext().getLocationManager().createLocation(LocationSpec.create(SimulatedLocation.class));
group = app.createAndManageChild(EntitySpec.create(BasicGroup.class));
entity1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
entity2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
}
- @AfterMethod(alwaysRun = true)
- public void tearDown(){
- if (app != null) Entities.destroyAll(app.getManagementContext());
- }
-
@Test
public void testAddRemoveMembers() throws Exception {
group.addMember(entity1);
@@ -115,6 +109,34 @@ public class GroupTest {
Entities.unmanage(entity1);
}
+ @Test
+ public void testAddingAndRemovingGroupEmitsNotification() throws Exception {
+ final RecordingSensorEventListener<Group> groupAddedListener = new RecordingSensorEventListener<>();
+ final RecordingSensorEventListener<Group> groupRemovedListener = new RecordingSensorEventListener<>();
+ mgmt.getSubscriptionManager().subscribe(entity1, AbstractEntity.GROUP_ADDED, groupAddedListener);
+ mgmt.getSubscriptionManager().subscribe(entity1, AbstractEntity.GROUP_REMOVED, groupRemovedListener);
+
+ entity1.addGroup(group);
+ Asserts.succeedsEventually(new Runnable() {
+ public void run() {
+ String msg = "events="+groupAddedListener.getEvents();
+ assertEquals(groupAddedListener.getEvents().size(), 1, msg);
+ assertEquals(groupAddedListener.getEvents().get(0).getSource(), entity1, msg);
+ assertEquals(groupAddedListener.getEvents().get(0).getSensor(), AbstractEntity.GROUP_ADDED, msg);
+ }});
+ assertEquals(groupRemovedListener.getEvents().size(), 0, "events="+groupRemovedListener.getEvents());
+
+ entity1.removeGroup(group);
+ Asserts.succeedsEventually(new Runnable() {
+ public void run() {
+ String msg = "events="+groupRemovedListener.getEvents();
+ assertEquals(groupRemovedListener.getEvents().size(), 1, msg);
+ assertEquals(groupRemovedListener.getEvents().get(0).getSource(), entity1, msg);
+ assertEquals(groupRemovedListener.getEvents().get(0).getSensor(), AbstractEntity.GROUP_REMOVED, msg);
+ }});
+ assertEquals(groupAddedListener.getEvents().size(), 1, "events="+groupAddedListener.getEvents());
+ }
+
private void assertGroupMembers(Entity... expectedMembers) {
Asserts.assertEqualsIgnoringOrder(group.getMembers(), ImmutableList.copyOf(expectedMembers));
assertEquals(group.getAttribute(BasicGroup.GROUP_SIZE), (Integer)expectedMembers.length);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0d9372ba/core/src/test/java/org/apache/brooklyn/entity/basic/RecordingSensorEventListener.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/entity/basic/RecordingSensorEventListener.java b/core/src/test/java/org/apache/brooklyn/entity/basic/RecordingSensorEventListener.java
index 067b7d4..3cfcb27 100644
--- a/core/src/test/java/org/apache/brooklyn/entity/basic/RecordingSensorEventListener.java
+++ b/core/src/test/java/org/apache/brooklyn/entity/basic/RecordingSensorEventListener.java
@@ -63,7 +63,7 @@ public class RecordingSensorEventListener<T> implements SensorEventListener<T>,
/**
* @return An immutable iterable of the recorded events.
*/
- public Iterable<SensorEvent<T>> getEvents() {
+ public List<SensorEvent<T>> getEvents() {
return ImmutableList.copyOf(events);
}