1 2 // ***************************************************************************** 3 // 4 // des iterator tests 5 // 6 // ***************************************************************************** 7 8 9 #include <stdint.h> 10 #include <stdio.h> 11 #include <stdlib.h> 12 #include <string.h> 13 14 #include "bluetooth_sdp.h" 15 16 #include "classic/sdp_util.h" 17 #include "CppUTest/TestHarness.h" 18 #include "CppUTest/CommandLineTestRunner.h" 19 20 21 static uint8_t des_list[] = { 22 0x35, 0x1E, 0x35, 0x06, 0x19, 0x01, 0x00, 0x09, 0x00, 0x0F, 0x35, 0x14, 0x19, 0x00, 0x0F, 0x09, 23 0x01, 0x00, 0x35, 0x0C, 0x09, 0x08, 0x00, 0x09, 0x08, 0x06, 0x09, 0x86, 0xDD, 0x09, 0x88, 0x0B 24 }; 25 26 static uint16_t expected_values[] = { 27 0x0100, 0xf, 0x000f, 0x0100, 0x800, 0x806, 0x86dd, 0x880b 28 }; 29 30 31 TEST_GROUP(DESParser){ 32 int value_index; 33 des_iterator_t des_list_it; 34 35 void setup(void){ 36 value_index = 0; 37 } 38 39 void CHECK_EQUAL_UINT16(des_iterator_t *it){ 40 uint16_t value; 41 uint8_t * element = des_iterator_get_element(it); 42 if (des_iterator_get_type(it) == DE_UUID){ 43 value = de_get_uuid32(element); 44 } else { 45 value = 0xffff; 46 de_element_get_uint16(element, &value); 47 } 48 CHECK_EQUAL(expected_values[value_index], value); 49 value_index++; 50 } 51 52 void iter(des_iterator_t * des_list_it){ 53 CHECK_EQUAL(des_iterator_get_type(des_list_it), DE_DES); 54 des_iterator_t prot_it; 55 des_iterator_t packet_it; 56 uint8_t * des_element; 57 uint8_t * packet_des; 58 des_element = des_iterator_get_element(des_list_it); 59 for (des_iterator_init(&prot_it, des_element) ; des_iterator_has_more(&prot_it) ; des_iterator_next(&prot_it) ){ 60 if (des_iterator_get_type(&prot_it) != DE_DES){ 61 CHECK_EQUAL_UINT16(&prot_it); 62 continue; 63 } 64 packet_des = des_iterator_get_element(&prot_it); 65 for (des_iterator_init(&packet_it, packet_des) ; des_iterator_has_more(&packet_it) ; des_iterator_next(&packet_it)){ 66 CHECK_EQUAL_UINT16(&packet_it); 67 } 68 } 69 } 70 }; 71 72 // DES { DES{0x0100, 0xf}, DES{0x000f, 0x0100, DES{0x800, 0x806, 0x86dd, 0x880b}}} 73 TEST(DESParser, DESIterator){ 74 for (des_iterator_init(&des_list_it, des_list); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)){ 75 iter(&des_list_it); 76 } 77 CHECK_EQUAL(des_iterator_has_more(&des_list_it), 0); 78 CHECK_EQUAL(value_index, 8); 79 } 80 81 TEST(DESParser, DESIterator2){ 82 uint16_t l2cap_psm = 0; 83 uint16_t bnep_version = 0; 84 for (des_iterator_init(&des_list_it, des_list); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)){ 85 CHECK_EQUAL(des_iterator_get_type(&des_list_it), DE_DES); 86 des_iterator_t prot_it; 87 uint8_t * des_element = des_iterator_get_element(&des_list_it); 88 des_iterator_init(&prot_it, des_element); 89 uint8_t * element = des_iterator_get_element(&prot_it); 90 CHECK_EQUAL(de_get_element_type(element), DE_UUID); 91 uint32_t uuid = de_get_uuid32(element); 92 switch (uuid){ 93 case BLUETOOTH_PROTOCOL_L2CAP: 94 CHECK_EQUAL(des_iterator_has_more(&prot_it), 1); 95 des_iterator_next(&prot_it); 96 de_element_get_uint16(des_iterator_get_element(&prot_it), &l2cap_psm); 97 break; 98 case BLUETOOTH_PROTOCOL_BNEP: 99 CHECK_EQUAL(des_iterator_has_more(&prot_it), 1); 100 des_iterator_next(&prot_it); 101 de_element_get_uint16(des_iterator_get_element(&prot_it), &bnep_version); 102 break; 103 default: 104 break; 105 } 106 } 107 printf("l2cap_psm 0x%04x, bnep_version 0x%04x\n", l2cap_psm, bnep_version); 108 CHECK_EQUAL(l2cap_psm, expected_values[1]); 109 CHECK_EQUAL(bnep_version, expected_values[3]); 110 CHECK_EQUAL(des_iterator_has_more(&des_list_it), 0); 111 } 112 113 int main (int argc, const char * argv[]){ 114 return CommandLineTestRunner::RunAllTests(argc, argv); 115 } 116