Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH 1/7] android/tester: Add GATT server add service test cases
@ 2014-10-06 12:54 Grzegorz Kolodziejczyk
  2014-10-06 12:54 ` [PATCH 2/7] android/tester: Add GATT server add include " Grzegorz Kolodziejczyk
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-06 12:54 UTC (permalink / raw)
  To: linux-bluetooth

This adds service add by server test cases.
---
 android/tester-gatt.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++
 android/tester-main.c |  37 +++++++++++++++-
 android/tester-main.h |  14 ++++++
 3 files changed, 169 insertions(+), 1 deletion(-)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 35cf7ed..209b556 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -118,6 +118,13 @@ struct notif_data {
 	btgatt_gatt_id_t *charac;
 };
 
+struct add_service_data {
+	int app_id;
+	btgatt_srvc_id_t *service;
+	int num_handles;
+};
+
+
 static bt_bdaddr_t emu_remote_bdaddr_val = {
 	.address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 },
 };
@@ -190,6 +197,33 @@ static btgatt_srvc_id_t service_2 = {
 	}
 };
 
+static btgatt_srvc_id_t service_add_1 = {
+	.is_primary = true,
+	.id = {
+		.inst_id = 0,
+		.uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
+			0x00, 0x10, 0x00, 0x00, 0xFF, 0xEF, 0x00, 0x00},
+	}
+};
+
+static btgatt_srvc_id_t service_add_2 = {
+	.is_primary = true,
+	.id = {
+		.inst_id = 1,
+		.uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
+			0x00, 0x10, 0x00, 0x00, 0xFF, 0xDF, 0x00, 0x00},
+	}
+};
+
+static btgatt_srvc_id_t service_add_3 = {
+	.is_primary = true,
+	.id = {
+		.inst_id = 2,
+		.uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
+			0x00, 0x10, 0x00, 0x00, 0xFF, 0xCF, 0x00, 0x00},
+	}
+};
+
 static btgatt_srvc_id_t included_1 = {
 	.is_primary = false,
 	.id = {
@@ -313,6 +347,36 @@ static struct notif_data notif_data_1 = {
 	.bdaddr = &emu_remote_bdaddr_val,
 };
 
+static struct add_service_data add_service_data_1 = {
+	.app_id = APP1_ID,
+	.service = &service_add_1,
+	.num_handles = 1
+};
+
+static struct add_service_data add_service_data_2 = {
+	.app_id = APP1_ID,
+	.service = &service_add_2,
+	.num_handles = 1
+};
+
+static struct add_service_data add_service_data_3 = {
+	.app_id = APP1_ID,
+	.service = &service_add_3,
+	.num_handles = 1
+};
+
+static struct add_service_data add_bad_service_data_1 = {
+	.app_id = APP1_ID,
+	.service = &service_add_1,
+	.num_handles = 0
+};
+
+static struct add_service_data add_sec_service_data_1 = {
+	.app_id = APP1_ID,
+	.service = &included_1,
+	.num_handles = 1
+};
+
 struct set_read_params {
 	btgatt_read_params_t *params;
 	btgatt_srvc_id_t *srvc_id;
@@ -1012,6 +1076,21 @@ static void gatt_server_disconnect_action(void)
 	schedule_action_verification(step);
 }
 
+static void gatt_server_add_service_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct add_service_data *add_srvc_data = current_data_step->set_data;
+	struct step *step = g_new0(struct step, 1);
+
+	step->action_status = data->if_gatt->server->add_service(
+						add_srvc_data->app_id,
+						add_srvc_data->service,
+						add_srvc_data->num_handles);
+
+	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();
@@ -2281,6 +2360,46 @@ 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 Server - Add Single Service Successful",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+						&service_add_1, NULL, NULL),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Multiple Services Successful",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+						&service_add_1, NULL, NULL),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_2),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+						&service_add_2, NULL, NULL),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_3),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+						&service_add_3, NULL, NULL),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Service with 0 handles",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_FAIL(gatt_server_add_service_action,
+						&add_bad_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_FAILURE, APP1_ID,
+						&service_add_1, NULL, NULL),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Secondary Service",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+						&add_sec_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+						&included_1, NULL, NULL),
+	),
 };
 
 struct queue *get_gatt_tests(void)
diff --git a/android/tester-main.c b/android/tester-main.c
index bb064b7..141e4c6 100644
--- a/android/tester-main.c
+++ b/android/tester-main.c
@@ -773,6 +773,21 @@ static bool match_data(struct step *step)
 		return false;
 	}
 
+	if (exp->callback_result.srvc_handle &&
+					step->callback_result.srvc_handle)
+		if (*exp->callback_result.srvc_handle !=
+					*step->callback_result.srvc_handle) {
+			tester_debug("Gatt service handle mismatch: %d vs %d",
+					*step->callback_result.srvc_handle,
+					*exp->callback_result.srvc_handle);
+			return false;
+		}
+
+	if (exp->store_srvc_handle)
+		memcpy(exp->store_srvc_handle,
+					step->callback_result.srvc_handle,
+					sizeof(*exp->store_srvc_handle));
+
 	return true;
 }
 
@@ -876,6 +891,9 @@ static void destroy_callback_step(void *data)
 	if (step->callback_result.notify_params)
 		free(step->callback_result.notify_params);
 
+	if (step->callback_result.srvc_handle)
+		free(step->callback_result.srvc_handle);
+
 	g_free(step);
 	g_atomic_int_dec_and_test(&scheduled_cbacks_num);
 }
@@ -1480,6 +1498,23 @@ static void gatts_connection_cb(int conn_id, int server_if, int connected,
 	schedule_callback_verification(step);
 }
 
+static void gatts_service_added_cb(int status, int server_if,
+						btgatt_srvc_id_t *srvc_id,
+						int srvc_handle)
+{
+	struct step *step = g_new0(struct step, 1);
+
+	step->callback = CB_GATTS_SERVICE_ADDED;
+
+	step->callback_result.status = status;
+	step->callback_result.gatt_app_id = server_if;
+	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
+	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
+							sizeof(srvc_handle));
+
+	schedule_callback_verification(step);
+}
+
 static void pan_control_state_cb(btpan_control_state_t state,
 					bt_status_t error, int local_role,
 							const char *ifname)
@@ -1603,7 +1638,7 @@ static const btgatt_client_callbacks_t btgatt_client_callbacks = {
 static const btgatt_server_callbacks_t btgatt_server_callbacks = {
 	.register_server_cb = gatts_register_server_cb,
 	.connection_cb = gatts_connection_cb,
-	.service_added_cb = NULL,
+	.service_added_cb = gatts_service_added_cb,
 	.included_service_added_cb = NULL,
 	.characteristic_added_cb = NULL,
 	.descriptor_added_cb = NULL,
diff --git a/android/tester-main.h b/android/tester-main.h
index 922f1cf..79df8de 100644
--- a/android/tester-main.h
+++ b/android/tester-main.h
@@ -252,6 +252,17 @@ struct pdu_set {
 		.callback_result.gatt_app_id = cb_server_id, \
 	}
 
+#define CALLBACK_GATTS_SERVICE_ADDED(cb_res, cb_server_id, cb_service, \
+						cb_srvc_handle, \
+						cb_store_srvc_handle) { \
+		.callback = CB_GATTS_SERVICE_ADDED, \
+		.callback_result.status = cb_res, \
+		.callback_result.gatt_app_id = cb_server_id, \
+		.callback_result.service = cb_service, \
+		.callback_result.srvc_handle = cb_srvc_handle, \
+		.store_srvc_handle = cb_store_srvc_handle, \
+	}
+
 #define CALLBACK_PAN_CTRL_STATE(cb, cb_res, cb_state, cb_local_role) { \
 		.callback = cb, \
 		.callback_result.status = cb_res, \
@@ -500,6 +511,7 @@ struct bt_callback_data {
 	int gatt_app_id;
 	int conn_id;
 	int connected;
+	int *srvc_handle;
 	btgatt_srvc_id_t *service;
 	btgatt_gatt_id_t *characteristic;
 	btgatt_gatt_id_t *descriptor;
@@ -535,6 +547,8 @@ struct step {
 
 	void *set_data;
 	int set_data_len;
+
+	int *store_srvc_handle;
 };
 
 struct test_case {
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/7] android/tester: Add GATT server add include service test cases
  2014-10-06 12:54 [PATCH 1/7] android/tester: Add GATT server add service test cases Grzegorz Kolodziejczyk
@ 2014-10-06 12:54 ` Grzegorz Kolodziejczyk
  2014-10-06 12:54 ` [PATCH 3/7] android/tester: Add GATT server add characteristic " Grzegorz Kolodziejczyk
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-06 12:54 UTC (permalink / raw)
  To: linux-bluetooth

This adds include service add by server test cases.
---
 android/tester-gatt.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++
 android/tester-main.c | 33 ++++++++++++++++++++-
 android/tester-main.h | 10 +++++++
 3 files changed, 121 insertions(+), 1 deletion(-)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 209b556..98b5077 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -48,6 +48,9 @@
 
 static struct queue *list; /* List of gatt test cases */
 
+static int srvc1_handle;
+static int inc_srvc1_handle;
+
 static bt_uuid_t app1_uuid = {
 	.uu = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 				0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
@@ -124,6 +127,11 @@ struct add_service_data {
 	int num_handles;
 };
 
+struct add_included_service_data {
+	int app_id;
+	int *inc_srvc_handle;
+	int *srvc_handle;
+};
 
 static bt_bdaddr_t emu_remote_bdaddr_val = {
 	.address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 },
@@ -365,6 +373,12 @@ static struct add_service_data add_service_data_3 = {
 	.num_handles = 1
 };
 
+static struct add_service_data add_service_data_4 = {
+	.app_id = APP1_ID,
+	.service = &service_add_1,
+	.num_handles = 2
+};
+
 static struct add_service_data add_bad_service_data_1 = {
 	.app_id = APP1_ID,
 	.service = &service_add_1,
@@ -377,6 +391,20 @@ static struct add_service_data add_sec_service_data_1 = {
 	.num_handles = 1
 };
 
+static int srvc_bad_handle = -1;
+
+static struct add_included_service_data add_inc_service_data_1 = {
+	.app_id = APP1_ID,
+	.inc_srvc_handle = &inc_srvc1_handle,
+	.srvc_handle = &srvc1_handle
+};
+
+static struct add_included_service_data add_bad_inc_service_data_1 = {
+	.app_id = APP1_ID,
+	.inc_srvc_handle = &srvc_bad_handle,
+	.srvc_handle = &srvc1_handle
+};
+
 struct set_read_params {
 	btgatt_read_params_t *params;
 	btgatt_srvc_id_t *srvc_id;
@@ -1091,6 +1119,22 @@ static void gatt_server_add_service_action(void)
 	schedule_action_verification(step);
 }
 
+static void gatt_server_add_inc_service_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct add_included_service_data *add_inc_srvc_data =
+						current_data_step->set_data;
+	struct step *step = g_new0(struct step, 1);
+
+	step->action_status = data->if_gatt->server->add_included_service(
+					add_inc_srvc_data->app_id,
+					*add_inc_srvc_data->srvc_handle,
+					*add_inc_srvc_data->inc_srvc_handle);
+
+	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();
@@ -2400,6 +2444,41 @@ static struct test_case test_cases[] = {
 		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
 						&included_1, NULL, NULL),
 	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Included Service Successful",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_4),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_4),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&inc_srvc1_handle),
+		ACTION_SUCCESS(gatt_server_add_inc_service_action,
+						&add_inc_service_data_1),
+		CALLBACK_GATTS_INC_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&srvc1_handle, NULL),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Inc. Service with wrong handle",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_4),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_4),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+						&service_add_1, NULL, NULL),
+		ACTION_FAIL(gatt_server_add_inc_service_action,
+						&add_bad_inc_service_data_1),
+		CALLBACK_GATTS_INC_SERVICE_ADDED(GATT_STATUS_FAILURE, APP1_ID,
+							&srvc1_handle, NULL),
+	),
 };
 
 struct queue *get_gatt_tests(void)
diff --git a/android/tester-main.c b/android/tester-main.c
index 141e4c6..f2eac79 100644
--- a/android/tester-main.c
+++ b/android/tester-main.c
@@ -783,6 +783,16 @@ static bool match_data(struct step *step)
 			return false;
 		}
 
+	if (exp->callback_result.inc_srvc_handle &&
+					step->callback_result.inc_srvc_handle)
+		if (*exp->callback_result.inc_srvc_handle !=
+				*step->callback_result.inc_srvc_handle) {
+			tester_debug("Gatt inc. srvc handle mismatch: %d vs %d",
+					*step->callback_result.inc_srvc_handle,
+					*exp->callback_result.inc_srvc_handle);
+			return false;
+		}
+
 	if (exp->store_srvc_handle)
 		memcpy(exp->store_srvc_handle,
 					step->callback_result.srvc_handle,
@@ -894,6 +904,9 @@ static void destroy_callback_step(void *data)
 	if (step->callback_result.srvc_handle)
 		free(step->callback_result.srvc_handle);
 
+	if (step->callback_result.inc_srvc_handle)
+		free(step->callback_result.inc_srvc_handle);
+
 	g_free(step);
 	g_atomic_int_dec_and_test(&scheduled_cbacks_num);
 }
@@ -1515,6 +1528,24 @@ static void gatts_service_added_cb(int status, int server_if,
 	schedule_callback_verification(step);
 }
 
+static void gatts_included_service_added_cb(int status, int server_if,
+							int srvc_handle,
+							int inc_srvc_handle)
+{
+	struct step *step = g_new0(struct step, 1);
+
+	step->callback = CB_GATTS_INCLUDED_SERVICE_ADDED;
+
+	step->callback_result.status = status;
+	step->callback_result.gatt_app_id = server_if;
+	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
+							sizeof(srvc_handle));
+	step->callback_result.inc_srvc_handle = g_memdup(&inc_srvc_handle,
+						sizeof(inc_srvc_handle));
+
+	schedule_callback_verification(step);
+}
+
 static void pan_control_state_cb(btpan_control_state_t state,
 					bt_status_t error, int local_role,
 							const char *ifname)
@@ -1639,7 +1670,7 @@ static const btgatt_server_callbacks_t btgatt_server_callbacks = {
 	.register_server_cb = gatts_register_server_cb,
 	.connection_cb = gatts_connection_cb,
 	.service_added_cb = gatts_service_added_cb,
-	.included_service_added_cb = NULL,
+	.included_service_added_cb = gatts_included_service_added_cb,
 	.characteristic_added_cb = NULL,
 	.descriptor_added_cb = NULL,
 	.service_started_cb = NULL,
diff --git a/android/tester-main.h b/android/tester-main.h
index 79df8de..14adb65 100644
--- a/android/tester-main.h
+++ b/android/tester-main.h
@@ -263,6 +263,15 @@ struct pdu_set {
 		.store_srvc_handle = cb_store_srvc_handle, \
 	}
 
+#define CALLBACK_GATTS_INC_SERVICE_ADDED(cb_res, cb_server_id, cb_srvc_handle, \
+							cb_inc_srvc_handle) { \
+		.callback = CB_GATTS_INCLUDED_SERVICE_ADDED, \
+		.callback_result.status = cb_res, \
+		.callback_result.gatt_app_id = cb_server_id, \
+		.callback_result.srvc_handle = cb_srvc_handle, \
+		.callback_result.inc_srvc_handle = cb_inc_srvc_handle, \
+	}
+
 #define CALLBACK_PAN_CTRL_STATE(cb, cb_res, cb_state, cb_local_role) { \
 		.callback = cb, \
 		.callback_result.status = cb_res, \
@@ -512,6 +521,7 @@ struct bt_callback_data {
 	int conn_id;
 	int connected;
 	int *srvc_handle;
+	int *inc_srvc_handle;
 	btgatt_srvc_id_t *service;
 	btgatt_gatt_id_t *characteristic;
 	btgatt_gatt_id_t *descriptor;
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/7] android/tester: Add GATT server add characteristic test cases
  2014-10-06 12:54 [PATCH 1/7] android/tester: Add GATT server add service test cases Grzegorz Kolodziejczyk
  2014-10-06 12:54 ` [PATCH 2/7] android/tester: Add GATT server add include " Grzegorz Kolodziejczyk
