libcli/tests/parse_utils/test_parse_hex.c
2026-04-23 12:25:02 +02:00

142 lines
2.6 KiB
C

#include <criterion/criterion.h>
#include <stdint.h>
#include "cli_parse_utils.h"
/* Test 1: Valid even-length string */
Test(parse_hex, even_length)
{
uint8_t out[4];
size_t len;
int ret = cli_parse_hex("deadbeef", out, 4, &len);
cr_assert_eq(ret, 0);
cr_assert_eq(len, 4);
cr_assert_eq(out[0], 0xde);
cr_assert_eq(out[1], 0xad);
cr_assert_eq(out[2], 0xbe);
cr_assert_eq(out[3], 0xef);
}
/* Test 2: Valid odd-length string — trailing nibble padded with 0 */
Test(parse_hex, odd_length)
{
uint8_t out[2];
size_t len;
int ret = cli_parse_hex("abc", out, 2, &len);
cr_assert_eq(ret, 0);
cr_assert_eq(len, 2);
cr_assert_eq(out[0], 0xab);
cr_assert_eq(out[1], 0xc0);
}
/* Test 3: Single char */
Test(parse_hex, single_char)
{
uint8_t out[1];
size_t len;
int ret = cli_parse_hex("f", out, 1, &len);
cr_assert_eq(ret, 0);
cr_assert_eq(len, 1);
cr_assert_eq(out[0], 0xf0);
}
/* Test 4: Single byte */
Test(parse_hex, single_byte)
{
uint8_t out[1];
size_t len;
int ret = cli_parse_hex("ff", out, 1, &len);
cr_assert_eq(ret, 0);
cr_assert_eq(len, 1);
cr_assert_eq(out[0], 0xff);
}
/* Test 5: Mixed case */
Test(parse_hex, mixed_case)
{
uint8_t out[2];
size_t len;
int ret = cli_parse_hex("DeAd", out, 2, &len);
cr_assert_eq(ret, 0);
cr_assert_eq(len, 2);
cr_assert_eq(out[0], 0xde);
cr_assert_eq(out[1], 0xad);
}
/* Test 6: All zeros */
Test(parse_hex, all_zeros)
{
uint8_t out[2];
size_t len;
int ret = cli_parse_hex("0000", out, 2, &len);
cr_assert_eq(ret, 0);
cr_assert_eq(len, 2);
cr_assert_eq(out[0], 0x00);
cr_assert_eq(out[1], 0x00);
}
/* Test 7: Exactly at max_len */
Test(parse_hex, exact_max_len)
{
uint8_t out[4];
size_t len;
int ret = cli_parse_hex("deadbeef", out, 4, &len);
cr_assert_eq(ret, 0);
cr_assert_eq(len, 4);
}
/* Test 8: Exceeds max_len */
Test(parse_hex, exceeds_max_len)
{
uint8_t out[2];
size_t len;
int ret = cli_parse_hex("deadbeef", out, 2, &len);
cr_assert_eq(ret, 1);
}
/* Test 9: NULL input */
Test(parse_hex, null_input)
{
uint8_t out[4];
size_t len;
int ret = cli_parse_hex(NULL, out, 4, &len);
cr_assert_eq(ret, 1);
}
/* Test 10: Empty string */
Test(parse_hex, empty_string)
{
uint8_t out[4];
size_t len;
int ret = cli_parse_hex("", out, 4, &len);
cr_assert_eq(ret, 1);
}
/* Test 11: Invalid hex characters */
Test(parse_hex, invalid_chars)
{
uint8_t out[4];
size_t len;
int ret = cli_parse_hex("xyz", out, 4, &len);
cr_assert_eq(ret, 1);
}
/* Test 12: Invalid char mid-string */
Test(parse_hex, invalid_char_mid)
{
uint8_t out[4];
size_t len;
int ret = cli_parse_hex("de_d", out, 4, &len);
cr_assert_eq(ret, 1);
}