diff --git a/test/mesh/mesh.c b/test/mesh/mesh.c index fbabd2d15..c757b1297 100644 --- a/test/mesh/mesh.c +++ b/test/mesh/mesh.c @@ -321,67 +321,6 @@ static void load_provisioning_data_test_message(void){ mesh_transport_set_device_key(device_key); } -static void receive_test_message(void){ - load_provisioning_data_test_message(); - uint8_t test_network_pdu_data[29]; - const char * test_network_pdu_string; - uint8_t test_network_pdu_len; -#ifdef TEST_MESSAGE_1 - test_network_pdu_string = "68eca487516765b5e5bfdacbaf6cb7fb6bff871f035444ce83a670df"; - test_network_pdu_len = strlen(test_network_pdu_string) / 2; - btstack_parse_hex(test_network_pdu_string, test_network_pdu_len, test_network_pdu_data); - mesh_network_received_message(test_network_pdu_data, test_network_pdu_len); -#endif -#ifdef TEST_MESSAGE_6 - test_network_pdu_string = "68cab5c5348a230afba8c63d4e686364979deaf4fd40961145939cda0e"; - test_network_pdu_len = strlen(test_network_pdu_string) / 2; - btstack_parse_hex(test_network_pdu_string, test_network_pdu_len, test_network_pdu_data); - mesh_network_received_message(test_network_pdu_data, test_network_pdu_len); - test_network_pdu_string = "681615b5dd4a846cae0c032bf0746f44f1b8cc8ce5edc57e55beed49c0"; - test_network_pdu_len = strlen(test_network_pdu_string) / 2; - btstack_parse_hex(test_network_pdu_string, test_network_pdu_len, test_network_pdu_data); - mesh_network_received_message(test_network_pdu_data, test_network_pdu_len); -#endif -#ifdef TEST_MESSAGE_18 - // test values - message #23 - test_network_pdu_string = "6848cba437860e5673728a627fb938535508e21a6baf57"; - test_network_pdu_len = strlen(test_network_pdu_string) / 2; - btstack_parse_hex(test_network_pdu_string, test_network_pdu_len, test_network_pdu_data); - mesh_network_received_message(test_network_pdu_data, test_network_pdu_len); -#endif -#ifdef TEST_MESSAGE_20 - // test values - message #20 - // correctly decoded incl transmic. it's an unsegmented access message (header 0x66) - mesh_set_iv_index(0x12345677); - test_network_pdu_string = "e85cca51e2e8998c3dc87344a16c787f6b08cc897c941a5368"; - test_network_pdu_len = strlen(test_network_pdu_string) / 2; - btstack_parse_hex(test_network_pdu_string, test_network_pdu_len, test_network_pdu_data); - mesh_network_received_message(test_network_pdu_data, test_network_pdu_len); -#endif -#ifdef TEST_MESSAGE_23 - // test values - message #23 - mesh_set_iv_index(0x12345677); - test_network_pdu_string = "e877a48dd5fe2d7a9d696d3dd16a75489696f0b70c711b881385"; - test_network_pdu_len = strlen(test_network_pdu_string) / 2; - btstack_parse_hex(test_network_pdu_string, test_network_pdu_len, test_network_pdu_data); - mesh_network_received_message(test_network_pdu_data, test_network_pdu_len); -#endif -#ifdef TEST_MESSAGE_24 - // test values - message #24 - mesh_set_iv_index(0x12345677); - test_network_pdu_string = "e834586babdef394e998b4081f5a7308ce3edbb3b06cdecd028e307f1c"; - test_network_pdu_len = strlen(test_network_pdu_string) / 2; - btstack_parse_hex(test_network_pdu_string, test_network_pdu_len, test_network_pdu_data); - mesh_network_received_message(test_network_pdu_data, test_network_pdu_len); -#endif -#ifdef TEST_MESSAGE_X - test_network_pdu_string = "6873F928228C0D4FBF888D73AAC1C3C417F3F85A76010893D1B6396B74"; - test_network_pdu_len = strlen(test_network_pdu_string) / 2; - btstack_parse_hex(test_network_pdu_string, test_network_pdu_len, test_network_pdu_data); - mesh_network_received_message(test_network_pdu_data, test_network_pdu_len); -#endif -} - static void send_test_message(void){ load_provisioning_data_test_message(); uint8_t transport_pdu_data[32]; @@ -619,9 +558,6 @@ static void stdin_process(char cmd){ case '8': send_test_message(); break; - case '9': - receive_test_message(); - break; case '2': printf("Creating link to device uuid: "); printf_hexdump(pts_device_uuid, 16); diff --git a/test/mesh/mesh_message_test.c b/test/mesh/mesh_message_test.c index b7be85788..df1199214 100644 --- a/test/mesh/mesh_message_test.c +++ b/test/mesh/mesh_message_test.c @@ -13,12 +13,13 @@ extern "C" int mock_process_hci_cmd(void); static mesh_network_pdu_t * received_network_pdu; -static mesh_network_pdu_t * received_unsegmented_transport_pdu; -static mesh_transport_pdu_t * received_segmented_transport_pdu; static uint8_t sent_network_pdu_data[29]; static uint8_t sent_network_pdu_len; +static uint8_t recv_upper_transport_pdu_data[100]; +static uint16_t recv_upper_transport_pdu_len; + static btstack_packet_handler_t mesh_packet_handler; void adv_bearer_register_for_mesh_message(btstack_packet_handler_t packet_handler){ mesh_packet_handler = packet_handler; @@ -124,11 +125,18 @@ static void test_lower_transport_callback_handler(mesh_network_callback_type_t c } static void test_upper_transport_unsegmented_callback_handler(mesh_network_pdu_t * network_pdu){ - received_unsegmented_transport_pdu = network_pdu; + if (mesh_network_control(network_pdu)){ + recv_upper_transport_pdu_len = mesh_network_pdu_len(network_pdu); + memcpy(recv_upper_transport_pdu_data, mesh_network_pdu_data(network_pdu), recv_upper_transport_pdu_len); + } else { + recv_upper_transport_pdu_len = mesh_network_pdu_len(network_pdu) - 1; + memcpy(recv_upper_transport_pdu_data, mesh_network_pdu_data(network_pdu) + 1, recv_upper_transport_pdu_len); + } } static void test_upper_transport_segmented_callback_handler(mesh_transport_pdu_t * transport_pdu){ - received_segmented_transport_pdu = transport_pdu; + recv_upper_transport_pdu_len = transport_pdu->len; + memcpy(recv_upper_transport_pdu_data, transport_pdu->data, recv_upper_transport_pdu_len); } TEST_GROUP(MessageTest){ @@ -141,8 +149,7 @@ TEST_GROUP(MessageTest){ mesh_upper_transport_register_unsegemented_message_handler(&test_upper_transport_unsegmented_callback_handler); mesh_upper_transport_register_segemented_message_handler(&test_upper_transport_segmented_callback_handler); received_network_pdu = NULL; - received_segmented_transport_pdu = NULL; - received_unsegmented_transport_pdu = NULL; + recv_upper_transport_pdu_len =0; sent_network_pdu_len = 0; } void teardown(void){ @@ -163,25 +170,6 @@ static uint16_t transport_pdu_len; static uint8_t test_network_pdu_len; static uint8_t test_network_pdu_data[29]; - -char * message1_network_pdus[] = { - (char *) "68eca487516765b5e5bfdacbaf6cb7fb6bff871f035444ce83a670df" -}; -char * message1_lower_transport_pdus[] = { - (char *) "034b50057e400000010000", -}; -char * message1_upper_transport_pdu = (char *) "034b50057e400000010000"; - -char * message6_network_pdus[] = { - (char *) "68cab5c5348a230afba8c63d4e686364979deaf4fd40961145939cda0e", - (char *) "681615b5dd4a846cae0c032bf0746f44f1b8cc8ce5edc57e55beed49c0" -}; -char * message6_lower_transport_pdus[] = { - (char *) "8026ac01ee9dddfd2169326d23f3afdf", - (char *) "8026ac21cfdc18c52fdef772e0e17308", -}; -char * message6_upper_transport_pdu = (char *) "0056341263964771734fbd76e3b40519d1d94a48"; - void test_receive_network_puds(int count, char ** network_pdus, char ** lower_transport_pdus, char * access_pdu){ int i; for (i=0;idata; - upper_transport_pdu_len = received_segmented_transport_pdu->len; - } - printf_hexdump(upper_transport_pdu, upper_transport_pdu_len); - CHECK_EQUAL( transport_pdu_len, upper_transport_pdu_len); - CHECK_EQUAL_ARRAY(transport_pdu_data, upper_transport_pdu, transport_pdu_len); + printf("UpperTransportPDU: "); + printf_hexdump(recv_upper_transport_pdu_data, recv_upper_transport_pdu_len); + CHECK_EQUAL( transport_pdu_len, recv_upper_transport_pdu_len); + CHECK_EQUAL_ARRAY(transport_pdu_data, recv_upper_transport_pdu_data, transport_pdu_len); } void test_send_access_message(uint16_t netkey_index, uint16_t appkey_index, uint8_t ttl, uint16_t src, uint16_t dest, uint8_t szmic, char * control_pdu, int count, char ** lower_transport_pdus, char ** network_pdus){ @@ -290,8 +269,62 @@ void test_send_control_message(uint16_t netkey_index, uint8_t ttl, uint16_t src, sent_network_pdu_len = 0; } } +// Message 1 +char * message1_network_pdus[] = { + (char *) "68eca487516765b5e5bfdacbaf6cb7fb6bff871f035444ce83a670df" +}; +char * message1_lower_transport_pdus[] = { + (char *) "034b50057e400000010000", +}; +char * message1_upper_transport_pdu = (char *) "034b50057e400000010000"; +// Message 6 +char * message6_network_pdus[] = { + (char *) "68cab5c5348a230afba8c63d4e686364979deaf4fd40961145939cda0e", + (char *) "681615b5dd4a846cae0c032bf0746f44f1b8cc8ce5edc57e55beed49c0" +}; +char * message6_lower_transport_pdus[] = { + (char *) "8026ac01ee9dddfd2169326d23f3afdf", + (char *) "8026ac21cfdc18c52fdef772e0e17308", +}; +char * message6_upper_transport_pdu = (char *) "0056341263964771734fbd76e3b40519d1d94a48"; +// Message 18 +char * message18_network_pdus[] = { + (char *) "6848cba437860e5673728a627fb938535508e21a6baf57", +}; +char * message18_lower_transport_pdus[] = { + (char *) "665a8bde6d9106ea078a", +}; +char * message18_upper_transport_pdu = (char *) "0400000000"; +// Message 20 +char * message20_network_pdus[] = { + (char *) "e85cca51e2e8998c3dc87344a16c787f6b08cc897c941a5368", +}; +char * message20_lower_transport_pdus[] = { + (char *) "669c9803e110fea929e9542d", +}; +char * message20_upper_transport_pdu = (char *) "04000000010703"; +// Message 23 +char * message23_network_pdus[] = { + (char *) "e877a48dd5fe2d7a9d696d3dd16a75489696f0b70c711b881385", +}; +char * message23_lower_transport_pdus[] = { + (char *) "662456db5e3100eef65daa7a38", +}; +char * message23_upper_transport_pdu = (char *) "d50a0048656c6c6f"; +// Message 24 +char * message24_network_pdus[] = { + (char *) "e834586babdef394e998b4081f5a7308ce3edbb3b06cdecd028e307f1c", + (char *) "e85115af73dcfddc2f4dd6fb4d328701291be4aafe", +}; +char * message24_lower_transport_pdus[] = { + (char *) "e6a03401de1547118463123e5f6a17b9", + (char *) "e6a034219dbca387", +}; +char * message24_upper_transport_pdu = (char *) "ea0a00576f726c64"; + TEST(MessageTest, Message1Receive){ + mesh_set_iv_index(0x12345678); test_receive_network_puds(1, message1_network_pdus, message1_lower_transport_pdus, message1_upper_transport_pdu); } @@ -302,11 +335,13 @@ TEST(MessageTest, Message1Send){ uint16_t dest = 0xfffd; uint32_t seq = 1; + mesh_set_iv_index(0x12345678); mesh_upper_transport_set_seq(seq); test_send_control_message(netkey_index, ttl, src, dest, message1_upper_transport_pdu, 1, message1_lower_transport_pdus, message1_network_pdus); } TEST(MessageTest, Message6Receive){ + mesh_set_iv_index(0x12345678); test_receive_network_puds(2, message6_network_pdus, message6_lower_transport_pdus, message6_upper_transport_pdu); } @@ -319,10 +354,45 @@ TEST(MessageTest, Message6Send){ uint32_t seq = 0x3129ab; uint8_t szmic = 0; + mesh_set_iv_index(0x12345678); mesh_upper_transport_set_seq(seq); test_send_access_message(netkey_index, appkey_index, ttl, src, dest, szmic, message6_upper_transport_pdu, 1, message6_lower_transport_pdus, message6_network_pdus); } +TEST(MessageTest, Message18Receive){ + mesh_set_iv_index(0x12345678); + test_receive_network_puds(1, message18_network_pdus, message18_lower_transport_pdus, message18_upper_transport_pdu); +} + +// TEST(MessageTest, Message18Send){ +// uint16_t netkey_index = 0; +// uint16_t appkey_index = 0; +// uint8_t ttl = 3; +// uint16_t src = 0x1201; +// uint16_t dest = 0xffff; +// uint32_t seq = 0x00007; +// uint8_t szmic = 0; + +// mesh_set_iv_index(0x12345678); +// mesh_upper_transport_set_seq(seq); +// test_send_access_message(netkey_index, appkey_index, ttl, src, dest, szmic, message18_upper_transport_pdu, 1, message18_lower_transport_pdus, message18_network_pdus); +// } + +// TEST(MessageTest, Message20Receive){ +// mesh_set_iv_index(0x12345677); +// test_receive_network_puds(1, message20_network_pdus, message20_lower_transport_pdus, message20_upper_transport_pdu); +// } + +// TEST(MessageTest, Message23Receive){ +// mesh_set_iv_index(0x12345677); +// test_receive_network_puds(1, message23_network_pdus, message23_lower_transport_pdus, message23_upper_transport_pdu); +// } + +// TEST(MessageTest, Message24Receive){ +// mesh_set_iv_index(0x12345677); +// test_receive_network_puds(2, message24_network_pdus, message24_lower_transport_pdus, message24_upper_transport_pdu); +// } + int main (int argc, const char * argv[]){ return CommandLineTestRunner::RunAllTests(argc, argv); }