@ 2014-10-06 12:54 ` Grzegorz Kolodziejczyk
  2014-10-06 12:54 ` [PATCH 4/7] android/tester: Add GATT server add descriptor " Grzegorz Kolodziejczyk
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-06 12:54 UTC (permalink / raw)
  To: linux-bluetooth

This adds characteristic add by server test cases.
---
 android/tester-gatt.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++
 android/tester-main.c | 41 +++++++++++++++++++++++++++-
 android/tester-main.h | 16 +++++++++++
 3 files changed, 130 insertions(+), 1 deletion(-)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 98b5077..0f084ed 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -133,6 +133,14 @@ struct add_included_service_data {
 	int *srvc_handle;
 };
 
+struct add_char_data {
+	int app_id;
+	int *srvc_handle;
+	bt_uuid_t *uuid;
+	int properties;
+	int permissions;
+};
+
 static bt_bdaddr_t emu_remote_bdaddr_val = {
 	.address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 },
 };
@@ -379,6 +387,12 @@ static struct add_service_data add_service_data_4 = {
 	.num_handles = 2
 };
 
+static struct add_service_data add_service_data_5 = {
+	.app_id = APP1_ID,
+	.service = &service_add_1,
+	.num_handles = 3
+};
+
 static struct add_service_data add_bad_service_data_1 = {
 	.app_id = APP1_ID,
 	.service = &service_add_1,
@@ -405,6 +419,22 @@ static struct add_included_service_data add_bad_inc_service_data_1 = {
 	.srvc_handle = &srvc1_handle
 };
 
+static struct add_char_data add_char_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc1_handle,
+	.uuid = &app1_uuid,
+	.properties = 0,
+	.permissions = 0
+};
+
+static struct add_char_data add_bad_char_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc_bad_handle,
+	.uuid = &app1_uuid,
+	.properties = 0,
+	.permissions = 0
+};
+
 struct set_read_params {
 	btgatt_read_params_t *params;
 	btgatt_srvc_id_t *srvc_id;
@@ -1135,6 +1165,23 @@ static void gatt_server_add_inc_service_action(void)
 	schedule_action_verification(step);
 }
 
