xref: /btstack/test/gatt_service_server/device_information_service_server_test.cpp (revision 26c453f70b4526523b12957bc213ddf39f82a717)
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