Search in sources :

Example 1 with DeviceState

use of com.arm.mbed.cloud.sdk.subscribe.model.DeviceState in project mbed-cloud-sdk-java by ARMmbed.

the class TestNotificationHandling method testDeviceState.

/**
 * Tests subscriptions to device state changes
 */
@Test
public void testDeviceState() {
    Future<?> handle = null;
    ScheduledExecutorService executor = null;
    try {
        List<DeviceStateNotification> receivedNotifications = new LinkedList<>();
        executor = Executors.newScheduledThreadPool(1);
        NotificationHandlersStore store = new NotificationHandlersStore(null, null, executor, null);
        DeviceStateObserver obs1 = store.getSubscriptionManager().deviceState(new DeviceStateFilterOptions().likeDevice("016%33e").equalDeviceState(DeviceState.REGISTRATION_UPDATE), BackpressureStrategy.BUFFER);
        // Generating notifications
        @SuppressWarnings("boxing") List<NotificationMessage> notifications = Stream.iterate(0, n -> n + 1).limit(32).map(i -> {
            NotificationMessage message = new NotificationMessage();
            EndpointData data = new EndpointData();
            if (i % 5 == 0) {
                data.setEp("0161661e9ce10000000000010010033e");
            } else {
                data.setEp("0161661edbab000000000001001002b7");
            }
            data.setEpt("random");
            data.setQ(false);
            data.setResources(Stream.iterate(0, n -> n + 1).limit(50).map(v -> {
                final ResourcesData resource = new ResourcesData();
                resource.setPath("/" + v);
                resource.setObs(true);
                return resource;
            }).collect(Collectors.toList()));
            if (i % 2 == 0) {
                message.addRegUpdatesItem(data);
            } else {
                message.addRegistrationsItem(data);
            }
            return message;
        }).collect(Collectors.toList());
        obs1.addCallback(new NotificationCallback<>(new Callback<DeviceStateNotification>() {

            @Override
            public void execute(DeviceStateNotification arg) {
                receivedNotifications.add(arg);
            }
        }, null));
        int Interval = 300;
        handle = executor.scheduleWithFixedDelay(new Runnable() {

            private int i = 0;

            @Override
            public void run() {
                if (i < notifications.size()) {
                    store.notify(notifications.get(i));
                    i++;
                }
            }
        }, 0, Interval, TimeUnit.MILLISECONDS);
        // Waiting for all notifications to be emitted
        Thread.sleep((notifications.size() + 1) * Interval);
        assertFalse(receivedNotifications.isEmpty());
        // Only multiples of 10 between 0 and 32
        assertEquals(4, receivedNotifications.size());
        // Observer only cares about changes related to devices like 016%33e and REGISTRATION_UPDATE state
        receivedNotifications.forEach(n -> {
            assertEquals("0161661e9ce10000000000010010033e", n.getDeviceId());
            assertEquals(DeviceState.REGISTRATION_UPDATE, n.getState());
        });
        if (handle != null) {
            handle.cancel(true);
        }
        executor.shutdownNow();
    } catch (Exception e) {
        if (handle != null) {
            handle.cancel(true);
        }
        if (executor != null) {
            executor.shutdownNow();
        }
        e.printStackTrace();
        fail(e.getMessage());
    }
}
Also used : Arrays(java.util.Arrays) DeviceState(com.arm.mbed.cloud.sdk.subscribe.model.DeviceState) NotificationData(com.arm.mbed.cloud.sdk.internal.mds.model.NotificationData) Resource(com.arm.mbed.cloud.sdk.connect.model.Resource) Future(java.util.concurrent.Future) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ResourcesData(com.arm.mbed.cloud.sdk.internal.mds.model.ResourcesData) Assert.fail(org.junit.Assert.fail) NotificationCallback(com.arm.mbed.cloud.sdk.subscribe.NotificationCallback) LinkedList(java.util.LinkedList) EndpointData(com.arm.mbed.cloud.sdk.internal.mds.model.EndpointData) DeviceStateObserver(com.arm.mbed.cloud.sdk.subscribe.model.DeviceStateObserver) BackpressureStrategy(io.reactivex.BackpressureStrategy) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) Callback(com.arm.mbed.cloud.sdk.common.Callback) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) TimeUnit(java.util.concurrent.TimeUnit) DeviceStateFilterOptions(com.arm.mbed.cloud.sdk.subscribe.model.DeviceStateFilterOptions) List(java.util.List) Stream(java.util.stream.Stream) Assert.assertFalse(org.junit.Assert.assertFalse) DeviceStateNotification(com.arm.mbed.cloud.sdk.subscribe.model.DeviceStateNotification) NotificationMessage(com.arm.mbed.cloud.sdk.internal.mds.model.NotificationMessage) Assert.assertEquals(org.junit.Assert.assertEquals) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) DeviceStateObserver(com.arm.mbed.cloud.sdk.subscribe.model.DeviceStateObserver) ResourcesData(com.arm.mbed.cloud.sdk.internal.mds.model.ResourcesData) LinkedList(java.util.LinkedList) DeviceStateNotification(com.arm.mbed.cloud.sdk.subscribe.model.DeviceStateNotification) EndpointData(com.arm.mbed.cloud.sdk.internal.mds.model.EndpointData) DeviceStateFilterOptions(com.arm.mbed.cloud.sdk.subscribe.model.DeviceStateFilterOptions) NotificationCallback(com.arm.mbed.cloud.sdk.subscribe.NotificationCallback) Callback(com.arm.mbed.cloud.sdk.common.Callback) NotificationMessage(com.arm.mbed.cloud.sdk.internal.mds.model.NotificationMessage) Test(org.junit.Test)

Aggregations

Callback (com.arm.mbed.cloud.sdk.common.Callback)1 Resource (com.arm.mbed.cloud.sdk.connect.model.Resource)1 EndpointData (com.arm.mbed.cloud.sdk.internal.mds.model.EndpointData)1 NotificationData (com.arm.mbed.cloud.sdk.internal.mds.model.NotificationData)1 NotificationMessage (com.arm.mbed.cloud.sdk.internal.mds.model.NotificationMessage)1 ResourcesData (com.arm.mbed.cloud.sdk.internal.mds.model.ResourcesData)1 NotificationCallback (com.arm.mbed.cloud.sdk.subscribe.NotificationCallback)1 DeviceState (com.arm.mbed.cloud.sdk.subscribe.model.DeviceState)1 DeviceStateFilterOptions (com.arm.mbed.cloud.sdk.subscribe.model.DeviceStateFilterOptions)1 DeviceStateNotification (com.arm.mbed.cloud.sdk.subscribe.model.DeviceStateNotification)1 DeviceStateObserver (com.arm.mbed.cloud.sdk.subscribe.model.DeviceStateObserver)1 BackpressureStrategy (io.reactivex.BackpressureStrategy)1 Arrays (java.util.Arrays)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Executors (java.util.concurrent.Executors)1 Future (java.util.concurrent.Future)1 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)1 TimeUnit (java.util.concurrent.TimeUnit)1 Collectors (java.util.stream.Collectors)1