@Test public void testSubscribeToMemberAttributeChange() throws Exception { BasicGroup group = app.createAndManageChild(EntitySpec.create(BasicGroup.class)); TestEntity member = app.createAndManageChild(EntitySpec.create(TestEntity.class)); group.addMember(member); final List<SensorEvent<Integer>> events = new CopyOnWriteArrayList<SensorEvent<Integer>>(); final CountDownLatch latch = new CountDownLatch(1); app.subscriptions().subscribeToMembers(group, TestEntity.SEQUENCE, new SensorEventListener<Integer>() { @Override public void onEvent(SensorEvent<Integer> event) { events.add(event); latch.countDown(); }}); member.sensors().set(TestEntity.SEQUENCE, 123); if (!latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)) { fail("Timeout waiting for Event on parent TestEntity listener"); } assertEquals(events.size(), 1); assertEquals(events.get(0).getValue(), (Integer)123); assertEquals(events.get(0).getSensor(), TestEntity.SEQUENCE); assertEquals(events.get(0).getSource().getId(), member.getId()); }
@Test(groups="Integration") public void testSubscribeToMembersIgnoresEventsForDynamicallyRemovedMembers() { entity.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 testSubscribeToMembersReceivesEvents() { entity.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 testSubscribeToMembersReceivesEventsForDynamicallyAddedMembers() { entity.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))); }}); }