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