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 }