1 #include <stdio.h>
2
3 #include "CppUTest/TestHarness.h"
4 #include "CppUTest/CommandLineTestRunner.h"
5 #include <stdint.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9
10 #include "CppUTest/TestHarness.h"
11 #include "CppUTest/CommandLineTestRunner.h"
12
13 #include "btstack_util.h"
14 #include "bluetooth.h"
15 #include "mesh/mesh_configuration_client.h"
16
17 static uint8_t composition_data_valid_elements[] = {
18 // header
19 HCI_EVENT_MESH_META, 0x21, MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA, 0xff, 0xee, 0x00,
20 // page
21 0x00,
22 // cid, pid, vid, crpl, feature
23 0x11, 0x10, 0x22, 0x20, 0x33, 0x30, 0x44, 0x40, 0x55, 0x50,
24
25 // loc (2), num SIG models(1), num vendor models(1)
26 0xBB, 0xAA, 0x03, 0x02,
27 // SIG models
28 0x10, 0x11, 0x20, 0x22, 0x30, 0x33,
29 // Vendor models
30 0xa2, 0xa1, 0xa4, 0xa3,
31 0xb2, 0xb1, 0xb4, 0xb3
32 };
33
34 static uint8_t composition_data_no_models[] = {
35 // header
36 HCI_EVENT_MESH_META, 0x21, MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA, 0xff, 0xee, 0x00,
37 // page
38 0x00,
39 // cid, pid, vid, crpl, feature
40 0x11, 0x10, 0x22, 0x20, 0x33, 0x30, 0x44, 0x40, 0x55, 0x50,
41
42 // loc (2), num SIG models(1), num vendor models(1)
43 0xBB, 0xAA, 0x00, 0x00
44 };
45
46 static uint8_t composition_data_invalid[] = {
47 // header
48 HCI_EVENT_MESH_META, 0x21, MESH_SUBEVENT_CONFIGURATION_COMPOSITION_DATA, 0xff, 0xee, 0x00
49 };
50
TEST_GROUP(CompositionData)51 TEST_GROUP(CompositionData){
52 mesh_composite_data_iterator_t it;
53 int expected_num_elements;
54 int expected_num_sig_models;
55 int expected_num_vendor_models;
56
57 void setup(void){
58 }
59
60 void composition_data_validate(const uint8_t * elements, uint16_t elements_size){
61 int num_elements = 0;
62 int num_sig_models = 0;
63 int num_vendor_models = 0;
64 mesh_composition_data_iterator_init(&it, elements, elements_size);
65 while (mesh_composition_data_iterator_has_next_element(&it)){
66 num_elements++;
67 mesh_composition_data_iterator_next_element(&it);
68 CHECK_EQUAL(0xAABB, mesh_composition_data_iterator_element_loc(&it));
69
70 while (mesh_composition_data_iterator_has_next_sig_model(&it)){
71 num_sig_models++;
72 mesh_composition_data_iterator_next_sig_model(&it);
73 }
74 while (mesh_composition_data_iterator_has_next_vendor_model(&it)){
75 num_vendor_models++;
76 mesh_composition_data_iterator_next_vendor_model(&it);
77 }
78 }
79
80 CHECK_EQUAL(expected_num_elements, num_elements);
81 CHECK_EQUAL(expected_num_sig_models, num_sig_models);
82 CHECK_EQUAL(expected_num_vendor_models, num_vendor_models);
83 }
84 };
85
TEST(CompositionData,CompositionDataEventHeader)86 TEST(CompositionData, CompositionDataEventHeader){
87 CHECK_EQUAL(0, mesh_subevent_configuration_composition_data_get_page(composition_data_valid_elements));
88 CHECK_EQUAL(0x1011, mesh_subevent_configuration_composition_data_get_cid(composition_data_valid_elements));
89 CHECK_EQUAL(0x2022, mesh_subevent_configuration_composition_data_get_pid(composition_data_valid_elements));
90 CHECK_EQUAL(0x3033, mesh_subevent_configuration_composition_data_get_vid(composition_data_valid_elements));
91 CHECK_EQUAL(0x4044, mesh_subevent_configuration_composition_data_get_crpl(composition_data_valid_elements));
92 CHECK_EQUAL(0x5055, mesh_subevent_configuration_composition_data_get_features(composition_data_valid_elements));
93 }
94
TEST(CompositionData,CompositionDataElementsValid)95 TEST(CompositionData, CompositionDataElementsValid){
96 expected_num_elements = 1;
97 expected_num_sig_models = 3;
98 expected_num_vendor_models = 2;
99 composition_data_validate(composition_data_valid_elements, sizeof(composition_data_valid_elements));
100 }
101
TEST(CompositionData,CompositionDataElementsNoModels)102 TEST(CompositionData, CompositionDataElementsNoModels){
103 expected_num_elements = 1;
104 expected_num_sig_models = 0;
105 expected_num_vendor_models = 0;
106 composition_data_validate(composition_data_no_models, sizeof(composition_data_no_models));
107 }
108
TEST(CompositionData,CompositionDataElementsInvalid)109 TEST(CompositionData, CompositionDataElementsInvalid){
110 expected_num_elements = 0;
111 expected_num_sig_models = 0;
112 expected_num_vendor_models = 0;
113 composition_data_validate(composition_data_invalid, sizeof(composition_data_invalid));
114 }
115
main(int argc,const char * argv[])116 int main (int argc, const char * argv[]){
117 return CommandLineTestRunner::RunAllTests(argc, argv);
118 }