+static void gatt_server_add_char_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct add_char_data *add_char_data = current_data_step->set_data;
+	struct step *step = g_new0(struct step, 1);
+
+	step->action_status = data->if_gatt->server->add_characteristic(
+						add_char_data->app_id,
+						*add_char_data->srvc_handle,
+						add_char_data->uuid,
+						add_char_data->properties,
+						add_char_data->permissions);
+
+	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();
@@ -2479,6 +2526,33 @@ static struct test_case test_cases[] = {
 		CALLBACK_GATTS_INC_SERVICE_ADDED(GATT_STATUS_FAILURE, APP1_ID,
 							&srvc1_handle, NULL),
 	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Single Characteristic Successful",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_5),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_add_char_action, &add_char_data_1),
+		CALLBACK_GATTS_CHARACTERISTIC_ADDED(GATT_STATUS_SUCCESS,
+							APP1_ID, &app1_uuid,
+							&srvc1_handle, NULL,
+							NULL),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Char. wrong service handle",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_5),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_FAIL(gatt_server_add_char_action, &add_bad_char_data_1),
+		CALLBACK_GATTS_CHARACTERISTIC_ADDED(GATT_STATUS_FAILURE,
+							APP1_ID, &app1_uuid,
+							NULL, NULL, NULL),
+	),
 };
 
 struct queue *get_gatt_tests(void)
diff --git a/android/tester-main.c b/android/tester-main.c
index f2eac79..8ba4947 100644
--- a/android/tester-main.c
+++ b/android/tester-main.c
@@ -793,11 +793,24 @@ static bool match_data(struct step *step)
 			return false;
 		}
 
+	if (exp->callback_result.uuid && step->callback_result.uuid)
+		if (memcmp(exp->callback_result.uuid,
+					step->callback_result.uuid,
+					sizeof(*exp->callback_result.uuid))) {
+			tester_debug("Uuid mismatch");
+			return false;
+		}
+
 	if (exp->store_srvc_handle)
 		memcpy(exp->store_srvc_handle,
 					step->callback_result.srvc_handle,
 					sizeof(*exp->store_srvc_handle));
 
+	if (exp->store_char_handle)
+		memcpy(exp->store_char_handle,
+					step->callback_result.char_handle,
+					sizeof(*exp->store_char_handle));
+
 	return true;
 }
 
@@ -907,6 +920,12 @@ static void destroy_callback_step(void *data)
 	if (step->callback_result.inc_srvc_handle)
 		free(step->callback_result.inc_srvc_handle);
 
+	if (step->callback_result.uuid)
+		free(step->callback_result.uuid);
+
+	if (step->callback_result.char_handle)
+		free(step->callback_result.char_handle);
+
 	g_free(step);
 	g_atomic_int_dec_and_test(&scheduled_cbacks_num);
 }
@@ -1546,6 +1565,26 @@ static void gatts_included_service_added_cb(int status, int server_if,
 	schedule_callback_verification(step);
 }
 
+static void gatts_characteristic_added_cb(int status, int server_if,
+								bt_uuid_t *uuid,
+								int srvc_handle,
+								int char_handle)
+{
+	struct step *step = g_new0(struct step, 1);
+
+	step->callback = CB_GATTS_CHARACTERISTIC_ADDED;
+
+	step->callback_result.status = status;
+	step->callback_result.gatt_app_id = server_if;
+	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
+							sizeof(srvc_handle));
+	step->callback_result.uuid = g_memdup(uuid, sizeof(*uuid));
+	step->callback_result.char_handle = g_memdup(&char_handle,
+							sizeof(char_handle));
+
+	schedule_callback_verification(step);
+}
+
 static void pan_control_state_cb(btpan_control_state_t state,
 					bt_status_t error, int local_role,
 							const char *ifname)
@@ -1671,7 +1710,7 @@ static const btgatt_server_callbacks_t btgatt_server_callbacks = {
 	.connection_cb = gatts_connection_cb,
 	.service_added_cb = gatts_service_added_cb,
 	.included_service_added_cb = gatts_included_service_added_cb,
-	.characteristic_added_cb = NULL,
+	.characteristic_added_cb = gatts_characteristic_added_cb,
 	.descriptor_added_cb = NULL,
 	.service_started_cb = NULL,
 	.service_stopped_cb = NULL,
diff --git a/android/tester-main.h b/android/tester-main.h
index 14adb65..2400824 100644
--- a/android/tester-main.h
+++ b/android/tester-main.h
@@ -272,6 +272,19 @@ struct pdu_set {
 		.callback_result.inc_srvc_handle = cb_inc_srvc_handle, \
 	}
 
+#define CALLBACK_GATTS_CHARACTERISTIC_ADDED(cb_res, cb_server_id, cb_uuid, \
+						cb_srvc_handle, \
+						cb_char_handle, \
+						cb_store_char_handle) { \
+		.callback = CB_GATTS_CHARACTERISTIC_ADDED, \
+		.callback_result.status = cb_res, \
+		.callback_result.gatt_app_id = cb_server_id, \
+		.callback_result.uuid = cb_uuid, \
+		.callback_result.srvc_handle = cb_srvc_handle, \
+		.callback_result.char_handle = cb_char_handle, \
+		.store_char_handle = cb_store_char_handle, \
+	}
+
 #define CALLBACK_PAN_CTRL_STATE(cb, cb_res, cb_state, cb_local_role) { \
 		.callback = cb, \
 		.callback_result.status = cb_res, \
