From 3fff2e72918a8a3085562e81a91d1e7b489928c2 Mon Sep 17 00:00:00 2001 From: Mieszko Mierunski Date: Fri, 24 Jan 2020 16:14:54 +0100 Subject: [PATCH] tests: uart: Add forever timeout test for UART Async API. Check for proper driver behaviour if timeout for uart_rx_enable or uart_tx is set to K_FOREVER. Signed-off-by: Mieszko Mierunski --- tests/drivers/uart/uart_async_api/src/main.c | 4 +- .../uart/uart_async_api/src/test_uart.h | 2 + .../uart/uart_async_api/src/test_uart_async.c | 71 +++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/tests/drivers/uart/uart_async_api/src/main.c b/tests/drivers/uart/uart_async_api/src/main.c index 2478ba1c81a..de274f4c9dc 100644 --- a/tests/drivers/uart/uart_async_api/src/main.c +++ b/tests/drivers/uart/uart_async_api/src/main.c @@ -33,6 +33,8 @@ void test_main(void) ztest_unit_test(test_long_buffers_setup), ztest_user_unit_test(test_long_buffers), ztest_unit_test(test_write_abort_setup), - ztest_user_unit_test(test_write_abort)); + ztest_user_unit_test(test_write_abort), + ztest_unit_test(test_forever_timeout_setup), + ztest_user_unit_test(test_forever_timeout)); ztest_run_test_suite(uart_async_test); } diff --git a/tests/drivers/uart/uart_async_api/src/test_uart.h b/tests/drivers/uart/uart_async_api/src/test_uart.h index a8f5c52db4a..cdcab8910d8 100644 --- a/tests/drivers/uart/uart_async_api/src/test_uart.h +++ b/tests/drivers/uart/uart_async_api/src/test_uart.h @@ -32,6 +32,7 @@ void test_chained_read(void); void test_double_buffer(void); void test_read_abort(void); void test_write_abort(void); +void test_forever_timeout(void); void test_long_buffers(void); void test_chained_write(void); @@ -40,6 +41,7 @@ void test_chained_read_setup(void); void test_double_buffer_setup(void); void test_read_abort_setup(void); void test_write_abort_setup(void); +void test_forever_timeout_setup(void); void test_long_buffers_setup(void); void test_chained_write_setup(void); diff --git a/tests/drivers/uart/uart_async_api/src/test_uart_async.c b/tests/drivers/uart/uart_async_api/src/test_uart_async.c index 435b62f6fd4..aff179f6bf0 100644 --- a/tests/drivers/uart/uart_async_api/src/test_uart_async.c +++ b/tests/drivers/uart/uart_async_api/src/test_uart_async.c @@ -360,6 +360,77 @@ void test_write_abort(void) "RX_DISABLED timeout"); } + +void test_forever_timeout_callback(struct uart_event *evt, void *user_data) +{ + switch (evt->type) { + case UART_TX_DONE: + k_sem_give(&tx_done); + break; + case UART_TX_ABORTED: + sent = evt->data.tx.len; + k_sem_give(&tx_aborted); + break; + case UART_RX_RDY: + received = evt->data.rx.len; + k_sem_give(&rx_rdy); + break; + case UART_RX_BUF_RELEASED: + k_sem_give(&rx_buf_released); + break; + case UART_RX_DISABLED: + k_sem_give(&rx_disabled); + break; + default: + break; + } +} + +void test_forever_timeout_setup(void) +{ + struct device *uart_dev = device_get_binding(UART_DEVICE_NAME); + + uart_callback_set(uart_dev, test_forever_timeout_callback, NULL); +} + +void test_forever_timeout(void) +{ + struct device *uart_dev = device_get_binding(UART_DEVICE_NAME); + + u8_t rx_buf[100]; + u8_t tx_buf[100]; + + memset(rx_buf, 0, sizeof(rx_buf)); + memset(tx_buf, 1, sizeof(tx_buf)); + + uart_rx_enable(uart_dev, rx_buf, sizeof(rx_buf), K_FOREVER); + + uart_tx(uart_dev, tx_buf, 5, K_FOREVER); + zassert_not_equal(k_sem_take(&tx_aborted, K_MSEC(1000)), 0, + "TX_ABORTED timeout"); + zassert_equal(k_sem_take(&tx_done, K_MSEC(100)), 0, "TX_DONE timeout"); + zassert_not_equal(k_sem_take(&rx_rdy, K_MSEC(1000)), 0, + "RX_RDY timeout"); + + uart_tx(uart_dev, tx_buf, 95, K_FOREVER); + + zassert_not_equal(k_sem_take(&tx_aborted, K_MSEC(1000)), 0, + "TX_ABORTED timeout"); + zassert_equal(k_sem_take(&tx_done, K_MSEC(100)), 0, "TX_DONE timeout"); + zassert_equal(k_sem_take(&rx_rdy, K_MSEC(100)), 0, "RX_RDY timeout"); + + + zassert_equal(memcmp(tx_buf, rx_buf, 100), 0, "Buffers not equal"); + + uart_rx_disable(uart_dev); + zassert_equal(k_sem_take(&rx_buf_released, K_MSEC(100)), + 0, + "RX_BUF_RELEASED timeout"); + zassert_equal(k_sem_take(&rx_disabled, K_MSEC(100)), 0, + "RX_DISABLED timeout"); +} + + ZTEST_DMEM u8_t chained_write_tx_bufs[2][10] = {"Message 1", "Message 2"}; ZTEST_DMEM bool chained_write_next_buf = true; ZTEST_BMEM volatile u8_t tx_sent;