From 369697ac0b28aca6c417d72dcb5c839c09e7d958 Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Thu, 18 Apr 2024 10:54:46 +0200 Subject: [PATCH] test/gatt-client: add unit tests --- test/gatt_client/gatt_client_test.cpp | 136 +++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 1 deletion(-) diff --git a/test/gatt_client/gatt_client_test.cpp b/test/gatt_client/gatt_client_test.cpp index 9ba3d5709..7cd1db359 100644 --- a/test/gatt_client/gatt_client_test.cpp +++ b/test/gatt_client/gatt_client_test.cpp @@ -53,6 +53,7 @@ typedef enum { READ_CHARACTERISTIC_DESCRIPTOR, WRITE_CHARACTERISTIC_DESCRIPTOR, WRITE_CLIENT_CHARACTERISTIC_CONFIGURATION, + WRITE_NONEXISTING_CLIENT_CHARACTERISTIC_CONFIGURATION, READ_LONG_CHARACTERISTIC_DESCRIPTOR, WRITE_LONG_CHARACTERISTIC_DESCRIPTOR, WRITE_RELIABLE_LONG_CHARACTERISTIC_VALUE, @@ -586,11 +587,41 @@ TEST(GATTClient, TestWriteClientCharacteristicConfiguration){ characteristics->properties = 0; status = gatt_client_write_client_characteristic_configuration(handle_ble_client_event, gatt_client_handle, &characteristics[0], GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION); CHECK_EQUAL(GATT_CLIENT_CHARACTERISTIC_NOTIFICATION_NOT_SUPPORTED, status); - + reset_query_state(); characteristics->properties = 0; status = gatt_client_write_client_characteristic_configuration(handle_ble_client_event, gatt_client_handle, &characteristics[0], GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_INDICATION); CHECK_EQUAL(GATT_CLIENT_CHARACTERISTIC_INDICATION_NOT_SUPPORTED, status); + + reset_query_state(); + status = gatt_client_write_client_characteristic_configuration(handle_ble_client_event, gatt_client_handle, &characteristics[0], 10); + CHECK_EQUAL(ERROR_CODE_UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE, status); +} + +TEST(GATTClient, TestWriteClientCharacteristicConfigurationNone){ + reset_query_state(); + status = gatt_client_discover_primary_services_by_uuid16(handle_ble_client_event, gatt_client_handle, service_uuid16); + CHECK_EQUAL(0, status); + CHECK_EQUAL(1, gatt_query_complete); + CHECK_EQUAL(1, result_counter); + + reset_query_state(); + status = gatt_client_write_client_characteristic_configuration(handle_ble_client_event, gatt_client_handle, &characteristics[0], GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE); + CHECK_EQUAL(ERROR_CODE_SUCCESS, status); + } + +TEST(GATTClient, TestWriteNonexistingClientCharacteristicConfiguration){ + test = WRITE_NONEXISTING_CLIENT_CHARACTERISTIC_CONFIGURATION; + reset_query_state(); + status = gatt_client_discover_primary_services_by_uuid16(handle_ble_client_event, gatt_client_handle, service_uuid16); + CHECK_EQUAL(0, status); + CHECK_EQUAL(1, gatt_query_complete); + CHECK_EQUAL(1, result_counter); + + reset_query_state(); + characteristics->properties = ATT_PROPERTY_INDICATE; + status = gatt_client_write_client_characteristic_configuration(handle_ble_client_event, gatt_client_handle, &characteristics[0], GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_INDICATION); + CHECK_EQUAL(ERROR_CODE_SUCCESS, status); } TEST(GATTClient, TestReadCharacteristicDescriptor){ @@ -1318,6 +1349,109 @@ TEST(GATTClient, gatt_client_get_mtu){ gatt_client->mtu_state = SEND_MTU_EXCHANGE; } +TEST(GATTClient, gatt_client_deserialize_characteristic_descriptor){ + gatt_client_characteristic_descriptor_t descriptor; + + uint8_t packet[18]; + uint16_t expected_handle = 0x1234; + uint16_t expected_uuid16 = 0xABCD; + + uint8_t uuid128[16]; + uuid_add_bluetooth_prefix(uuid128, expected_uuid16); + + little_endian_store_16(packet, 0, expected_handle); + reverse_128(uuid128, &packet[2]); + + // uuid16 with Bluetooth prefix + gatt_client_deserialize_characteristic_descriptor(packet, 0, &descriptor); + CHECK_EQUAL(descriptor.handle, expected_handle); + CHECK_EQUAL(descriptor.uuid16, expected_uuid16); + MEMCMP_EQUAL(uuid128, descriptor.uuid128, sizeof(uuid128)); + + // uuid128 + memset(&uuid128[4], 0xaa, 12); + reverse_128(uuid128, &packet[2]); + + gatt_client_deserialize_characteristic_descriptor(packet, 0, &descriptor); + CHECK_EQUAL(descriptor.handle, expected_handle); + CHECK_EQUAL(descriptor.uuid16, 0); + MEMCMP_EQUAL(uuid128, descriptor.uuid128, sizeof(uuid128)); +} + +TEST(GATTClient, gatt_client_deserialize_service){ + gatt_client_service_t service; + + uint8_t packet[20]; + uint16_t expected_start_group_handle = 0x1234; + uint16_t expected_end_group_handle = 0x5678; + uint16_t expected_uuid16 = 0xABCD; + + uint8_t uuid128[16]; + uuid_add_bluetooth_prefix(uuid128, expected_uuid16); + + little_endian_store_16(packet, 0, expected_start_group_handle); + little_endian_store_16(packet, 2, expected_end_group_handle); + reverse_128(uuid128, &packet[4]); + + // uuid16 with Bluetooth prefix + gatt_client_deserialize_service(packet, 0, &service); + CHECK_EQUAL(service.start_group_handle, expected_start_group_handle); + CHECK_EQUAL(service.end_group_handle , expected_end_group_handle); + CHECK_EQUAL(service.uuid16, expected_uuid16); + MEMCMP_EQUAL(uuid128, service.uuid128, sizeof(uuid128)); + + // uuid128 + memset(&uuid128[4], 0xaa, 12); + reverse_128(uuid128, &packet[4]); + + gatt_client_deserialize_service(packet, 0, &service); + CHECK_EQUAL(service.start_group_handle, expected_start_group_handle); + CHECK_EQUAL(service.end_group_handle , expected_end_group_handle); + CHECK_EQUAL(service.uuid16, 0); + MEMCMP_EQUAL(uuid128, service.uuid128, sizeof(uuid128)); +} + +TEST(GATTClient, gatt_client_deserialize_characteristic){ + gatt_client_characteristic_t characteristic; + + uint8_t packet[24]; + uint16_t expected_start_handle = 0x1234; + uint16_t expected_value_handle = 0x3455; + uint16_t expected_end_handle = 0x5678; + uint16_t expected_properties = 0x6789; + + uint16_t expected_uuid16 = 0xABCD; + + uint8_t uuid128[16]; + uuid_add_bluetooth_prefix(uuid128, expected_uuid16); + + little_endian_store_16(packet, 0, expected_start_handle); + little_endian_store_16(packet, 2, expected_value_handle); + little_endian_store_16(packet, 4, expected_end_handle); + little_endian_store_16(packet, 6, expected_properties); + reverse_128(uuid128, &packet[8]); + + // uuid16 with Bluetooth prefix + gatt_client_deserialize_characteristic(packet, 0, &characteristic); + CHECK_EQUAL(characteristic.start_handle, expected_start_handle); + CHECK_EQUAL(characteristic.value_handle, expected_value_handle); + CHECK_EQUAL(characteristic.end_handle , expected_end_handle); + CHECK_EQUAL(characteristic.properties , expected_properties); + CHECK_EQUAL(characteristic.uuid16, expected_uuid16); + MEMCMP_EQUAL(uuid128, characteristic.uuid128, sizeof(uuid128)); + + // uuid128 + memset(&uuid128[4], 0xaa, 12); + reverse_128(uuid128, &packet[8]); + + gatt_client_deserialize_characteristic(packet, 0, &characteristic); + CHECK_EQUAL(characteristic.start_handle, expected_start_handle); + CHECK_EQUAL(characteristic.value_handle, expected_value_handle); + CHECK_EQUAL(characteristic.end_handle , expected_end_handle); + CHECK_EQUAL(characteristic.properties , expected_properties); + CHECK_EQUAL(characteristic.uuid16, 0); + MEMCMP_EQUAL(uuid128, characteristic.uuid128, sizeof(uuid128)); +} int main (int argc, const char * argv[]){ att_set_db(profile_data);