xref: /btstack/test/hfp/hfp_h2_sync_test.cpp (revision cf7250aa3d6090314187d303f46421dd69a5eef4)
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 
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 
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
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 
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 
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 
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 
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 
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 
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 
92 int main (int argc, const char * argv[]){
93     return CommandLineTestRunner::RunAllTests(argc, argv);
94 }
95