xref: /btstack/test/mesh/mesh_configuration_composition_data_message_test.cpp (revision 7cdc89a533ca236b2c2564b759993b788bae89d3)
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 
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 
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 
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 
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 
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 
116 int main (int argc, const char * argv[]){
117     return CommandLineTestRunner::RunAllTests(argc, argv);
118 }