Skip to content

Commit

Permalink
Add unit tests for atoi parsing options helper
Browse files Browse the repository at this point in the history
Change-Id: Ieee368e325d7f9c367fd91fee0fd3e281ee0855d
Signed-off-by: Arne Schwabe <[email protected]>
Acked-by: Frank Lichtenheld <[email protected]>
Message-Id: <[email protected]>
URL: https://www.mail-archive.com/[email protected]/msg30671.html
Signed-off-by: Gert Doering <[email protected]>
  • Loading branch information
schwabe authored and cron2 committed Jan 28, 2025
1 parent 625b3e9 commit 2a6dbf5
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 3 deletions.
28 changes: 26 additions & 2 deletions tests/unit_tests/openvpn/mock_msg.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,34 @@

#include "errlevel.h"
#include "error.h"
#include "mock_msg.h"

unsigned int x_debug_level = 0; /* Default to (almost) no debugging output */
unsigned int print_x_debug_level = 0;

bool fatal_error_triggered = false;

char mock_msg_buf[MOCK_MSG_BUF];


void
mock_set_debug_level(int level)
{
x_debug_level = level;
}

int
mock_get_debug_level(void)
{
return x_debug_level;
}

void
mock_set_print_debug_level(int level)
{
print_x_debug_level = level;
}

int
get_debug_level(void)
{
Expand All @@ -62,8 +80,14 @@ x_msg_va(const unsigned int flags, const char *format,
fatal_error_triggered = true;
printf("FATAL ERROR:");
}
vprintf(format, arglist);
printf("\n");
CLEAR(mock_msg_buf);
vsnprintf(mock_msg_buf, sizeof(mock_msg_buf), format, arglist);

if ((flags & M_DEBUG_LEVEL) <= print_x_debug_level)
{
printf("%s", mock_msg_buf);
printf("\n");
}
}

void
Expand Down
14 changes: 14 additions & 0 deletions tests/unit_tests/openvpn/mock_msg.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,18 @@
*/
void mock_set_debug_level(int level);

#define MOCK_MSG_BUF 2048

extern bool fatal_error_triggered;
extern char mock_msg_buf[MOCK_MSG_BUF];

void
mock_set_debug_level(int level);

int
mock_get_debug_level(void);

void
mock_set_print_debug_level(int level);

#endif /* MOCK_MSG */
70 changes: 69 additions & 1 deletion tests/unit_tests/openvpn/test_misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "options_util.h"
#include "test_common.h"
#include "list.h"
#include "mock_msg.h"

static void
test_compat_lzo_string(void **state)
Expand Down Expand Up @@ -311,13 +312,80 @@ test_list(void **state)
gc_free(&gc);
}

static void
test_atoi_variants(void **state)
{
assert_true(valid_integer("1234", true));
assert_true(valid_integer("1234", false));
assert_true(valid_integer("0", false));
assert_true(valid_integer("0", true));
assert_true(valid_integer("-777", false));
assert_false(valid_integer("-777", true));

assert_false(valid_integer("-777foo", false));
assert_false(valid_integer("-777foo", true));

assert_false(valid_integer("foo777", true));
assert_false(valid_integer("foo777", false));

/* 2**31 + 5 , just outside of signed int range */
assert_false(valid_integer("2147483653", true));
assert_false(valid_integer("2147483653", false));
assert_false(valid_integer("-2147483653", true));
assert_false(valid_integer("-2147483653", false));


int msglevel = D_LOW;
int saved_log_level = mock_get_debug_level();
mock_set_debug_level(D_LOW);

/* check happy path */
assert_int_equal(positive_atoi("1234", msglevel), 1234);
assert_int_equal(positive_atoi("0", msglevel), 0);

assert_int_equal(atoi_warn("1234", msglevel), 1234);
assert_int_equal(atoi_warn("0", msglevel), 0);
assert_int_equal(atoi_warn("-1194", msglevel), -1194);

CLEAR(mock_msg_buf);
assert_int_equal(positive_atoi("-1234", msglevel), 0);
assert_string_equal(mock_msg_buf, "Cannot parse argument '-1234' as non-negative integer");

/* 2**31 + 5 , just outside of signed int range */
CLEAR(mock_msg_buf);
assert_int_equal(positive_atoi("2147483653", msglevel), 0);
assert_string_equal(mock_msg_buf, "Cannot parse argument '2147483653' as non-negative integer");

CLEAR(mock_msg_buf);
assert_int_equal(atoi_warn("2147483653", msglevel), 0);
assert_string_equal(mock_msg_buf, "Cannot parse argument '2147483653' as integer");

CLEAR(mock_msg_buf);
assert_int_equal(positive_atoi("foo77", msglevel), 0);
assert_string_equal(mock_msg_buf, "Cannot parse argument 'foo77' as non-negative integer");

CLEAR(mock_msg_buf);
assert_int_equal(positive_atoi("77foo", msglevel), 0);
assert_string_equal(mock_msg_buf, "Cannot parse argument '77foo' as non-negative integer");

CLEAR(mock_msg_buf);
assert_int_equal(atoi_warn("foo77", msglevel), 0);
assert_string_equal(mock_msg_buf, "Cannot parse argument 'foo77' as integer");

CLEAR(mock_msg_buf);
assert_int_equal(atoi_warn("77foo", msglevel), 0);
assert_string_equal(mock_msg_buf, "Cannot parse argument '77foo' as integer");

mock_set_debug_level(saved_log_level);
}

const struct CMUnitTest misc_tests[] = {
cmocka_unit_test(test_compat_lzo_string),
cmocka_unit_test(test_auth_fail_temp_no_flags),
cmocka_unit_test(test_auth_fail_temp_flags),
cmocka_unit_test(test_auth_fail_temp_flags_msg),
cmocka_unit_test(test_list)
cmocka_unit_test(test_list),
cmocka_unit_test(test_atoi_variants)
};

int
Expand Down

0 comments on commit 2a6dbf5

Please sign in to comment.