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