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.owserver;
15 import static org.junit.Assert.*;
16 import static org.mockito.Mockito.*;
17 import static org.mockito.MockitoAnnotations.initMocks;
19 import java.io.IOException;
20 import java.util.List;
21 import java.util.concurrent.CompletableFuture;
23 import org.eclipse.jdt.annotation.NonNullByDefault;
24 import org.eclipse.jdt.annotation.Nullable;
25 import org.junit.After;
26 import org.junit.Assert;
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.mockito.Mock;
30 import org.mockito.Mockito;
31 import org.openhab.binding.onewire.internal.OwException;
32 import org.openhab.binding.onewire.internal.OwPageBuffer;
33 import org.openhab.binding.onewire.internal.SensorId;
34 import org.openhab.binding.onewire.internal.handler.OwserverBridgeHandler;
35 import org.openhab.binding.onewire.internal.owserver.OwserverConnection;
36 import org.openhab.binding.onewire.internal.owserver.OwserverConnectionState;
37 import org.openhab.binding.onewire.test.OwserverTestServer;
38 import org.openhab.core.library.types.DecimalType;
39 import org.openhab.core.library.types.OnOffType;
40 import org.openhab.core.test.TestPortUtil;
41 import org.openhab.core.test.java.JavaTest;
42 import org.openhab.core.types.State;
45 * Tests cases for {@link OwserverConnection}.
47 * @author Jan N. Klug - Initial contribution
50 public class OwserverConnectionTest extends JavaTest {
51 private static final String TEST_HOST = "127.0.0.1";
53 private @Nullable OwserverTestServer testServer;
54 private @Nullable OwserverConnection owserverConnection;
57 private @NonNullByDefault({}) OwserverBridgeHandler bridgeHandler;
62 public void setup() throws Exception {
65 CompletableFuture<Boolean> serverStarted = new CompletableFuture<>();
66 testPort = TestPortUtil.findFreePort();
68 final OwserverTestServer testServer = new OwserverTestServer(testPort);
69 testServer.startServer(serverStarted);
70 this.testServer = testServer;
71 } catch (IOException e) {
72 fail("could not start test server");
75 final OwserverConnection owserverConnection = new OwserverConnection(bridgeHandler);
76 owserverConnection.setHost(TEST_HOST);
77 owserverConnection.setPort(testPort);
78 this.owserverConnection = owserverConnection;
80 serverStarted.get(); // wait for the server thread to start
84 public void tearDown() {
86 final OwserverTestServer testServer = this.testServer;
87 if (testServer != null) {
88 testServer.stopServer();
90 } catch (IOException e) {
91 fail("could not stop test server");
96 public void successfullConnectionReportedToBridgeHandler() {
97 final OwserverConnection owserverConnection = this.owserverConnection;
98 if (owserverConnection == null) {
99 Assert.fail("connection is null");
102 owserverConnection.start();
104 Mockito.verify(bridgeHandler).reportConnectionState(OwserverConnectionState.OPENED);
108 public void failedConnectionReportedToBridgeHandler() {
109 final OwserverConnection owserverConnection = this.owserverConnection;
110 if (owserverConnection == null) {
111 Assert.fail("connection is null");
114 owserverConnection.setPort(1);
116 owserverConnection.start();
118 Mockito.verify(bridgeHandler, timeout(100)).reportConnectionState(OwserverConnectionState.FAILED);
122 public void testGetDirectory() {
123 final OwserverConnection owserverConnection = this.owserverConnection;
124 if (owserverConnection == null) {
125 Assert.fail("connection is null");
128 owserverConnection.start();
130 List<SensorId> directory = owserverConnection.getDirectory("/");
132 assertEquals(3, directory.size());
133 assertEquals(new SensorId("/00.0123456789ab"), directory.get(0));
134 assertEquals(new SensorId("/00.0123456789ac"), directory.get(1));
135 assertEquals(new SensorId("/00.0123456789ad"), directory.get(2));
136 } catch (OwException e) {
137 Assert.fail("caught unexpected OwException");
142 public void testCheckPresence() {
143 final OwserverConnection owserverConnection = this.owserverConnection;
144 if (owserverConnection == null) {
145 Assert.fail("connection is null");
148 owserverConnection.start();
149 State presence = owserverConnection.checkPresence("present");
150 assertEquals(OnOffType.ON, presence);
152 presence = owserverConnection.checkPresence("notpresent");
153 assertEquals(OnOffType.OFF, presence);
157 public void testReadDecimalType() {
158 final OwserverConnection owserverConnection = this.owserverConnection;
159 if (owserverConnection == null) {
160 Assert.fail("connection is null");
163 owserverConnection.start();
165 DecimalType number = (DecimalType) owserverConnection.readDecimalType("testsensor/decimal");
167 assertEquals(17.4, number.doubleValue(), 0.01);
168 } catch (OwException e) {
169 Assert.fail("caught unexpected OwException");
174 public void testReadDecimalTypeArray() {
175 final OwserverConnection owserverConnection = this.owserverConnection;
176 if (owserverConnection == null) {
177 Assert.fail("connection is null");
180 owserverConnection.start();
182 List<State> numbers = owserverConnection.readDecimalTypeArray("testsensor/decimalarray");
184 assertEquals(3834, ((DecimalType) numbers.get(0)).intValue());
185 assertEquals(0, ((DecimalType) numbers.get(1)).intValue());
186 } catch (OwException e) {
187 Assert.fail("caught unexpected OwException");
192 public void testGetPages() {
193 final OwserverConnection owserverConnection = this.owserverConnection;
194 if (owserverConnection == null) {
195 Assert.fail("connection is null");
198 owserverConnection.start();
200 OwPageBuffer pageBuffer = owserverConnection.readPages("testsensor");
202 assertEquals(31, pageBuffer.getByte(5, 7));
203 } catch (OwException e) {
204 Assert.fail("caught unexpected OwException");
209 public void testWriteDecimalType() {
210 final OwserverConnection owserverConnection = this.owserverConnection;
211 if (owserverConnection == null) {
212 Assert.fail("connection is null");
215 owserverConnection.start();
217 owserverConnection.writeDecimalType("testsensor/decimal", new DecimalType(2009));
219 Mockito.verify(bridgeHandler, never()).reportConnectionState(OwserverConnectionState.FAILED);
220 } catch (OwException e) {
221 Assert.fail("caught unexpected OwException");