2014-10-03 12:57:58

by Mariusz Skamra

[permalink] [raw]
Subject: [PATCH 1/4] android/tester: Add Gatt Write Descriptor Success

Write descriptor value test case.
---
android/tester-gatt.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 107 insertions(+)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 4c9eba5..79de14f 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -94,6 +94,17 @@ struct write_char_data {
char *p_value;
};

+struct write_desc_data {
+ int conn_id;
+ btgatt_srvc_id_t *service;
+ btgatt_gatt_id_t *characteristic;
+ btgatt_gatt_id_t *descriptor;
+ int write_type;
+ int len;
+ int auth_req;
+ char *p_value;
+};
+
struct notif_data {
int conn_id;
const bt_bdaddr_t *bdaddr;
@@ -286,6 +297,17 @@ static struct write_char_data write_char_data_2 = {
.auth_req = 0
};

+static struct write_desc_data write_desc_data_1 = {
+ .conn_id = CONN1_ID,
+ .service = &service_1,
+ .characteristic = &characteristic_1,
+ .descriptor = &desc_1,
+ .write_type = 2,
+ .len = sizeof(value_2),
+ .auth_req = 0,
+ .p_value = value_2,
+};
+
static struct notif_data notif_data_1 = {
.conn_id = CONN1_ID,
.service = &service_1,
@@ -394,6 +416,14 @@ static struct set_write_params set_write_param_3 = {
.status = 0x01
};

+static struct set_write_params set_write_param_4 = {
+ .params = &write_params_1,
+ .srvc_id = &service_1,
+ .char_id = &characteristic_1,
+ .descr_id = &desc_1,
+ .status = BT_STATUS_SUCCESS
+};
+
static struct set_notify_params set_notify_param_1 = {
.params = &notify_params_1,
.value = value_1,
@@ -638,6 +668,24 @@ static struct iovec write_characteristic_3[] = {
end_pdu
};

+static struct iovec write_descriptor_1[] = {
+ raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
+ raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
+ raw_pdu(0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28),
+ raw_pdu(0x01, 0x11, 0x11, 0x00, 0x0a),
+ raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28),
+ raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x00, 0x00, 0x19, 0x00),
+ raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28),
+ raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a),
+ raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00),
+ raw_pdu(0x05, 0x01, 0x04, 0x00, 0x00, 0x29),
+ raw_pdu(0x04, 0x05, 0x00, 0x10, 0x00),
+ raw_pdu(0x01, 0x04, 0x05, 0x00, 0x0a),
+ raw_pdu(0x12, 0x04, 0x00, 0x00, 0x01, 0x02, 0x03),
+ raw_pdu(0x13),
+ end_pdu
+};
+
static struct iovec notification_1[] = {
raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
@@ -962,6 +1010,29 @@ static void gatt_server_unregister_action(void)
schedule_action_verification(step);
}

