[PATCH 3/7] unit/test-hfp: Add /hfp/test_cmd_handler_1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 unit/test-hfp.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)

diff --git a/unit/test-hfp.c b/unit/test-hfp.c
index 092f255..8cbb524 100644
--- a/unit/test-hfp.c
+++ b/unit/test-hfp.c
@@ -39,6 +39,14 @@ struct context {
 	const struct test_data *data;
 };
 
+struct test_data {
+	hfp_command_func_t command_cb;
+	const char *server_send;
+	int data_len;
+	const char *expected_rsp;
+	int expected_rsp_len;
+};
+
 static void context_quit(struct context *context)
 {
 	g_main_loop_quit(context->main_loop);
@@ -49,11 +57,35 @@ static gboolean test_handler(GIOChannel *channel, GIOCondition cond,
 {
 	struct context *context = user_data;
 
+	if (context->data && context->data->expected_rsp) {
+		int fd = g_io_channel_unix_get_fd(channel);
+		char buf[1024];
+		int len;
+
+		len = read(fd, buf, sizeof(buf));
+		g_assert(context->data->expected_rsp_len == len);
+		g_assert(!memcmp(context->data->expected_rsp, buf, len));
+	}
+
 	context_quit(context);
 
 	return FALSE;
 }
 
+static void cmd_handler(const char *command, void *user_data)
+{
+	struct context *context = user_data;
+	int cmd_len;
+
+	cmd_len = strlen(command);
+
+	g_assert(cmd_len < context->data->data_len);
+
+	g_assert(!memcmp(command, context->data->server_send, cmd_len));
+
+	hfp_gw_send_result(context->hfp, HFP_RESULT_ERROR);
+}
+
 static struct context *create_context(gconstpointer data)
 {
 	struct context *context = g_new0(struct context, 1);
@@ -94,6 +126,9 @@ static void execute_context(struct context *context)
 
 	g_main_loop_unref(context->main_loop);
 
+	if (context->hfp)
+		hfp_gw_unref(context->hfp);
+
 	g_free(context);
 }
 
@@ -107,15 +142,56 @@ static void test_init(gconstpointer data)
 	g_assert(hfp_gw_set_close_on_unref(context->hfp, true));
 
 	hfp_gw_unref(context->hfp);
+	context->hfp = NULL;
+
+	execute_context(context);
+}
+
+static void test_command_handler(gconstpointer data)
+{
+	struct context *context = create_context(data);
+
+	context->hfp = hfp_gw_new(context->fd_client);
+
+	g_assert(context->hfp);
+	g_assert(hfp_gw_set_close_on_unref(context->hfp, true));
+
+	if (context->data->command_cb)
+		g_assert(hfp_gw_set_command_handler(context->hfp,
+						context->data->command_cb,
+						context, NULL));
+
+	if (context->data->server_send) {
+		ssize_t len;
+		len = write(context->fd_server, context->data->server_send,
+						context->data->data_len);
+
+		g_assert(len);
+	}
 
 	execute_context(context);
 }
 
+static const char err_rsp[] = {'\r', '\n', 'E', 'R', 'R', 'O', 'R', '\r', '\n'};
+
+static const char atbrsf[] = {'A', 'T', '+', 'B', 'R', 'S', 'F', '\r'};
+
+static const struct test_data test_cmd_handler_1 = {
+	.command_cb = cmd_handler,
+	.server_send = atbrsf,
+	.data_len = sizeof(atbrsf),
+	.expected_rsp = err_rsp,
+	.expected_rsp_len = sizeof(err_rsp)
+};
+
 int main(int argc, char *argv[])
 {
 	g_test_init(&argc, &argv, NULL);
 
 	g_test_add_data_func("/hfp/test_init", NULL, test_init);
 
+	g_test_add_data_func("/hfp/test_cmd_handler_1", &test_cmd_handler_1,
+							test_command_handler);
+
 	return g_test_run();
 }
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux