--- unit/test-gattrib.c | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/unit/test-gattrib.c b/unit/test-gattrib.c index f93ed35..0ccf09a 100644 --- a/unit/test-gattrib.c +++ b/unit/test-gattrib.c @@ -184,7 +184,8 @@ static gboolean test_client(GIOChannel *channel, GIOCondition cond, g_assert_cmpint(len, ==, cr->expect_len); if (g_test_verbose()) - util_hexdump('>', buf, len, test_debug, "test_client: "); + util_hexdump('?', cr->expect, cr->expect_len, test_debug, + "test_client: "); cr->received = true; @@ -330,7 +331,7 @@ static void send_test_pdus(gpointer context, struct test_pdu *pdus) for (cur_pdu = pdus; cur_pdu->valid; cur_pdu++) { if (g_test_verbose()) util_hexdump('>', cur_pdu->data, cur_pdu->size, - test_debug, "send_test_pdus: "); + test_debug, "send_test_pdus: "); len = write(fd, cur_pdu->data, cur_pdu->size); g_assert_cmpint(len, ==, cur_pdu->size); do { @@ -342,13 +343,20 @@ static void send_test_pdus(gpointer context, struct test_pdu *pdus) #define PDU_MTU_RESP pdu(ATT_OP_MTU_RESP, 0x17) #define PDU_FIND_INFO_REQ pdu(ATT_OP_FIND_INFO_REQ, 0x01, 0x00, 0xFF, 0xFF) +#define PDU_NO_ATT_ERR pdu(ATT_OP_ERROR, ATT_OP_FIND_INFO_REQ, 0x00, 0x00, 0x0A) #define PDU_IND_NODATA pdu(ATT_OP_HANDLE_IND, 0x01, 0x00) #define PDU_INVALID_IND pdu(ATT_OP_HANDLE_IND, 0x14) #define PDU_IND_DATA pdu(ATT_OP_HANDLE_IND, 0x14, 0x00, 0x01) +struct expect_test_data { + struct test_pdu *expected; + GAttrib *att; +}; + static void notify_canary_expect(const guint8 *pdu, guint16 len, gpointer data) { - struct test_pdu *expected = data; + struct expect_test_data *expect = data; + struct test_pdu *expected = expect->expected; int cmp; if (g_test_verbose()) @@ -371,6 +379,14 @@ static void notify_canary_expect(const guint8 *pdu, guint16 len, gpointer data) g_assert(cmp == 0); expected->received = true; + + if (pdu[0] == ATT_OP_FIND_INFO_REQ) { + struct test_pdu no_attributes = PDU_NO_ATT_ERR; + int reqid; + reqid = g_attrib_send(expect->att, 0, no_attributes.data, + no_attributes.size, NULL, NULL, NULL); + g_assert(reqid != 0); + } } static void test_register(struct context *cxt, gconstpointer user_data) @@ -407,15 +423,19 @@ static void test_register(struct context *cxt, gconstpointer user_data) }; struct test_pdu followed_ind_pdus[] = { PDU_IND_DATA, { } }; struct test_pdu *current_pdu; + struct expect_test_data expect; + + expect.att = cxt->att; /* * Without registering anything, should be able to ignore everything but * an unexpected response. */ send_test_pdus(cxt, pdus + 1); + expect.expected = pdus; reg_id = g_attrib_register(cxt->att, GATTRIB_ALL_EVENTS, GATTRIB_ALL_HANDLES, notify_canary_expect, - pdus, NULL); + &expect, NULL); send_test_pdus(cxt, pdus); @@ -429,9 +449,10 @@ static void test_register(struct context *cxt, gconstpointer user_data) if (g_test_verbose()) g_print("ALL_REQS, ALL_HANDLES\r\n"); + expect.expected = req_pdus; reg_id = g_attrib_register(cxt->att, GATTRIB_ALL_REQS, GATTRIB_ALL_HANDLES, notify_canary_expect, - req_pdus, NULL); + &expect, NULL); send_test_pdus(cxt, pdus); @@ -445,9 +466,10 @@ static void test_register(struct context *cxt, gconstpointer user_data) if (g_test_verbose()) g_print("IND, ALL_HANDLES\r\n"); + expect.expected = all_ind_pdus; reg_id = g_attrib_register(cxt->att, ATT_OP_HANDLE_IND, GATTRIB_ALL_HANDLES, notify_canary_expect, - all_ind_pdus, NULL); + &expect, NULL); send_test_pdus(cxt, pdus); @@ -461,9 +483,9 @@ static void test_register(struct context *cxt, gconstpointer user_data) if (g_test_verbose()) g_print("IND, 0x0014\r\n"); + expect.expected = followed_ind_pdus; reg_id = g_attrib_register(cxt->att, ATT_OP_HANDLE_IND, 0x0014, - notify_canary_expect, followed_ind_pdus, - NULL); + notify_canary_expect, &expect, NULL); send_test_pdus(cxt, pdus); -- 2.1.0.rc2.206.gedb03e5 -- 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