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
TEST_GROUP(DESParser)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}}}
TEST(DESParser,DESIterator)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
TEST(DESParser,DESIterator2)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
main(int argc,const char * argv[])113 int main (int argc, const char * argv[]){
114 return CommandLineTestRunner::RunAllTests(argc, argv);
115 }
116