]> git.basschouten.com Git - openhab-addons.git/blob
4aba145add705f8c5109c4b9e4820f22b5c4ede2
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2022 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.avmfritz.internal.discovery;
14
15 import static org.junit.jupiter.api.Assertions.*;
16 import static org.openhab.binding.avmfritz.internal.AVMFritzBindingConstants.*;
17 import static org.openhab.core.thing.Thing.*;
18
19 import java.io.StringReader;
20 import java.util.Collection;
21 import java.util.List;
22
23 import javax.xml.bind.JAXBException;
24 import javax.xml.bind.Unmarshaller;
25 import javax.xml.stream.XMLStreamException;
26 import javax.xml.stream.XMLStreamReader;
27
28 import org.eclipse.jdt.annotation.NonNullByDefault;
29 import org.eclipse.jdt.annotation.Nullable;
30 import org.junit.jupiter.api.AfterEach;
31 import org.junit.jupiter.api.BeforeEach;
32 import org.junit.jupiter.api.Test;
33 import org.openhab.binding.avmfritz.internal.dto.AVMFritzBaseModel;
34 import org.openhab.binding.avmfritz.internal.dto.DeviceListModel;
35 import org.openhab.binding.avmfritz.internal.handler.AVMFritzThingHandlerOSGiTest;
36 import org.openhab.binding.avmfritz.internal.util.JAXBUtils;
37 import org.openhab.core.config.discovery.DiscoveryListener;
38 import org.openhab.core.config.discovery.DiscoveryResult;
39 import org.openhab.core.config.discovery.DiscoveryResultFlag;
40 import org.openhab.core.config.discovery.DiscoveryService;
41 import org.openhab.core.thing.ThingTypeUID;
42 import org.openhab.core.thing.ThingUID;
43
44 /**
45  * Tests for {@link AVMFritzDiscoveryService}.
46  *
47  * @author Christoph Weitkamp - Initial contribution
48  * @author Ulrich Mertin - Added support for HAN-FUN blinds
49  */
50 @NonNullByDefault
51 public class AVMFritzDiscoveryServiceOSGiTest extends AVMFritzThingHandlerOSGiTest {
52
53     private static final ThingUID BRIGE_THING_ID = new ThingUID("avmfritz:fritzbox:1");
54
55     private @Nullable DiscoveryResult discoveryResult;
56     private @NonNullByDefault({}) AVMFritzDiscoveryService discovery;
57
58     private final DiscoveryListener listener = new DiscoveryListener() {
59         @Override
60         public void thingRemoved(DiscoveryService source, ThingUID thingUID) {
61             discoveryResult = null;
62         }
63
64         @Override
65         public void thingDiscovered(DiscoveryService source, DiscoveryResult result) {
66             discoveryResult = result;
67         }
68
69         @Override
70         public @Nullable Collection<ThingUID> removeOlderResults(DiscoveryService source, long timestamp,
71                 @Nullable Collection<ThingTypeUID> thingTypeUIDs, @Nullable ThingUID bridgeUID) {
72             return List.of();
73         }
74     };
75
76     @Override
77     @BeforeEach
78     public void setUp() {
79         super.setUp();
80         discovery = new AVMFritzDiscoveryService();
81         discovery.setThingHandler(bridgeHandler);
82         discovery.addDiscoveryListener(listener);
83     }
84
85     @AfterEach
86     public void cleanUp() {
87         discoveryResult = null;
88     }
89
90     @Test
91     public void correctSupportedTypes() {
92         assertEquals(18, discovery.getSupportedThingTypes().size());
93         assertTrue(discovery.getSupportedThingTypes().contains(DECT100_THING_TYPE));
94         assertTrue(discovery.getSupportedThingTypes().contains(DECT200_THING_TYPE));
95         assertTrue(discovery.getSupportedThingTypes().contains(DECT210_THING_TYPE));
96         assertTrue(discovery.getSupportedThingTypes().contains(DECT300_THING_TYPE));
97         assertTrue(discovery.getSupportedThingTypes().contains(DECT301_THING_TYPE));
98         assertTrue(discovery.getSupportedThingTypes().contains(DECT400_THING_TYPE));
99         assertTrue(discovery.getSupportedThingTypes().contains(DECT440_THING_TYPE));
100         assertTrue(discovery.getSupportedThingTypes().contains(DECT500_THING_TYPE));
101         assertTrue(discovery.getSupportedThingTypes().contains(POWERLINE546E_THING_TYPE));
102         assertTrue(discovery.getSupportedThingTypes().contains(COMETDECT_THING_TYPE));
103         assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_CONTACT_THING_TYPE));
104         assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_SWITCH_THING_TYPE));
105         assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_ON_OFF_THING_TYPE));
106         assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_BLINDS_THING_TYPE));
107         assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_COLOR_BULB_THING_TYPE));
108         assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_DIMMABLE_BULB_THING_TYPE));
109         assertTrue(discovery.getSupportedThingTypes().contains(GROUP_HEATING_THING_TYPE));
110         assertTrue(discovery.getSupportedThingTypes().contains(GROUP_SWITCH_THING_TYPE));
111     }
112
113     @SuppressWarnings("null")
114     @Test
115     public void invalidDiscoveryResult() throws JAXBException, XMLStreamException {
116         // attribute productname is important for a valid discovery result
117         //@formatter:off
118         String xml =
119                 "<devicelist version=\"1\">" +
120                     "<device identifier=\"08761 0954669\" id=\"20\" functionbitmask=\"1280\" fwversion=\"03.86\" manufacturer=\"AVM\" productname=\"\">" +
121                         "<present>1</present>" +
122                         "<name>FRITZ!DECT Repeater 100 #5</name>" +
123                         "<temperature>" +
124                             "<celsius>230</celsius>" +
125                             "<offset>0</offset>" +
126                         "</temperature>" +
127                     "</device>" +
128                 "</devicelist>";
129         //@formatter:on
130
131         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
132         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
133         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
134
135         assertNotNull(devices);
136         assertEquals(1, devices.getDevicelist().size());
137
138         AVMFritzBaseModel device = devices.getDevicelist().get(0);
139         assertNotNull(device);
140
141         discovery.onDeviceAdded(device);
142         assertNull(discoveryResult);
143     }
144
145     @SuppressWarnings("null")
146     @Test
147     public void validDECTRepeater100Result() throws JAXBException, XMLStreamException {
148         //@formatter:off
149         final String xml =
150                 "<devicelist version=\"1\">" +
151                     "<device identifier=\"08761 0954669\" id=\"20\" functionbitmask=\"1280\" fwversion=\"03.86\" manufacturer=\"AVM\" productname=\"FRITZ!DECT Repeater 100\">" +
152                         "<present>1</present>" +
153                         "<name>FRITZ!DECT Repeater 100 #5</name>" +
154                         "<temperature>" +
155                             "<celsius>230</celsius>" +
156                             "<offset>0</offset>" +
157                         "</temperature>" +
158                     "</device>" +
159                 "</devicelist>";
160         //@formatter:on
161
162         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
163         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
164         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
165
166         assertNotNull(devices);
167         assertEquals(1, devices.getDevicelist().size());
168
169         AVMFritzBaseModel device = devices.getDevicelist().get(0);
170         assertNotNull(device);
171         assertEquals(1, device.getPresent());
172
173         discovery.onDeviceAdded(device);
174         assertNotNull(discoveryResult);
175
176         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
177         assertEquals(new ThingUID("avmfritz:FRITZ_DECT_Repeater_100:1:087610954669"), discoveryResult.getThingUID());
178         assertEquals(DECT100_THING_TYPE, discoveryResult.getThingTypeUID());
179         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
180         assertEquals("087610954669", discoveryResult.getProperties().get(CONFIG_AIN));
181         assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
182         assertEquals("FRITZ!DECT Repeater 100", discoveryResult.getProperties().get(PRODUCT_NAME));
183         assertEquals("087610954669", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
184         assertEquals("03.86", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
185         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
186
187         final String deviceNotPresentXml = xml.replace("<present>1</present>", "<present>0</present>");
188         devices = (DeviceListModel) u.unmarshal(new StringReader(deviceNotPresentXml));
189         assertNotNull(devices);
190         assertEquals(1, devices.getDevicelist().size());
191
192         device = devices.getDevicelist().get(0);
193         assertNotNull(device);
194         assertEquals(0, device.getPresent());
195
196         discovery.onDeviceAdded(device);
197         assertNull(discoveryResult);
198     }
199
200     @SuppressWarnings("null")
201     @Test
202     public void validDECT200DiscoveryResult() throws JAXBException, XMLStreamException {
203         //@formatter:off
204         String xml =
205                 "<devicelist version=\"1\">" +
206                     "<device identifier=\"08761 0000434\" id=\"17\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 200\">" +
207                         "<present>1</present>" +
208                         "<name>FRITZ!DECT 200 #1</name>" +
209                         "<switch>" +
210                             "<state>0</state>" +
211                             "<mode>manuell</mode>" +
212                             "<lock>0</lock>" +
213                             "<devicelock>1</devicelock>" +
214                         "</switch>" +
215                         "<powermeter>" +
216                             "<voltage>232850</voltage>" +
217                             "<power>45</power>" +
218                             "<energy>166</energy>" +
219                         "</powermeter>" +
220                         "<temperature>" +
221                             "<celsius>255</celsius>" +
222                             "<offset>0</offset>" +
223                         "</temperature>" +
224                      "</device>" +
225                 "</devicelist>";
226         //@formatter:on
227
228         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
229         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
230         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
231
232         assertNotNull(devices);
233         assertEquals(1, devices.getDevicelist().size());
234
235         AVMFritzBaseModel device = devices.getDevicelist().get(0);
236         assertNotNull(device);
237
238         discovery.onDeviceAdded(device);
239         assertNotNull(discoveryResult);
240
241         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
242         assertEquals(new ThingUID("avmfritz:FRITZ_DECT_200:1:087610000434"), discoveryResult.getThingUID());
243         assertEquals(DECT200_THING_TYPE, discoveryResult.getThingTypeUID());
244         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
245         assertEquals("087610000434", discoveryResult.getProperties().get(CONFIG_AIN));
246         assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
247         assertEquals("FRITZ!DECT 200", discoveryResult.getProperties().get(PRODUCT_NAME));
248         assertEquals("087610000434", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
249         assertEquals("03.83", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
250         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
251     }
252
253     @SuppressWarnings("null")
254     @Test
255     public void validDECT210DiscoveryResult() throws JAXBException, XMLStreamException {
256         //@formatter:off
257         String xml =
258                 "<devicelist version=\"1\">" +
259                     "<device identifier=\"08761 0000434\" id=\"17\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 210\">" +
260                         "<present>1</present>" +
261                         "<name>FRITZ!DECT 210 #1</name>" +
262                         "<switch>" +
263                             "<state>0</state>" +
264                             "<mode>manuell</mode>" +
265                             "<lock>0</lock>" +
266                             "<devicelock>1</devicelock>" +
267                         "</switch>" +
268                         "<powermeter>" +
269                             "<voltage>232850</voltage>" +
270                             "<power>45</power>" +
271                             "<energy>166</energy>" +
272                         "</powermeter>" +
273                         "<temperature>" +
274                             "<celsius>255</celsius>" +
275                             "<offset>0</offset>" +
276                         "</temperature>" +
277                     "</device>" +
278                 "</devicelist>";
279         //@formatter:on
280
281         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
282         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
283         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
284
285         assertNotNull(devices);
286         assertEquals(1, devices.getDevicelist().size());
287
288         AVMFritzBaseModel device = devices.getDevicelist().get(0);
289         assertNotNull(device);
290
291         discovery.onDeviceAdded(device);
292         assertNotNull(discoveryResult);
293
294         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
295         assertEquals(new ThingUID("avmfritz:FRITZ_DECT_210:1:087610000434"), discoveryResult.getThingUID());
296         assertEquals(DECT210_THING_TYPE, discoveryResult.getThingTypeUID());
297         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
298         assertEquals("087610000434", discoveryResult.getProperties().get(CONFIG_AIN));
299         assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
300         assertEquals("FRITZ!DECT 210", discoveryResult.getProperties().get(PRODUCT_NAME));
301         assertEquals("087610000434", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
302         assertEquals("03.83", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
303         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
304     }
305
306     @SuppressWarnings("null")
307     @Test
308     public void validCometDECTDiscoveryResult() throws JAXBException, XMLStreamException {
309         //@formatter:off
310         String xml =
311                 "<devicelist version=\"1\">" +
312                     "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"Comet DECT\">" +
313                         "<present>1</present>" +
314                         "<name>Comet DECT #1</name>" +
315                         "<temperature>" +
316                             "<celsius>220</celsius>" +
317                             "<offset>-10</offset>" +
318                         "</temperature>" +
319                         "<hkr>" +
320                             "<tist>44</tist>" +
321                             "<tsoll>42</tsoll>" +
322                             "<absenk>28</absenk>" +
323                             "<komfort>42</komfort>" +
324                             "<lock>0</lock>" +
325                             "<devicelock>0</devicelock>" +
326                             "<errorcode>0</errorcode>" +
327                             "<batterylow>0</batterylow>" +
328                             "<nextchange>" +
329                                 "<endperiod>1484341200</endperiod>" +
330                                 "<tchange>28</tchange>" +
331                             "</nextchange>" +
332                         "</hkr>" +
333                      "</device>" +
334                  "</devicelist>";
335         //@formatter:on
336
337         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
338         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
339         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
340
341         assertNotNull(devices);
342         assertEquals(1, devices.getDevicelist().size());
343
344         AVMFritzBaseModel device = devices.getDevicelist().get(0);
345         assertNotNull(device);
346
347         discovery.onDeviceAdded(device);
348         assertNotNull(discoveryResult);
349
350         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
351         assertEquals(new ThingUID("avmfritz:Comet_DECT:1:087610000435"), discoveryResult.getThingUID());
352         assertEquals(COMETDECT_THING_TYPE, discoveryResult.getThingTypeUID());
353         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
354         assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
355         assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
356         assertEquals("Comet DECT", discoveryResult.getProperties().get(PRODUCT_NAME));
357         assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
358         assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
359         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
360     }
361
362     @SuppressWarnings("null")
363     @Test
364     public void validDECT300DiscoveryResult() throws JAXBException, XMLStreamException {
365         //@formatter:off
366         String xml =
367                 "<devicelist version=\"1\">" +
368                     "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 300\">" +
369                         "<present>1</present>" +
370                         "<name>FRITZ!DECT 300 #1</name>" +
371                         "<temperature>" +
372                             "<celsius>220</celsius>" +
373                             "<offset>-10</offset>" +
374                         "</temperature>" +
375                         "<hkr>" +
376                             "<tist>44</tist>" +
377                             "<tsoll>42</tsoll>" +
378                             "<absenk>28</absenk>" +
379                             "<komfort>42</komfort>" +
380                             "<lock>0</lock>" +
381                             "<devicelock>0</devicelock>" +
382                             "<errorcode>0</errorcode>" +
383                             "<batterylow>0</batterylow>" +
384                             "<nextchange>" +
385                                 "<endperiod>1484341200</endperiod>" +
386                                 "<tchange>28</tchange>" +
387                             "</nextchange>" +
388                         "</hkr>" +
389                     "</device>" +
390                 "</devicelist>";
391         //@formatter:on
392
393         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
394         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
395         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
396
397         assertNotNull(devices);
398         assertEquals(1, devices.getDevicelist().size());
399
400         AVMFritzBaseModel device = devices.getDevicelist().get(0);
401         assertNotNull(device);
402
403         discovery.onDeviceAdded(device);
404         assertNotNull(discoveryResult);
405
406         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
407         assertEquals(new ThingUID("avmfritz:FRITZ_DECT_300:1:087610000435"), discoveryResult.getThingUID());
408         assertEquals(DECT300_THING_TYPE, discoveryResult.getThingTypeUID());
409         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
410         assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
411         assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
412         assertEquals("FRITZ!DECT 300", discoveryResult.getProperties().get(PRODUCT_NAME));
413         assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
414         assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
415         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
416     }
417
418     @SuppressWarnings("null")
419     @Test
420     public void validDECT301DiscoveryResult() throws JAXBException, XMLStreamException {
421         //@formatter:off
422         String xml =
423                 "<devicelist version=\"1\">" +
424                     "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 301\">" +
425                         "<present>1</present>" +
426                         "<name>FRITZ!DECT 301 #1</name>" +
427                         "<temperature>" +
428                         "<celsius>220</celsius>" +
429                         "<offset>-10</offset>" +
430                     "</temperature>" +
431                     "<hkr>" +
432                         "<tist>44</tist>" +
433                         "<tsoll>42</tsoll>" +
434                         "<absenk>28</absenk>" +
435                         "<komfort>42</komfort>" +
436                         "<lock>0</lock>" +
437                         "<devicelock>0</devicelock>" +
438                         "<errorcode>0</errorcode>" +
439                         "<batterylow>0</batterylow>" +
440                         "<nextchange>" +
441                             "<endperiod>1484341200</endperiod>" +
442                             "<tchange>28</tchange>" +
443                         "</nextchange>" +
444                     "</hkr>" +
445                 "</device>" +
446             "</devicelist>";
447         //@formatter:on
448
449         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
450         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
451         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
452
453         assertNotNull(devices);
454         assertEquals(1, devices.getDevicelist().size());
455
456         AVMFritzBaseModel device = devices.getDevicelist().get(0);
457         assertNotNull(device);
458
459         discovery.onDeviceAdded(device);
460         assertNotNull(discoveryResult);
461
462         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
463         assertEquals(new ThingUID("avmfritz:FRITZ_DECT_301:1:087610000435"), discoveryResult.getThingUID());
464         assertEquals(DECT301_THING_TYPE, discoveryResult.getThingTypeUID());
465         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
466         assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
467         assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
468         assertEquals("FRITZ!DECT 301", discoveryResult.getProperties().get(PRODUCT_NAME));
469         assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
470         assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
471         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
472     }
473
474     @SuppressWarnings("null")
475     @Test
476     public void validPowerline546EDiscoveryResult() throws JAXBException, XMLStreamException {
477         //@formatter:off
478         String xml =
479                 "<devicelist version=\"1\">" +
480                     "<device identifier=\"5C:49:79:F0:A3:84\" id=\"19\" functionbitmask=\"640\" fwversion=\"06.92\" manufacturer=\"AVM\" productname=\"FRITZ!Powerline 546E\">" +
481                         "<present>1</present>" +
482                         "<name>FRITZ!Powerline 546E #1</name>" +
483                         "<switch>" +
484                             "<state>0</state>" +
485                             "<mode>manuell</mode>" +
486                             "<lock>0</lock>" +
487                             "<devicelock>1</devicelock>" +
488                         "</switch>" +
489                         "<powermeter>" +
490                             "<voltage>232850</voltage>" +
491                             "<power>0</power>" +
492                             "<energy>2087</energy>" +
493                         "</powermeter>" +
494                     "</device>" +
495                 "</devicelist>";
496         //@formatter:on
497
498         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
499         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
500         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
501
502         assertNotNull(devices);
503         assertEquals(1, devices.getDevicelist().size());
504
505         AVMFritzBaseModel device = devices.getDevicelist().get(0);
506         assertNotNull(device);
507
508         discovery.onDeviceAdded(device);
509         assertNotNull(discoveryResult);
510
511         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
512         assertEquals(new ThingUID("avmfritz:FRITZ_Powerline_546E:1:5C_49_79_F0_A3_84"), discoveryResult.getThingUID());
513         assertEquals(POWERLINE546E_THING_TYPE, discoveryResult.getThingTypeUID());
514         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
515         assertEquals("5C:49:79:F0:A3:84", discoveryResult.getProperties().get(CONFIG_AIN));
516         assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
517         assertEquals("FRITZ!Powerline 546E", discoveryResult.getProperties().get(PRODUCT_NAME));
518         assertEquals("5C:49:79:F0:A3:84", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
519         assertEquals("06.92", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
520         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
521     }
522
523     @SuppressWarnings("null")
524     @Test
525     public void invalidHANFUNContactDiscoveryResult() throws JAXBException, XMLStreamException {
526         //@formatter:off
527         String xml =
528                 "<devicelist version=\"1\">" +
529                     "<device identifier=\"11934 0059578\" id=\"406\" functionbitmask=\"1\" fwversion=\"00.00\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
530                         "<present>1</present>" +
531                         "<name>HAN-FUN #2</name>" +
532                     "</device>" +
533                 "</devicelist>";
534         //@formatter:on
535
536         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
537         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
538         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
539
540         assertNotNull(devices);
541         assertEquals(1, devices.getDevicelist().size());
542
543         AVMFritzBaseModel device = devices.getDevicelist().get(0);
544         assertNotNull(device);
545
546         discovery.onDeviceAdded(device);
547         assertNull(discoveryResult);
548     }
549
550     @SuppressWarnings("null")
551     @Test
552     public void validHANFUNMagneticContactDiscoveryResult() throws JAXBException, XMLStreamException {
553         //@formatter:off
554         String xml =
555                 "<devicelist version=\"1\">" +
556                     "<device identifier=\"11934 0059578-1\" id=\"2000\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
557                         "<present>1</present>" +
558                         "<name>HAN-FUN #2: Unit #2</name>" +
559                         "<etsiunitinfo>" +
560                             "<etsideviceid>406</etsideviceid>" +
561                             "<unittype>513</unittype>" +
562                             "<interfaces>256</interfaces>" +
563                         "</etsiunitinfo>" +
564                         "<alert>" +
565                             "<state/>" +
566                         "</alert>" +
567                     "</device>" +
568                 "</devicelist>";
569         //@formatter:on
570
571         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
572         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
573         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
574
575         assertNotNull(devices);
576         assertEquals(1, devices.getDevicelist().size());
577
578         AVMFritzBaseModel device = devices.getDevicelist().get(0);
579         assertNotNull(device);
580
581         discovery.onDeviceAdded(device);
582         assertNotNull(discoveryResult);
583
584         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
585         assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
586         assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
587         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
588         assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
589         assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
590         assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
591         assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
592         assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
593         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
594     }
595
596     @SuppressWarnings("null")
597     @Test
598     public void validHANFUNOpticalContactDiscoveryResult() throws JAXBException, XMLStreamException {
599         //@formatter:off
600         String xml =
601                 "<devicelist version=\"1\">" +
602                     "<device identifier=\"11934 0059578-1\" id=\"2001\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
603                         "<present>1</present>" +
604                         "<name>HAN-FUN #3: Unit #3</name>" +
605                         "<etsiunitinfo>" +
606                             "<etsideviceid>406</etsideviceid>" +
607                             "<unittype>514</unittype>" +
608                             "<interfaces>256</interfaces>" +
609                         "</etsiunitinfo>" +
610                         "<alert>" +
611                             "<state/>" +
612                         "</alert>" +
613                     "</device>" +
614                 "</devicelist>";
615         //@formatter:on
616
617         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
618         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
619         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
620
621         assertNotNull(devices);
622         assertEquals(1, devices.getDevicelist().size());
623
624         AVMFritzBaseModel device = devices.getDevicelist().get(0);
625         assertNotNull(device);
626
627         discovery.onDeviceAdded(device);
628         assertNotNull(discoveryResult);
629
630         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
631         assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
632         assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
633         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
634         assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
635         assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
636         assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
637         assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
638         assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
639         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
640     }
641
642     @SuppressWarnings("null")
643     @Test
644     public void validHANFUNMotionSensorDiscoveryResult() throws JAXBException, XMLStreamException {
645         //@formatter:off
646         String xml =
647                 "<devicelist version=\"1\">" +
648                     "<device identifier=\"11934 0059578-1\" id=\"2002\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
649                         "<present>1</present>" +
650                         "<name>HAN-FUN #3: Unit #3</name>" +
651                         "<etsiunitinfo>" +
652                             "<etsideviceid>408</etsideviceid>" +
653                             "<unittype>515</unittype>" +
654                             "<interfaces>32513,256</interfaces>" +
655                         "</etsiunitinfo>" +
656                         "<alert>" +
657                             "<state>0</state>" +
658                         "</alert>" +
659                     "</device>" +
660                 "</devicelist>";
661         //@formatter:on
662
663         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
664         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
665         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
666
667         assertNotNull(devices);
668         assertEquals(1, devices.getDevicelist().size());
669
670         AVMFritzBaseModel device = devices.getDevicelist().get(0);
671         assertNotNull(device);
672
673         discovery.onDeviceAdded(device);
674         assertNotNull(discoveryResult);
675
676         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
677         assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
678         assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
679         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
680         assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
681         assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
682         assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
683         assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
684         assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
685         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
686     }
687
688     @SuppressWarnings("null")
689     @Test
690     public void validHANFUNMSmokeDetectorDiscoveryResult() throws JAXBException, XMLStreamException {
691         //@formatter:off
692         String xml =
693                 "<devicelist version=\"1\">" +
694                     "<device identifier=\"11324 0059952-1\" id=\"2003\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x2c3c\" productname=\"HAN-FUN\">" +
695                         "<present>1</present>" +
696                         "<name>HAN-FUN #4: Unit #4</name>" +
697                         "<etsiunitinfo>" +
698                             "<etsideviceid>407</etsideviceid>" +
699                             "<unittype>516</unittype>" +
700                             "<interfaces>256</interfaces>" +
701                         "</etsiunitinfo>" +
702                         "<alert>" +
703                             "<state>0</state>" +
704                         "</alert>" +
705                     "</device>" +
706                 "</devicelist>";
707         //@formatter:on
708
709         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
710         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
711         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
712
713         assertNotNull(devices);
714         assertEquals(1, devices.getDevicelist().size());
715
716         AVMFritzBaseModel device = devices.getDevicelist().get(0);
717         assertNotNull(device);
718
719         discovery.onDeviceAdded(device);
720         assertNotNull(discoveryResult);
721
722         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
723         assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:113240059952_1"), discoveryResult.getThingUID());
724         assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
725         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
726         assertEquals("113240059952-1", discoveryResult.getProperties().get(CONFIG_AIN));
727         assertEquals("0x2c3c", discoveryResult.getProperties().get(PROPERTY_VENDOR));
728         assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
729         assertEquals("113240059952-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
730         assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
731         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
732     }
733
734     @SuppressWarnings("null")
735     @Test
736     public void validHANFUNSwitchtDiscoveryResult() throws JAXBException, XMLStreamException {
737         //@formatter:off
738         String xml =
739                 "<devicelist version=\"1\">" +
740                     "<device identifier=\"11934 0059578-1\" id=\"2001\" functionbitmask=\"8200\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
741                         "<present>1</present>" +
742                         "<name>HAN-FUN #2: Unit #2</name>" +
743                         "<etsiunitinfo>" +
744                             "<etsideviceid>412</etsideviceid>" +
745                             "<unittype>273</unittype>" +
746                             "<interfaces>772</interfaces>" +
747                         "</etsiunitinfo>" +
748                         "<button>" +
749                             "<lastpressedtimestamp>1529590797</lastpressedtimestamp>" +
750                         "</button>" +
751                     "</device>" +
752                 "</devicelist>";
753         //@formatter:on
754
755         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
756         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
757         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
758
759         assertNotNull(devices);
760         assertEquals(1, devices.getDevicelist().size());
761
762         AVMFritzBaseModel device = devices.getDevicelist().get(0);
763         assertNotNull(device);
764
765         discovery.onDeviceAdded(device);
766         assertNotNull(discoveryResult);
767
768         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
769         assertEquals(new ThingUID("avmfritz:HAN_FUN_SWITCH:1:119340059578_1"), discoveryResult.getThingUID());
770         assertEquals(HAN_FUN_SWITCH_THING_TYPE, discoveryResult.getThingTypeUID());
771         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
772         assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
773         assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
774         assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
775         assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
776         assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
777         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
778     }
779
780     @SuppressWarnings("null")
781     @Test
782     public void validHANFUNBlindDiscoveryResult() throws JAXBException, XMLStreamException {
783         //@formatter:off
784         String xml =
785                 "<devicelist version=\"1\">" +
786                     "<device identifier=\"14276 0503450-1\" id=\"2000\" functionbitmask=\"335888\" fwversion=\"0.0\" manufacturer=\"0x37c4\" productname=\"Rollotron 1213\">"+
787                         "<present>1</present>"+
788                         "<txbusy>0</txbusy>"+
789                         "<name>Rollotron 1213 #1</name>"+
790                         "<blind>"+
791                             "<endpositionsset>1</endpositionsset>"+
792                             "<mode>manuell</mode>"+
793                         "</blind>"+
794                         "<levelcontrol>"+
795                             "<level>26</level>"+
796                             "<levelpercentage>10</levelpercentage>"+
797                         "</levelcontrol>"+
798                         "<etsiunitinfo>"+
799                             "<etsideviceid>406</etsideviceid>"+
800                             "<unittype>281</unittype>"+
801                             "<interfaces>256,513,516,517</interfaces>"+
802                         "</etsiunitinfo>"+
803                         "<alert>"+
804                             "<state>0</state>"+
805                             "<lastalertchgtimestamp></lastalertchgtimestamp>"+
806                         "</alert>"+
807                     "</device>" +
808                 "</devicelist>";
809         //@formatter:on
810
811         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
812         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
813         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
814
815         assertNotNull(devices);
816         assertEquals(1, devices.getDevicelist().size());
817
818         AVMFritzBaseModel device = devices.getDevicelist().get(0);
819         assertNotNull(device);
820
821         discovery.onDeviceAdded(device);
822         assertNotNull(discoveryResult);
823
824         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
825         assertEquals(new ThingUID("avmfritz:HAN_FUN_BLINDS:1:142760503450_1"), discoveryResult.getThingUID());
826         assertEquals(HAN_FUN_BLINDS_THING_TYPE, discoveryResult.getThingTypeUID());
827         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
828         assertEquals("142760503450-1", discoveryResult.getProperties().get(CONFIG_AIN));
829         assertEquals("0x37c4", discoveryResult.getProperties().get(PROPERTY_VENDOR));
830         assertEquals("Rollotron 1213", discoveryResult.getProperties().get(PRODUCT_NAME));
831         assertEquals("142760503450-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
832         assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
833         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
834     }
835
836     @SuppressWarnings("null")
837     @Test
838     public void validHeatingGroupDiscoveryResult() throws JAXBException, XMLStreamException {
839         //@formatter:off
840         String xml =
841                 "<devicelist version=\"1\">" +
842                     "<group identifier=\"F0:A3:7F-900\" id=\"20000\" functionbitmask=\"4160\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\">" +
843                         "<present>1</present>" +
844                         "<name>Schlafzimmer</name>" +
845                         "<hkr>" +
846                             "<tist>0</tist>" +
847                             "<tsoll>253</tsoll>" +
848                             "<absenk>33</absenk>" +
849                             "<komfort>40</komfort>" +
850                             "<lock>1</lock>" +
851                             "<devicelock>0</devicelock>" +
852                             "<errorcode>0</errorcode>" +
853                             "<batterylow>0</batterylow>" +
854                             "<windowopenactiv>0</windowopenactiv>" +
855                             "<battery>1</battery>" +
856                             "<nextchange>" +
857                                 "<endperiod>1546293600</endperiod>" +
858                                 "<tchange>33</tchange>" +
859                             "</nextchange>" +
860                             "<summeractive>1</summeractive>" +
861                             "<holidayactive>0</holidayactive>" +
862                         "</hkr>" +
863                         "<groupinfo>" +
864                             "<masterdeviceid>1000</masterdeviceid>" +
865                             "<members>20000</members>" +
866                         "</groupinfo>" +
867                     "</group>" +
868                 "</devicelist>";
869         //@formatter:on
870
871         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
872         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
873         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
874
875         assertNotNull(devices);
876         assertEquals(1, devices.getDevicelist().size());
877
878         AVMFritzBaseModel device = devices.getDevicelist().get(0);
879         assertNotNull(device);
880
881         discovery.onDeviceAdded(device);
882         assertNotNull(discoveryResult);
883
884         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
885         assertEquals(new ThingUID("avmfritz:FRITZ_GROUP_HEATING:1:F0_A3_7F_900"), discoveryResult.getThingUID());
886         assertEquals(GROUP_HEATING_THING_TYPE, discoveryResult.getThingTypeUID());
887         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
888         assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(CONFIG_AIN));
889         assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
890         assertEquals("", discoveryResult.getProperties().get(PRODUCT_NAME));
891         assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
892         assertEquals("1.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
893         assertEquals("1000", discoveryResult.getProperties().get(PROPERTY_MASTER));
894         assertEquals("20000", discoveryResult.getProperties().get(PROPERTY_MEMBERS));
895         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
896     }
897
898     @SuppressWarnings("null")
899     @Test
900     public void validSwitchGroupDiscoveryResult() throws JAXBException, XMLStreamException {
901         //@formatter:off
902         String xml =
903                 "<devicelist version=\"1\">" +
904                     "<group identifier=\"F0:A3:7F-900\" id=\"20001\" functionbitmask=\"6784\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\">" +
905                         "<present>1</present>" +
906                         "<name>Schlafzimmer</name>" +
907                         "<switch>" +
908                             "<state>1</state>" +
909                             "<mode>manuell</mode>" +
910                             "<lock>0</lock>" +
911                             "<devicelock>0</devicelock>" +
912                         "</switch>" +
913                         "<powermeter>" +
914                             "<voltage>232850</voltage>" +
915                             "<power>0</power>" +
916                             "<energy>2087</energy>" +
917                         "</powermeter>" +
918                         "<groupinfo>" +
919                             "<masterdeviceid>1000</masterdeviceid>" +
920                             "<members>20000</members>" +
921                         "</groupinfo>" +
922                     "</group>" +
923                 "</devicelist>";
924         //@formatter:on
925
926         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
927         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
928         DeviceListModel devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
929
930         assertNotNull(devices);
931         assertEquals(1, devices.getDevicelist().size());
932
933         AVMFritzBaseModel device = devices.getDevicelist().get(0);
934         assertNotNull(device);
935
936         discovery.onDeviceAdded(device);
937         assertNotNull(discoveryResult);
938
939         assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
940         assertEquals(new ThingUID("avmfritz:FRITZ_GROUP_SWITCH:1:F0_A3_7F_900"), discoveryResult.getThingUID());
941         assertEquals(GROUP_SWITCH_THING_TYPE, discoveryResult.getThingTypeUID());
942         assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
943         assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(CONFIG_AIN));
944         assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
945         assertEquals("", discoveryResult.getProperties().get(PRODUCT_NAME));
946         assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
947         assertEquals("1.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
948         assertEquals("1000", discoveryResult.getProperties().get(PROPERTY_MASTER));
949         assertEquals("20000", discoveryResult.getProperties().get(PROPERTY_MEMBERS));
950         assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
951     }
952 }