2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.bluetooth.bluegiga.internal.eir;
15 import static org.junit.jupiter.api.Assertions.*;
17 import java.util.List;
19 import java.util.UUID;
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.junit.jupiter.api.Test;
25 * Tests {@link EirRecord}.
27 * @author Kai Kreuzer - Initial contribution
30 public class EirRecordTest {
32 @SuppressWarnings("unchecked")
34 public void testProcess16BitUUIDs() {
35 int[] data = { 0x03, 0x0F, 0x18, 0x00, 0x18 };
36 String batteryService = "0000180F-0000-1000-8000-00805F9B34FB";
37 String genericAccess = "00001800-0000-1000-8000-00805F9B34FB";
39 EirRecord eirRecord = new EirRecord(data);
40 assertEquals(EirDataType.EIR_SVC_UUID16_COMPLETE, eirRecord.getType());
41 List<UUID> uuids = (List<UUID>) eirRecord.getRecord();
42 assertEquals(2, uuids.size());
43 assertTrue(uuids.contains(UUID.fromString(batteryService)));
44 assertTrue(uuids.contains(UUID.fromString(genericAccess)));
47 @SuppressWarnings("unchecked")
49 public void testProcess32BitUUIDs() {
50 int[] data = { 0x05, /* service1 */ 0x10, 0x8e, 0xe7, 0x74, /* service2 */ 0x11, 0x8e, 0xe7, 0x64 };
51 String service1 = "74E78E10-0000-1000-8000-00805F9B34FB";
52 String service2 = "64E78E11-0000-1000-8000-00805F9B34FB";
54 EirRecord eirRecord = new EirRecord(data);
55 assertEquals(EirDataType.EIR_SVC_UUID32_COMPLETE, eirRecord.getType());
56 List<UUID> uuids = (List<UUID>) eirRecord.getRecord();
57 assertEquals(2, uuids.size());
58 assertTrue(uuids.contains(UUID.fromString(service1)));
59 assertTrue(uuids.contains(UUID.fromString(service2)));
62 @SuppressWarnings("unchecked")
64 public void testProcess128BitUUIDs() {
65 int[] data = { 0x07, /* service1 */ 0x6d, 0x66, 0x70, 0x44, 0x73, 0x66, 0x62, 0x75, 0x66, 0x45, 0x76, 0x64,
66 0x55, 0xaa, 0x6c, 0x22, /* service2 */ 0x6e, 0x66, 0x70, 0x44, 0x73, 0x66, 0x62, 0x75, 0x66, 0x45, 0x76,
67 0x64, 0x55, 0xaa, 0x6c, 0x12, };
68 String service1 = "226caa55-6476-4566-7562-66734470666d";
69 String service2 = "126caa55-6476-4566-7562-66734470666e";
71 EirRecord eirRecord = new EirRecord(data);
72 assertEquals(EirDataType.EIR_SVC_UUID128_COMPLETE, eirRecord.getType());
73 List<UUID> uuids = (List<UUID>) eirRecord.getRecord();
74 assertEquals(2, uuids.size());
75 assertTrue(uuids.contains(UUID.fromString(service1)));
76 assertTrue(uuids.contains(UUID.fromString(service2)));
79 @SuppressWarnings("unchecked")
81 public void testProcessManufacturerData() {
82 int[] data = { /* length 0x05, */ 0xFF, 0xFF, 0x02, 0x00, 0xFF };
83 short siliconLabsID = (short) 0x02FF;
85 EirRecord eirRecord = new EirRecord(data);
86 assertEquals(EirDataType.EIR_MANUFACTURER_SPECIFIC, eirRecord.getType());
87 Map<Short, int[]> manufacturerData = (Map<Short, int[]>) eirRecord.getRecord();
88 assertTrue(manufacturerData.containsKey(siliconLabsID));
89 assertArrayEquals(new int[] { 0x00, 0xFF }, manufacturerData.get(siliconLabsID));
92 @SuppressWarnings("unchecked")
94 public void testUUID16ServiceData() {
95 int[] data = { /* length 0x05, */ /* service data 16 bit UUID */ 0x16, 0x0F, 0x18, 0x45 };
96 UUID batteryServiceUUID = UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB");
98 EirRecord eirRecord = new EirRecord(data);
99 assertEquals(EirDataType.EIR_SVC_DATA_UUID16, eirRecord.getType());
100 Map<UUID, int[]> serviceData = (Map<UUID, int[]>) eirRecord.getRecord();
101 assertTrue(serviceData.containsKey(batteryServiceUUID));
102 assertArrayEquals(new int[] { 0x45 }, serviceData.get(batteryServiceUUID));
105 @SuppressWarnings({ "unchecked" })
107 public void testUUID32ServiceData() {
108 int[] data = { /* service data 32 bit UUID */ 0x20, /* UUID */ 0x10, 0x8e, 0xe7, 0x74, /* data */ 0x74, 0x01,
109 0x0d, 0x01, (byte) 0xec };
110 UUID dataServiceUUID = UUID.fromString("74E78E10-0000-1000-8000-00805F9B34FB");
112 EirRecord eirRecord = new EirRecord(data);
113 assertEquals(EirDataType.EIR_SVC_DATA_UUID32, eirRecord.getType());
114 Map<UUID, int[]> serviceData = (Map<UUID, int[]>) eirRecord.getRecord();
115 assertTrue(serviceData.containsKey(dataServiceUUID));
116 assertArrayEquals(new int[] { 0x74, 0x01, 0x0d, 0x01, (byte) 0xec }, serviceData.get(dataServiceUUID));
119 @SuppressWarnings("unchecked")
121 public void testUUID128ServiceData() {
122 int[] data = { /* service data 32 bit UUID */ 0x21, /* UUID */ 0x6d, 0x66, 0x70, 0x44, 0x73, 0x66, 0x62, 0x75,
123 0x66, 0x45, 0x76, 0x64, 0x55, 0xaa, 0x6c, 0x22, /* data */ 0x74, 0x01, 0x0d, 0x01, (byte) 0xec };
124 UUID dataServiceUUID = UUID.fromString("226caa55-6476-4566-7562-66734470666d");
126 EirRecord eirRecord = new EirRecord(data);
127 assertEquals(EirDataType.EIR_SVC_DATA_UUID128, eirRecord.getType());
128 Map<UUID, int[]> serviceData = (Map<UUID, int[]>) eirRecord.getRecord();
129 assertTrue(serviceData.containsKey(dataServiceUUID));
130 assertArrayEquals(new int[] { 0x74, 0x01, 0x0d, 0x01, (byte) 0xec }, serviceData.get(dataServiceUUID));