+static void gatt_client_write_descriptor_action(void)
+{
+ struct test_data *data = tester_get_data();
+ struct step *current_data_step = queue_peek_head(data->steps);
+ struct write_desc_data *write_desc_data = current_data_step->set_data;
+ const btgatt_client_interface_t *client = data->if_gatt->client;
+ struct step *step = g_new0(struct step, 1);
+ int status;
+
+ status = client->write_descriptor(write_desc_data->conn_id,
+ write_desc_data->service,
+ write_desc_data->characteristic,
+ write_desc_data->descriptor,
+ write_desc_data->write_type,
+ write_desc_data->len,
+ write_desc_data->auth_req,
+ write_desc_data->p_value);
+
+ step->action_status = status;
+
+ schedule_action_verification(step);
+}
+
static void gatt_cid_hook_cb(const void *data, uint16_t len, void *user_data)
{
struct test_data *t_data = tester_get_data();
@@ -2149,6 +2220,42 @@ static struct test_case test_cases[] = {
ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
),
+ TEST_CASE_BREDRLE("Gatt Client - Write Descriptor - Success",
+ ACTION_SUCCESS(init_pdus, write_descriptor_1),
+ ACTION_SUCCESS(bluetooth_enable_action, NULL),
+ CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
+ ACTION_SUCCESS(init_write_params_action, &set_write_param_4),
+ ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
+ ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
+ ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb),
+ ACTION_SUCCESS(gatt_client_register_action, &app1_uuid),
+ CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS),
+ ACTION_SUCCESS(gatt_client_start_scan_action,
+ INT_TO_PTR(APP1_ID)),
+ CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE),
+ ACTION_SUCCESS(gatt_client_stop_scan_action,
+ INT_TO_PTR(APP1_ID)),
+ ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req),
+ CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS,
+ prop_emu_remotes_default_set,
+ CONN1_ID, APP1_ID),
+ ACTION_SUCCESS(gatt_client_search_services, &search_services_1),
+ CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID),
+ ACTION_SUCCESS(gatt_client_get_characteristic_action,
+ &get_char_data_1),
+ CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS,
+ CONN1_ID, &service_1, &characteristic_1, 4),
+ ACTION_SUCCESS(gatt_client_get_descriptor_action,
+ &get_desc_data_1),
+ CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID,
+ &service_1, &characteristic_1, &desc_1),
+ ACTION_SUCCESS(gatt_client_write_descriptor_action,
+ &write_desc_data_1),
+ CALLBACK_GATTC_WRITE_DESCRIPTOR(GATT_STATUS_SUCCESS,
+ CONN1_ID, &write_params_1),
+ ACTION_SUCCESS(bluetooth_disable_action, NULL),
+ CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
+ ),
};

struct queue *get_gatt_tests(void)
--
1.9.1



2014-10-06 13:28:09

by Grzegorz Kolodziejczyk

[permalink] [raw]
Subject: Re: [PATCH 3/4] android/tester: Add Gatt Write Descriptor Wrong Param

Hi Mariusz,

On 3 October 2014 14:58, Mariusz Skamra <[email protected]> wrote:
>
> Write descriptor value using wrong parameters test case
> ---
> android/tester-gatt.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 55 insertions(+)
>
> diff --git a/android/tester-gatt.c b/android/tester-gatt.c
> index 79de14f..3c686aa 100644
> --- a/android/tester-gatt.c
> +++ b/android/tester-gatt.c
> @@ -287,6 +287,17 @@ static struct write_char_data write_char_data_1 = {
> .auth_req = 0
> };
>
> +static struct write_desc_data write_desc_data_2 = {
> + .conn_id = CONN1_ID,
> + .service = &service_1,
> + .characteristic = &characteristic_1,
> + .descriptor = &desc_2,
> + .write_type = 2,
> + .len = sizeof(value_2),
> + .auth_req = 0,
> + .p_value = value_2,
> +};
> +
> static struct write_char_data write_char_data_2 = {
> .conn_id = CONN1_ID,
> .service = &service_1,
> @@ -424,6 +435,14 @@ static struct set_write_params set_write_param_4 = {
> .status = BT_STATUS_SUCCESS
> };
>

I suggest to declare test case structures as in current order, without
mixing with other struct types:

e.g. :
"
... set_write_param_3 ...
... set_write_param_4 ...
... set_write_param_5 ...

> +static struct set_write_params set_write_param_5 = {
> + .params = &write_params_1,
> + .srvc_id = &service_1,
> + .char_id = &characteristic_1,
> + .descr_id = &desc_2,
> + .status = 0x01
> +};
> +
> static struct set_notify_params set_notify_param_1 = {
> .params = &notify_params_1,
> .value = value_1,
> @@ -2256,6 +2275,42 @@ static struct test_case test_cases[] = {
> ACTION_SUCCESS(bluetooth_disable_action, NULL),
> CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
> ),
> + TEST_CASE_BREDRLE("Gatt Client - Write Descriptor - Wrong Param",
> + ACTION_SUCCESS(init_pdus, write_descriptor_1),
> + ACTION_SUCCESS(bluetooth_enable_action, NULL),
> + CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
> + ACTION_SUCCESS(init_write_params_action, &set_write_param_5),
> + ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
> + ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
> + ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb),
> + ACTION_SUCCESS(gatt_client_register_action, &app1_uuid),
> + CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS),
> + ACTION_SUCCESS(gatt_client_start_scan_action,
> + INT_TO_PTR(APP1_ID)),
> + CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE),
> + ACTION_SUCCESS(gatt_client_stop_scan_action,
> + INT_TO_PTR(APP1_ID)),
> + ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req),
> + CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS,
> + prop_emu_remotes_default_set,
> + CONN1_ID, APP1_ID),
> + ACTION_SUCCESS(gatt_client_search_services, &search_services_1),
> + CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID),
> + ACTION_SUCCESS(gatt_client_get_characteristic_action,
> + &get_char_data_1),
> + CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS,
> + CONN1_ID, &service_1, &characteristic_1, 4),
> + ACTION_SUCCESS(gatt_client_get_descriptor_action,
> + &get_desc_data_1),
> + CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID,
> + &service_1, &characteristic_1, &desc_1),
> + ACTION_FAIL(gatt_client_write_descriptor_action,
> + &write_desc_data_2),
> + CALLBACK_GATTC_WRITE_DESCRIPTOR(GATT_STATUS_FAILURE,
> + CONN1_ID, &write_params_1),
> + ACTION_SUCCESS(bluetooth_disable_action, NULL),
> + CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
> + ),
> };
>
> struct queue *get_gatt_tests(void)
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

