[Openvpn-devel,2/2,v2] test_buffer: add tests for buf_catrunc and its caller format_hex_ex

Message ID 20230517084422.70547-2-frank@lichtenheld.com
State Accepted
Headers show
Series [Openvpn-devel,1/2,v3] buffer: use memcpy in buf_catrunc | expand

Commit Message

Frank Lichtenheld May 17, 2023, 8:44 a.m. UTC
Just some very basic tests.

v2:
 - fix off-by-one

Change-Id: I73fc893136387d1da05f4aea98cb37b02d6c3230
Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
---
 tests/unit_tests/openvpn/test_buffer.c | 62 ++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

Comments

Gert Doering May 17, 2023, 5:10 p.m. UTC | #1
Acked-by: Gert Doering <gert@greenie.muc.de>

Unit Tests are good, this function-under-test is a bit weird, and
having the UTs in tree (and working) before the actual patch gives
double assurance that it's still working in the same weird way :-)

[ RUN      ] test_buffer_printf_catrunc
[       OK ] test_buffer_printf_catrunc
[ RUN      ] test_buffer_format_hex_ex
[       OK ] test_buffer_format_hex_ex

Your patch has been applied to the master branch.

commit eecf9e9d70955018225e47d96d57da72511c48a0
Author: Frank Lichtenheld
Date:   Wed May 17 10:44:22 2023 +0200

     test_buffer: add tests for buf_catrunc and its caller format_hex_ex

     Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
     Acked-by: Gert Doering <gert@greenie.muc.de>
     Message-Id: <20230517084422.70547-2-frank@lichtenheld.com>
     URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg26680.html
     Signed-off-by: Gert Doering <gert@greenie.muc.de>


--
kind regards,

Gert Doering

Patch

diff --git a/tests/unit_tests/openvpn/test_buffer.c b/tests/unit_tests/openvpn/test_buffer.c
index 9e3b1d2e..bff50567 100644
--- a/tests/unit_tests/openvpn/test_buffer.c
+++ b/tests/unit_tests/openvpn/test_buffer.c
@@ -56,6 +56,66 @@  test_buffer_strprefix(void **state)
     assert_int_equal(BLEN(buf), strlen(str)); \
     assert_memory_equal(BPTR(buf), str, BLEN(buf));
 
+static void
+test_buffer_printf_catrunc(void **state)
+{
+    struct gc_arena gc = gc_new();
+    struct buffer buf = alloc_buf_gc(16, &gc);
+
+    buf_printf(&buf, "%d", 123);
+    buf_printf(&buf, "%s", "some text, too long to fit");
+    assert_buf_equals_str(&buf, "123some text, t");
+
+    buf_catrunc(&buf, "...");
+    assert_buf_equals_str(&buf, "123some text...");
+
+    buf_catrunc(&buf, "some other text, much too long to fit");
+    assert_buf_equals_str(&buf, "123some text...");
+
+    buf_catrunc(&buf, "something else"); /* exactly right */
+    assert_buf_equals_str(&buf, "1something else");
+
+    buf_catrunc(&buf, "something other"); /* 1 byte too long */
+    assert_buf_equals_str(&buf, "1something else");
+
+    gc_free(&gc);
+}
+
+static void
+test_buffer_format_hex_ex(void **state)
+{
+    const int input_size = 10;
+    const uint8_t input[] = {
+        0x01, 0x00, 0xff, 0x10, 0xff, 0x00, 0xf0, 0x0f, 0x09, 0x0a
+    };
+    char *output;
+    struct gc_arena gc = gc_new();
+
+    int maxoutput = 0;
+    unsigned int blocksize = 5;
+    char *separator = " ";
+    output = format_hex_ex(input, input_size, maxoutput, blocksize, separator, &gc);
+    assert_string_equal(output, "0100ff10ff 00f00f090a");
+
+    maxoutput = 14;
+    output = format_hex_ex(input, input_size, maxoutput, blocksize, separator, &gc);
+    assert_string_equal(output, "0100[more...]");
+
+    maxoutput = 11;
+    output = format_hex_ex(input, input_size, maxoutput, blocksize, separator, &gc);
+    assert_string_equal(output, "0[more...]");
+
+    maxoutput = 10;
+    output = format_hex_ex(input, input_size, maxoutput, blocksize, separator, &gc);
+    assert_string_equal(output, "0100ff10f");
+
+    maxoutput = 9;
+    output = format_hex_ex(input, input_size, maxoutput, blocksize, separator, &gc);
+    assert_string_equal(output, "0100ff10");
+
+    gc_free(&gc);
+}
+
 struct test_buffer_list_aggregate_ctx {
     struct buffer_list *empty;
     struct buffer_list *one_two_three;
@@ -267,6 +327,8 @@  main(void)
 {
     const struct CMUnitTest tests[] = {
         cmocka_unit_test(test_buffer_strprefix),
+        cmocka_unit_test(test_buffer_printf_catrunc),
+        cmocka_unit_test(test_buffer_format_hex_ex),
         cmocka_unit_test_setup_teardown(test_buffer_list_aggregate_separator_empty,
                                         test_buffer_list_setup,
                                         test_buffer_list_teardown),