@@ -509,6 +522,7 @@ struct bt_callback_data {
 	bt_status_t status;
 	int num_properties;
 	bt_property_t *properties;
+	bt_uuid_t *uuid;
 
 	bt_ssp_variant_t pairing_variant;
 
@@ -522,6 +536,7 @@ struct bt_callback_data {
 	int connected;
 	int *srvc_handle;
 	int *inc_srvc_handle;
+	int *char_handle;
 	btgatt_srvc_id_t *service;
 	btgatt_gatt_id_t *characteristic;
 	btgatt_gatt_id_t *descriptor;
@@ -559,6 +574,7 @@ struct step {
 	int set_data_len;
 
 	int *store_srvc_handle;
+	int *store_char_handle;
 };
 
 struct test_case {
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/7] android/tester: Add GATT server add descriptor test cases
  2014-10-06 12:54 [PATCH 1/7] android/tester: Add GATT server add service test cases Grzegorz Kolodziejczyk
  2014-10-06 12:54 ` [PATCH 2/7] android/tester: Add GATT server add include " Grzegorz Kolodziejczyk
  2014-10-06 12:54 ` [PATCH 3/7] android/tester: Add GATT server add characteristic " Grzegorz Kolodziejczyk
@ 2014-10-06 12:54 ` Grzegorz Kolodziejczyk
  2014-10-06 12:54 ` [PATCH 5/7] android/tester: Add GATT server start service " Grzegorz Kolodziejczyk
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-06 12:54 UTC (permalink / raw)
  To: linux-bluetooth

This adds descriptor add by server test cases.
---
 android/tester-gatt.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++
 android/tester-main.c |  25 ++++++++++++-
 android/tester-main.h |  14 +++++++
 3 files changed, 140 insertions(+), 1 deletion(-)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 0f084ed..d7a8032 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -141,6 +141,13 @@ struct add_char_data {
 	int permissions;
 };
 
+struct add_desc_data {
+	int app_id;
+	int *srvc_handle;
+	bt_uuid_t *uuid;
+	int permissions;
+};
+
 static bt_bdaddr_t emu_remote_bdaddr_val = {
 	.address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 },
 };
@@ -393,6 +400,12 @@ static struct add_service_data add_service_data_5 = {
 	.num_handles = 3
 };
 
+static struct add_service_data add_service_data_6 = {
+	.app_id = APP1_ID,
+	.service = &service_add_1,
+	.num_handles = 4
+};
+
 static struct add_service_data add_bad_service_data_1 = {
 	.app_id = APP1_ID,
 	.service = &service_add_1,
@@ -435,6 +448,27 @@ static struct add_char_data add_bad_char_data_1 = {
 	.permissions = 0
 };
 
+static struct add_desc_data add_bad_desc_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc_bad_handle,
+	.uuid = &app2_uuid,
+	.permissions = 0
+};
+
+static struct add_desc_data add_bad_desc_data_2 = {
+	.app_id = APP2_ID,
+	.srvc_handle = &srvc1_handle,
+	.uuid = &app2_uuid,
+	.permissions = 0
+};
+
+static struct add_desc_data add_desc_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc1_handle,
+	.uuid = &app2_uuid,
+	.permissions = 0
+};
+
 struct set_read_params {
 	btgatt_read_params_t *params;
 	btgatt_srvc_id_t *srvc_id;
@@ -1182,6 +1216,22 @@ static void gatt_server_add_char_action(void)
 	schedule_action_verification(step);
 }
 
+static void gatt_server_add_desc_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct add_desc_data *add_desc_data = current_data_step->set_data;
+	struct step *step = g_new0(struct step, 1);
+
+	step->action_status = data->if_gatt->server->add_descriptor(
+						add_desc_data->app_id,
+						*add_desc_data->srvc_handle,
+						add_desc_data->uuid,
+						add_desc_data->permissions);
+
+	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();
@@ -2553,6 +2603,58 @@ static struct test_case test_cases[] = {
 							APP1_ID, &app1_uuid,
 							NULL, NULL, NULL),
 	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Single Descriptor Successful",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_6),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_add_char_action, &add_char_data_1),
+		CALLBACK_GATTS_CHARACTERISTIC_ADDED(GATT_STATUS_SUCCESS,
+							APP1_ID, &app1_uuid,
+							&srvc1_handle, NULL,
+							NULL),
+		ACTION_SUCCESS(gatt_server_add_desc_action, &add_desc_data_1),
+		CALLBACK_GATTS_DESCRIPTOR_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+						&app2_uuid, &srvc1_handle,
+						NULL, NULL),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Desc. wrong service handle",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_6),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_add_char_action, &add_char_data_1),
+		CALLBACK_GATTS_CHARACTERISTIC_ADDED(GATT_STATUS_SUCCESS,
+							APP1_ID, &app1_uuid,
+							&srvc1_handle, NULL,
+							NULL),
+		ACTION_FAIL(gatt_server_add_desc_action, &add_bad_desc_data_1),
+		CALLBACK_GATTS_DESCRIPTOR_ADDED(GATT_STATUS_FAILURE, APP1_ID,
+						&app2_uuid, NULL, NULL, NULL),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Add Desc. wrong app ID",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_6),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_add_char_action, &add_char_data_1),
+		CALLBACK_GATTS_CHARACTERISTIC_ADDED(GATT_STATUS_SUCCESS,
+							APP1_ID, &app1_uuid,
+							&srvc1_handle, NULL,
+							NULL),
+		ACTION_FAIL(gatt_server_add_desc_action, &add_bad_desc_data_2),
+		CALLBACK_GATTS_DESCRIPTOR_ADDED(GATT_STATUS_FAILURE, APP2_ID,
+						&app2_uuid, NULL, NULL, NULL),
+	),
 };
 
 struct queue *get_gatt_tests(void)
diff --git a/android/tester-main.c b/android/tester-main.c
index 8ba4947..30e1c59 100644
--- a/android/tester-main.c
+++ b/android/tester-main.c
@@ -926,6 +926,9 @@ static void destroy_callback_step(void *data)
 	if (step->callback_result.char_handle)
 		free(step->callback_result.char_handle);
 
+	if (step->callback_result.desc_handle)
+		free(step->callback_result.desc_handle);
+
 	g_free(step);
 	g_atomic_int_dec_and_test(&scheduled_cbacks_num);
 }
@@ -1585,6 +1588,26 @@ static void gatts_characteristic_added_cb(int status, int server_if,
 	schedule_callback_verification(step);
 }
 
+static void gatts_descriptor_added_cb(int status, int server_if,
+								bt_uuid_t *uuid,
+								int srvc_handle,
+								int desc_handle)
+{
+	struct step *step = g_new0(struct step, 1);
+
+	step->callback = CB_GATTS_DESCRIPTOR_ADDED;
+
+	step->callback_result.status = status;
+	step->callback_result.gatt_app_id = server_if;
+	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
+							sizeof(srvc_handle));
+	step->callback_result.uuid = g_memdup(uuid, sizeof(*uuid));
+	step->callback_result.desc_handle = g_memdup(&desc_handle,
+							sizeof(desc_handle));
+
+	schedule_callback_verification(step);
+}
+
 static void pan_control_state_cb(btpan_control_state_t state,
 					bt_status_t error, int local_role,
 							const char *ifname)
