@Test public void testUnsubscribeUsingHandleStopsEvents() { SubscriptionHandle handle1 = loc.subscriptions().subscribe(observedEntity, TestEntity.SEQUENCE, listener); SubscriptionHandle handle2 = loc.subscriptions().subscribe(observedEntity, TestEntity.NAME, listener); SubscriptionHandle handle3 = loc.subscriptions().subscribe(otherEntity, TestEntity.SEQUENCE, listener); loc.subscriptions().unsubscribe(observedEntity, handle2); observedEntity.sensors().set(TestEntity.SEQUENCE, 123); observedEntity.sensors().set(TestEntity.NAME, "myname"); otherEntity.sensors().set(TestEntity.SEQUENCE, 456); Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(listener.getEvents(), ImmutableList.of( new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, observedEntity, 123), new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, otherEntity, 456))); }}); }
@Test public void testUnsubscribeRemovesAllSubscriptionsForThatEntity() { loc.subscriptions().subscribe(observedEntity, TestEntity.SEQUENCE, listener); loc.subscriptions().subscribe(observedEntity, TestEntity.NAME, listener); loc.subscriptions().subscribe(observedEntity, TestEntity.MY_NOTIF, listener); loc.subscriptions().subscribe(otherEntity, TestEntity.SEQUENCE, listener); loc.subscriptions().unsubscribe(observedEntity); observedEntity.sensors().set(TestEntity.SEQUENCE, 123); observedEntity.sensors().set(TestEntity.NAME, "myname"); observedEntity.sensors().emit(TestEntity.MY_NOTIF, 123); otherEntity.sensors().set(TestEntity.SEQUENCE, 456); Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(listener.getEvents(), ImmutableList.of( new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, otherEntity, 456))); }}); }
@Test public void testSubscriptionReceivesEventsInOrder() { final int NUM_EVENTS = 100; loc.subscriptions().subscribe(observedEntity, TestEntity.MY_NOTIF, listener); for (int i = 0; i < NUM_EVENTS; i++) { observedEntity.sensors().emit(TestEntity.MY_NOTIF, i); } Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(Iterables.size(listener.getEvents()), NUM_EVENTS); for (int i = 0; i < NUM_EVENTS; i++) { assertEquals(Iterables.get(listener.getEvents(), i).getValue(), i); } }}); }
@Test(groups="Integration") public void testSubscribeToMembersIgnoresEventsForDynamicallyRemovedMembers() { loc.subscriptions().subscribeToMembers(observedGroup, TestEntity.SEQUENCE, listener); observedGroup.removeMember(observedMemberEntity); observedMemberEntity.sensors().set(TestEntity.SEQUENCE, 123); Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(listener.getEvents(), ImmutableList.of()); }}); }
@Test public void testSubscribeToChildrenReceivesEvents() { loc.subscriptions().subscribeToChildren(observedEntity, TestEntity.SEQUENCE, listener); observedChildEntity.sensors().set(TestEntity.SEQUENCE, 123); observedEntity.sensors().set(TestEntity.SEQUENCE, 456); Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(listener.getEvents(), ImmutableList.of( new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, observedChildEntity, 123))); }}); }
@Test public void testSubscribeToMembersReceivesEvents() { loc.subscriptions().subscribeToMembers(observedGroup, TestEntity.SEQUENCE, listener); observedMemberEntity.sensors().set(TestEntity.SEQUENCE, 123); observedGroup.sensors().set(TestEntity.SEQUENCE, 456); Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(listener.getEvents(), ImmutableList.of( new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, observedMemberEntity, 123))); }}); }
@Test public void testSubscribeToChildrenReceivesEventsForDynamicallyAddedChildren() { loc.subscriptions().subscribeToChildren(observedEntity, TestEntity.SEQUENCE, listener); final TestEntity observedChildEntity2 = observedEntity.createAndManageChild(EntitySpec.create(TestEntity.class)); observedChildEntity2.sensors().set(TestEntity.SEQUENCE, 123); Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(listener.getEvents(), ImmutableList.of( new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, observedChildEntity2, 123))); }}); }
@Test public void testSubscriptionReceivesEvents() { loc.subscriptions().subscribe(observedEntity, TestEntity.SEQUENCE, listener); loc.subscriptions().subscribe(observedEntity, TestEntity.NAME, listener); loc.subscriptions().subscribe(observedEntity, TestEntity.MY_NOTIF, listener); otherEntity.sensors().set(TestEntity.SEQUENCE, 123); observedEntity.sensors().set(TestEntity.SEQUENCE, 123); observedEntity.sensors().set(TestEntity.NAME, "myname"); observedEntity.sensors().emit(TestEntity.MY_NOTIF, 456); Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(listener.getEvents(), ImmutableList.of( new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, observedEntity, 123), new BasicSensorEvent<String>(TestEntity.NAME, observedEntity, "myname"), new BasicSensorEvent<Integer>(TestEntity.MY_NOTIF, observedEntity, 456))); }}); }
@Test public void testSubscriptionToAllReceivesEvents() { loc.subscriptions().subscribe(null, TestEntity.SEQUENCE, listener); observedEntity.sensors().set(TestEntity.SEQUENCE, 123); otherEntity.sensors().set(TestEntity.SEQUENCE, 456); Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(listener.getEvents(), ImmutableList.of( new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, observedEntity, 123), new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, otherEntity, 456))); }}); }
@Test public void testSubscribeToMembersReceivesEventsForDynamicallyAddedMembers() { loc.subscriptions().subscribeToMembers(observedGroup, TestEntity.SEQUENCE, listener); final TestEntity observedMemberEntity2 = app.createAndManageChild(EntitySpec.create(TestEntity.class)); observedGroup.addMember(observedMemberEntity2); observedMemberEntity2.sensors().set(TestEntity.SEQUENCE, 123); Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertEquals(listener.getEvents(), ImmutableList.of( new BasicSensorEvent<Integer>(TestEntity.SEQUENCE, observedMemberEntity2, 123))); }}); }