1 #include "CppUTest/TestHarness.h"
2 #include "CppUTest/CommandLineTestRunner.h"
3
4 #include "hal_cpu.h"
5 #include "hal_time_ms.h"
6
7 #include "btstack_run_loop.h"
8 #include "btstack_run_loop_embedded.h"
9 #include "btstack_memory.h"
10
11 // quick mock
12
13 // hal_cpu
hal_cpu_disable_irqs(void)14 void hal_cpu_disable_irqs(void){}
hal_cpu_enable_irqs(void)15 void hal_cpu_enable_irqs(void){}
hal_cpu_enable_irqs_and_sleep(void)16 void hal_cpu_enable_irqs_and_sleep(void){}
17
18 // hal_time_ms_h
hal_time_ms(void)19 uint32_t hal_time_ms(void){
20 return 0;
21 }
22
23 #define HEARTBEAT_PERIOD_MS 1000
24
25 static btstack_timer_source_t timer_1;
26 static btstack_data_source_t data_source;
27 static bool data_source_called;
28 static bool timer_called;
29
heartbeat_timeout_handler(btstack_timer_source_t * ts)30 static void heartbeat_timeout_handler(btstack_timer_source_t * ts){
31 UNUSED(ts);
32 timer_called = true;
33 }
data_source_handler(btstack_data_source_t * ds,btstack_data_source_callback_type_t callback_type)34 static void data_source_handler(btstack_data_source_t * ds, btstack_data_source_callback_type_t callback_type){
35 UNUSED(ds);
36 UNUSED(callback_type);
37 data_source_called = true;
38 }
39
data_source_handler_trigger_exit(btstack_data_source_t * ds,btstack_data_source_callback_type_t callback_type)40 static void data_source_handler_trigger_exit(btstack_data_source_t * ds, btstack_data_source_callback_type_t callback_type){
41 UNUSED(ds);
42 UNUSED(callback_type);
43 btstack_run_loop_trigger_exit();
44 }
45
TEST_GROUP(Embedded)46 TEST_GROUP(Embedded){
47
48 void setup(void){
49 // start with BTstack init - especially configure HCI Transport
50 btstack_memory_init();
51 btstack_run_loop_init(btstack_run_loop_embedded_get_instance());
52 btstack_run_loop_set_timer_handler(&timer_1, heartbeat_timeout_handler);
53 }
54 void teardown(void){
55 btstack_run_loop_deinit();
56 btstack_memory_deinit();
57 }
58 };
59
TEST(Embedded,Init)60 TEST(Embedded, Init){
61 btstack_run_loop_set_timer(&timer_1, HEARTBEAT_PERIOD_MS);
62 btstack_run_loop_add_timer(&timer_1);
63
64 btstack_run_loop_embedded_execute_once();
65 btstack_run_loop_embedded_trigger();
66 btstack_run_loop_embedded_execute_once();
67 btstack_run_loop_get_time_ms();
68 btstack_run_loop_timer_dump();
69 btstack_run_loop_remove_timer(&timer_1);
70 (void) btstack_run_loop_get_timer_context(&timer_1);
71 static btstack_context_callback_registration_t callback_registration;
72 btstack_run_loop_execute_on_main_thread(&callback_registration);
73 }
74
TEST(Embedded,DataSource)75 TEST(Embedded, DataSource){
76 btstack_run_loop_set_data_source_handler(&data_source, &data_source_handler);
77 btstack_run_loop_set_data_source_fd(&data_source, 0);
78 btstack_run_loop_set_data_source_handle(&data_source, NULL);
79 btstack_run_loop_enable_data_source_callbacks(&data_source, DATA_SOURCE_CALLBACK_POLL);
80 btstack_run_loop_disable_data_source_callbacks(&data_source, DATA_SOURCE_CALLBACK_POLL);
81 btstack_run_loop_add_data_source(&data_source);
82 btstack_run_loop_remove_data_source(&data_source);
83 }
84
TEST(Embedded,ExitRunLoop)85 TEST(Embedded, ExitRunLoop){
86 btstack_run_loop_set_data_source_handler(&data_source, &data_source_handler_trigger_exit);
87 btstack_run_loop_set_data_source_fd(&data_source, 0);
88 btstack_run_loop_set_data_source_handle(&data_source, NULL);
89 btstack_run_loop_enable_data_source_callbacks(&data_source, DATA_SOURCE_CALLBACK_POLL);
90 btstack_run_loop_add_data_source(&data_source);
91 btstack_run_loop_execute();
92 }
93
94
main(int argc,const char * argv[])95 int main (int argc, const char * argv[]){
96 return CommandLineTestRunner::RunAllTests(argc, argv);
97 }
98