]> git.basschouten.com Git - openhab-addons.git/commitdiff
[nest] Cleanup test code (#14642)
authorWouter Born <github@maindrain.net>
Mon, 20 Mar 2023 21:14:38 +0000 (22:14 +0100)
committerGitHub <noreply@github.com>
Mon, 20 Mar 2023 21:14:38 +0000 (22:14 +0100)
* Fix SAT issues
* Start Jetty Server in same thread to improve stability
* Cleanup some code

Signed-off-by: Wouter Born <github@maindrain.net>
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNDataUtil.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNGsonParsingTest.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNAccountHandlerTest.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNCameraHandlerTest.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNSmokeDetectorHandlerTest.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNStructureHandlerTest.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThermostatHandlerTest.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThingHandlerOSGiTest.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestAccountHandler.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestApiServlet.java
itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestServer.java

index 4df90556afcc780669bd1600a0e06f1f9220bd42..2b341157ed82eca9baa2311d59e1f31e51e47bf8 100644 (file)
@@ -23,6 +23,7 @@ import java.util.stream.Collectors;
 import javax.measure.Unit;
 import javax.measure.quantity.Temperature;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.binding.nest.internal.wwn.WWNUtils;
 import org.openhab.core.library.unit.ImperialUnits;
 import org.openhab.core.library.unit.SIUnits;
@@ -32,6 +33,7 @@ import org.openhab.core.library.unit.SIUnits;
  *
  * @author Wouter Born - Initial contribution
  */
+@NonNullByDefault
 public final class WWNDataUtil {
 
     public static final String COMPLETE_DATA_FILE_NAME = "top-level-streaming-data.json";
index b026ca83ab71f6eb2c87274f1d10b2f48fb69c01..5d34b130836ee7018c7b31b04e5746829bc7b841 100644 (file)
@@ -19,6 +19,7 @@ import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.junit.jupiter.api.Test;
 import org.openhab.core.library.unit.SIUnits;
 import org.slf4j.Logger;
@@ -30,6 +31,7 @@ import org.slf4j.LoggerFactory;
  * @author David Bennett - Initial contribution
  * @author Wouter Born - Increase test coverage
  */
+@NonNullByDefault
 public class WWNGsonParsingTest {
 
     private final Logger logger = LoggerFactory.getLogger(WWNGsonParsingTest.class);
index 829e5d999222a3986014eb63aabd203a1ca3a1c6..44590a02ffc52dd8e36abbbca16e763eb7abf4ad 100644 (file)
@@ -19,6 +19,7 @@ import static org.mockito.Mockito.*;
 
 import javax.ws.rs.client.ClientBuilder;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -41,16 +42,16 @@ import org.osgi.service.jaxrs.client.SseEventSourceFactory;
  * @author David Bennett - Initial contribution
  */
 @ExtendWith(MockitoExtension.class)
+@NonNullByDefault
 public class WWNAccountHandlerTest {
 
-    private ThingHandler handler;
+    private @NonNullByDefault({}) ThingHandler handler;
 
-    private @Mock Bridge bridge;
-    private @Mock ThingHandlerCallback callback;
-    private @Mock ClientBuilder clientBuilder;
-    private @Mock Configuration configuration;
-    private @Mock SseEventSourceFactory eventSourceFactory;
-    private @Mock WWNRedirectUrlSupplier redirectUrlSupplier;
+    private @Mock @NonNullByDefault({}) Bridge bridge;
+    private @Mock @NonNullByDefault({}) ThingHandlerCallback callback;
+    private @Mock @NonNullByDefault({}) ClientBuilder clientBuilder;
+    private @Mock @NonNullByDefault({}) Configuration configuration;
+    private @Mock @NonNullByDefault({}) SseEventSourceFactory eventSourceFactory;
 
     @BeforeEach
     public void beforeEach() {
@@ -58,7 +59,6 @@ public class WWNAccountHandlerTest {
         handler.setCallback(callback);
     }
 
-    @SuppressWarnings("null")
     @Test
     public void initializeShouldCallTheCallback() {
         when(bridge.getConfiguration()).thenReturn(configuration);
index ffc061c01c094801f9920094269112c63d72a120..d7f9ef2c18cf1a3a4ae4cba0b9211e0d0297b8e1 100644 (file)
@@ -19,9 +19,9 @@ import static org.openhab.binding.nest.internal.wwn.dto.WWNDataUtil.*;
 import static org.openhab.core.library.types.OnOffType.*;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.junit.jupiter.api.Test;
 import org.openhab.binding.nest.internal.wwn.config.WWNDeviceConfiguration;
 import org.openhab.core.config.core.Configuration;
@@ -38,6 +38,7 @@ import org.openhab.core.thing.binding.builder.ThingBuilder;
  *
  * @author Wouter Born - Initial contribution
  */
+@NonNullByDefault
 public class WWNCameraHandlerTest extends WWNThingHandlerOSGiTest {
 
     private static final ThingUID CAMERA_UID = new ThingUID(THING_TYPE_CAMERA, "camera1");
@@ -49,8 +50,7 @@ public class WWNCameraHandlerTest extends WWNThingHandlerOSGiTest {
 
     @Override
     protected Thing buildThing(Bridge bridge) {
-        Map<String, Object> properties = new HashMap<>();
-        properties.put(WWNDeviceConfiguration.DEVICE_ID, CAMERA1_DEVICE_ID);
+        Map<String, Object> properties = Map.of(WWNDeviceConfiguration.DEVICE_ID, CAMERA1_DEVICE_ID);
 
         return ThingBuilder.create(THING_TYPE_CAMERA, CAMERA_UID).withLabel("Test Camera").withBridge(bridge.getUID())
                 .withChannels(buildChannels(THING_TYPE_CAMERA, CAMERA_UID))
index 96f396df83a0f55867c7de45b76cb145afa9cbff..eefafabe33b2370bc3f8a7c4a7d42b22fdc5a0a5 100644 (file)
@@ -19,9 +19,9 @@ import static org.openhab.binding.nest.internal.wwn.dto.WWNDataUtil.*;
 import static org.openhab.core.library.types.OnOffType.OFF;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.junit.jupiter.api.Test;
 import org.openhab.binding.nest.internal.wwn.config.WWNDeviceConfiguration;
 import org.openhab.core.config.core.Configuration;
@@ -38,6 +38,7 @@ import org.openhab.core.thing.binding.builder.ThingBuilder;
  *
  * @author Wouter Born - Initial contribution
  */
+@NonNullByDefault
 public class WWNSmokeDetectorHandlerTest extends WWNThingHandlerOSGiTest {
 
     private static final ThingUID SMOKE_DETECTOR_UID = new ThingUID(THING_TYPE_SMOKE_DETECTOR, "smoke1");
@@ -49,8 +50,7 @@ public class WWNSmokeDetectorHandlerTest extends WWNThingHandlerOSGiTest {
 
     @Override
     protected Thing buildThing(Bridge bridge) {
-        Map<String, Object> properties = new HashMap<>();
-        properties.put(WWNDeviceConfiguration.DEVICE_ID, SMOKE1_DEVICE_ID);
+        Map<String, Object> properties = Map.of(WWNDeviceConfiguration.DEVICE_ID, SMOKE1_DEVICE_ID);
 
         return ThingBuilder.create(THING_TYPE_SMOKE_DETECTOR, SMOKE_DETECTOR_UID).withLabel("Test Smoke Detector")
                 .withBridge(bridge.getUID()).withChannels(buildChannels(THING_TYPE_SMOKE_DETECTOR, SMOKE_DETECTOR_UID))
index b14c63bc69b55c9264c3f0c385526c77f697611e..770c24e6936a1dfe70fe6e15afbd16dd0aac5023 100644 (file)
@@ -19,9 +19,9 @@ import static org.openhab.binding.nest.internal.wwn.dto.WWNDataUtil.*;
 import static org.openhab.core.library.types.OnOffType.OFF;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.junit.jupiter.api.Test;
 import org.openhab.binding.nest.internal.wwn.config.WWNStructureConfiguration;
 import org.openhab.core.config.core.Configuration;
@@ -38,6 +38,7 @@ import org.openhab.core.thing.binding.builder.ThingBuilder;
  *
  * @author Wouter Born - Initial contribution
  */
+@NonNullByDefault
 public class WWNStructureHandlerTest extends WWNThingHandlerOSGiTest {
 
     private static final ThingUID STRUCTURE_UID = new ThingUID(THING_TYPE_STRUCTURE, "structure1");
@@ -49,8 +50,7 @@ public class WWNStructureHandlerTest extends WWNThingHandlerOSGiTest {
 
     @Override
     protected Thing buildThing(Bridge bridge) {
-        Map<String, Object> properties = new HashMap<>();
-        properties.put(WWNStructureConfiguration.STRUCTURE_ID, STRUCTURE1_STRUCTURE_ID);
+        Map<String, Object> properties = Map.of(WWNStructureConfiguration.STRUCTURE_ID, STRUCTURE1_STRUCTURE_ID);
 
         return ThingBuilder.create(THING_TYPE_STRUCTURE, STRUCTURE_UID).withLabel("Test Structure")
                 .withBridge(bridge.getUID()).withChannels(buildChannels(THING_TYPE_STRUCTURE, STRUCTURE_UID))
index c384d63abc52cdee4ec534927cda2df5ec5fe01b..c07df1bb815e29d820e3ad9fb3ca29e7ff06adee 100644 (file)
@@ -21,9 +21,9 @@ import static org.openhab.core.library.unit.ImperialUnits.FAHRENHEIT;
 import static org.openhab.core.library.unit.SIUnits.CELSIUS;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.junit.jupiter.api.Test;
 import org.openhab.binding.nest.internal.wwn.config.WWNDeviceConfiguration;
 import org.openhab.core.config.core.Configuration;
@@ -42,6 +42,7 @@ import org.openhab.core.thing.binding.builder.ThingBuilder;
  *
  * @author Wouter Born - Initial contribution
  */
+@NonNullByDefault
 public class WWNThermostatHandlerTest extends WWNThingHandlerOSGiTest {
 
     private static final ThingUID THERMOSTAT_UID = new ThingUID(THING_TYPE_THERMOSTAT, "thermostat1");
@@ -53,8 +54,7 @@ public class WWNThermostatHandlerTest extends WWNThingHandlerOSGiTest {
 
     @Override
     protected Thing buildThing(Bridge bridge) {
-        Map<String, Object> properties = new HashMap<>();
-        properties.put(WWNDeviceConfiguration.DEVICE_ID, THERMOSTAT1_DEVICE_ID);
+        Map<String, Object> properties = Map.of(WWNDeviceConfiguration.DEVICE_ID, THERMOSTAT1_DEVICE_ID);
 
         return ThingBuilder.create(THING_TYPE_THERMOSTAT, THERMOSTAT_UID).withLabel("Test Thermostat")
                 .withBridge(bridge.getUID()).withChannels(buildChannels(THING_TYPE_THERMOSTAT, THERMOSTAT_UID))
index 98578166ec7ed1b0f41df5eef139f1559dff116e..39c6042c39ad79dee0e8aba960891e31b9d9b359 100644 (file)
  */
 package org.openhab.binding.nest.internal.wwn.handler;
 
+import static java.util.Map.entry;
 import static org.hamcrest.CoreMatchers.*;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsNot.not;
+import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.*;
 import static org.openhab.binding.nest.internal.wwn.rest.WWNStreamingRestClient.PUT;
 
@@ -23,17 +25,19 @@ import java.io.IOException;
 import java.time.Instant;
 import java.time.format.DateTimeParseException;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.TimeZone;
 import java.util.function.Function;
 
 import javax.ws.rs.client.ClientBuilder;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jetty.servlet.ServletHolder;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
@@ -90,6 +94,7 @@ import org.slf4j.LoggerFactory;
  *
  * @author Wouter Born - Initial contribution
  */
+@NonNullByDefault
 public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest {
 
     private static final String SERVER_HOST = "127.0.0.1";
@@ -99,26 +104,26 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest {
 
     private final Logger logger = LoggerFactory.getLogger(WWNThingHandlerOSGiTest.class);
 
-    private static WWNTestServer server;
+    private static @Nullable WWNTestServer server;
     private static WWNTestApiServlet servlet = new WWNTestApiServlet();
 
-    private ChannelTypeRegistry channelTypeRegistry;
-    private ChannelGroupTypeRegistry channelGroupTypeRegistry;
-    private ItemFactory itemFactory;
-    private ItemRegistry itemRegistry;
-    private EventPublisher eventPublisher;
-    private ManagedThingProvider managedThingProvider;
-    private ThingTypeRegistry thingTypeRegistry;
-    private ManagedItemChannelLinkProvider managedItemChannelLinkProvider;
-    private VolatileStorageService volatileStorageService = new VolatileStorageService();
-
-    protected Bridge bridge;
-    protected WWNTestAccountHandler bridgeHandler;
-    protected Thing thing;
-    protected WWNBaseHandler<?> thingHandler;
+    private @NonNullByDefault({}) ChannelTypeRegistry channelTypeRegistry;
+    private @NonNullByDefault({}) ChannelGroupTypeRegistry channelGroupTypeRegistry;
+    private @NonNullByDefault({}) ItemFactory itemFactory;
+    private @NonNullByDefault({}) ItemRegistry itemRegistry;
+    private @NonNullByDefault({}) EventPublisher eventPublisher;
+    private @NonNullByDefault({}) ManagedThingProvider managedThingProvider;
+    private @NonNullByDefault({}) ThingTypeRegistry thingTypeRegistry;
+    private @NonNullByDefault({}) ManagedItemChannelLinkProvider managedItemChannelLinkProvider;
+    private @NonNullByDefault({}) VolatileStorageService volatileStorageService = new VolatileStorageService();
+
+    protected @NonNullByDefault({}) Bridge bridge;
+    protected @NonNullByDefault({}) WWNTestAccountHandler bridgeHandler;
+    protected @NonNullByDefault({}) Thing thing;
+    protected @NonNullByDefault({}) WWNBaseHandler<?> thingHandler;
     private Class<? extends WWNBaseHandler<?>> thingClass;
 
-    private WWNTestHandlerFactory nestTestHandlerFactory;
+    private @NonNullByDefault({}) WWNTestHandlerFactory nestTestHandlerFactory;
     private @NonNullByDefault({}) ClientBuilder clientBuilder;
     private @NonNullByDefault({}) SseEventSourceFactory eventSourceFactory;
 
@@ -133,39 +138,34 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest {
         server.startServer();
     }
 
+    @AfterAll
+    public static void tearDownClass() throws Exception {
+        WWNTestServer testServer = server;
+        if (testServer != null) {
+            testServer.stopServer();
+        }
+    }
+
     @BeforeEach
     public void setUp() throws ItemNotFoundException {
         registerService(volatileStorageService);
 
-        managedThingProvider = getService(ThingProvider.class, ManagedThingProvider.class);
-        assertThat("Could not get ManagedThingProvider", managedThingProvider, is(notNullValue()));
-
-        thingTypeRegistry = getService(ThingTypeRegistry.class);
-        assertThat("Could not get ThingTypeRegistry", thingTypeRegistry, is(notNullValue()));
-
-        channelTypeRegistry = getService(ChannelTypeRegistry.class);
-        assertThat("Could not get ChannelTypeRegistry", channelTypeRegistry, is(notNullValue()));
-
-        channelGroupTypeRegistry = getService(ChannelGroupTypeRegistry.class);
-        assertThat("Could not get ChannelGroupTypeRegistry", channelGroupTypeRegistry, is(notNullValue()));
-
-        eventPublisher = getService(EventPublisher.class);
-        assertThat("Could not get EventPublisher", eventPublisher, is(notNullValue()));
-
-        itemFactory = getService(ItemFactory.class);
-        assertThat("Could not get ItemFactory", itemFactory, is(notNullValue()));
-
-        itemRegistry = getService(ItemRegistry.class);
-        assertThat("Could not get ItemRegistry", itemRegistry, is(notNullValue()));
-
-        managedItemChannelLinkProvider = getService(ManagedItemChannelLinkProvider.class);
-        assertThat("Could not get ManagedItemChannelLinkProvider", managedItemChannelLinkProvider, is(notNullValue()));
-
-        clientBuilder = getService(ClientBuilder.class);
-        assertThat("Could not get ClientBuilder", clientBuilder, is(notNullValue()));
-
-        eventSourceFactory = getService(SseEventSourceFactory.class);
-        assertThat("Could not get SseEventSourceFactory", eventSourceFactory, is(notNullValue()));
+        managedThingProvider = Objects.requireNonNull(getService(ThingProvider.class, ManagedThingProvider.class),
+                "Could not get ManagedThingProvider");
+        thingTypeRegistry = Objects.requireNonNull(getService(ThingTypeRegistry.class),
+                "Could not get ThingTypeRegistry");
+        channelTypeRegistry = Objects.requireNonNull(getService(ChannelTypeRegistry.class),
+                "Could not get ChannelTypeRegistry");
+        channelGroupTypeRegistry = Objects.requireNonNull(getService(ChannelGroupTypeRegistry.class),
+                "Could not get ChannelGroupTypeRegistry");
+        eventPublisher = Objects.requireNonNull(getService(EventPublisher.class), "Could not get EventPublisher");
+        itemFactory = Objects.requireNonNull(getService(ItemFactory.class), "Could not get ItemFactory");
+        itemRegistry = Objects.requireNonNull(getService(ItemRegistry.class), "Could not get ItemRegistry");
+        managedItemChannelLinkProvider = Objects.requireNonNull(getService(ManagedItemChannelLinkProvider.class),
+                "Could not get ManagedItemChannelLinkProvider");
+        clientBuilder = Objects.requireNonNull(getService(ClientBuilder.class), "Could not get ClientBuilder");
+        eventSourceFactory = Objects.requireNonNull(getService(SseEventSourceFactory.class),
+                "Could not get SseEventSourceFactory");
 
         ComponentContext componentContext = mock(ComponentContext.class);
         when(componentContext.getBundleContext()).thenReturn(bundleContext);
@@ -180,8 +180,9 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest {
                 .thenReturn(mock(ThingType.class));
         registerService(thingTypeProvider);
 
-        nestTestHandlerFactory = getService(ThingHandlerFactory.class, WWNTestHandlerFactory.class);
-        assertThat("Could not get NestTestHandlerFactory", nestTestHandlerFactory, is(notNullValue()));
+        nestTestHandlerFactory = Objects.requireNonNull(
+                getService(ThingHandlerFactory.class, WWNTestHandlerFactory.class),
+                "Could not get NestTestHandlerFactory");
 
         bridge = buildBridge();
         thing = buildThing(bridge);
@@ -209,12 +210,12 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest {
     }
 
     protected Bridge buildBridge() {
-        Map<String, Object> properties = new HashMap<>();
-        properties.put(WWNAccountConfiguration.ACCESS_TOKEN,
-                "c.eQ5QBBPiFOTNzPHbmZPcE9yPZ7GayzLusifgQR2DQRFNyUS9ESvlhJF0D7vG8Y0TFV39zX1vIOsWrv8RKCMrFepNUb9FqHEboa4MtWLUsGb4tD9oBh0jrV4HooJUmz5sVA5KZR0dkxyLYyPc");
-        properties.put(WWNAccountConfiguration.PINCODE, "64P2XRYT");
-        properties.put(WWNAccountConfiguration.PRODUCT_ID, "8fdf9885-ca07-4252-1aa3-f3d5ca9589e0");
-        properties.put(WWNAccountConfiguration.PRODUCT_SECRET, "QITLR3iyUlWaj9dbvCxsCKp4f");
+        Map<String, Object> properties = Map.ofEntries( //
+                entry(WWNAccountConfiguration.ACCESS_TOKEN,
+                        "c.eQ5QBBPiFOTNzPHbmZPcE9yPZ7GayzLusifgQR2DQRFNyUS9ESvlhJF0D7vG8Y0TFV39zX1vIOsWrv8RKCMrFepNUb9FqHEboa4MtWLUsGb4tD9oBh0jrV4HooJUmz5sVA5KZR0dkxyLYyPc"),
+                entry(WWNAccountConfiguration.PINCODE, "64P2XRYT"),
+                entry(WWNAccountConfiguration.PRODUCT_ID, "8fdf9885-ca07-4252-1aa3-f3d5ca9589e0"),
+                entry(WWNAccountConfiguration.PRODUCT_SECRET, "QITLR3iyUlWaj9dbvCxsCKp4f"));
 
         return BridgeBuilder.create(WWNTestAccountHandler.THING_TYPE_TEST_BRIDGE, "test_account")
                 .withLabel("Test Account").withConfiguration(new Configuration(properties)).build();
@@ -227,16 +228,14 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest {
 
         ThingType thingType = thingTypeRegistry.getThingType(thingTypeUID);
 
-        List<Channel> channels = new ArrayList<>();
-        channels.addAll(buildChannels(thingUID, thingType.getChannelDefinitions(), (id) -> id));
-
+        List<Channel> channels = new ArrayList<>(buildChannels(thingUID, thingType.getChannelDefinitions(), id -> id));
         for (ChannelGroupDefinition channelGroupDefinition : thingType.getChannelGroupDefinitions()) {
             ChannelGroupType channelGroupType = channelGroupTypeRegistry
                     .getChannelGroupType(channelGroupDefinition.getTypeUID());
             String groupId = channelGroupDefinition.getId();
             if (channelGroupType != null) {
                 channels.addAll(
-                        buildChannels(thingUID, channelGroupType.getChannelDefinitions(), (id) -> groupId + "#" + id));
+                        buildChannels(thingUID, channelGroupType.getChannelDefinitions(), id -> groupId + "#" + id));
             }
         }
 
index dc2168ae751e9083a3b50ad98f1944b579a38a5b..a3fecd66db7da6c46da6d83451614a0b1b691635 100644 (file)
@@ -19,6 +19,7 @@ import java.util.Set;
 
 import javax.ws.rs.client.ClientBuilder;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.binding.nest.internal.wwn.exceptions.InvalidWWNAccessTokenException;
 import org.openhab.binding.nest.internal.wwn.handler.WWNAccountHandler;
 import org.openhab.binding.nest.internal.wwn.handler.WWNRedirectUrlSupplier;
@@ -32,6 +33,7 @@ import org.osgi.service.jaxrs.client.SseEventSourceFactory;
  *
  * @author Wouter Born - Initial contribution
  */
+@NonNullByDefault
 public class WWNTestAccountHandler extends WWNAccountHandler {
 
     class NestTestRedirectUrlSupplier extends WWNRedirectUrlSupplier {
index e8ddd453ffc5e020426ec56ca1c3fe2c1f2fc434..cad3e3b7deb1cf9b415d36ed1f3bfafdfa64b3ad 100644 (file)
@@ -31,6 +31,8 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,6 +45,7 @@ import com.google.gson.reflect.TypeToken;
  *
  * @author Wouter Born - Initial contribution
  */
+@NonNullByDefault
 public class WWNTestApiServlet extends HttpServlet {
 
     private static final long serialVersionUID = -5414910055159062745L;
@@ -54,9 +57,9 @@ public class WWNTestApiServlet extends HttpServlet {
 
     private final Logger logger = LoggerFactory.getLogger(WWNTestApiServlet.class);
 
-    private class SseEvent {
+    private static class SseEvent {
         private String name;
-        private String data;
+        private @Nullable String data;
 
         public SseEvent(String name) {
             this.name = name;
@@ -67,17 +70,13 @@ public class WWNTestApiServlet extends HttpServlet {
             this.data = data;
         }
 
-        public String getData() {
+        public @Nullable String getData() {
             return data;
         }
 
         public String getName() {
             return name;
         }
-
-        public boolean hasData() {
-            return data != null && !data.isEmpty();
-        }
     }
 
     private final Map<String, Map<String, String>> nestIdPropertiesMap = new ConcurrentHashMap<>();
@@ -91,7 +90,7 @@ public class WWNTestApiServlet extends HttpServlet {
     public void closeConnections() {
         Set<Thread> threads = listenerQueues.keySet();
         listenerQueues.clear();
-        threads.forEach(thread -> thread.interrupt());
+        threads.forEach(Thread::interrupt);
     }
 
     public void reset() {
@@ -118,8 +117,9 @@ public class WWNTestApiServlet extends HttpServlet {
         writer.write(event.getName());
         writer.write(NEW_LINE);
 
-        if (event.hasData()) {
-            for (String dataLine : event.getData().split(NEW_LINE)) {
+        String eventData = event.getData();
+        if (eventData != null) {
+            for (String dataLine : eventData.split(NEW_LINE)) {
                 writer.write("data: ");
                 writer.write(dataLine);
                 writer.write(NEW_LINE);
@@ -195,7 +195,10 @@ public class WWNTestApiServlet extends HttpServlet {
         response.setStatus(HttpServletResponse.SC_OK);
     }
 
-    private String getNestIdFromURI(String uri) {
+    private @Nullable String getNestIdFromURI(@Nullable String uri) {
+        if (uri == null) {
+            return null;
+        }
         for (String updatePath : UPDATE_PATHS) {
             if (uri.startsWith(updatePath)) {
                 return uri.replaceAll(updatePath, "");
@@ -213,7 +216,7 @@ public class WWNTestApiServlet extends HttpServlet {
         return properties;
     }
 
-    public String getNestIdPropertyState(String nestId, String propertyName) {
+    public @Nullable String getNestIdPropertyState(String nestId, String propertyName) {
         Map<String, String> properties = nestIdPropertiesMap.get(nestId);
         return properties == null ? null : properties.get(propertyName);
     }
index 1e7bf9f048e4637410c724bae702db252d34ebb6..814b8f60b5fd64d8f554d7cbff76afe02f4a20b7 100644 (file)
  */
 package org.openhab.binding.nest.internal.wwn.test;
 
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Embedded jetty server used in the tests.
@@ -27,10 +27,9 @@ import org.slf4j.LoggerFactory;
  * @author Velin Yordanov - Initial contribution
  * @author Wouter Born - Increase test coverage
  */
+@NonNullByDefault
 public class WWNTestServer {
-    private final Logger logger = LoggerFactory.getLogger(WWNTestServer.class);
-
-    private Server server;
+    private @Nullable Server server;
     private String host;
     private int port;
     private int timeout;
@@ -43,46 +42,32 @@ public class WWNTestServer {
         this.servletHolder = servletHolder;
     }
 
-    public void startServer() {
-        Thread thread = new Thread(new Runnable() {
-            @Override
-            @SuppressWarnings("resource")
-            public void run() {
-                server = new Server();
-                ServletHandler handler = new ServletHandler();
-                handler.addServletWithMapping(servletHolder, "/*");
-                server.setHandler(handler);
+    public void startServer() throws Exception {
+        Server server = new Server();
 
-                // HTTP connector
-                ServerConnector http = new ServerConnector(server);
-                http.setHost(host);
-                http.setPort(port);
-                http.setIdleTimeout(timeout);
+        ServletHandler handler = new ServletHandler();
+        handler.addServletWithMapping(servletHolder, "/*");
+        server.setHandler(handler);
 
-                server.addConnector(http);
+        // HTTP connector
+        ServerConnector http = new ServerConnector(server);
+        http.setHost(host);
+        http.setPort(port);
+        http.setIdleTimeout(timeout);
+        server.addConnector(http);
 
-                try {
-                    server.start();
-                    server.join();
-                } catch (InterruptedException ex) {
-                    logger.error("Server got interrupted", ex);
-                    return;
-                } catch (Exception e) {
-                    logger.error("Error in starting the server", e);
-                    return;
-                }
-            }
-        });
+        server.start();
 
-        thread.start();
+        this.server = server;
     }
 
-    public void stopServer() {
-        try {
-            server.stop();
-        } catch (Exception e) {
-            logger.error("Error in stopping the server", e);
+    public void stopServer() throws Exception {
+        Server server = this.server;
+        if (server == null) {
             return;
         }
+
+        server.stop();
+        this.server = null;
     }
 }