From 6cb1e22fd43c43b924bfd2637dbcc3cdf260d621 Mon Sep 17 00:00:00 2001 From: Christopher Friedt Date: Thu, 22 Jul 2021 17:15:23 -0400 Subject: [PATCH] tests: lib: ringbuffer: ring_buf_peek() and ring_buf_size_get() Added tests for ring_buf_size_get() and ring_buf_peek(). Fixes #37147 Signed-off-by: Christopher Friedt --- tests/lib/ringbuffer/src/main.c | 77 +++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/tests/lib/ringbuffer/src/main.c b/tests/lib/ringbuffer/src/main.c index 5dca5735bd3..c65c87aeb5f 100644 --- a/tests/lib/ringbuffer/src/main.c +++ b/tests/lib/ringbuffer/src/main.c @@ -676,6 +676,81 @@ void test_capacity(void) "Unexpected capacity"); } +void test_size(void) +{ + uint32_t size; + static uint8_t buf[RINGBUFFER_SIZE]; + + ring_buf_init(&ringbuf_raw, sizeof(buf), ringbuf_raw.buf.buf8); + + /* Test 0 */ + size = ring_buf_size_get(&ringbuf_raw); + zassert_equal(0, size, "wrong size: exp: %u act: %u", 0, size); + + /* Test 1 */ + ring_buf_put(&ringbuf_raw, "x", 1); + size = ring_buf_size_get(&ringbuf_raw); + zassert_equal(1, size, "wrong size: exp: %u act: %u", 1, size); + + /* Test N */ + ring_buf_reset(&ringbuf_raw); + ring_buf_put(&ringbuf_raw, buf, sizeof(buf)); + size = ring_buf_size_get(&ringbuf_raw); + zassert_equal(sizeof(buf), size, "wrong size: exp: %u: actual: %u", sizeof(buf), size); + + /* Test N - 2 with wrap-around */ + ring_buf_put(&ringbuf_raw, buf, sizeof(buf)); + ring_buf_get(&ringbuf_raw, NULL, 3); + ring_buf_put(&ringbuf_raw, "x", 1); + + size = ring_buf_size_get(&ringbuf_raw); + zassert_equal(sizeof(buf) - 2, size, "wrong size: exp: %u: actual: %u", sizeof(buf) - 2, + size); +} + +void test_peek(void) +{ + uint32_t size; + uint8_t byte = 0x42; + static uint8_t buf[RINGBUFFER_SIZE]; + + ring_buf_init(&ringbuf_raw, sizeof(buf), ringbuf_raw.buf.buf8); + + /* Test 0 */ + size = ring_buf_peek(&ringbuf_raw, (uint8_t *)0x1, 42424242); + zassert_equal(0, size, "wrong peek size: exp: %u: actual: %u", 0, size); + + /* Test 1 */ + ring_buf_put(&ringbuf_raw, "*", 1); + size = ring_buf_peek(&ringbuf_raw, &byte, 1); + zassert_equal(1, size, "wrong peek size: exp: %u: actual: %u", 1, size); + zassert_equal('*', byte, "wrong buffer contents: exp: %u: actual: %u", '*', byte); + size = ring_buf_size_get(&ringbuf_raw); + zassert_equal(1, size, "wrong buffer size: exp: %u: actual: %u", 1, size); + + /* Test N */ + ring_buf_reset(&ringbuf_raw); + for (size = 0; size < sizeof(buf); ++size) { + buf[size] = 'A' + (size % ('Z' - 'A' + 1)); + } + + ring_buf_put(&ringbuf_raw, buf, sizeof(buf)); + memset(buf, '*', sizeof(buf)); /* fill with pattern */ + + size = ring_buf_peek(&ringbuf_raw, buf, sizeof(buf)); + zassert_equal(sizeof(buf), size, "wrong peek size: exp: %u: actual: %u", sizeof(buf), size); + size = ring_buf_size_get(&ringbuf_raw); + zassert_equal(sizeof(buf), size, "wrong buffer size: exp: %u: actual: %u", sizeof(buf), + size); + + for (size = 0; size < sizeof(buf); ++size) { + ringbuf_raw.buf.buf8[size] = 'A' + (size % ('Z' - 'A' + 1)); + } + + zassert_equal(0, memcmp(buf, ringbuf_raw.buf.buf8, sizeof(buf)), + "content validation failed"); +} + void test_reset(void) { uint8_t indata[] = {1, 2, 3, 4, 5}; @@ -969,6 +1044,8 @@ void test_main(void) ztest_unit_test(test_byte_put_free), ztest_unit_test(test_ringbuffer_equal_bufs), ztest_unit_test(test_capacity), + ztest_unit_test(test_size), + ztest_unit_test(test_peek), ztest_unit_test(test_reset), ztest_unit_test(test_ringbuffer_performance), ztest_unit_test(test_ringbuffer_concurrent)