]> git.basschouten.com Git - openhab-addons.git/blob
a38738ee8c45aa527a7f7e8831eb62c5ecf6c80d
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
14
15 import static org.junit.Assert.*;
16
17 import java.util.ArrayList;
18
19 import org.junit.Test;
20 import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
21 import org.openhab.core.util.HexUtils;
22
23 /**
24  * Tests cases for {@link ModbusDataReadOutMessage}.
25  *
26  * @author Pauli Anttila - Initial contribution
27  */
28 public class ModbusDataReadOutMessageTest {
29
30     @Test
31     public void createMessageTest() throws NibeHeatPumpException {
32         final String okMessage = "5C0020685001A81F0100A86400FDA7D003449C1E004F9CA000509C7800519C0301529C1B01879C14014E9CC601479C010115B9B0FF3AB94B00C9AF0000489C0D014C9CE7004B9C0000FFFF0000FFFF0000FFFF000045";
33
34         @SuppressWarnings("serial")
35         final ArrayList<ModbusValue> values = new ArrayList<ModbusValue>() {
36             {
37                 add(new ModbusValue(43009, 287));
38                 add(new ModbusValue(43008, 100));
39                 add(new ModbusValue(43005, 976));
40                 add(new ModbusValue(40004, 30));
41                 add(new ModbusValue(40015, 160));
42                 add(new ModbusValue(40016, 120));
43                 add(new ModbusValue(40017, 259));
44                 add(new ModbusValue(40018, 283));
45                 add(new ModbusValue(40071, 276));
46                 add(new ModbusValue(40014, 454));
47                 add(new ModbusValue(40007, 257));
48                 add(new ModbusValue(47381, -80));
49                 add(new ModbusValue(47418, 75));
50                 add(new ModbusValue(45001, 0));
51                 add(new ModbusValue(40008, 269));
52                 add(new ModbusValue(40012, 231));
53                 add(new ModbusValue(40011, 0));
54                 add(new ModbusValue(0xFFFF, 0));
55                 add(new ModbusValue(0xFFFF, 0));
56                 add(new ModbusValue(0xFFFF, 0));
57             }
58         };
59
60         final ModbusDataReadOutMessage m = new ModbusDataReadOutMessage.MessageBuilder().values(values).build();
61         final byte[] byteMessage = m.decodeMessage();
62         assertEquals(okMessage, HexUtils.bytesToHex(byteMessage));
63     }
64
65     @Test
66     public void parseModbusDataReadOutMessageTest() throws NibeHeatPumpException {
67         final String message = "5C0020685001A81F0100A86400FDA7D003449C1E004F9CA000509C7800519C0301529C1B01879C14014E9CC601479C010115B9B0FF3AB94B00C9AF0000489C0D014C9CE7004B9C0000FFFF0000FFFF0000FFFF000045";
68
69         @SuppressWarnings("serial")
70         final ArrayList<ModbusValue> expectedValues = new ArrayList<ModbusValue>() {
71             {
72                 add(new ModbusValue(43009, 287));
73                 add(new ModbusValue(43008, 100));
74                 add(new ModbusValue(43005, 976));
75                 add(new ModbusValue(40004, 30));
76                 add(new ModbusValue(40015, 160));
77                 add(new ModbusValue(40016, 120));
78                 add(new ModbusValue(40017, 259));
79                 add(new ModbusValue(40018, 283));
80                 add(new ModbusValue(40071, 276));
81                 add(new ModbusValue(40014, 454));
82                 add(new ModbusValue(40007, 257));
83                 add(new ModbusValue(47381, 65456));
84                 add(new ModbusValue(47418, 75));
85                 add(new ModbusValue(45001, 0));
86                 add(new ModbusValue(40008, 269));
87                 add(new ModbusValue(40012, 231));
88                 add(new ModbusValue(40011, 0));
89             }
90         };
91
92         checkRegisters(message, expectedValues);
93     }
94
95     @Test
96     public void specialLen1Test() throws NibeHeatPumpException {
97         final String message = "5C00206851449C2500489CFC004C9CF1004E9CC7014D9C0B024F9C2500509C3300519C0B01529C5C5C01569C3100C9AF000001A80C01FDA716FAFAA9070098A91B1BFFFF0000A0A9CA02FFFF00009CA99212FFFF0000BE";
98
99         @SuppressWarnings("serial")
100         final ArrayList<ModbusValue> expectedValues = new ArrayList<ModbusValue>() {
101             {
102                 add(new ModbusValue(40004, 37));
103                 add(new ModbusValue(40008, 252));
104                 add(new ModbusValue(40012, 241));
105                 add(new ModbusValue(40014, 455));
106                 add(new ModbusValue(40013, 523));
107                 add(new ModbusValue(40015, 37));
108                 add(new ModbusValue(40016, 51));
109                 add(new ModbusValue(40017, 267));
110                 add(new ModbusValue(40018, 348));
111                 add(new ModbusValue(40022, 49));
112                 add(new ModbusValue(45001, 0));
113                 add(new ModbusValue(43009, 268));
114                 add(new ModbusValue(43005, 64022));
115                 add(new ModbusValue(43514, 7));
116                 add(new ModbusValue(43416, 6939));
117                 add(new ModbusValue(43424, 714));
118                 add(new ModbusValue(43420, 4754));
119             }
120         };
121
122         checkRegisters(message, expectedValues);
123     }
124
125     @Test
126     public void specialLen2Test() throws NibeHeatPumpException {
127         final String message = "5C00206852449C2500489CFE004C9CF2004E9CD4014D9CFB014F9C2500509C3700519C0D01529C5C5C01569C3200C9AF000001A80C01FDA712FAFAA9070098A95C5C1BFFFF0000A0A9D102FFFF00009CA9B412FFFF00007F";
128
129         @SuppressWarnings("serial")
130         final ArrayList<ModbusValue> expectedValues = new ArrayList<ModbusValue>() {
131             {
132                 add(new ModbusValue(40004, 37));
133                 add(new ModbusValue(40008, 254));
134                 add(new ModbusValue(40012, 242));
135                 add(new ModbusValue(40014, 468));
136                 add(new ModbusValue(40013, 507));
137                 add(new ModbusValue(40015, 37));
138                 add(new ModbusValue(40016, 55));
139                 add(new ModbusValue(40017, 269));
140                 add(new ModbusValue(40018, 348));
141                 add(new ModbusValue(40022, 50));
142                 add(new ModbusValue(45001, 0));
143                 add(new ModbusValue(43009, 268));
144                 add(new ModbusValue(43005, 64018));
145                 add(new ModbusValue(43514, 7));
146                 add(new ModbusValue(43416, 7004));
147                 add(new ModbusValue(43424, 721));
148                 add(new ModbusValue(43420, 4788));
149             }
150         };
151
152         checkRegisters(message, expectedValues);
153     }
154
155     @Test
156     public void specialCrcTest() throws NibeHeatPumpException {
157         final String message = "5C00206850449C2600489CF6004C9CF1004E9CD6014D9C0C024F9C4500509C3F00519CF100529C0401569CD500C9AF000001A80C01FDA799FAFAA9020098A91A1BFFFF0000A0A9CA02FFFF00009CA99212FFFF0000C5";
158
159         @SuppressWarnings("serial")
160         final ArrayList<ModbusValue> expectedValues = new ArrayList<ModbusValue>() {
161             {
162                 add(new ModbusValue(40004, 38));
163                 add(new ModbusValue(40008, 246));
164                 add(new ModbusValue(40012, 241));
165                 add(new ModbusValue(40014, 470));
166                 add(new ModbusValue(40013, 524));
167                 add(new ModbusValue(40015, 69));
168                 add(new ModbusValue(40016, 63));
169                 add(new ModbusValue(40017, 241));
170                 add(new ModbusValue(40018, 260));
171                 add(new ModbusValue(40022, 213));
172                 add(new ModbusValue(45001, 0));
173                 add(new ModbusValue(43009, 268));
174                 add(new ModbusValue(43005, 64153));
175                 add(new ModbusValue(43514, 2));
176                 add(new ModbusValue(43416, 6938));
177                 add(new ModbusValue(43424, 714));
178                 add(new ModbusValue(43420, 4754));
179             }
180         };
181
182         checkRegisters(message, expectedValues);
183     }
184
185     @Test(expected = NibeHeatPumpException.class)
186     public void badCrcTest() throws NibeHeatPumpException {
187         final String message = "5C0020685001A81F0100A86400FDA7D003449C1E004F9CA000509C7800519C0301529C1B01879C14014E9CC601479C010115B9B0FF3AB94B00C9AF0000489C0D014C9CE7004B9C0000FFFF0000FFFF0000FFFF000044";
188
189         final byte[] msg = HexUtils.hexToBytes(message);
190         MessageFactory.getMessage(msg);
191     }
192
193     @Test(expected = NibeHeatPumpException.class)
194     public void notModbusDataReadOutMessageTest() throws NibeHeatPumpException {
195         final String message = "519C0301529C1B01879C14014E9CC601479C010115B9B0FF3AB94B00C9AF0000489C0D014C9CE7004B9C0000FFFF0000FFFF0000FFFF000044";
196
197         final byte[] msg = HexUtils.hexToBytes(message);
198         new ModbusDataReadOutMessage(msg);
199     }
200
201     private void checkRegisters(final String message, final ArrayList<ModbusValue> expectedRegs)
202             throws NibeHeatPumpException {
203         final byte[] msg = HexUtils.hexToBytes(message);
204         final ModbusDataReadOutMessage m = (ModbusDataReadOutMessage) MessageFactory.getMessage(msg);
205         assertNotNull(m);
206
207         final ArrayList<ModbusValue> actualValues = (ArrayList<ModbusValue>) m.getValues();
208
209         assertNotNull(actualValues);
210         assertEquals(expectedRegs.size(), actualValues.size());
211         assertEquals(expectedRegs.toString(), actualValues.toString());
212     }
213 }