BR,
Grzegorz

2014-10-06 11:26:02

by Szymon Janc

[permalink] [raw]
Subject: Re: [PATCH 1/4] android/tester: Add Gatt Write Descriptor Success

Hi Mariusz,

On Friday 03 of October 2014 14:57:58 Mariusz Skamra wrote:
> Write descriptor value test case.
> ---
> android/tester-gatt.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 107 insertions(+)
>
> diff --git a/android/tester-gatt.c b/android/tester-gatt.c
> index 4c9eba5..79de14f 100644
> --- a/android/tester-gatt.c
> +++ b/android/tester-gatt.c
> @@ -94,6 +94,17 @@ struct write_char_data {
> char *p_value;
> };
>
> +struct write_desc_data {
> + int conn_id;
> + btgatt_srvc_id_t *service;
> + btgatt_gatt_id_t *characteristic;
> + btgatt_gatt_id_t *descriptor;
> + int write_type;
> + int len;
> + int auth_req;
> + char *p_value;
> +};
> +
> struct notif_data {
> int conn_id;
> const bt_bdaddr_t *bdaddr;
> @@ -286,6 +297,17 @@ static struct write_char_data write_char_data_2 = {
> .auth_req = 0
> };
>
> +static struct write_desc_data write_desc_data_1 = {
> + .conn_id = CONN1_ID,
> + .service = &service_1,
> + .characteristic = &characteristic_1,
> + .descriptor = &desc_1,
> + .write_type = 2,
> + .len = sizeof(value_2),
> + .auth_req = 0,
> + .p_value = value_2,
> +};
> +
> static struct notif_data notif_data_1 = {
> .conn_id = CONN1_ID,
> .service = &service_1,
> @@ -394,6 +416,14 @@ static struct set_write_params set_write_param_3 = {
> .status = 0x01
> };
>
> +static struct set_write_params set_write_param_4 = {
> + .params = &write_params_1,
> + .srvc_id = &service_1,
> + .char_id = &characteristic_1,
> + .descr_id = &desc_1,
> + .status = BT_STATUS_SUCCESS
> +};
> +
> static struct set_notify_params set_notify_param_1 = {
> .params = &notify_params_1,
> .value = value_1,
> @@ -638,6 +668,24 @@ static struct iovec write_characteristic_3[] = {
> end_pdu
> };
>
> +static struct iovec write_descriptor_1[] = {
> + raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
> + raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
> + raw_pdu(0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28),
> + raw_pdu(0x01, 0x11, 0x11, 0x00, 0x0a),
> + raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28),
> + raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x00, 0x00, 0x19, 0x00),
> + raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28),
> + raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a),
> + raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00),
> + raw_pdu(0x05, 0x01, 0x04, 0x00, 0x00, 0x29),
> + raw_pdu(0x04, 0x05, 0x00, 0x10, 0x00),
> + raw_pdu(0x01, 0x04, 0x05, 0x00, 0x0a),
> + raw_pdu(0x12, 0x04, 0x00, 0x00, 0x01, 0x02, 0x03),
> + raw_pdu(0x13),
> + end_pdu
> +};
> +
> static struct iovec notification_1[] = {
> raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
> raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
> @@ -962,6 +1010,29 @@ static void gatt_server_unregister_action(void)
> schedule_action_verification(step);
> }
>
> +static void gatt_client_write_descriptor_action(void)
> +{
> + struct test_data *data = tester_get_data();
> + struct step *current_data_step = queue_peek_head(data->steps);
> + struct write_desc_data *write_desc_data = current_data_step->set_data;
> + const btgatt_client_interface_t *client = data->if_gatt->client;
> + struct step *step = g_new0(struct step, 1);
> + int status;
> +
> + status = client->write_descriptor(write_desc_data->conn_id,
> + write_desc_data->service,
> + write_desc_data->characteristic,
> + write_desc_data->descriptor,
> + write_desc_data->write_type,
> + write_desc_data->len,
> + write_desc_data->auth_req,
> + write_desc_data->p_value);
> +
> + step->action_status = status;
> +
> + schedule_action_verification(step);
> +}
> +
> static void gatt_cid_hook_cb(const void *data, uint16_t len, void *user_data)
> {
> struct test_data *t_data = tester_get_data();
> @@ -2149,6 +2220,42 @@ static struct test_case test_cases[] = {
> ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
> CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
> ),
> + TEST_CASE_BREDRLE("Gatt Client - Write Descriptor - Success",
> + ACTION_SUCCESS(init_pdus, write_descriptor_1),
> + ACTION_SUCCESS(bluetooth_enable_action, NULL),
> + CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
> + ACTION_SUCCESS(init_write_params_action, &set_write_param_4),
> + ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
> + ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
> + ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb),
> + ACTION_SUCCESS(gatt_client_register_action, &app1_uuid),
> + CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS),
> + ACTION_SUCCESS(gatt_client_start_scan_action,
> + INT_TO_PTR(APP1_ID)),
> + CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE),
> + ACTION_SUCCESS(gatt_client_stop_scan_action,
> + INT_TO_PTR(APP1_ID)),
> + ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req),
> + CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS,
> + prop_emu_remotes_default_set,
> + CONN1_ID, APP1_ID),
> + ACTION_SUCCESS(gatt_client_search_services, &search_services_1),
> + CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID),
> + ACTION_SUCCESS(gatt_client_get_characteristic_action,
> + &get_char_data_1),
> + CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS,
> + CONN1_ID, &service_1, &characteristic_1, 4),
> + ACTION_SUCCESS(gatt_client_get_descriptor_action,
> + &get_desc_data_1),
> + CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID,
> + &service_1, &characteristic_1, &desc_1),
> + ACTION_SUCCESS(gatt_client_write_descriptor_action,
> + &write_desc_data_1),
> + CALLBACK_GATTC_WRITE_DESCRIPTOR(GATT_STATUS_SUCCESS,
> + CONN1_ID, &write_params_1),
> + ACTION_SUCCESS(bluetooth_disable_action, NULL),
> + CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
> + ),
> };

