1
2 // *****************************************************************************
3 //
4 // test battery service
5 //
6 // *****************************************************************************
7
8
9 #include <stdint.h>
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <string.h>
13
14 #include "CppUTest/TestHarness.h"
15 #include "CppUTest/CommandLineTestRunner.h"
16 #include "CppUTestExt/MockSupport.h"
17
18 #include "hci.h"
19 #include "btstack_util.h"
20 #include "bluetooth.h"
21 #include "bluetooth_gatt.h"
22
23 #include "ble/gatt-service/device_information_service_server.h"
24 #include "device_information_service_server_test.h"
25 #include "mock_att_server.h"
26
27 #define DEVICE_INFORMATION_CHARACTERISTIC_UUIDS_NUM 10
28 typedef struct {
29 uint8_t * data;
30 uint16_t len;
31 uint16_t value_handle;
32 } device_information_field_t;
33
34 const uint16_t device_information_characteristic_uuids[] = {
35 ORG_BLUETOOTH_CHARACTERISTIC_MANUFACTURER_NAME_STRING,
36 ORG_BLUETOOTH_CHARACTERISTIC_MODEL_NUMBER_STRING,
37 ORG_BLUETOOTH_CHARACTERISTIC_SERIAL_NUMBER_STRING,
38 ORG_BLUETOOTH_CHARACTERISTIC_HARDWARE_REVISION_STRING,
39 ORG_BLUETOOTH_CHARACTERISTIC_FIRMWARE_REVISION_STRING,
40 ORG_BLUETOOTH_CHARACTERISTIC_SOFTWARE_REVISION_STRING,
41 ORG_BLUETOOTH_CHARACTERISTIC_SYSTEM_ID,
42 ORG_BLUETOOTH_CHARACTERISTIC_IEEE_11073_20601_REGULATORY_CERTIFICATION_DATA_LIST,
43 ORG_BLUETOOTH_CHARACTERISTIC_PNP_ID,
44 ORG_BLUETOOTH_CHARACTERISTIC_UDI_FOR_MEDICAL_DEVICES
45 };
46
TEST_GROUP(DEVICE_INFORMATION_SERVICE_SERVER)47 TEST_GROUP(DEVICE_INFORMATION_SERVICE_SERVER){
48 att_service_handler_t * service;
49 uint16_t con_handle;
50 device_information_field_t device_information_fields[DEVICE_INFORMATION_CHARACTERISTIC_UUIDS_NUM];
51
52 void setup(void){
53 // setup database
54 att_set_db(profile_data);
55 // setup battery service
56 device_information_service_server_init();
57
58 int i;
59 for (i=0;i<DEVICE_INFORMATION_CHARACTERISTIC_UUIDS_NUM;i++){
60 device_information_fields[i].value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(0, 0xffff, device_information_characteristic_uuids[i]);
61 }
62
63 device_information_service_server_set_manufacturer_name("manufacturer_name");
64 device_information_service_server_set_model_number("model_number");
65 device_information_service_server_set_serial_number("serial_number");
66 device_information_service_server_set_hardware_revision("hardware_revision");
67 device_information_service_server_set_firmware_revision("firmware_revision");
68 device_information_service_server_set_software_revision("software_revision");
69
70 device_information_service_server_set_system_id(0x01, 0x02);
71 device_information_service_server_set_ieee_regulatory_certification(0x03, 0x04);
72 device_information_service_server_set_pnp_id(0x05, 0x06, 0x07, 0x08);
73 device_information_service_server_set_udi_for_medical_devices("label", "device_id", "issuer", "authority");
74
75 service = mock_att_server_get_service();
76 con_handle = 0x00;
77 }
78
79 void teardown(){
80 mock().clear();
81 }
82 };
83
TEST(DEVICE_INFORMATION_SERVICE_SERVER,lookup_attribute_handles)84 TEST(DEVICE_INFORMATION_SERVICE_SERVER, lookup_attribute_handles){
85 // get characteristic value handles
86 int i;
87 for (i=0;i<DEVICE_INFORMATION_CHARACTERISTIC_UUIDS_NUM;i++){
88 CHECK(device_information_fields[i].value_handle != 0);
89 }
90 }
91
TEST(DEVICE_INFORMATION_SERVICE_SERVER,read_values)92 TEST(DEVICE_INFORMATION_SERVICE_SERVER, read_values){
93 uint8_t response[8];
94 uint16_t response_len;
95
96 // invalid attribute handle
97 response_len = mock_att_service_read_callback(con_handle, 0xffff, 0xffff, response, sizeof(response));
98 CHECK_EQUAL(0, response_len);
99
100 int i;
101 for (i=0;i<DEVICE_INFORMATION_CHARACTERISTIC_UUIDS_NUM;i++){
102 response_len = mock_att_service_read_callback(con_handle, device_information_fields[i].value_handle, 0, response, sizeof(response));
103 CHECK(response_len > 0);
104 }
105
106 // NULL data field
107 device_information_service_server_set_manufacturer_name(NULL);
108 response_len = mock_att_service_read_callback(con_handle, device_information_fields[0].value_handle, 0, response, sizeof(response));
109 CHECK(response_len == 0);
110
111
112 // invalid handle
113 response_len = mock_att_service_read_callback(con_handle, 0xFFFF, 0, response, sizeof(response));
114 CHECK(response_len == 0);
115 }
116
TEST(DEVICE_INFORMATION_SERVICE_SERVER,read_udi_for_medical_devices)117 TEST(DEVICE_INFORMATION_SERVICE_SERVER, read_udi_for_medical_devices){
118 uint8_t response[8];
119 uint16_t response_len;
120
121 uint8_t udi_index = DEVICE_INFORMATION_CHARACTERISTIC_UUIDS_NUM - 1;
122
123 device_information_service_server_set_udi_for_medical_devices(NULL, NULL, NULL, NULL);
124 response_len = mock_att_service_read_callback(con_handle, device_information_fields[udi_index].value_handle, 0, response, sizeof(response));
125 CHECK(response_len > 0);
126
127 }
128
main(int argc,const char * argv[])129 int main (int argc, const char * argv[]){
130 return CommandLineTestRunner::RunAllTests(argc, argv);
131 }
132