summaryrefslogtreecommitdiffstats
path: root/test/suite
diff options
context:
space:
mode:
authorSteve Gu <sgu@google.com>2014-11-06 11:16:41 -0800
committerAndre Eisenbach <eisenbach@google.com>2015-03-26 15:48:21 +0000
commit80832ef901c9726e6dc220e3981d65da4e7bcb56 (patch)
tree6a0fd01301de150a6801ae6b1fde2c0c7119b332 /test/suite
parenta013b0cfe80dcf7268861331142a6bf53764d855 (diff)
downloadandroid_system_bt-80832ef901c9726e6dc220e3981d65da4e7bcb56.tar.gz
android_system_bt-80832ef901c9726e6dc220e3981d65da4e7bcb56.tar.bz2
android_system_bt-80832ef901c9726e6dc220e3981d65da4e7bcb56.zip
Builds server with service, characteristic, and descriptor UUIDs. Then starts and stops the server.
Change-Id: I22e269010c5e4d96d9562155e03903c3ea957c97
Diffstat (limited to 'test/suite')
-rw-r--r--test/suite/cases/cases.c4
-rw-r--r--test/suite/cases/gatt.c79
-rw-r--r--test/suite/support/gatt.c54
-rw-r--r--test/suite/support/gatt.h5
4 files changed, 131 insertions, 11 deletions
diff --git a/test/suite/cases/cases.c b/test/suite/cases/cases.c
index e93422919..476a3a15e 100644
--- a/test/suite/cases/cases.c
+++ b/test/suite/cases/cases.c
@@ -38,6 +38,7 @@ TEST_CASE_DECL(gatt_client_register);
TEST_CASE_DECL(gatt_client_scan);
TEST_CASE_DECL(gatt_client_advertise);
TEST_CASE_DECL(gatt_server_register);
+TEST_CASE_DECL(gatt_server_build);
// These are run with the Bluetooth adapter disabled.
const test_case_t sanity_suite[] = {
@@ -62,7 +63,8 @@ const test_case_t test_suite[] = {
TEST_CASE(gatt_client_register),
TEST_CASE(gatt_client_scan),
TEST_CASE(gatt_client_advertise),
- TEST_CASE(gatt_server_register)
+ TEST_CASE(gatt_server_register),
+ TEST_CASE(gatt_server_build)
};
const size_t sanity_suite_size = ARRAY_SIZE(sanity_suite);
diff --git a/test/suite/cases/gatt.c b/test/suite/cases/gatt.c
index ec2f98d4c..fd6835a24 100644
--- a/test/suite/cases/gatt.c
+++ b/test/suite/cases/gatt.c
@@ -6,10 +6,10 @@
#include "support/gatt.h"
#include "support/callbacks.h"
-bt_uuid_t app_uuid;
+#define DEFAULT_RANDOM_SEED 42
-static void assign_random_app_uuid(bt_uuid_t *uuid) {
- srand(42);
+static void create_random_uuid(bt_uuid_t *uuid, int seed) {
+ srand(seed < 0 ? time(NULL) : seed);
for (int i = 0; i < 16; ++i) {
uuid->uu[i] = (uint8_t) (rand() % 256);
}
@@ -19,8 +19,9 @@ bool gatt_client_register() {
TASSERT(gatt_interface != NULL, "Null GATT interface.");
// Registers gatt client.
- assign_random_app_uuid(&app_uuid);
- CALL_AND_WAIT(gatt_interface->client->register_client(&app_uuid), btgattc_register_app_cb);
+ bt_uuid_t gatt_client_uuid;
+ create_random_uuid(&gatt_client_uuid, DEFAULT_RANDOM_SEED);
+ CALL_AND_WAIT(gatt_interface->client->register_client(&gatt_client_uuid), btgattc_register_app_cb);
TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error registering GATT client app callback.");
// Unregisters gatt client. No callback is expected.
@@ -45,8 +46,9 @@ bool gatt_client_advertise() {
TASSERT(gatt_interface != NULL, "Null GATT interface.");
// Registers a new client app.
- assign_random_app_uuid(&app_uuid);
- CALL_AND_WAIT(gatt_interface->client->register_client(&app_uuid), btgattc_register_app_cb);
+ bt_uuid_t gatt_client_uuid;
+ create_random_uuid(&gatt_client_uuid, DEFAULT_RANDOM_SEED);
+ CALL_AND_WAIT(gatt_interface->client->register_client(&gatt_client_uuid), btgattc_register_app_cb);
TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error registering GATT client app callback.");
// Starts advertising.
@@ -66,12 +68,69 @@ bool gatt_client_advertise() {
bool gatt_server_register() {
TASSERT(gatt_interface != NULL, "Null GATT interface.");
- // Registers gatt server
- assign_random_app_uuid(&app_uuid);
- CALL_AND_WAIT(gatt_interface->server->register_server(&app_uuid), btgatts_register_app_cb);
+ // Registers gatt server.
+ bt_uuid_t gatt_server_uuid;
+ create_random_uuid(&gatt_server_uuid, DEFAULT_RANDOM_SEED);
+ CALL_AND_WAIT(gatt_interface->server->register_server(&gatt_server_uuid), btgatts_register_app_cb);
TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error registering GATT server app callback.");
// Unregisters gatt server. No callback is expected.
gatt_interface->server->unregister_server(gatt_get_server_interface());
return true;
+}
+
+bool gatt_server_build() {
+ TASSERT(gatt_interface != NULL, "Null GATT interface.");
+
+ // Registers gatt server.
+ bt_uuid_t gatt_server_uuid;
+ create_random_uuid(&gatt_server_uuid, DEFAULT_RANDOM_SEED);
+ CALL_AND_WAIT(gatt_interface->server->register_server(&gatt_server_uuid), btgatts_register_app_cb);
+ TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error registering GATT server app callback.");
+
+ // Service UUID.
+ btgatt_srvc_id_t srvc_id;
+ srvc_id.id.inst_id = 0; // there is only one instance of this service.
+ srvc_id.is_primary = 1; // this service is primary.
+ create_random_uuid(&srvc_id.id.uuid, -1);
+
+ // Characteristics UUID.
+ bt_uuid_t char_uuid;
+ create_random_uuid(&char_uuid, -1);
+
+ // Descriptor UUID.
+ bt_uuid_t desc_uuid;
+ create_random_uuid(&desc_uuid, -1);
+
+ // Adds service.
+ int server_if = gatt_get_server_interface();
+ CALL_AND_WAIT(gatt_interface->server->add_service(server_if, &srvc_id, 4 /* # handles */), btgatts_service_added_cb);
+ TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error adding service.");
+
+ // Adds characteristics.
+ int srvc_handle = gatt_get_service_handle();
+ CALL_AND_WAIT(gatt_interface->server->add_characteristic(server_if, srvc_handle, &char_uuid, 0x10 /* notification */, 0x01 /* read only */), btgatts_characteristic_added_cb);
+ TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error adding characteristics.");
+
+ // Adds descriptor.
+ int char_handle = gatt_get_characteristic_handle();
+ CALL_AND_WAIT(gatt_interface->server->add_descriptor(server_if, srvc_handle, &desc_uuid, 0x01), btgatts_descriptor_added_cb);
+ TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error adding descriptor.");
+
+ // Starts server.
+ CALL_AND_WAIT(gatt_interface->server->start_service(server_if, srvc_handle, 2 /*BREDR/LE*/), btgatts_service_started_cb);
+ TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error starting server.");
+
+ // Stops server.
+ CALL_AND_WAIT(gatt_interface->server->stop_service(server_if, srvc_handle), btgatts_service_stopped_cb);
+ TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error stopping server.");
+
+ // Deletes service.
+ CALL_AND_WAIT(gatt_interface->server->delete_service(server_if, srvc_handle), btgatts_service_deleted_cb);
+ TASSERT(gatt_get_status() == BT_STATUS_SUCCESS, "Error deleting service.");
+
+ // Unregisters gatt server. No callback is expected.
+ gatt_interface->server->unregister_server(server_if);
+
+ return true;
} \ No newline at end of file
diff --git a/test/suite/support/gatt.c b/test/suite/support/gatt.c
index 1ccc5b18b..9896afd49 100644
--- a/test/suite/support/gatt.c
+++ b/test/suite/support/gatt.c
@@ -22,8 +22,14 @@
#include "support/gatt.h"
const btgatt_interface_t *gatt_interface;
+static bt_bdaddr_t remote_bd_addr;
static int gatt_client_interface;
static int gatt_server_interface;
+static int gatt_service_handle;
+static int gatt_included_service_handle;
+static int gatt_characteristic_handle;
+static int gatt_descriptor_handle;
+static int gatt_connection_id;
static int gatt_status;
bool gatt_init() {
@@ -31,6 +37,10 @@ bool gatt_init() {
return gatt_interface->init(callbacks_get_gatt_struct()) == BT_STATUS_SUCCESS;
}
+int gatt_get_connection_id() {
+ return gatt_connection_id;
+}
+
int gatt_get_client_interface() {
return gatt_client_interface;
}
@@ -39,6 +49,22 @@ int gatt_get_server_interface() {
return gatt_server_interface;
}
+int gatt_get_service_handle() {
+ return gatt_service_handle;
+}
+
+int gatt_get_included_service_handle() {
+ return gatt_included_service_handle;
+}
+
+int gatt_get_characteristic_handle() {
+ return gatt_characteristic_handle;
+}
+
+int gatt_get_descriptor_handle() {
+ return gatt_descriptor_handle;
+}
+
int gatt_get_status() {
return gatt_status;
}
@@ -128,34 +154,62 @@ void btgatts_register_app_cb(int status, int server_if, bt_uuid_t *uuid) {
}
void btgatts_connection_cb(int conn_id, int server_if, int connected, bt_bdaddr_t *bda) {
+ gatt_connection_id = conn_id;
+ for (int i = 0; i < 6; ++i) {
+ remote_bd_addr.address[i] = bda->address[i];
+ }
CALLBACK_RET();
}
void btgatts_service_added_cb(int status, int server_if, btgatt_srvc_id_t *srvc_id, int srvc_handle) {
+ gatt_status = status;
+ gatt_server_interface = server_if;
+ gatt_service_handle = srvc_handle;
CALLBACK_RET();
}
void btgatts_included_service_added_cb(int status, int server_if, int srvc_handle, int incl_srvc_handle) {
+ gatt_status = status;
+ gatt_server_interface = server_if;
+ gatt_service_handle = srvc_handle;
+ gatt_included_service_handle = incl_srvc_handle;
CALLBACK_RET();
}
void btgatts_characteristic_added_cb(int status, int server_if, bt_uuid_t *char_id, int srvc_handle, int char_handle) {
+ gatt_status = status;
+ gatt_server_interface = server_if;
+ gatt_service_handle = srvc_handle;
+ gatt_characteristic_handle = char_handle;
CALLBACK_RET();
}
void btgatts_descriptor_added_cb(int status, int server_if, bt_uuid_t *descr_id, int srvc_handle, int descr_handle) {
+ gatt_status = status;
+ gatt_server_interface = server_if;
+ gatt_service_handle = srvc_handle;
+ gatt_descriptor_handle = descr_handle;
CALLBACK_RET();
}
void btgatts_service_started_cb(int status, int server_if, int srvc_handle) {
+ gatt_status = status;
+ gatt_server_interface = server_if;
+ gatt_service_handle = srvc_handle;
CALLBACK_RET();
}
void btgatts_service_stopped_cb(int status, int server_if, int srvc_handle) {
+ gatt_status = status;
+ gatt_server_interface = server_if;
+ gatt_service_handle = srvc_handle;
CALLBACK_RET();
}
void btgatts_service_deleted_cb(int status, int server_if, int srvc_handle) {
+ gatt_status = status;
+ gatt_server_interface = server_if;
+ gatt_service_handle = srvc_handle;
CALLBACK_RET();
}
diff --git a/test/suite/support/gatt.h b/test/suite/support/gatt.h
index 2a0d48439..d438cdfff 100644
--- a/test/suite/support/gatt.h
+++ b/test/suite/support/gatt.h
@@ -23,6 +23,11 @@
extern const btgatt_interface_t *gatt_interface;
bool gatt_init();
+int gatt_get_connection_id();
int gatt_get_client_interface();
int gatt_get_server_interface();
+int gatt_get_service_handle();
+int gatt_get_included_service_handle();
+int gatt_get_characteristic_handle();
+int gatt_get_descriptor_handle();
int gatt_get_status();