2 * Copyright (c) 2010-2020 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.onewire.internal;
15 import static org.hamcrest.CoreMatchers.is;
16 import static org.junit.Assert.*;
17 import static org.mockito.ArgumentMatchers.any;
18 import static org.mockito.ArgumentMatchers.eq;
19 import static org.mockito.Mockito.*;
20 import static org.mockito.MockitoAnnotations.initMocks;
21 import static org.openhab.binding.onewire.internal.OwBindingConstants.*;
23 import java.util.HashMap;
26 import org.eclipse.jdt.annotation.NonNullByDefault;
27 import org.eclipse.jdt.annotation.Nullable;
28 import org.junit.After;
29 import org.junit.Assert;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.mockito.ArgumentCaptor;
33 import org.mockito.Mock;
34 import org.mockito.Mockito;
35 import org.openhab.binding.onewire.internal.handler.OwserverBridgeHandler;
36 import org.openhab.binding.onewire.internal.owserver.OwserverConnection;
37 import org.openhab.binding.onewire.internal.owserver.OwserverConnectionState;
38 import org.openhab.core.config.core.Configuration;
39 import org.openhab.core.test.java.JavaTest;
40 import org.openhab.core.thing.Bridge;
41 import org.openhab.core.thing.Thing;
42 import org.openhab.core.thing.ThingStatus;
43 import org.openhab.core.thing.ThingStatusInfo;
44 import org.openhab.core.thing.binding.ThingHandlerCallback;
45 import org.openhab.core.thing.binding.builder.BridgeBuilder;
48 * Tests cases for {@link OwserverBridgeHandler}.
50 * @author Jan N. Klug - Initial contribution
53 public class OwserverBridgeHandlerTest extends JavaTest {
55 private static final String TEST_HOST = "foo.bar";
56 private static final int TEST_PORT = 4711;
57 Map<String, Object> bridgeProperties = new HashMap<>();
61 private OwserverConnection owserverConnection;
65 private ThingHandlerCallback thingHandlerCallback;
67 private @Nullable OwserverBridgeHandler bridgeHandler;
68 private @Nullable Bridge bridge;
72 bridgeProperties.put(CONFIG_ADDRESS, TEST_HOST);
73 bridgeProperties.put(CONFIG_PORT, TEST_PORT);
77 bridge = BridgeBuilder.create(THING_TYPE_OWSERVER, "owserver").withLabel("owserver")
78 .withConfiguration(new Configuration(bridgeProperties)).build();
81 ((Thing) answer.getArgument(0)).setStatusInfo(answer.getArgument(1));
83 }).when(thingHandlerCallback).statusUpdated(any(), any());
85 final Bridge bridge = this.bridge;
88 Assert.fail("bridge is null");
92 final OwserverBridgeHandler bridgeHandler = new OwserverBridgeHandler(bridge, owserverConnection);
93 bridgeHandler.getThing().setHandler(bridgeHandler);
94 bridgeHandler.setCallback(thingHandlerCallback);
95 this.bridgeHandler = bridgeHandler;
99 public void tearDown() {
100 final OwserverBridgeHandler bridgeHandler = this.bridgeHandler;
101 if (bridgeHandler != null) {
102 bridgeHandler.dispose();
107 public void testInitializationStartsConnectionWithOptions() {
108 final OwserverBridgeHandler bridgeHandler = this.bridgeHandler;
109 if (bridgeHandler == null) {
110 Assert.fail("bridgeHandler is null");
114 bridgeHandler.initialize();
116 Mockito.verify(owserverConnection).setHost(TEST_HOST);
117 Mockito.verify(owserverConnection).setPort(TEST_PORT);
119 Mockito.verify(owserverConnection, timeout(5000)).start();
123 public void testInitializationReportsRefreshableOnSuccessfullConnection() {
124 final OwserverBridgeHandler bridgeHandler = this.bridgeHandler;
125 if (bridgeHandler == null) {
126 Assert.fail("bridgeHandler is null");
130 Mockito.doAnswer(answer -> {
131 bridgeHandler.reportConnectionState(OwserverConnectionState.OPENED);
133 }).when(owserverConnection).start();
135 bridgeHandler.initialize();
137 ArgumentCaptor<ThingStatusInfo> statusCaptor = ArgumentCaptor.forClass(ThingStatusInfo.class);
138 waitForAssert(() -> {
139 verify(thingHandlerCallback, times(2)).statusUpdated(eq(bridge), statusCaptor.capture());
141 assertThat(statusCaptor.getAllValues().get(0).getStatus(), is(ThingStatus.UNKNOWN));
142 assertThat(statusCaptor.getAllValues().get(1).getStatus(), is(ThingStatus.ONLINE));
144 waitForAssert(() -> assertTrue(bridgeHandler.isRefreshable()));
148 public void testInitializationReportsNotRefreshableOnFailedConnection() {
149 final OwserverBridgeHandler bridgeHandler = this.bridgeHandler;
150 if (bridgeHandler == null) {
151 Assert.fail("bridgeHandler is null");
155 Mockito.doAnswer(answer -> {
156 bridgeHandler.reportConnectionState(OwserverConnectionState.FAILED);
158 }).when(owserverConnection).start();
160 bridgeHandler.initialize();
162 ArgumentCaptor<ThingStatusInfo> statusCaptor = ArgumentCaptor.forClass(ThingStatusInfo.class);
163 waitForAssert(() -> {
164 verify(thingHandlerCallback, times(2)).statusUpdated(eq(bridge), statusCaptor.capture());
166 assertThat(statusCaptor.getAllValues().get(0).getStatus(), is(ThingStatus.UNKNOWN));
167 assertThat(statusCaptor.getAllValues().get(1).getStatus(), is(ThingStatus.OFFLINE));
169 waitForAssert(() -> assertFalse(bridgeHandler.isRefreshable()));