Please do not mix client and server tests. So this should be up before server
tests. Same goes for rest of the patches.

Other than that those look good to me.

>
> struct queue *get_gatt_tests(void)
>

--
Best regards,
Szymon Janc

2014-10-03 12:58:01

by Mariusz Skamra

[permalink] [raw]
Subject: [PATCH 4/4] android/tester: Add Gatt Write Descriptor Insuf. Auth.

Test case for insufficient authorization error
---
android/tester-gatt.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 3c686aa..1237f2b 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -443,6 +443,14 @@ static struct set_write_params set_write_param_5 = {
.status = 0x01
};

+static struct set_write_params set_write_param_6 = {
+ .params = &write_params_1,
+ .srvc_id = &service_1,
+ .char_id = &characteristic_1,
+ .descr_id = &desc_1,
+ .status = GATT_STATUS_INS_AUTH
+};
+
static struct set_notify_params set_notify_param_1 = {
.params = &notify_params_1,
.value = value_1,
@@ -705,6 +713,24 @@ static struct iovec write_descriptor_1[] = {
end_pdu
};

+static struct iovec write_descriptor_2[] = {
+ raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
+ raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
+ raw_pdu(0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28),
+ raw_pdu(0x01, 0x11, 0x11, 0x00, 0x0a),
+ raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28),
+ raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x00, 0x00, 0x19, 0x00),
+ raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28),
+ raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a),
+ raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00),
+ raw_pdu(0x05, 0x01, 0x04, 0x00, 0x00, 0x29),
+ raw_pdu(0x04, 0x05, 0x00, 0x10, 0x00),
+ raw_pdu(0x01, 0x04, 0x05, 0x00, 0x0a),
+ raw_pdu(0x12, 0x04, 0x00, 0x00, 0x01, 0x02, 0x03),
+ raw_pdu(0x01, 0x12, 0x04, 0x00, 0x08),
+ end_pdu
+};
+
static struct iovec notification_1[] = {
raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
@@ -2311,6 +2337,42 @@ static struct test_case test_cases[] = {
ACTION_SUCCESS(bluetooth_disable_action, NULL),
CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
),
+ TEST_CASE_BREDRLE("Gatt Client - Write Descriptor - Insuf. Auth.",
+ ACTION_SUCCESS(init_pdus, write_descriptor_2),
+ ACTION_SUCCESS(bluetooth_enable_action, NULL),
+ CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
+ ACTION_SUCCESS(init_write_params_action, &set_write_param_6),
+ ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
+ ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
+ ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb),
+ ACTION_SUCCESS(gatt_client_register_action, &app1_uuid),
+ CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS),
+ ACTION_SUCCESS(gatt_client_start_scan_action,
+ INT_TO_PTR(APP1_ID)),
+ CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE),
+ ACTION_SUCCESS(gatt_client_stop_scan_action,
+ INT_TO_PTR(APP1_ID)),
+ ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req),
+ CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS,
+ prop_emu_remotes_default_set,
+ CONN1_ID, APP1_ID),
+ ACTION_SUCCESS(gatt_client_search_services, &search_services_1),
+ CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID),
+ ACTION_SUCCESS(gatt_client_get_characteristic_action,
+ &get_char_data_1),
+ CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS,
+ CONN1_ID, &service_1, &characteristic_1, 4),
+ ACTION_SUCCESS(gatt_client_get_descriptor_action,
+ &get_desc_data_1),
+ CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID,
+ &service_1, &characteristic_1, &desc_1),
+ ACTION_SUCCESS(gatt_client_write_descriptor_action,
+ &write_desc_data_1),
+ CALLBACK_GATTC_WRITE_DESCRIPTOR(GATT_STATUS_INS_AUTH,
+ CONN1_ID, &write_params_1),
+ ACTION_SUCCESS(bluetooth_disable_action, NULL),
+ CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
+ ),
};

