glib-aux/tests: add unbase64mem test

This is copied and adjusted from "src/core/tests/test-systemd.c",
where it currently tests the systemd implementation.
This commit is contained in:
Thomas Haller 2022-04-11 18:05:25 +02:00
parent 0aa7d59557
commit 63dcc5680b
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -1729,6 +1729,70 @@ test_unbase64mem2(void)
/*****************************************************************************/
static void
_test_unbase64mem_mem(const char *base64, const guint8 *expected_arr, gsize expected_len)
{
gs_free char *expected_base64 = NULL;
int r;
nm_auto_free guint8 *exp2_arr = NULL;
nm_auto_free guint8 *exp3_arr = NULL;
gsize exp2_len;
gsize exp3_len;
expected_base64 = g_base64_encode(expected_arr, expected_len);
r = nm_unbase64mem_full(expected_base64, strlen(expected_base64), TRUE, &exp2_arr, &exp2_len);
g_assert_cmpint(r, ==, 0);
g_assert_cmpmem(expected_arr, expected_len, exp2_arr, exp2_len);
if (!nm_streq(base64, expected_base64)) {
r = nm_unbase64mem_full(base64, strlen(base64), TRUE, &exp3_arr, &exp3_len);
g_assert_cmpint(r, ==, 0);
g_assert_cmpmem(expected_arr, expected_len, exp3_arr, exp3_len);
}
}
#define _test_unbase64mem(base64, expected_str) \
_test_unbase64mem_mem(base64, (const guint8 *) "" expected_str "", NM_STRLEN(expected_str))
static void
_test_unbase64mem_inval(const char *base64)
{
gs_free guint8 *exp_arr = NULL;
gsize exp_len = 0;
int r;
r = nm_unbase64mem_full(base64, strlen(base64), TRUE, &exp_arr, &exp_len);
g_assert_cmpint(r, <, 0);
g_assert(!exp_arr);
g_assert(exp_len == 0);
}
static void
test_unbase64mem3(void)
{
gs_free char *rnd_base64 = NULL;
guint8 rnd_buf[30];
guint i, rnd_len;
_test_unbase64mem("", "");
_test_unbase64mem(" ", "");
_test_unbase64mem(" Y Q == ", "a");
_test_unbase64mem(" Y WJjZGV mZ 2g = ", "abcdefgh");
_test_unbase64mem_inval(" Y %WJjZGV mZ 2g = ");
_test_unbase64mem_inval(" Y %WJjZGV mZ 2g = a");
_test_unbase64mem("YQ==", "a");
_test_unbase64mem_inval("YQ==a");
rnd_len = nmtst_get_rand_uint32() % sizeof(rnd_buf);
for (i = 0; i < rnd_len; i++)
rnd_buf[i] = nmtst_get_rand_uint32() % 256;
rnd_base64 = g_base64_encode(rnd_buf, rnd_len);
_test_unbase64mem_mem(rnd_base64, rnd_buf, rnd_len);
}
/*****************************************************************************/
NMTST_DEFINE();
int
@ -1766,6 +1830,7 @@ main(int argc, char **argv)
g_test_add_func("/general/test_unbase64char", test_unbase64char);
g_test_add_func("/general/test_unbase64mem1", test_unbase64mem1);
g_test_add_func("/general/test_unbase64mem2", test_unbase64mem2);
g_test_add_func("/general/test_unbase64mem3", test_unbase64mem3);
return g_test_run();
}