@@ -1711,7 +1734,7 @@ static const btgatt_server_callbacks_t btgatt_server_callbacks = {
 	.service_added_cb = gatts_service_added_cb,
 	.included_service_added_cb = gatts_included_service_added_cb,
 	.characteristic_added_cb = gatts_characteristic_added_cb,
-	.descriptor_added_cb = NULL,
+	.descriptor_added_cb = gatts_descriptor_added_cb,
 	.service_started_cb = NULL,
 	.service_stopped_cb = NULL,
 	.service_deleted_cb = NULL,
diff --git a/android/tester-main.h b/android/tester-main.h
index 2400824..17a6eb3 100644
--- a/android/tester-main.h
+++ b/android/tester-main.h
@@ -285,6 +285,18 @@ struct pdu_set {
 		.store_char_handle = cb_store_char_handle, \
 	}
 
+#define CALLBACK_GATTS_DESCRIPTOR_ADDED(cb_res, cb_server_id, cb_uuid, \
+					cb_srvc_handle, cb_desc_handle, \
+					cb_store_desc_handle) { \
+		.callback = CB_GATTS_DESCRIPTOR_ADDED, \
+		.callback_result.status = cb_res, \
+		.callback_result.gatt_app_id = cb_server_id, \
+		.callback_result.uuid = cb_uuid, \
+		.callback_result.srvc_handle = cb_srvc_handle, \
+		.callback_result.desc_handle = cb_desc_handle, \
+		.store_desc_handle = cb_store_desc_handle, \
+	}
+
 #define CALLBACK_PAN_CTRL_STATE(cb, cb_res, cb_state, cb_local_role) { \
 		.callback = cb, \
 		.callback_result.status = cb_res, \
@@ -537,6 +549,7 @@ struct bt_callback_data {
 	int *srvc_handle;
 	int *inc_srvc_handle;
 	int *char_handle;
+	int *desc_handle;
 	btgatt_srvc_id_t *service;
 	btgatt_gatt_id_t *characteristic;
 	btgatt_gatt_id_t *descriptor;
@@ -575,6 +588,7 @@ struct step {
 
 	int *store_srvc_handle;
 	int *store_char_handle;
+	int *store_desc_handle;
 };
 
 struct test_case {
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 5/7] android/tester: Add GATT server start service test cases
  2014-10-06 12:54 [PATCH 1/7] android/tester: Add GATT server add service test cases Grzegorz Kolodziejczyk
                   ` (2 preceding siblings ...)
  2014-10-06 12:54 ` [PATCH 4/7] android/tester: Add GATT server add descriptor " Grzegorz Kolodziejczyk
@ 2014-10-06 12:54 ` Grzegorz Kolodziejczyk
  2014-10-06 12:54 ` [PATCH 6/7] android/tester: Add GATT server stop " Grzegorz Kolodziejczyk
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-06 12:54 UTC (permalink / raw)
  To: linux-bluetooth

This adds start service by server test cases.
---
 android/tester-gatt.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++
 android/tester-main.c |  16 +++++++-
 android/tester-main.h |   7 ++++
 3 files changed, 122 insertions(+), 1 deletion(-)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index d7a8032..cc4b452 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -46,6 +46,10 @@
 #define PROP_ATUTHENTICATED_SIGNED_WRITES	0x40
 #define PROP_EXTENDED_PROPERTIES		0x80
 
+#define GATT_SERVER_TRANSPORT_LE		0x00
+#define GATT_SERVER_TRANSPORT_BREDR		0x01
+#define GATT_SERVER_TRANSPORT_LE_BREDR		0x02
+
 static struct queue *list; /* List of gatt test cases */
 
 static int srvc1_handle;
@@ -148,6 +152,12 @@ struct add_desc_data {
 	int permissions;
 };
 
+struct start_srvc_data {
+	int app_id;
+	int *srvc_handle;
+	int transport;
+};
+
 static bt_bdaddr_t emu_remote_bdaddr_val = {
 	.address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 },
 };
@@ -469,6 +479,30 @@ static struct add_desc_data add_desc_data_1 = {
 	.permissions = 0
 };
 
+static struct start_srvc_data start_srvc_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc1_handle,
+	.transport = GATT_SERVER_TRANSPORT_LE_BREDR
+};
+
+static struct start_srvc_data start_srvc_data_2 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc1_handle,
+	.transport = GATT_SERVER_TRANSPORT_LE
+};
+
+static struct start_srvc_data start_bad_srvc_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc_bad_handle,
+	.transport = GATT_SERVER_TRANSPORT_LE
+};
+
+static struct start_srvc_data start_bad_srvc_data_2 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc1_handle,
+	.transport = -1
+};
+
 struct set_read_params {
 	btgatt_read_params_t *params;
 	btgatt_srvc_id_t *srvc_id;
@@ -1232,6 +1266,21 @@ static void gatt_server_add_desc_action(void)
 	schedule_action_verification(step);
 }
 
+static void gatt_server_start_srvc_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct start_srvc_data *start_srvc_data = current_data_step->set_data;
+	struct step *step = g_new0(struct step, 1);
+
+	step->action_status = data->if_gatt->server->start_service(
+						start_srvc_data->app_id,
+						*start_srvc_data->srvc_handle,
+						start_srvc_data->transport);
+
+	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();
@@ -2655,6 +2704,57 @@ static struct test_case test_cases[] = {
 		CALLBACK_GATTS_DESCRIPTOR_ADDED(GATT_STATUS_FAILURE, APP2_ID,
 						&app2_uuid, NULL, NULL, NULL),
 	),
+	TEST_CASE_BREDRLE("Gatt Server - Start Service Successful BREDRLE",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_start_srvc_action,
+							&start_srvc_data_1),
+		CALLBACK_GATTS_SERVICE_STARTED(GATT_STATUS_SUCCESS, APP1_ID,
+								&srvc1_handle),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Start Service Successful LE",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_start_srvc_action,
+							&start_srvc_data_2),
+		CALLBACK_GATTS_SERVICE_STARTED(GATT_STATUS_SUCCESS, APP1_ID,
+								&srvc1_handle),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Start Service wrong service handle",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+						&service_add_1, NULL, NULL),
+		ACTION_FAIL(gatt_server_start_srvc_action,
+							&start_bad_srvc_data_1),
+		CALLBACK_GATTS_SERVICE_STARTED(GATT_STATUS_FAILURE, APP1_ID,
+									NULL),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Start Service wrong server transport",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_FAIL(gatt_server_start_srvc_action,
+							&start_bad_srvc_data_2),
+		CALLBACK_GATTS_SERVICE_STARTED(GATT_STATUS_FAILURE, APP1_ID,
+								&srvc1_handle),
+	),
 };
 
 struct queue *get_gatt_tests(void)
diff --git a/android/tester-main.c b/android/tester-main.c
index 30e1c59..4ffa3c1 100644
--- a/android/tester-main.c
+++ b/android/tester-main.c
@@ -1608,6 +1608,20 @@ static void gatts_descriptor_added_cb(int status, int server_if,
 	schedule_callback_verification(step);
 }
 
+static void gatts_service_started_cb(int status, int server_if, int srvc_handle)
+{
+	struct step *step = g_new0(struct step, 1);
+
+	step->callback = CB_GATTS_SERVICE_STARTED;
+
+	step->callback_result.status = status;
+	step->callback_result.gatt_app_id = server_if;
+	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
+							sizeof(srvc_handle));
+
+	schedule_callback_verification(step);
+}
+
 static void pan_control_state_cb(btpan_control_state_t state,
 					bt_status_t error, int local_role,
 							const char *ifname)