struct queue *get_gatt_tests(void)
--
1.9.1


2014-10-03 12:58:00

by Mariusz Skamra

[permalink] [raw]
Subject: [PATCH 3/4] android/tester: Add Gatt Write Descriptor Wrong Param

Write descriptor value using wrong parameters test case
---
android/tester-gatt.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 79de14f..3c686aa 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -287,6 +287,17 @@ static struct write_char_data write_char_data_1 = {
.auth_req = 0
};

+static struct write_desc_data write_desc_data_2 = {
+ .conn_id = CONN1_ID,
+ .service = &service_1,
+ .characteristic = &characteristic_1,
+ .descriptor = &desc_2,
+ .write_type = 2,
+ .len = sizeof(value_2),
+ .auth_req = 0,
+ .p_value = value_2,
+};
+
static struct write_char_data write_char_data_2 = {
.conn_id = CONN1_ID,
.service = &service_1,
@@ -424,6 +435,14 @@ static struct set_write_params set_write_param_4 = {
.status = BT_STATUS_SUCCESS
};

+static struct set_write_params set_write_param_5 = {
+ .params = &write_params_1,
+ .srvc_id = &service_1,
+ .char_id = &characteristic_1,
+ .descr_id = &desc_2,
+ .status = 0x01
+};
+
static struct set_notify_params set_notify_param_1 = {
.params = &notify_params_1,
.value = value_1,
@@ -2256,6 +2275,42 @@ static struct test_case test_cases[] = {
ACTION_SUCCESS(bluetooth_disable_action, NULL),
CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
),
+ TEST_CASE_BREDRLE("Gatt Client - Write Descriptor - Wrong Param",
+ ACTION_SUCCESS(init_pdus, write_descriptor_1),
+ ACTION_SUCCESS(bluetooth_enable_action, NULL),
+ CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
+ ACTION_SUCCESS(init_write_params_action, &set_write_param_5),
+ ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
+ ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
+ ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb),
+ ACTION_SUCCESS(gatt_client_register_action, &app1_uuid),
+ CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS),
+ ACTION_SUCCESS(gatt_client_start_scan_action,
+ INT_TO_PTR(APP1_ID)),
+ CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE),
+ ACTION_SUCCESS(gatt_client_stop_scan_action,
+ INT_TO_PTR(APP1_ID)),
+ ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req),
+ CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS,
+ prop_emu_remotes_default_set,
+ CONN1_ID, APP1_ID),
+ ACTION_SUCCESS(gatt_client_search_services, &search_services_1),
+ CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID),
+ ACTION_SUCCESS(gatt_client_get_characteristic_action,
+ &get_char_data_1),
+ CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS,
+ CONN1_ID, &service_1, &characteristic_1, 4),
+ ACTION_SUCCESS(gatt_client_get_descriptor_action,
+ &get_desc_data_1),
+ CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID,
+ &service_1, &characteristic_1, &desc_1),
+ ACTION_FAIL(gatt_client_write_descriptor_action,
+ &write_desc_data_2),
+ CALLBACK_GATTC_WRITE_DESCRIPTOR(GATT_STATUS_FAILURE,
+ CONN1_ID, &write_params_1),
+ ACTION_SUCCESS(bluetooth_disable_action, NULL),
+ CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
+ ),
};

struct queue *get_gatt_tests(void)
--
1.9.1


2014-10-03 12:57:59

by Mariusz Skamra

[permalink] [raw]
Subject: [PATCH 2/4] android/gatt: Fix status in write descriptor cb

This fixes problem with status value.
Status should be updated in hal_gatt_write_params as well.
---
android/gatt.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/android/gatt.c b/android/gatt.c
index dbe067f..cc554d4 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -3480,6 +3480,7 @@ static void send_client_descr_write_notify(int32_t status, int32_t conn_id,
element_id_to_hal_srvc_id(srvc, primary, &ev->data.srvc_id);
element_id_to_hal_gatt_id(ch, &ev->data.char_id);
element_id_to_hal_gatt_id(descr, &ev->data.descr_id);
+ ev->data.status = status;

ipc_send_notif(hal_ipc, HAL_SERVICE_ID_GATT,
HAL_EV_GATT_CLIENT_WRITE_DESCRIPTOR,
--
1.9.1