[FL-2242] RPC: Wait for session termination in unit tests (#1005)
* rpc: session termination callback * grammar fixes Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		| @@ -34,6 +34,7 @@ static uint32_t command_id = 0; | ||||
| typedef struct { | ||||
|     StreamBufferHandle_t output_stream; | ||||
|     SemaphoreHandle_t close_session_semaphore; | ||||
|     SemaphoreHandle_t terminate_semaphore; | ||||
|     TickType_t timeout; | ||||
| } RpcSessionContext; | ||||
|  | ||||
| @@ -74,6 +75,7 @@ static void test_rpc_compare_messages(PB_Main* result, PB_Main* expected); | ||||
| static void test_rpc_decode_and_compare(MsgList_t expected_msg_list); | ||||
| static void test_rpc_free_msg_list(MsgList_t msg_list); | ||||
| static void test_rpc_session_close_callback(void* context); | ||||
| static void test_rpc_session_terminated_callback(void* context); | ||||
|  | ||||
| static void test_rpc_setup(void) { | ||||
|     furi_check(!rpc); | ||||
| @@ -89,16 +91,21 @@ static void test_rpc_setup(void) { | ||||
|     rpc_session_context.output_stream = xStreamBufferCreate(1000, 1); | ||||
|     rpc_session_set_send_bytes_callback(session, output_bytes_callback); | ||||
|     rpc_session_context.close_session_semaphore = xSemaphoreCreateBinary(); | ||||
|     rpc_session_context.terminate_semaphore = xSemaphoreCreateBinary(); | ||||
|     rpc_session_set_close_callback(session, test_rpc_session_close_callback); | ||||
|     rpc_session_set_terminated_callback(session, test_rpc_session_terminated_callback); | ||||
|     rpc_session_set_context(session, &rpc_session_context); | ||||
| } | ||||
|  | ||||
| static void test_rpc_teardown(void) { | ||||
|     furi_check(rpc_session_context.close_session_semaphore); | ||||
|     xSemaphoreTake(rpc_session_context.terminate_semaphore, 0); | ||||
|     rpc_session_close(session); | ||||
|     furi_check(xSemaphoreTake(rpc_session_context.terminate_semaphore, portMAX_DELAY)); | ||||
|     furi_record_close("rpc"); | ||||
|     vStreamBufferDelete(rpc_session_context.output_stream); | ||||
|     vSemaphoreDelete(rpc_session_context.close_session_semaphore); | ||||
|     vSemaphoreDelete(rpc_session_context.terminate_semaphore); | ||||
|     ++command_id; | ||||
|     rpc_session_context.output_stream = NULL; | ||||
|     rpc_session_context.close_session_semaphore = NULL; | ||||
| @@ -129,6 +136,13 @@ static void test_rpc_session_close_callback(void* context) { | ||||
|     xSemaphoreGive(callbacks_context->close_session_semaphore); | ||||
| } | ||||
|  | ||||
| static void test_rpc_session_terminated_callback(void* context) { | ||||
|     furi_check(context); | ||||
|     RpcSessionContext* callbacks_context = context; | ||||
|  | ||||
|     xSemaphoreGive(callbacks_context->terminate_semaphore); | ||||
| } | ||||
|  | ||||
| static void clean_directory(Storage* fs_api, const char* clean_dir) { | ||||
|     furi_check(fs_api); | ||||
|     furi_check(clean_dir); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user