]> git.basschouten.com Git - openhab-addons.git/blob
025eb94e49a24adf784560e38c3ac3e641132b07
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2024 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.broadlink.internal.handler;
14
15 import static org.junit.Assert.fail;
16 import static org.junit.jupiter.api.Assertions.assertEquals;
17 import static org.mockito.Mockito.*;
18 import static org.openhab.binding.broadlink.internal.BroadlinkBindingConstants.*;
19 import static org.openhab.binding.broadlink.internal.handler.BroadlinkSocketModel3Handler.mergeOnOffBits;
20
21 import java.io.IOException;
22 import java.util.List;
23
24 import org.eclipse.jdt.annotation.NonNullByDefault;
25 import org.junit.jupiter.api.BeforeEach;
26 import org.junit.jupiter.api.Test;
27 import org.mockito.ArgumentCaptor;
28 import org.mockito.ArgumentMatchers;
29 import org.mockito.Mockito;
30 import org.mockito.MockitoAnnotations;
31 import org.openhab.binding.broadlink.internal.BroadlinkBindingConstants;
32 import org.openhab.core.library.types.OnOffType;
33 import org.openhab.core.thing.ChannelUID;
34 import org.openhab.core.types.State;
35
36 /**
37  * Tests the Socket Model 3 handler.
38  *
39  * @author John Marshall - Initial contribution
40  */
41 @NonNullByDefault
42 public class BroadlinkSocketModel3HandlerTest extends AbstractBroadlinkThingHandlerTest {
43
44     private final byte[] response = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
45             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00,
48             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
49             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
50             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
51
52     private final BroadlinkSocketModel3Handler model3;
53
54     public BroadlinkSocketModel3HandlerTest() {
55         super();
56         configureUnderlyingThing(BroadlinkBindingConstants.THING_TYPE_SP3, "sp3-test");
57         model3 = new BroadlinkSocketModel3Handler(thing);
58     }
59
60     @Override
61     @BeforeEach
62     public void setUp() throws Exception {
63         MockitoAnnotations.openMocks(this).close();
64         Mockito.when(mockSocket.sendAndReceive(ArgumentMatchers.any(byte[].class), ArgumentMatchers.anyString()))
65                 .thenReturn(response);
66     }
67
68     @Test
69     public void mergeOnOffBitsAllZero() {
70         int result = mergeOnOffBits(OnOffType.OFF, OnOffType.OFF);
71         assertEquals(0x00, result);
72     }
73
74     @Test
75     public void mergeOnOffBitsPowerOn() {
76         int result = mergeOnOffBits(OnOffType.ON, OnOffType.OFF);
77         assertEquals(0x01, result);
78     }
79
80     @Test
81     public void mergeOnOffBitsNightlightOn() {
82         int result = mergeOnOffBits(OnOffType.OFF, OnOffType.ON);
83         assertEquals(0x02, result);
84     }
85
86     @Test
87     public void mergeOnOffBitsAllOn() {
88         int result = mergeOnOffBits(OnOffType.ON, OnOffType.ON);
89         assertEquals(0x03, result);
90     }
91
92     @Test
93     public void deriveNightLightStateBitsOff() {
94         byte[] payload = { 0x00, 0x00, 0x00, 0x00, 0x00 };
95         OnOffType result = model3.deriveNightLightStateFromStatusBytes(payload);
96         assertEquals(OnOffType.OFF, result);
97     }
98
99     @Test
100     public void deriveNightLightStateBitsOn2() {
101         byte[] payload = { 0x00, 0x00, 0x00, 0x00, 0x02 };
102         OnOffType result = model3.deriveNightLightStateFromStatusBytes(payload);
103         assertEquals(OnOffType.ON, result);
104     }
105
106     @Test
107     public void deriveNightLightStateBitsOn3() {
108         byte[] payload = { 0x00, 0x00, 0x00, 0x00, 0x03 };
109         OnOffType result = model3.deriveNightLightStateFromStatusBytes(payload);
110         assertEquals(OnOffType.ON, result);
111     }
112
113     @Test
114     public void deriveNightLightStateBitsOnFF() {
115         byte[] payload = { 0x00, 0x00, 0x00, 0x00, (byte) 0xFF };
116         OnOffType result = model3.deriveNightLightStateFromStatusBytes(payload);
117         assertEquals(OnOffType.ON, result);
118     }
119
120     @Test
121     public void setsThePowerChannelAndNightlightAfterGettingStatusOnSP3() {
122         Mockito.when(mockSocket.sendAndReceive(ArgumentMatchers.any(byte[].class), ArgumentMatchers.anyString()))
123                 .thenReturn(response);
124         setMocksForTesting(model3);
125
126         reset(mockCallback);
127
128         try {
129             model3.getStatusFromDevice();
130         } catch (IOException e) {
131             fail("Unexpected exception: " + e.getClass().getCanonicalName());
132         }
133
134         ArgumentCaptor<ChannelUID> channelCaptor = ArgumentCaptor.forClass(ChannelUID.class);
135         ArgumentCaptor<State> stateCaptor = ArgumentCaptor.forClass(State.class);
136         verify(mockCallback, Mockito.times(2)).stateUpdated(channelCaptor.capture(), stateCaptor.capture());
137
138         List<ChannelUID> channels = channelCaptor.getAllValues();
139         List<State> states = stateCaptor.getAllValues();
140
141         ChannelUID expectedPowerChannel = new ChannelUID(thing.getUID(), COMMAND_POWER_ON);
142         assertEquals(expectedPowerChannel, channels.get(0));
143
144         assertEquals(OnOffType.ON, states.get(0));
145
146         ChannelUID expectedNightlightChannel = new ChannelUID(thing.getUID(), COMMAND_NIGHTLIGHT);
147         assertEquals(expectedNightlightChannel, channels.get(1));
148
149         assertEquals(OnOffType.OFF, states.get(1));
150     }
151 }