diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2021-07-19 20:53:00 +0200 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2021-07-19 20:53:00 +0200 |
| commit | 918f85df10d8d59de3d2c90a81984810dec7a072 (patch) | |
| tree | bdc5b403f092f9dd359b74c6e6749b92ea8fbf4a /domain/src/test/java | |
| parent | a159975d09c9160b89a733f2434b406d8f99dbb4 (diff) | |
prog(akka): Iot Example code
Diffstat (limited to 'domain/src/test/java')
| -rw-r--r-- | domain/src/test/java/akkamon/domain/AkkamonImplTest.java | 16 | ||||
| -rw-r--r-- | domain/src/test/java/akkamon/domain/iot/DeviceTest.java | 162 |
2 files changed, 164 insertions, 14 deletions
diff --git a/domain/src/test/java/akkamon/domain/AkkamonImplTest.java b/domain/src/test/java/akkamon/domain/AkkamonImplTest.java index 6570c2a..90c4f44 100644 --- a/domain/src/test/java/akkamon/domain/AkkamonImplTest.java +++ b/domain/src/test/java/akkamon/domain/AkkamonImplTest.java @@ -1,23 +1,11 @@ package akkamon.domain; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.*; +import static junit.framework.TestCase.assertNotNull; class AkkamonImplTest { - @BeforeEach - void setUp() { - } - - @AfterEach - void tearDown() { - } - - @Nested class getInstance_behaviour { @Test void given_there_is_no_instance_yet_when_getInstance_is_called_then_give_class_property_instance() { diff --git a/domain/src/test/java/akkamon/domain/iot/DeviceTest.java b/domain/src/test/java/akkamon/domain/iot/DeviceTest.java new file mode 100644 index 0000000..a05499f --- /dev/null +++ b/domain/src/test/java/akkamon/domain/iot/DeviceTest.java @@ -0,0 +1,162 @@ +package akkamon.domain.iot; + +import akka.actor.testkit.typed.javadsl.TestKitJunitResource; +import akka.actor.testkit.typed.javadsl.TestProbe; +import akka.actor.typed.ActorRef; +import org.junit.ClassRule; +import org.junit.Test; + +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class DeviceTest { + + @ClassRule + public static final TestKitJunitResource testKit = new TestKitJunitResource(); + + @Test + public void testReplyWithEmptyReadingIfNoTemperatureIsKnown() { + TestProbe<Device.RespondTemperature> probe = testKit.createTestProbe(Device.RespondTemperature.class); + + ActorRef<Device.Command> deviceActor = testKit.spawn(Device.create("group", "device")); + deviceActor.tell(new Device.ReadTemperature(42L, probe.getRef())); + Device.RespondTemperature response = probe.receiveMessage(); + assertEquals(42L, response.requestId); + assertEquals(Optional.empty(), response.value); + + + } + + @Test + public void testReplyWithLatestTemperatureReading() { + TestProbe<Device.TemperatureRecorded> recordProbe = + testKit.createTestProbe(Device.TemperatureRecorded.class); + + TestProbe<Device.RespondTemperature> readProbe = + testKit.createTestProbe(Device.RespondTemperature.class); + + ActorRef<Device.Command> deviceActor = testKit.spawn(Device.create("group", "device")); + + deviceActor.tell(new Device.RecordTemperature(1L, 24.0, recordProbe.getRef())); + assertEquals(1L, recordProbe.receiveMessage().requestId); + + deviceActor.tell(new Device.ReadTemperature(2L, readProbe.getRef())); + Device.RespondTemperature response1 = readProbe.receiveMessage(); + assertEquals(2L, response1.requestId); + assertEquals(Optional.of(24.0), response1.value); + + deviceActor.tell(new Device.RecordTemperature(3L, 55.0, recordProbe.getRef())); + assertEquals(3L, recordProbe.receiveMessage().requestId); + + deviceActor.tell(new Device.ReadTemperature(4L, readProbe.getRef())); + Device.RespondTemperature response2 = readProbe.receiveMessage(); + assertEquals(4L, response2.requestId); + assertEquals(Optional.of(55.0), response2.value); + } + + @Test + public void testReplyToRegistrationRequests() { + TestProbe<DeviceManager.DeviceRegistered> probe = testKit.createTestProbe(DeviceManager.DeviceRegistered.class); + ActorRef<DeviceGroup.Command> groupActor = testKit.spawn(DeviceGroup.create("group")); + + groupActor.tell(new DeviceManager.RequestTrackDevice("group", "device", probe.getRef())); + DeviceManager.DeviceRegistered registered1 = probe.receiveMessage(); + + // another deviceId + groupActor.tell(new DeviceManager.RequestTrackDevice("group", "device3", probe.getRef())); + DeviceManager.DeviceRegistered registered2 = probe.receiveMessage(); + assertNotEquals(registered1.device, registered2.device); + + // Check that the device actors are working + TestProbe<Device.TemperatureRecorded> recordProbe = + testKit.createTestProbe(Device.TemperatureRecorded.class); + registered1.device.tell(new Device.RecordTemperature(0L, 1.0, recordProbe.getRef())); + assertEquals(0L, recordProbe.receiveMessage().requestId); + registered2.device.tell(new Device.RecordTemperature(1L, 2.0, recordProbe.getRef())); + assertEquals(1L, recordProbe.receiveMessage().requestId); + } + + @Test + public void testIgnoreWrongRegistrationRequests() { + TestProbe<DeviceManager.DeviceRegistered> probe = testKit.createTestProbe(DeviceManager.DeviceRegistered.class); + ActorRef<DeviceGroup.Command> groupActor = testKit.spawn(DeviceGroup.create("group")); + groupActor.tell(new DeviceManager.RequestTrackDevice("wrongGroup", "device1", probe.getRef())); + probe.expectNoMessage(); + } + + + @Test + public void testReturnSameActorForSameDeviceId() { + TestProbe<DeviceManager.DeviceRegistered> probe = testKit.createTestProbe(DeviceManager.DeviceRegistered.class); + ActorRef<DeviceGroup.Command> groupActor = testKit.spawn(DeviceGroup.create("group")); + + groupActor.tell(new DeviceManager.RequestTrackDevice("group", "device", probe.getRef())); + DeviceManager.DeviceRegistered registered1 = probe.receiveMessage(); + + // registering same again should be idempotent + groupActor.tell(new DeviceManager.RequestTrackDevice("group", "device", probe.getRef())); + DeviceManager.DeviceRegistered registered2 = probe.receiveMessage(); + assertEquals(registered1.device, registered2.device); + } + + @Test +public void testListActiveDevices() { + TestProbe<DeviceManager.DeviceRegistered> registeredProbe = testKit.createTestProbe(DeviceManager.DeviceRegistered.class); + ActorRef<DeviceGroup.Command> groupActor = testKit.spawn(DeviceGroup.create("group")); + + groupActor.tell(new DeviceManager.RequestTrackDevice("group", "device1", registeredProbe.getRef())); + registeredProbe.receiveMessage(); + + groupActor.tell(new DeviceManager.RequestTrackDevice("group", "device2", registeredProbe.getRef())); + registeredProbe.receiveMessage(); + + TestProbe<DeviceManager.ReplyDeviceList> deviceListProbe = testKit.createTestProbe(DeviceManager.ReplyDeviceList.class); + + groupActor.tell(new DeviceManager.RequestDeviceList(0L, "group", deviceListProbe.getRef())); + DeviceManager.ReplyDeviceList reply = deviceListProbe.receiveMessage(); + assertEquals(0L, reply.requestId); + Set<String> testIds = Stream.of("device1", "device2").collect(Collectors.toSet()); + assertEquals(testIds, reply.ids); +} + +@Test +public void testListActiveDevicesAfterOneShutsDown() { + TestProbe<DeviceManager.DeviceRegistered> registeredProbe = testKit.createTestProbe(DeviceManager.DeviceRegistered.class); + ActorRef<DeviceGroup.Command> groupActor = testKit.spawn(DeviceGroup.create("group")); + + groupActor.tell(new DeviceManager.RequestTrackDevice("group", "device1", registeredProbe.getRef())); + DeviceManager.DeviceRegistered registered1 = registeredProbe.receiveMessage(); + + groupActor.tell(new DeviceManager.RequestTrackDevice("group", "device2", registeredProbe.getRef())); + DeviceManager.DeviceRegistered registered2 = registeredProbe.receiveMessage(); + + ActorRef<Device.Command> toShutDown = registered1.device; + + TestProbe<DeviceManager.ReplyDeviceList> deviceListProbe = testKit.createTestProbe(DeviceManager.ReplyDeviceList.class); + + groupActor.tell(new DeviceManager.RequestDeviceList(0L, "group", deviceListProbe.getRef())); + DeviceManager.ReplyDeviceList reply = deviceListProbe.receiveMessage(); + assertEquals(0L, reply.requestId); + assertEquals(Stream.of("device1", "device2").collect(Collectors.toSet()), reply.ids); + + toShutDown.tell(Device.Passivate.INSTANCE); + registeredProbe.expectTerminated(toShutDown, registeredProbe.getRemainingOrDefault()); + + // using awaitAssert to retry because it might take longer for the groupActor + // to see the Terminated, that order is undefined + registeredProbe.awaitAssert( + () -> { + groupActor.tell(new DeviceManager.RequestDeviceList(1L, "group", deviceListProbe.getRef())); + DeviceManager.ReplyDeviceList r = deviceListProbe.receiveMessage(); + assertEquals(1L, r.requestId); + assertEquals(Stream.of("device2").collect(Collectors.toSet()), r.ids); + return null; + }); +} + +} |
