use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class FirmwareUpdateServiceTest method testBackgroundTransfer.
@Test
public void testBackgroundTransfer() throws Exception {
Map<String, String> props = new HashMap<>();
props.put(Thing.PROPERTY_FIRMWARE_VERSION, V111);
Thing thing4 = ThingBuilder.create(THING_TYPE_UID3, THING4_ID).withProperties(props).build();
FirmwareUpdateBackgroundTransferHandler handler4 = mock(FirmwareUpdateBackgroundTransferHandler.class);
when(handler4.getThing()).thenReturn(thing4);
doAnswer(invocation -> {
return updateExecutable.get();
}).when(handler4).isUpdateExecutable();
doAnswer(invocation -> {
Firmware firmware = (Firmware) invocation.getArguments()[0];
thing4.setProperty(Thing.PROPERTY_FIRMWARE_VERSION, firmware.getVersion());
updateExecutable.set(false);
return null;
}).when(handler4).updateFirmware(any(Firmware.class), any(ProgressCallback.class));
firmwareUpdateService.addFirmwareUpdateHandler(handler4);
doAnswer(invocation -> {
try {
Thread.sleep(25);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
updateExecutable.set(true);
return null;
}).when(handler4).transferFirmware(any(Firmware.class));
assertThat(firmwareUpdateService.getFirmwareStatusInfo(THING4_UID), is(unknownInfo));
ArgumentCaptor<Event> eventCaptor = ArgumentCaptor.forClass(Event.class);
verify(mockPublisher, times(1)).post(eventCaptor.capture());
assertFirmwareStatusInfoEvent(THING4_UID, eventCaptor.getAllValues().get(eventCaptor.getAllValues().size() - 1), unknownInfo);
FirmwareProvider firmwareProvider2 = mock(FirmwareProvider.class);
when(firmwareProvider2.getFirmware(eq(FW120_EN.getUID()), any(Locale.class))).thenReturn(FW120_EN);
when(firmwareProvider2.getFirmwares(any(ThingTypeUID.class), any(Locale.class))).thenAnswer(invocation -> {
ThingTypeUID thingTypeUID = (ThingTypeUID) invocation.getArguments()[0];
if (THING_TYPE_UID3.equals(thingTypeUID)) {
return Collections.singleton(FW120_EN);
} else {
return Collections.emptySet();
}
});
firmwareRegistry.addFirmwareProvider(firmwareProvider2);
assertThat(firmwareUpdateService.getFirmwareStatusInfo(THING4_UID), is(updateAvailableInfo));
verify(mockPublisher, times(2)).post(eventCaptor.capture());
assertFirmwareStatusInfoEvent(THING4_UID, eventCaptor.getAllValues().get(eventCaptor.getAllValues().size() - 1), updateAvailableInfo);
waitForAssert(() -> {
assertThat(firmwareUpdateService.getFirmwareStatusInfo(THING4_UID), is(updateExecutableInfoFw120));
verify(mockPublisher, times(3)).post(eventCaptor.capture());
assertFirmwareStatusInfoEvent(THING4_UID, eventCaptor.getAllValues().get(eventCaptor.getAllValues().size() - 1), updateExecutableInfoFw120);
});
firmwareUpdateService.updateFirmware(THING4_UID, FW120_EN.getUID(), null);
waitForAssert(() -> {
assertThat(thing4.getProperties().get(Thing.PROPERTY_FIRMWARE_VERSION), is(V120));
});
assertThat(firmwareUpdateService.getFirmwareStatusInfo(THING4_UID), is(upToDateInfo));
verify(mockPublisher, times(4)).post(eventCaptor.capture());
assertFirmwareStatusInfoEvent(THING4_UID, eventCaptor.getAllValues().get(eventCaptor.getAllValues().size() - 1), upToDateInfo);
assertThat(handler4.isUpdateExecutable(), is(false));
}
use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class ThingRegistryOSGiTest method assertThatThingRegistryEventSubscribersReceiveEventsAboutThingChanges.
@Test
public void assertThatThingRegistryEventSubscribersReceiveEventsAboutThingChanges() {
EventSubscriber thingRegistryEventSubscriber = new EventSubscriber() {
@Override
public Set<String> getSubscribedEventTypes() {
Set<String> types = new HashSet<>();
types.add(ThingAddedEvent.TYPE);
types.add(ThingRemovedEvent.TYPE);
types.add(ThingUpdatedEvent.TYPE);
return types;
}
@Override
public EventFilter getEventFilter() {
return null;
}
@Override
public void receive(Event event) {
receivedEvent = event;
}
};
registerService(thingRegistryEventSubscriber);
// add new thing
managedThingProvider.add(THING);
waitForAssert(() -> {
assertThat(receivedEvent, notNullValue());
});
assertThat(receivedEvent, is(instanceOf(ThingAddedEvent.class)));
receivedEvent = null;
// update thing
Thing updatedThing = ThingBuilder.create(THING_TYPE_UID, THING_UID).build();
managedThingProvider.update(updatedThing);
waitForAssert(() -> {
assertThat(receivedEvent, notNullValue());
});
assertThat(receivedEvent, is(instanceOf(ThingUpdatedEvent.class)));
receivedEvent = null;
// remove thing
managedThingProvider.remove(THING.getUID());
waitForAssert(() -> {
assertThat(receivedEvent, notNullValue());
});
assertThat(receivedEvent, is(instanceOf(ThingRemovedEvent.class)));
receivedEvent = null;
}
use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class GroupItemTest method assertThatGroupItemChangesRespectGroupFunctionORwithUNDEF.
@Test
public void assertThatGroupItemChangesRespectGroupFunctionORwithUNDEF() throws InterruptedException {
events.clear();
GroupItem groupItem = new GroupItem("root", new SwitchItem("mySwitch"), new ArithmeticGroupFunction.Or(OnOffType.ON, OnOffType.OFF));
groupItem.setItemStateConverter(itemStateConverter);
SwitchItem sw1 = new SwitchItem("switch1");
SwitchItem sw2 = new SwitchItem("switch2");
groupItem.addMember(sw1);
groupItem.addMember(sw2);
groupItem.setEventPublisher(publisher);
// State changes -> one change event is fired
sw1.setState(OnOffType.ON);
waitForAssert(() -> assertThat(events.size(), is(1)));
List<Event> changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
GroupItemStateChangedEvent change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
assertTrue(change.getOldItemState().equals(UnDefType.NULL));
assertTrue(change.getItemState().equals(OnOffType.ON));
events.clear();
sw2.setState(OnOffType.ON);
sw2.setState(UnDefType.UNDEF);
// wait to see that the event doesn't fire
Thread.sleep(WAIT_EVENT_TO_BE_HANDLED);
assertThat(events.size(), is(0));
assertTrue(groupItem.getState().equals(OnOffType.ON));
}
use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class GroupItemTest method assertThatGroupItemChangesRespectGroupFunctionOR.
@Test
public void assertThatGroupItemChangesRespectGroupFunctionOR() {
events.clear();
GroupItem groupItem = new GroupItem("root", new SwitchItem("mySwitch"), new ArithmeticGroupFunction.Or(OnOffType.ON, OnOffType.OFF));
groupItem.setItemStateConverter(itemStateConverter);
SwitchItem sw1 = new SwitchItem("switch1");
SwitchItem sw2 = new SwitchItem("switch2");
groupItem.addMember(sw1);
groupItem.addMember(sw2);
groupItem.setEventPublisher(publisher);
// State changes -> one change event is fired
sw1.setState(OnOffType.ON);
waitForAssert(() -> assertThat(events.size(), is(1)));
List<Event> changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
GroupItemStateChangedEvent change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
assertTrue(change.getOldItemState().equals(UnDefType.NULL));
assertTrue(change.getItemState().equals(OnOffType.ON));
assertTrue(groupItem.getState().equals(OnOffType.ON));
}
use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class GroupItemTest method assertThatGroupItemChangesRespectGroupFunctionAND.
@Test
public void assertThatGroupItemChangesRespectGroupFunctionAND() {
events.clear();
GroupItem groupItem = new GroupItem("root", new SwitchItem("mySwitch"), new ArithmeticGroupFunction.And(OnOffType.ON, OnOffType.OFF));
groupItem.setItemStateConverter(itemStateConverter);
SwitchItem sw1 = new SwitchItem("switch1");
SwitchItem sw2 = new SwitchItem("switch2");
groupItem.addMember(sw1);
groupItem.addMember(sw2);
groupItem.setEventPublisher(publisher);
// State changes -> one change event is fired
sw1.setState(OnOffType.ON);
waitForAssert(() -> assertThat(events.size(), is(1)));
List<Event> changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
GroupItemStateChangedEvent change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
// we expect that the group should now have status "OFF"
assertTrue(change.getOldItemState().equals(UnDefType.NULL));
assertTrue(change.getItemState().equals(OnOffType.OFF));
events.clear();
// State changes -> one change event is fired
sw2.setState(OnOffType.ON);
waitForAssert(() -> assertThat(events.size(), is(1)));
changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
// we expect that the group should now have status "ON"
assertTrue(change.getOldItemState().equals(OnOffType.OFF));
assertTrue(change.getItemState().equals(OnOffType.ON));
assertTrue(groupItem.getState().equals(OnOffType.ON));
}
Aggregations