btstack/test/hfp/hfp_h2_sync_test.cpp
2023-02-28 17:07:40 +01:00

95 lines
3.3 KiB
C++

#include "CppUTest/TestHarness.h"
#include "CppUTest/CommandLineTestRunner.h"
#include "btstack_debug.h"
#include "classic/hfp.h"
// Test
static uint8_t test_data[HFP_H2_SYNC_FRAME_SIZE];
static uint8_t test_valid_sbc_frame[HFP_H2_SYNC_FRAME_SIZE];
static uint8_t test_invalid_sbc_frame[HFP_H2_SYNC_FRAME_SIZE];
static uint8_t test_invalid_frame[HFP_H2_SYNC_FRAME_SIZE];
static hfp_h2_sync_t test_hfp_h2_sync;
static uint8_t test_num_good_frames;
static uint8_t test_num_bad_frames;
static bool test_hfp_h2_sync_callback(bool bad_frame, const uint8_t * frame_data, uint16_t frame_len){
btstack_assert(frame_len == HFP_H2_SYNC_FRAME_SIZE);
if (bad_frame){
test_num_bad_frames++;
return false;
} else {
// mSBC frame ok <=> sync word = 0xAD
if (frame_data[2] == 0xAD) {
test_num_good_frames++;
return true;
}
}
return false;
}
TEST_GROUP(HFP_H2_SYNC){
void setup(void){
test_num_good_frames = 0;
test_num_bad_frames = 0;
test_valid_sbc_frame[0] = 0x01;
test_valid_sbc_frame[1] = 0x08;
test_valid_sbc_frame[2] = 0xAD;
test_invalid_sbc_frame[0] = 0x01;
test_invalid_sbc_frame[1] = 0x08;
test_invalid_sbc_frame[2] = 0xFF;
hfp_h2_sync_init(&test_hfp_h2_sync, &test_hfp_h2_sync_callback);
}
void teardown(void){
}
};
// initial setting
TEST(HFP_H2_SYNC, ValidSBCFrame){
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
CHECK_EQUAL(1, test_num_good_frames);
}
TEST(HFP_H2_SYNC, ValidSBCFramefter59){
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, sizeof(test_invalid_frame)-1);
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
CHECK_EQUAL(1, test_num_good_frames);
}
TEST(HFP_H2_SYNC, ValidSBCFrameAfter2){
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, 2);
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
CHECK_EQUAL(1, test_num_good_frames);
CHECK_EQUAL(2, test_hfp_h2_sync.dropped_bytes);
}
TEST(HFP_H2_SYNC, BadAndGoodFrame){
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, sizeof(test_invalid_frame));
CHECK_EQUAL(0, test_num_good_frames);
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
CHECK_EQUAL(1, test_num_bad_frames);
CHECK_EQUAL(1, test_num_good_frames);
}
TEST(HFP_H2_SYNC, BadFrameFlagA){
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_valid_sbc_frame, sizeof(test_data) - 1);
hfp_h2_sync_process(&test_hfp_h2_sync, true, test_valid_sbc_frame, 1);
CHECK_EQUAL(1, test_num_bad_frames);
}
TEST(HFP_H2_SYNC, BadFrameFlagB){
hfp_h2_sync_process(&test_hfp_h2_sync, true, test_valid_sbc_frame, sizeof(test_valid_sbc_frame));
CHECK_EQUAL(1, test_num_bad_frames);
}
TEST(HFP_H2_SYNC, InvalidSBCFrame){
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_sbc_frame, sizeof(test_invalid_sbc_frame));
hfp_h2_sync_process(&test_hfp_h2_sync, false, test_invalid_frame, 2);
CHECK_EQUAL(1, test_num_bad_frames);
CHECK_EQUAL(0, test_num_good_frames);
}
int main (int argc, const char * argv[]){
return CommandLineTestRunner::RunAllTests(argc, argv);
}