1 #include "CppUTest/TestHarness.h"
2 #include "CppUTest/CommandLineTestRunner.h"
3
4 #include "btstack_debug.h"
5 #include "classic/hfp.h"
6
7 // Test
8 static uint8_t test_data[HFP_H2_SYNC_FRAME_SIZE];
9 static uint8_t test_valid_sbc_frame[HFP_H2_SYNC_FRAME_SIZE];
10 static uint8_t test_invalid_sbc_frame[HFP_H2_SYNC_FRAME_SIZE];
11 static uint8_t test_invalid_frame[HFP_H2_SYNC_FRAME_SIZE];
12 static hfp_h2_sync_t test_hfp_h2_sync;
13 static uint8_t test_num_good_frames;
14 static uint8_t test_num_bad_frames;
15
test_hfp_h2_sync_callback(bool bad_frame,const uint8_t * frame_data,uint16_t frame_len)16 static bool test_hfp_h2_sync_callback(bool bad_frame, const uint8_t * frame_data, uint16_t frame_len){
17 btstack_assert(frame_len == HFP_H2_SYNC_FRAME_SIZE);
18 if (bad_frame){
19 test_num_bad_frames++;
20 return false;
21 } else {
22 // mSBC frame ok <=> sync word = 0xAD
23 if (frame_data[2] == 0xAD) {
24 test_num_good_frames++;
25 return true;
26 }
27 }
28 return false;
29 }
30
TEST_GROUP(HFP_H2_SYNC)31 TEST_GROUP(HFP_H2_SYNC){
32 void setup(void){
33 test_num_good_frames = 0;
34 test_num_bad_frames = 0;
35 test_valid_sbc_frame[0] = 0x01;
36 test_valid_sbc_frame[1] = 0x08;
37 test_valid_sbc_frame[2] = 0xAD;
38 test_invalid_sbc_frame[0] = 0x01;
39 test_invalid_sbc_frame[1] = 0x08;
40 test_invalid_sbc_frame[2] = 0xFF;
41 hfp_h2_sync_init(&test_hfp_h2_sync, &test_hfp_h2_sync_callback);
42 }
43 void teardown(void){
44 }
45 };
46
47 // initial setting
TEST(HFP_H2_SYNC,ValidSBCFrame)48 TEST(HFP_H2_SYNC, ValidSBCFrame){
49 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
50 CHECK_EQUAL(1, test_num_good_frames);
51 }
52
TEST(HFP_H2_SYNC,ValidSBCFramefter59)53 TEST(HFP_H2_SYNC, ValidSBCFramefter59){
54 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, sizeof(test_invalid_frame)-1);
55 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
56 CHECK_EQUAL(1, test_num_good_frames);
57 }
58
TEST(HFP_H2_SYNC,ValidSBCFrameAfter2)59 TEST(HFP_H2_SYNC, ValidSBCFrameAfter2){
60 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, 2);
61 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
62 CHECK_EQUAL(1, test_num_good_frames);
63 CHECK_EQUAL(2, test_hfp_h2_sync.dropped_bytes);
64 }
65
TEST(HFP_H2_SYNC,BadAndGoodFrame)66 TEST(HFP_H2_SYNC, BadAndGoodFrame){
67 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, sizeof(test_invalid_frame));
68 CHECK_EQUAL(0, test_num_good_frames);
69 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
70 CHECK_EQUAL(1, test_num_bad_frames);
71 CHECK_EQUAL(1, test_num_good_frames);
72 }
73
TEST(HFP_H2_SYNC,BadFrameFlagA)74 TEST(HFP_H2_SYNC, BadFrameFlagA){
75 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_data) - 1);
76 hfp_h2_sync_process(&test_hfp_h2_sync, true, test_valid_sbc_frame, 1);
77 CHECK_EQUAL(1, test_num_bad_frames);
78 }
79
TEST(HFP_H2_SYNC,BadFrameFlagB)80 TEST(HFP_H2_SYNC, BadFrameFlagB){
81 hfp_h2_sync_process(&test_hfp_h2_sync, true, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
82 CHECK_EQUAL(1, test_num_bad_frames);
83 }
84
TEST(HFP_H2_SYNC,InvalidSBCFrame)85 TEST(HFP_H2_SYNC, InvalidSBCFrame){
86 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_sbc_frame, sizeof(test_invalid_sbc_frame));
87 hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, 2);
88 CHECK_EQUAL(1, test_num_bad_frames);
89 CHECK_EQUAL(0, test_num_good_frames);
90 }
91
main(int argc,const char * argv[])92 int main (int argc, const char * argv[]){
93 return CommandLineTestRunner::RunAllTests(argc, argv);
94 }
95