@@ -1735,7 +1749,7 @@ static const btgatt_server_callbacks_t btgatt_server_callbacks = {
 	.included_service_added_cb = gatts_included_service_added_cb,
 	.characteristic_added_cb = gatts_characteristic_added_cb,
 	.descriptor_added_cb = gatts_descriptor_added_cb,
-	.service_started_cb = NULL,
+	.service_started_cb = gatts_service_started_cb,
 	.service_stopped_cb = NULL,
 	.service_deleted_cb = NULL,
 	.request_read_cb = NULL,
diff --git a/android/tester-main.h b/android/tester-main.h
index 17a6eb3..1906a8d 100644
--- a/android/tester-main.h
+++ b/android/tester-main.h
@@ -297,6 +297,13 @@ struct pdu_set {
 		.store_desc_handle = cb_store_desc_handle, \
 	}
 
+#define CALLBACK_GATTS_SERVICE_STARTED(cb_res, cb_server_id, cb_srvc_handle) { \
+		.callback = CB_GATTS_SERVICE_STARTED, \
+		.callback_result.status = cb_res, \
+		.callback_result.gatt_app_id = cb_server_id, \
+		.callback_result.srvc_handle = cb_srvc_handle, \
+	}
+
 #define CALLBACK_PAN_CTRL_STATE(cb, cb_res, cb_state, cb_local_role) { \
 		.callback = cb, \
 		.callback_result.status = cb_res, \
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 6/7] android/tester: Add GATT server stop service test cases
  2014-10-06 12:54 [PATCH 1/7] android/tester: Add GATT server add service test cases Grzegorz Kolodziejczyk
                   ` (3 preceding siblings ...)
  2014-10-06 12:54 ` [PATCH 5/7] android/tester: Add GATT server start service " Grzegorz Kolodziejczyk
@ 2014-10-06 12:54 ` Grzegorz Kolodziejczyk
  2014-10-06 12:54 ` [PATCH 7/7] android/tester: Add GATT server delete " Grzegorz Kolodziejczyk
  2014-10-06 14:19 ` [PATCH 1/7] android/tester: Add GATT server add " Szymon Janc
  6 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-06 12:54 UTC (permalink / raw)
  To: linux-bluetooth

This adds stop service by server test cases.
---
 android/tester-gatt.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++
 android/tester-main.c | 16 ++++++++++++-
 android/tester-main.h |  7 ++++++
 3 files changed, 84 insertions(+), 1 deletion(-)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index cc4b452..abc28eb 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -158,6 +158,11 @@ struct start_srvc_data {
 	int transport;
 };
 
+struct stop_srvc_data {
+	int app_id;
+	int *srvc_handle;
+};
+
 static bt_bdaddr_t emu_remote_bdaddr_val = {
 	.address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 },
 };
@@ -503,6 +508,16 @@ static struct start_srvc_data start_bad_srvc_data_2 = {
 	.transport = -1
 };
 
+static struct stop_srvc_data stop_srvc_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc1_handle
+};
+
+static struct stop_srvc_data stop_bad_srvc_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc_bad_handle
+};
+
 struct set_read_params {
 	btgatt_read_params_t *params;
 	btgatt_srvc_id_t *srvc_id;
@@ -1281,6 +1296,20 @@ static void gatt_server_start_srvc_action(void)
 	schedule_action_verification(step);
 }
 
+static void gatt_server_stop_srvc_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct stop_srvc_data *stop_srvc_data = current_data_step->set_data;
+	struct step *step = g_new0(struct step, 1);
+
+	step->action_status = data->if_gatt->server->stop_service(
+						stop_srvc_data->app_id,
+						*stop_srvc_data->srvc_handle);
+
+	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();
@@ -2755,6 +2784,39 @@ static struct test_case test_cases[] = {
 		CALLBACK_GATTS_SERVICE_STARTED(GATT_STATUS_FAILURE, APP1_ID,
 								&srvc1_handle),
 	),
+	TEST_CASE_BREDRLE("Gatt Server - Stop Service Successful",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_start_srvc_action,
+							&start_srvc_data_1),
+		CALLBACK_GATTS_SERVICE_STARTED(GATT_STATUS_SUCCESS, APP1_ID,
+								&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_stop_srvc_action, &stop_srvc_data_1),
+		CALLBACK_GATTS_SERVICE_STOPPED(GATT_STATUS_SUCCESS, APP1_ID,
+								&srvc1_handle),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Stop Service wrong service handle",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_start_srvc_action,
+							&start_srvc_data_1),
+		CALLBACK_GATTS_SERVICE_STARTED(GATT_STATUS_SUCCESS, APP1_ID,
+								&srvc1_handle),
+		ACTION_FAIL(gatt_server_stop_srvc_action,
+							&stop_bad_srvc_data_1),
+		CALLBACK_GATTS_SERVICE_STOPPED(GATT_STATUS_FAILURE, APP1_ID,
+									NULL),
+	),
 };
 
 struct queue *get_gatt_tests(void)
diff --git a/android/tester-main.c b/android/tester-main.c
index 4ffa3c1..253599b 100644
--- a/android/tester-main.c
+++ b/android/tester-main.c
@@ -1622,6 +1622,20 @@ static void gatts_service_started_cb(int status, int server_if, int srvc_handle)
 	schedule_callback_verification(step);
 }
 
+static void gatts_service_stopped_cb(int status, int server_if, int srvc_handle)
+{
+	struct step *step = g_new0(struct step, 1);
+
+	step->callback = CB_GATTS_SERVICE_STOPPED;
+
+	step->callback_result.status = status;
+	step->callback_result.gatt_app_id = server_if;
+	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
+							sizeof(srvc_handle));
+
+	schedule_callback_verification(step);
+}
+
 static void pan_control_state_cb(btpan_control_state_t state,
 					bt_status_t error, int local_role,
 							const char *ifname)
@@ -1750,7 +1764,7 @@ static const btgatt_server_callbacks_t btgatt_server_callbacks = {
 	.characteristic_added_cb = gatts_characteristic_added_cb,
 	.descriptor_added_cb = gatts_descriptor_added_cb,
 	.service_started_cb = gatts_service_started_cb,
-	.service_stopped_cb = NULL,
+	.service_stopped_cb = gatts_service_stopped_cb,
 	.service_deleted_cb = NULL,
 	.request_read_cb = NULL,
 	.request_write_cb = NULL,
diff --git a/android/tester-main.h b/android/tester-main.h
index 1906a8d..04195a7 100644
--- a/android/tester-main.h
+++ b/android/tester-main.h
@@ -304,6 +304,13 @@ struct pdu_set {
 		.callback_result.srvc_handle = cb_srvc_handle, \
 	}
 
+#define CALLBACK_GATTS_SERVICE_STOPPED(cb_res, cb_server_id, cb_srvc_handle) { \
+		.callback = CB_GATTS_SERVICE_STOPPED, \
+		.callback_result.status = cb_res, \
+		.callback_result.gatt_app_id = cb_server_id, \
+		.callback_result.srvc_handle = cb_srvc_handle, \
+	}
+
 #define CALLBACK_PAN_CTRL_STATE(cb, cb_res, cb_state, cb_local_role) { \
 		.callback = cb, \
 		.callback_result.status = cb_res, \
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 7/7] android/tester: Add GATT server delete service test cases
  2014-10-06 12:54 [PATCH 1/7] android/tester: Add GATT server add service test cases Grzegorz Kolodziejczyk
                   ` (4 preceding siblings ...)
  2014-10-06 12:54 ` [PATCH 6/7] android/tester: Add GATT server stop " Grzegorz Kolodziejczyk
@ 2014-10-06 12:54 ` Grzegorz Kolodziejczyk
  2014-10-06 14:19 ` [PATCH 1/7] android/tester: Add GATT server add " Szymon Janc
  6 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-06 12:54 UTC (permalink / raw)
  To: linux-bluetooth

This adds delete service by server test cases.
---
 android/tester-gatt.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++
 android/tester-main.c | 16 ++++++++++++++-
 android/tester-main.h |  7 +++++++
 3 files changed, 76 insertions(+), 1 deletion(-)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index abc28eb..b15735a 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -163,6 +163,11 @@ struct stop_srvc_data {
 	int *srvc_handle;
 };
 
+struct delete_srvc_data {
+	int app_id;
+	int *srvc_handle;
+};
+
 static bt_bdaddr_t emu_remote_bdaddr_val = {
 	.address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 },
 };
@@ -518,6 +523,15 @@ static struct stop_srvc_data stop_bad_srvc_data_1 = {
 	.srvc_handle = &srvc_bad_handle
 };
 
+static struct delete_srvc_data delete_srvc_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc1_handle
+};
+
+static struct delete_srvc_data delete_bad_srvc_data_1 = {
+	.app_id = APP1_ID,
+	.srvc_handle = &srvc_bad_handle
+};
 struct set_read_params {
 	btgatt_read_params_t *params;
 	btgatt_srvc_id_t *srvc_id;
@@ -1310,6 +1324,20 @@ static void gatt_server_stop_srvc_action(void)
 	schedule_action_verification(step);
 }
 
+static void gatt_server_delete_srvc_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct delete_srvc_data *delete_srvc_data = current_data_step->set_data;
+	struct step *step = g_new0(struct step, 1);
+
+	step->action_status = data->if_gatt->server->delete_service(
+						delete_srvc_data->app_id,
+						*delete_srvc_data->srvc_handle);
+
+	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();
@@ -2817,6 +2845,32 @@ static struct test_case test_cases[] = {
 		CALLBACK_GATTS_SERVICE_STOPPED(GATT_STATUS_FAILURE, APP1_ID,
 									NULL),
 	),
+	TEST_CASE_BREDRLE("Gatt Server - Delete Service Successful",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_SUCCESS(gatt_server_delete_srvc_action,
+							&delete_srvc_data_1),
+		CALLBACK_GATTS_SERVICE_DELETED(GATT_STATUS_SUCCESS, APP1_ID,
+								&srvc1_handle),
+	),
+	TEST_CASE_BREDRLE("Gatt Server - Delete Service wrong handle",
+		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_server_add_service_action,
+							&add_service_data_1),
+		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
+							&service_add_1, NULL,
+							&srvc1_handle),
+		ACTION_FAIL(gatt_server_delete_srvc_action,
+						&delete_bad_srvc_data_1),
+		CALLBACK_GATTS_SERVICE_DELETED(GATT_STATUS_FAILURE, APP1_ID,
+									NULL),
+	),
 };
 
 struct queue *get_gatt_tests(void)
diff --git a/android/tester-main.c b/android/tester-main.c
index 253599b..a804f11 100644
--- a/android/tester-main.c
+++ b/android/tester-main.c
@@ -1636,6 +1636,20 @@ static void gatts_service_stopped_cb(int status, int server_if, int srvc_handle)
 	schedule_callback_verification(step);
 }
 
+static void gatts_service_deleted_cb(int status, int server_if, int srvc_handle)
+{
+	struct step *step = g_new0(struct step, 1);
+
+	step->callback = CB_GATTS_SERVICE_DELETED;
+
+	step->callback_result.status = status;
+	step->callback_result.gatt_app_id = server_if;
+	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
+							sizeof(srvc_handle));
+
+	schedule_callback_verification(step);
+}
+
 static void pan_control_state_cb(btpan_control_state_t state,
 					bt_status_t error, int local_role,
 							const char *ifname)
@@ -1765,7 +1779,7 @@ static const btgatt_server_callbacks_t btgatt_server_callbacks = {
 	.descriptor_added_cb = gatts_descriptor_added_cb,
 	.service_started_cb = gatts_service_started_cb,
 	.service_stopped_cb = gatts_service_stopped_cb,
-	.service_deleted_cb = NULL,
+	.service_deleted_cb = gatts_service_deleted_cb,
 	.request_read_cb = NULL,
 	.request_write_cb = NULL,
 	.request_exec_write_cb = NULL,
diff --git a/android/tester-main.h b/android/tester-main.h
index 04195a7..22c5c8b 100644
--- a/android/tester-main.h
+++ b/android/tester-main.h
@@ -311,6 +311,13 @@ struct pdu_set {
 		.callback_result.srvc_handle = cb_srvc_handle, \
 	}
 
+#define CALLBACK_GATTS_SERVICE_DELETED(cb_res, cb_server_id, cb_srvc_handle) { \
+		.callback = CB_GATTS_SERVICE_DELETED, \
+		.callback_result.status = cb_res, \
+		.callback_result.gatt_app_id = cb_server_id, \
+		.callback_result.srvc_handle = cb_srvc_handle, \
+	}
+
 #define CALLBACK_PAN_CTRL_STATE(cb, cb_res, cb_state, cb_local_role) { \
 		.callback = cb, \
 		.callback_result.status = cb_res, \
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/7] android/tester: Add GATT server add service test cases
  2014-10-06 12:54 [PATCH 1/7] android/tester: Add GATT server add service test cases Grzegorz Kolodziejczyk
                   ` (5 preceding siblings ...)
  2014-10-06 12:54 ` [PATCH 7/7] android/tester: Add GATT server delete " Grzegorz Kolodziejczyk
@ 2014-10-06 14:19 ` Szymon Janc
  6 siblings, 0 replies; 8+ messages in thread
