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