From: Szymon Janc @ 2014-10-06 14:19 UTC (permalink / raw)
  To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth

Hi Grzegorz,

On Monday 06 of October 2014 14:54:00 Grzegorz Kolodziejczyk wrote:
> This adds service add by server test cases.
> ---
>  android/tester-gatt.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  android/tester-main.c |  37 +++++++++++++++-
>  android/tester-main.h |  14 ++++++
>  3 files changed, 169 insertions(+), 1 deletion(-)
> 
> diff --git a/android/tester-gatt.c b/android/tester-gatt.c
> index 35cf7ed..209b556 100644
> --- a/android/tester-gatt.c
> +++ b/android/tester-gatt.c
> @@ -118,6 +118,13 @@ struct notif_data {
>  	btgatt_gatt_id_t *charac;
>  };
>  
> +struct add_service_data {
> +	int app_id;
> +	btgatt_srvc_id_t *service;
> +	int num_handles;
> +};
> +
> +
>  static bt_bdaddr_t emu_remote_bdaddr_val = {
>  	.address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 },
>  };
> @@ -190,6 +197,33 @@ static btgatt_srvc_id_t service_2 = {
>  	}
>  };
>  
> +static btgatt_srvc_id_t service_add_1 = {
> +	.is_primary = true,
> +	.id = {
> +		.inst_id = 0,
> +		.uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
> +			0x00, 0x10, 0x00, 0x00, 0xFF, 0xEF, 0x00, 0x00},
> +	}
> +};
> +
> +static btgatt_srvc_id_t service_add_2 = {
> +	.is_primary = true,
> +	.id = {
> +		.inst_id = 1,
> +		.uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
> +			0x00, 0x10, 0x00, 0x00, 0xFF, 0xDF, 0x00, 0x00},
> +	}
> +};
> +
> +static btgatt_srvc_id_t service_add_3 = {
> +	.is_primary = true,
> +	.id = {
> +		.inst_id = 2,
> +		.uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
> +			0x00, 0x10, 0x00, 0x00, 0xFF, 0xCF, 0x00, 0x00},
> +	}
> +};
> +
>  static btgatt_srvc_id_t included_1 = {
>  	.is_primary = false,
>  	.id = {
> @@ -313,6 +347,36 @@ static struct notif_data notif_data_1 = {
>  	.bdaddr = &emu_remote_bdaddr_val,
>  };
>  
> +static struct add_service_data add_service_data_1 = {
> +	.app_id = APP1_ID,
> +	.service = &service_add_1,
> +	.num_handles = 1
> +};
> +
> +static struct add_service_data add_service_data_2 = {
> +	.app_id = APP1_ID,
> +	.service = &service_add_2,
> +	.num_handles = 1
> +};
> +
> +static struct add_service_data add_service_data_3 = {
> +	.app_id = APP1_ID,
> +	.service = &service_add_3,
> +	.num_handles = 1
> +};
> +
> +static struct add_service_data add_bad_service_data_1 = {
> +	.app_id = APP1_ID,
> +	.service = &service_add_1,
> +	.num_handles = 0
> +};
> +
> +static struct add_service_data add_sec_service_data_1 = {
> +	.app_id = APP1_ID,
> +	.service = &included_1,
> +	.num_handles = 1
> +};
> +
>  struct set_read_params {
>  	btgatt_read_params_t *params;
>  	btgatt_srvc_id_t *srvc_id;
> @@ -1012,6 +1076,21 @@ static void gatt_server_disconnect_action(void)
>  	schedule_action_verification(step);
>  }
>  
> +static void gatt_server_add_service_action(void)
> +{
> +	struct test_data *data = tester_get_data();
> +	struct step *current_data_step = queue_peek_head(data->steps);
> +	struct add_service_data *add_srvc_data = current_data_step->set_data;
> +	struct step *step = g_new0(struct step, 1);
> +
> +	step->action_status = data->if_gatt->server->add_service(
> +						add_srvc_data->app_id,
> +						add_srvc_data->service,
> +						add_srvc_data->num_handles);
> +
> +	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();
> @@ -2281,6 +2360,46 @@ 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 Server - Add Single Service Successful",
> +		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
> +		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
> +		ACTION_SUCCESS(gatt_server_add_service_action,
> +							&add_service_data_1),
> +		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
> +						&service_add_1, NULL, NULL),
> +	),
> +	TEST_CASE_BREDRLE("Gatt Server - Add Multiple Services Successful",
> +		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
> +		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
> +		ACTION_SUCCESS(gatt_server_add_service_action,
> +							&add_service_data_1),
> +		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
> +						&service_add_1, NULL, NULL),
> +		ACTION_SUCCESS(gatt_server_add_service_action,
> +							&add_service_data_2),
> +		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
> +						&service_add_2, NULL, NULL),
> +		ACTION_SUCCESS(gatt_server_add_service_action,
> +							&add_service_data_3),
> +		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
> +						&service_add_3, NULL, NULL),
> +	),
> +	TEST_CASE_BREDRLE("Gatt Server - Add Service with 0 handles",
> +		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
> +		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
> +		ACTION_FAIL(gatt_server_add_service_action,
> +						&add_bad_service_data_1),
> +		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_FAILURE, APP1_ID,
> +						&service_add_1, NULL, NULL),
> +	),
> +	TEST_CASE_BREDRLE("Gatt Server - Add Secondary Service",
> +		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
> +		CALLBACK_STATUS(CB_GATTS_REGISTER_SERVER, BT_STATUS_SUCCESS),
> +		ACTION_SUCCESS(gatt_server_add_service_action,
> +						&add_sec_service_data_1),
> +		CALLBACK_GATTS_SERVICE_ADDED(GATT_STATUS_SUCCESS, APP1_ID,
> +						&included_1, NULL, NULL),
> +	),
>  };
>  
>  struct queue *get_gatt_tests(void)
> diff --git a/android/tester-main.c b/android/tester-main.c
> index bb064b7..141e4c6 100644
> --- a/android/tester-main.c
> +++ b/android/tester-main.c
> @@ -773,6 +773,21 @@ static bool match_data(struct step *step)
>  		return false;
>  	}
>  
> +	if (exp->callback_result.srvc_handle &&
> +					step->callback_result.srvc_handle)
> +		if (*exp->callback_result.srvc_handle !=
> +					*step->callback_result.srvc_handle) {
> +			tester_debug("Gatt service handle mismatch: %d vs %d",
> +					*step->callback_result.srvc_handle,
> +					*exp->callback_result.srvc_handle);
> +			return false;
> +		}
> +
> +	if (exp->store_srvc_handle)
> +		memcpy(exp->store_srvc_handle,
> +					step->callback_result.srvc_handle,
> +					sizeof(*exp->store_srvc_handle));
> +
>  	return true;
>  }
>  
> @@ -876,6 +891,9 @@ static void destroy_callback_step(void *data)
>  	if (step->callback_result.notify_params)
>  		free(step->callback_result.notify_params);
>  
> +	if (step->callback_result.srvc_handle)
> +		free(step->callback_result.srvc_handle);
> +
>  	g_free(step);
>  	g_atomic_int_dec_and_test(&scheduled_cbacks_num);
>  }
> @@ -1480,6 +1498,23 @@ static void gatts_connection_cb(int conn_id, int server_if, int connected,
>  	schedule_callback_verification(step);
>  }
>  
> +static void gatts_service_added_cb(int status, int server_if,
> +						btgatt_srvc_id_t *srvc_id,
> +						int srvc_handle)
> +{
> +	struct step *step = g_new0(struct step, 1);
> +
> +	step->callback = CB_GATTS_SERVICE_ADDED;
> +
> +	step->callback_result.status = status;
> +	step->callback_result.gatt_app_id = server_if;
> +	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
> +	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
> +							sizeof(srvc_handle));
> +
> +	schedule_callback_verification(step);
> +}
> +
>  static void pan_control_state_cb(btpan_control_state_t state,
>  					bt_status_t error, int local_role,
>  							const char *ifname)
> @@ -1603,7 +1638,7 @@ static const btgatt_client_callbacks_t btgatt_client_callbacks = {
>  static const btgatt_server_callbacks_t btgatt_server_callbacks = {
>  	.register_server_cb = gatts_register_server_cb,
>  	.connection_cb = gatts_connection_cb,
> -	.service_added_cb = NULL,
> +	.service_added_cb = gatts_service_added_cb,
>  	.included_service_added_cb = NULL,
>  	.characteristic_added_cb = NULL,
>  	.descriptor_added_cb = NULL,
> diff --git a/android/tester-main.h b/android/tester-main.h
> index 922f1cf..79df8de 100644
> --- a/android/tester-main.h
> +++ b/android/tester-main.h
> @@ -252,6 +252,17 @@ struct pdu_set {
>  		.callback_result.gatt_app_id = cb_server_id, \
>  	}
>  
> +#define CALLBACK_GATTS_SERVICE_ADDED(cb_res, cb_server_id, cb_service, \
> +						cb_srvc_handle, \
> +						cb_store_srvc_handle) { \
> +		.callback = CB_GATTS_SERVICE_ADDED, \
> +		.callback_result.status = cb_res, \
> +		.callback_result.gatt_app_id = cb_server_id, \
> +		.callback_result.service = cb_service, \
> +		.callback_result.srvc_handle = cb_srvc_handle, \
> +		.store_srvc_handle = cb_store_srvc_handle, \
> +	}
> +
>  #define CALLBACK_PAN_CTRL_STATE(cb, cb_res, cb_state, cb_local_role) { \
>  		.callback = cb, \
>  		.callback_result.status = cb_res, \
> @@ -500,6 +511,7 @@ struct bt_callback_data {
>  	int gatt_app_id;
>  	int conn_id;
>  	int connected;
> +	int *srvc_handle;
>  	btgatt_srvc_id_t *service;
>  	btgatt_gatt_id_t *characteristic;
>  	btgatt_gatt_id_t *descriptor;
> @@ -535,6 +547,8 @@ struct step {
>  
>  	void *set_data;
>  	int set_data_len;
> +
> +	int *store_srvc_handle;
>  };
>  
>  struct test_case {
> 

Patches 1-4 are now applied. Rest need to be rebased. Thanks.

-- 
Best regards, 
Szymon Janc

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-10-06 14:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-06 12:54 [PATCH 1/7] android/tester: Add GATT server add service test cases Grzegorz Kolodziejczyk
2014-10-06 12:54 ` [PATCH 2/7] android/tester: Add GATT server add include " Grzegorz Kolodziejczyk
2014-10-06 12:54 ` [PATCH 3/7] android/tester: Add GATT server add characteristic " Grzegorz Kolodziejczyk
2014-10-06 12:54 ` [PATCH 4/7] android/tester: Add GATT server add descriptor " Grzegorz Kolodziejczyk
2014-10-06 12:54 ` [PATCH 5/7] android/tester: Add GATT server start service " Grzegorz Kolodziejczyk
2014-10-06 12:54 ` [PATCH 6/7] android/tester: Add GATT server stop " Grzegorz Kolodziejczyk
2014-10-06 12:54 ` [PATCH 7/7] android/tester: Add GATT server delete " Grzegorz Kolodziejczyk
2014-10-06 14:19 ` [PATCH 1/7] android/tester: Add GATT server add " Szymon Janc

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox