mirror of
https://github.com/systemd/systemd.git
synced 2026-11-06 05:17:24 +00:00
test: add ASSERT_MEMEQ() and friends, and convert assert_se() in tests/fuzzers (#44641)
This adds a few typed assertion helpers to src/shared/tests.h that print where things differ on failure, instead of just aborting: - ASSERT_MEMEQ() / ASSERT_MEMEQ_NN() for memory regions - ASSERT_MEMEQ_BYTE() / ASSERT_MEMEQ_ZERO() - ASSERT_IOVEC_EQ() / ASSERT_IOVW_EQ() On mismatch they show a hexdump-style, side-by-side diff of the operands. To back this, hexdump() is moved from basic/hexdecoct to a new shared/hexdump (the EFI hexdump() in src/boot is renamed to hexdump16() to avoid the name clash), and the dump helpers live next to it. The rest is mechanical: existing ASSERT_TRUE(memcmp(...) == 0) and similar patterns are switched to the new macros, and assert_se() in the fuzzers (plus a couple of test files) is converted to the typed ASSERT_* family. No functional change to non-test code.
This commit is contained in:
121 files changed
+1196
-931
No files matched your search
@@ -1,8 +1,5 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "hexdecoct.h"
|
||||
#include "memory-util.h"
|
||||
@@ -849,52 +846,3 @@ int unbase64mem_full(
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hexdump(FILE *f, const void *p, size_t s) {
|
||||
const uint8_t *b = p;
|
||||
unsigned n = 0;
|
||||
|
||||
assert(b || s == 0);
|
||||
|
||||
if (s == SIZE_MAX)
|
||||
s = strlen(p);
|
||||
|
||||
if (!f)
|
||||
f = stdout;
|
||||
|
||||
while (s > 0) {
|
||||
size_t i;
|
||||
|
||||
fprintf(f, "%04x ", n);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
|
||||
if (i >= s)
|
||||
fputs(" ", f);
|
||||
else
|
||||
fprintf(f, "%02x ", b[i]);
|
||||
|
||||
if (i == 7)
|
||||
fputc(' ', f);
|
||||
}
|
||||
|
||||
fputc(' ', f);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
|
||||
if (i >= s)
|
||||
fputc(' ', f);
|
||||
else
|
||||
fputc(isprint(b[i]) ? (char) b[i] : '.', f);
|
||||
}
|
||||
|
||||
fputc('\n', f);
|
||||
|
||||
if (s < 16)
|
||||
break;
|
||||
|
||||
n += 16;
|
||||
b += 16;
|
||||
s -= 16;
|
||||
}
|
||||
}
|
||||
@@ -44,5 +44,3 @@ int unbase64mem_full(const char *p, size_t l, bool secure, void **ret_data, size
|
||||
static inline int unbase64mem(const char *p, void **ret_data, size_t *ret_size) {
|
||||
return unbase64mem_full(p, SIZE_MAX, /* secure= */ false, ret_data, ret_size);
|
||||
}
|
||||
|
||||
void hexdump(FILE *f, const void *p, size_t s) _nonnull_if_nonzero_(2, 3);
|
||||
@@ -108,7 +108,7 @@ static char16_t *device_path_to_str_internal(const EFI_DEVICE_PATH *dp) {
|
||||
* provide the EFI_DEVICE_PATH_TO_TEXT_PROTOCOL after all. */
|
||||
|
||||
size_t size = node->Length - sizeof(EFI_DEVICE_PATH);
|
||||
_cleanup_free_ char16_t *hex_data = hexdump((uint8_t *) node + sizeof(EFI_DEVICE_PATH), size);
|
||||
_cleanup_free_ char16_t *hex_data = hexdump16((uint8_t *) node + sizeof(EFI_DEVICE_PATH), size);
|
||||
str = xasprintf("%ls%sPath(%u,%u%s%ls)",
|
||||
strempty(old),
|
||||
old ? "/" : "",
|
||||
|
||||
+1
-1
@@ -64,6 +64,6 @@ _gnu_printf_(3, 4) EFI_STATUS log_internal(EFI_STATUS status, LogLevel log_level
|
||||
/* Debugging helper — please keep this around, even if not used */
|
||||
#define log_hexdump(prefix, data, size) \
|
||||
({ \
|
||||
_cleanup_free_ char16_t *hex = hexdump(data, size); \
|
||||
_cleanup_free_ char16_t *hex = hexdump16(data, size); \
|
||||
log_debug("%ls[%zu]: %ls", prefix, size, hex); \
|
||||
})
|
||||
@@ -511,7 +511,7 @@ char* line_get_key_value(char *s, const char *sep, size_t *pos, char **ret_key,
|
||||
}
|
||||
}
|
||||
|
||||
char16_t *hexdump(const void *data, size_t size) {
|
||||
char16_t *hexdump16(const void *data, size_t size) {
|
||||
const char *hex = LOWERCASE_HEXDIGITS;
|
||||
const uint8_t *d = data;
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ bool parse_boolean(const char *v, bool *ret);
|
||||
|
||||
char* line_get_key_value(char *s, const char *sep, size_t *pos, char **ret_key, char **ret_value);
|
||||
|
||||
char16_t *hexdump(const void *data, size_t size);
|
||||
char16_t *hexdump16(const void *data, size_t size);
|
||||
|
||||
#ifdef __clang__
|
||||
# define _gnu_printf_(a, b) _printf_(a, b)
|
||||
|
||||
+2
-1
@@ -3,6 +3,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "bcd.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
#include "utf8.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
@@ -15,7 +16,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fuzz_setup_logging();
|
||||
|
||||
p = memdup(data, size);
|
||||
assert_se(p);
|
||||
ASSERT_NOT_NULL(p);
|
||||
|
||||
char16_t *title = get_bcd_title(p, size);
|
||||
/* If we get something, it must be NUL-terminated, but an empty string is still valid! */
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "efi-string.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
|
||||
#define SEP_LEN 4
|
||||
|
||||
@@ -15,13 +16,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fuzz_setup_logging();
|
||||
|
||||
_cleanup_free_ char *p = memdup_suffix0(data + SEP_LEN + 1, size - SEP_LEN - 1);
|
||||
assert_se(p);
|
||||
ASSERT_NOT_NULL(p);
|
||||
|
||||
size_t pos = 0;
|
||||
char *key, *value;
|
||||
while (line_get_key_value(p, (const char *) data, &pos, &key, &value)) {
|
||||
assert_se(key);
|
||||
assert_se(value);
|
||||
ASSERT_NOT_NULL(key);
|
||||
ASSERT_NOT_NULL(value);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -3,10 +3,11 @@
|
||||
#include "alloc-util.h"
|
||||
#include "efi-string.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
|
||||
static char16_t *memdup_str16(const uint8_t *data, size_t size) {
|
||||
char16_t *ret = memdup(data, size);
|
||||
assert_se(ret);
|
||||
ASSERT_NOT_NULL(ret);
|
||||
ret[size / sizeof(char16_t) - 1] = '\0';
|
||||
return ret;
|
||||
}
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ static void test_get_bcd_title_one(
|
||||
char16_t *title = get_bcd_title(bcd, len);
|
||||
if (title_expect) {
|
||||
ASSERT_NOT_NULL(title);
|
||||
ASSERT_EQ(memcmp(title, title_expect, title_len_expect), 0);
|
||||
ASSERT_MEMEQ(title, title_expect, title_len_expect);
|
||||
} else
|
||||
ASSERT_NULL(title);
|
||||
}
|
||||
|
||||
+16
-16
@@ -70,11 +70,11 @@ TEST(strtolower8) {
|
||||
ASSERT_NULL(strtolower8(NULL));
|
||||
|
||||
ASSERT_PTR_EQ(strtolower8(s), s);
|
||||
ASSERT_EQ(memcmp(s, "\0001234abcDEF!\0zZ", sizeof(s)), 0);
|
||||
ASSERT_MEMEQ(s, "\0001234abcDEF!\0zZ", sizeof(s));
|
||||
|
||||
s[0] = '#';
|
||||
ASSERT_PTR_EQ(strtolower8(s), s);
|
||||
ASSERT_EQ(memcmp(s, "#1234abcdef!\0zZ", sizeof(s)), 0);
|
||||
ASSERT_MEMEQ(s, "#1234abcdef!\0zZ", sizeof(s));
|
||||
}
|
||||
|
||||
TEST(strtolower16) {
|
||||
@@ -83,11 +83,11 @@ TEST(strtolower16) {
|
||||
ASSERT_NULL(strtolower16(NULL));
|
||||
|
||||
ASSERT_PTR_EQ(strtolower16(s), s);
|
||||
ASSERT_EQ(memcmp(s, u"\0001234abcDEF!\0zZ", sizeof(s)), 0);
|
||||
ASSERT_MEMEQ(s, u"\0001234abcDEF!\0zZ", sizeof(s));
|
||||
|
||||
s[0] = '#';
|
||||
ASSERT_PTR_EQ(strtolower16(s), s);
|
||||
ASSERT_EQ(memcmp(s, u"#1234abcdef!\0zZ", sizeof(s)), 0);
|
||||
ASSERT_MEMEQ(s, u"#1234abcdef!\0zZ", sizeof(s));
|
||||
}
|
||||
|
||||
TEST(strncmp8) {
|
||||
@@ -644,22 +644,22 @@ TEST(line_get_key_value) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(hexdump) {
|
||||
TEST(hexdump16) {
|
||||
char16_t *hex;
|
||||
|
||||
ASSERT_NOT_NULL(hex = hexdump(/* data= */ NULL, /* size= */ 0));
|
||||
ASSERT_NOT_NULL(hex = hexdump16(/* data= */ NULL, /* size= */ 0));
|
||||
ASSERT_TRUE(streq16(hex, u""));
|
||||
free(hex);
|
||||
|
||||
ASSERT_NOT_NULL(hex = hexdump("1", 2));
|
||||
ASSERT_NOT_NULL(hex = hexdump16("1", 2));
|
||||
ASSERT_TRUE(streq16(hex, u"3100"));
|
||||
free(hex);
|
||||
|
||||
ASSERT_NOT_NULL(hex = hexdump("abc", 4));
|
||||
ASSERT_NOT_NULL(hex = hexdump16("abc", 4));
|
||||
ASSERT_TRUE(streq16(hex, u"61626300"));
|
||||
free(hex);
|
||||
|
||||
ASSERT_NOT_NULL(hex = hexdump((uint8_t[]){ 0x0, 0x42, 0xFF, 0xF1, 0x1F }, 5));
|
||||
ASSERT_NOT_NULL(hex = hexdump16((uint8_t[]){ 0x0, 0x42, 0xFF, 0xF1, 0x1F }, 5));
|
||||
ASSERT_TRUE(streq16(hex, u"0042fff11f"));
|
||||
free(hex);
|
||||
}
|
||||
@@ -855,13 +855,13 @@ TEST(efi_memcpy) {
|
||||
ASSERT_PTR_EQ(efi_memcpy(buf, "a", 0), buf);
|
||||
|
||||
ASSERT_PTR_EQ(efi_memcpy(buf, "", 1), buf);
|
||||
ASSERT_EQ(memcmp(buf, "", 1), 0);
|
||||
ASSERT_MEMEQ(buf, "", 1);
|
||||
ASSERT_PTR_EQ(efi_memcpy(buf, "1", 1), buf);
|
||||
ASSERT_EQ(memcmp(buf, "1", 1), 0);
|
||||
ASSERT_MEMEQ(buf, "1", 1);
|
||||
ASSERT_PTR_EQ(efi_memcpy(buf, "23", 3), buf);
|
||||
ASSERT_EQ(memcmp(buf, "23", 3), 0);
|
||||
ASSERT_MEMEQ(buf, "23", 3);
|
||||
ASSERT_PTR_EQ(efi_memcpy(buf, "45\0ab\0\0\0c", 9), buf);
|
||||
ASSERT_EQ(memcmp(buf, "45\0ab\0\0\0c", 9), 0);
|
||||
ASSERT_MEMEQ(buf, "45\0ab\0\0\0c", 9);
|
||||
}
|
||||
|
||||
TEST(efi_memset) {
|
||||
@@ -872,11 +872,11 @@ TEST(efi_memset) {
|
||||
ASSERT_PTR_EQ(efi_memset(buf, '1', 0), buf);
|
||||
|
||||
ASSERT_PTR_EQ(efi_memset(buf, '2', 1), buf);
|
||||
ASSERT_EQ(memcmp(buf, "2", 1), 0);
|
||||
ASSERT_MEMEQ(buf, "2", 1);
|
||||
ASSERT_PTR_EQ(efi_memset(buf, '4', 4), buf);
|
||||
ASSERT_EQ(memcmp(buf, "4444", 4), 0);
|
||||
ASSERT_MEMEQ(buf, "4444", 4);
|
||||
ASSERT_PTR_EQ(efi_memset(buf, 'a', 10), buf);
|
||||
ASSERT_EQ(memcmp(buf, "aaaaaaaaaa", 10), 0);
|
||||
ASSERT_MEMEQ(buf, "aaaaaaaaaa", 10);
|
||||
}
|
||||
|
||||
TEST(efi_strspn) {
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "fd-util.h"
|
||||
#include "fdset.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
|
||||
static void exec_fuzz_one(FILE *f, FDSet *fdset) {
|
||||
_cleanup_(exec_params_deep_clear) ExecParameters params = EXEC_PARAMETERS_INIT(/* flags= */ 0);
|
||||
@@ -86,8 +87,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(fdset = fdset_new());
|
||||
assert_se(f = data_to_file(data, size));
|
||||
fdset = ASSERT_NOT_NULL(fdset_new());
|
||||
f = ASSERT_NOT_NULL(data_to_file(data, size));
|
||||
|
||||
exec_fuzz_one(f, fdset);
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "fuzz.h"
|
||||
#include "manager.h"
|
||||
#include "manager-serialize.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_(manager_freep) Manager *m = NULL;
|
||||
@@ -18,14 +19,14 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL|MANAGER_TEST_DONT_OPEN_EXECUTOR, &m) >= 0);
|
||||
ASSERT_OK(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL|MANAGER_TEST_DONT_OPEN_EXECUTOR, &m));
|
||||
/* Set log overrides as well to make it harder for a serialization file
|
||||
* to switch log levels/targets during fuzzing */
|
||||
manager_override_log_level(m, log_get_max_level());
|
||||
manager_override_log_target(m, log_get_target());
|
||||
assert_se(null = fopen("/dev/null", "we"));
|
||||
assert_se(fdset = fdset_new());
|
||||
assert_se(f = data_to_file(data, size));
|
||||
null = ASSERT_NOT_NULL(fopen("/dev/null", "we"));
|
||||
fdset = ASSERT_NOT_NULL(fdset_new());
|
||||
f = ASSERT_NOT_NULL(data_to_file(data, size));
|
||||
|
||||
(void) manager_deserialize(m, f, fdset);
|
||||
(void) manager_serialize(m, null, fdset, /* switching_root= */ true);
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "manager-dump.h"
|
||||
#include "memstream-util.h"
|
||||
#include "string-util.h"
|
||||
#include "tests.h"
|
||||
#include "unit-serialize.h"
|
||||
#include "utf8.h"
|
||||
|
||||
@@ -23,9 +24,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
if (outside_size_range(size, /* lower= */ 0, 65536))
|
||||
return 0;
|
||||
|
||||
f = data_to_file(data, size);
|
||||
|
||||
assert_se(f);
|
||||
f = ASSERT_NOT_NULL(data_to_file(data, size));
|
||||
|
||||
if (read_line(f, LINE_MAX, &p) < 0)
|
||||
return 0;
|
||||
@@ -38,7 +37,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
return 0;
|
||||
|
||||
offset = ftell(f);
|
||||
assert_se(offset >= 0);
|
||||
ASSERT_OK(offset);
|
||||
|
||||
for (;;) {
|
||||
_cleanup_free_ char *l = NULL;
|
||||
@@ -58,14 +57,14 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
}
|
||||
}
|
||||
|
||||
assert_se(fseek(f, offset, SEEK_SET) == 0);
|
||||
ASSERT_EQ(fseek(f, offset, SEEK_SET), 0);
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL|MANAGER_TEST_DONT_OPEN_EXECUTOR, &m) >= 0);
|
||||
ASSERT_OK(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL|MANAGER_TEST_DONT_OPEN_EXECUTOR, &m));
|
||||
|
||||
name = strjoina("a.", unit_type_to_string(t));
|
||||
assert_se(unit_new_for_name(m, unit_vtable[t]->object_size, name, &u) >= 0);
|
||||
ASSERT_OK(unit_new_for_name(m, unit_vtable[t]->object_size, name, &u));
|
||||
|
||||
(void) config_parse(
|
||||
name, name, f,
|
||||
@@ -78,7 +77,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_(memstream_done) MemStream ms = {};
|
||||
FILE *g;
|
||||
|
||||
assert_se(g = memstream_init(&ms));
|
||||
g = ASSERT_NOT_NULL(memstream_init(&ms));
|
||||
unit_dump(u, g, "");
|
||||
manager_dump(m, g, /* patterns= */ NULL, ">>>");
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "fuzz.h"
|
||||
#include "json-util.h"
|
||||
#include "strv.h"
|
||||
#include "tests.h"
|
||||
|
||||
static int json_dispatch_config(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
|
||||
BootConfig *config = ASSERT_PTR(userdata);
|
||||
@@ -21,7 +22,7 @@ static int json_dispatch_config(const char *name, sd_json_variant *variant, sd_j
|
||||
return -EINVAL;
|
||||
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
assert_se(f = data_to_file((const uint8_t*) s, strlen(s)));
|
||||
f = ASSERT_NOT_NULL(data_to_file((const uint8_t*) s, strlen(s)));
|
||||
|
||||
(void) boot_loader_read_conf(config, f, "memstream");
|
||||
return 0;
|
||||
@@ -54,9 +55,9 @@ static int json_dispatch_entries(const char *name, sd_json_variant *variant, sd_
|
||||
len = cunescape(raw, UNESCAPE_RELAX | UNESCAPE_ACCEPT_NUL, &data);
|
||||
if (len >= 0) {
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
assert_se(f = data_to_file((const uint8_t*) data, len));
|
||||
f = ASSERT_NOT_NULL(data_to_file((const uint8_t*) data, len));
|
||||
|
||||
assert_se(boot_config_load_type1(config, f, "/", BOOT_ENTRY_ESP, "/entries", id) != -ENOMEM);
|
||||
ASSERT_NE(boot_config_load_type1(config, f, "/", BOOT_ENTRY_ESP, "/entries", id), -ENOMEM);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +94,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(datadup = memdup_suffix0(data, size));
|
||||
datadup = ASSERT_NOT_NULL(memdup_suffix0(data, size));
|
||||
|
||||
_cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
|
||||
r = sd_json_parse(datadup, /* flags= */ 0, &v, /* reterr_line= */ NULL, /* reterr_column= */ NULL);
|
||||
@@ -104,7 +105,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
if (r < 0)
|
||||
return 0;
|
||||
|
||||
assert_se(boot_config_finalize(&config) >= 0);
|
||||
ASSERT_OK(boot_config_finalize(&config));
|
||||
|
||||
(void) boot_config_select_special_entries(&config, /* skip_efivars= */ false);
|
||||
|
||||
@@ -114,14 +115,14 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
if (orig_stdout_fd < 0)
|
||||
log_warning_errno(errno, "Failed to duplicate fd 1, ignoring: %m");
|
||||
else
|
||||
assert_se(freopen("/dev/null", "w", stdout));
|
||||
ASSERT_NOT_NULL(freopen("/dev/null", "w", stdout));
|
||||
}
|
||||
|
||||
(void) show_boot_entries(&config, SD_JSON_FORMAT_OFF);
|
||||
(void) show_boot_entries(&config, SD_JSON_FORMAT_PRETTY);
|
||||
|
||||
if (orig_stdout_fd >= 0)
|
||||
assert_se(freopen(FORMAT_PROC_FD_PATH(orig_stdout_fd), "w", stdout));
|
||||
ASSERT_NOT_NULL(freopen(FORMAT_PROC_FD_PATH(orig_stdout_fd), "w", stdout));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "bus-label.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_free_ char *unescaped = NULL, *escaped = NULL;
|
||||
@@ -10,9 +11,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fuzz_setup_logging();
|
||||
|
||||
unescaped = bus_label_unescape_n((const char*)data, size);
|
||||
assert_se(unescaped != NULL);
|
||||
ASSERT_NOT_NULL(unescaped);
|
||||
escaped = bus_label_escape(unescaped);
|
||||
assert_se(escaped != NULL);
|
||||
ASSERT_NOT_NULL(escaped);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "calendarspec.h"
|
||||
#include "fuzz.h"
|
||||
#include "string-util.h"
|
||||
#include "tests.h"
|
||||
#include "time-util.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
@@ -13,7 +14,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(str = memdup_suffix0(data, size));
|
||||
str = ASSERT_NOT_NULL(memdup_suffix0(data, size));
|
||||
|
||||
size_t l1 = strlen(str);
|
||||
const char* usecs = l1 < size ? str + l1 + 1 : "";
|
||||
@@ -25,15 +26,15 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
}
|
||||
|
||||
_cleanup_free_ char *p = NULL;
|
||||
assert_se(calendar_spec_valid(cspec));
|
||||
assert_se(calendar_spec_to_string(cspec, &p) == 0);
|
||||
ASSERT_TRUE(calendar_spec_valid(cspec));
|
||||
ASSERT_OK_ZERO(calendar_spec_to_string(cspec, &p));
|
||||
assert(p);
|
||||
|
||||
log_debug("spec: %s → %s", str, p);
|
||||
|
||||
_cleanup_(calendar_spec_freep) CalendarSpec *cspec2 = NULL;
|
||||
assert_se(calendar_spec_from_string(p, &cspec2) >= 0);
|
||||
assert_se(calendar_spec_valid(cspec2));
|
||||
ASSERT_OK(calendar_spec_from_string(p, &cspec2));
|
||||
ASSERT_TRUE(calendar_spec_valid(cspec2));
|
||||
|
||||
usec_t usec = 0;
|
||||
(void) parse_time(usecs, &usec, 1);
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "hashmap.h"
|
||||
#include "tests.h"
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
@@ -16,8 +17,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fuzz_setup_logging();
|
||||
|
||||
fd = mkostemp_safe(name);
|
||||
assert_se(fd >= 0);
|
||||
assert_se(write(fd, data, size) == (ssize_t) size);
|
||||
ASSERT_OK(fd);
|
||||
ASSERT_EQ(write(fd, data, size), (ssize_t) size);
|
||||
|
||||
(void) catalog_import_file(&h, fd, name);
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "strv.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
@@ -15,12 +16,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
return 0;
|
||||
|
||||
f = data_to_file(data, size);
|
||||
assert_se(f);
|
||||
ASSERT_NOT_NULL(f);
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
(void) load_env_file(f, /* fname= */ NULL, &rl);
|
||||
assert_se(fseek(f, 0, SEEK_SET) == 0);
|
||||
ASSERT_EQ(fseek(f, 0, SEEK_SET), 0);
|
||||
(void) load_env_file_pairs(f, /* fname= */ NULL, &rlp);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -4,13 +4,14 @@
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "hostname-setup.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
_cleanup_free_ char *ret = NULL;
|
||||
|
||||
f = data_to_file(data, size);
|
||||
assert_se(f);
|
||||
ASSERT_NOT_NULL(f);
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "fuzz.h"
|
||||
#include "memstream-util.h"
|
||||
#include "string-util.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_(memstream_done) MemStream m = {};
|
||||
@@ -18,7 +19,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fuzz_setup_logging();
|
||||
|
||||
f = data_to_file(data, size);
|
||||
assert_se(f);
|
||||
ASSERT_NOT_NULL(f);
|
||||
|
||||
r = sd_json_parse_file(f, /* path= */ NULL, /* flags= */ 0, &v, /* reterr_line= */ NULL, /* reterr_column= */ NULL);
|
||||
if (r < 0) {
|
||||
@@ -27,7 +28,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
}
|
||||
|
||||
if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0)
|
||||
assert_se(g = memstream_init(&m));
|
||||
g = ASSERT_NOT_NULL(memstream_init(&m));
|
||||
|
||||
sd_json_variant_dump(v, /* flags= */ 0, g ?: stdout, /* prefix= */ NULL);
|
||||
sd_json_variant_dump(v, SD_JSON_FORMAT_PRETTY|SD_JSON_FORMAT_COLOR|SD_JSON_FORMAT_SOURCE, g ?: stdout, /* prefix= */ NULL);
|
||||
@@ -40,7 +41,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
sorted = sd_json_variant_is_sorted(v);
|
||||
log_debug("json_variant_is_sorted: %s", yes_no(sorted));
|
||||
assert_se(r < 0 || sorted);
|
||||
ASSERT_TRUE(r < 0 || sorted);
|
||||
|
||||
bool normalized = sd_json_variant_is_normalized(v);
|
||||
log_debug("json_variant_is_normalized: %s", yes_no(normalized));
|
||||
@@ -50,7 +51,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
normalized = sd_json_variant_is_normalized(v);
|
||||
log_debug("json_variant_is_normalized: %s", yes_no(normalized));
|
||||
assert_se(r < 0 || normalized);
|
||||
ASSERT_TRUE(r < 0 || normalized);
|
||||
|
||||
double real = sd_json_variant_real(v);
|
||||
log_debug("json_variant_real: %lf", real);
|
||||
@@ -70,9 +71,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
for (size_t i = 0; i <= elements + 2; i++)
|
||||
(void) sd_json_variant_by_index(v, i);
|
||||
|
||||
assert_se(sd_json_variant_equal(v, v));
|
||||
assert_se(!sd_json_variant_equal(v, NULL));
|
||||
assert_se(!sd_json_variant_equal(NULL, v));
|
||||
ASSERT_TRUE(sd_json_variant_equal(v, v));
|
||||
ASSERT_FALSE(sd_json_variant_equal(v, NULL));
|
||||
ASSERT_FALSE(sd_json_variant_equal(NULL, v));
|
||||
|
||||
bool sensitive = sd_json_variant_is_sensitive(v);
|
||||
log_debug("json_variant_is_sensitive: %s", yes_no(sensitive));
|
||||
@@ -84,7 +85,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
const char *source;
|
||||
unsigned line, column;
|
||||
assert_se(sd_json_variant_get_source(v, &source, &line, &column) == 0);
|
||||
ASSERT_OK_ZERO(sd_json_variant_get_source(v, &source, &line, &column));
|
||||
log_debug("json_variant_get_source: %s:%u:%u", source ?: "-", line, column);
|
||||
|
||||
r = sd_json_variant_set_field_string(&v, "a", "string-a");
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
#include "time-util.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
@@ -10,7 +11,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(str = memdup_suffix0(data, size));
|
||||
str = ASSERT_NOT_NULL(memdup_suffix0(data, size));
|
||||
|
||||
(void) parse_timestamp(str, &usec);
|
||||
(void) parse_sec(str, &usec);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "device-private.h"
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
@@ -13,12 +14,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(fmkostemp_safe(filename, "r+", &f) == 0);
|
||||
ASSERT_OK_ZERO(fmkostemp_safe(filename, "r+", &f));
|
||||
if (size != 0)
|
||||
assert_se(fwrite(data, size, 1, f) == 1);
|
||||
ASSERT_EQ(fwrite(data, size, 1, f), (size_t) 1);
|
||||
|
||||
fflush(f);
|
||||
assert_se(device_new_aux(&dev) >= 0);
|
||||
ASSERT_OK(device_new_aux(&dev));
|
||||
(void) device_read_db_internal_filename(dev, filename);
|
||||
return 0;
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
#include "user-record.h"
|
||||
|
||||
#include "sd-json.h"
|
||||
@@ -18,8 +19,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
if (outside_size_range(size, /* lower= */ 0, 65536))
|
||||
return 0;
|
||||
|
||||
assert_se(str = memdup_suffix0(data, size));
|
||||
assert_se(ur = user_record_new());
|
||||
str = ASSERT_NOT_NULL(memdup_suffix0(data, size));
|
||||
ur = ASSERT_NOT_NULL(user_record_new());
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "log.h"
|
||||
#include "tests.h"
|
||||
#include "varlink-idl-util.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
@@ -17,7 +18,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(str = memdup_suffix0(data, size));
|
||||
str = ASSERT_NOT_NULL(memdup_suffix0(data, size));
|
||||
|
||||
r = sd_varlink_idl_parse(str, /* reterr_line= */ NULL, /* reterr_column= */ NULL, &vi);
|
||||
if (r < 0) {
|
||||
@@ -25,7 +26,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
assert_se(sd_varlink_idl_format(vi, &dump) >= 0);
|
||||
ASSERT_OK(sd_varlink_idl_format(vi, &dump));
|
||||
(void) varlink_idl_consistent(vi, LOG_DEBUG);
|
||||
|
||||
return 0;
|
||||
|
||||
+26
-25
@@ -7,8 +7,9 @@
|
||||
#include "errno-util.h"
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "hexdecoct.h"
|
||||
#include "hexdump.h"
|
||||
#include "iovec-util.h"
|
||||
#include "tests.h"
|
||||
|
||||
static FILE *null = NULL;
|
||||
|
||||
@@ -39,7 +40,7 @@ static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userd
|
||||
if (ERRNO_IS_DISCONNECT(errno))
|
||||
write_eof = true;
|
||||
else
|
||||
assert_se(errno == EAGAIN);
|
||||
ASSERT_EQ(errno, EAGAIN);
|
||||
} else
|
||||
iovec_inc(iov, n);
|
||||
}
|
||||
@@ -53,7 +54,7 @@ static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userd
|
||||
if (ERRNO_IS_DISCONNECT(errno))
|
||||
read_eof = true;
|
||||
else
|
||||
assert_se(errno == EAGAIN);
|
||||
ASSERT_EQ(errno, EAGAIN);
|
||||
} else if (n == 0)
|
||||
read_eof = true;
|
||||
else
|
||||
@@ -65,9 +66,9 @@ static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userd
|
||||
if (write_eof || iov->iov_len == 0) {
|
||||
|
||||
if (read_eof)
|
||||
assert_se(sd_event_source_set_enabled(s, SD_EVENT_OFF) >= 0);
|
||||
ASSERT_OK(sd_event_source_set_enabled(s, SD_EVENT_OFF));
|
||||
else
|
||||
assert_se(sd_event_source_set_io_events(s, EPOLLIN) >= 0);
|
||||
ASSERT_OK(sd_event_source_set_io_events(s, EPOLLIN));
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -94,35 +95,35 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(null = fopen("/dev/null", "we"));
|
||||
null = ASSERT_NOT_NULL(fopen("/dev/null", "we"));
|
||||
|
||||
assert_se(sd_event_default(&e) >= 0);
|
||||
ASSERT_OK(sd_event_default(&e));
|
||||
|
||||
/* Test one: write the data as method call to a server */
|
||||
assert_se(socketpair(AF_UNIX, SOCK_STREAM, 0, server_pair) >= 0);
|
||||
assert_se(sd_varlink_server_new(&s, /* flags= */ 0) >= 0);
|
||||
assert_se(sd_varlink_server_set_info(s, "Vendor", "Product", "Version", "URL") >= 0);
|
||||
assert_se(sd_varlink_server_set_description(s, "myserver") >= 0);
|
||||
assert_se(sd_varlink_server_attach_event(s, e, /* priority= */ 0) >= 0);
|
||||
assert_se(sd_varlink_server_add_connection(s, server_pair[0], /* ret= */ NULL) >= 0);
|
||||
ASSERT_OK(socketpair(AF_UNIX, SOCK_STREAM, 0, server_pair));
|
||||
ASSERT_OK(sd_varlink_server_new(&s, /* flags= */ 0));
|
||||
ASSERT_OK(sd_varlink_server_set_info(s, "Vendor", "Product", "Version", "URL"));
|
||||
ASSERT_OK(sd_varlink_server_set_description(s, "myserver"));
|
||||
ASSERT_OK(sd_varlink_server_attach_event(s, e, /* priority= */ 0));
|
||||
ASSERT_OK(sd_varlink_server_add_connection(s, server_pair[0], /* ret= */ NULL));
|
||||
TAKE_FD(server_pair[0]);
|
||||
assert_se(sd_varlink_server_bind_method(s, "io.test.DoSomething", method_something) >= 0);
|
||||
assert_se(sd_event_add_io(e, &server_event_source, server_pair[1], EPOLLIN|EPOLLOUT, io_callback, &server_iov) >= 0);
|
||||
ASSERT_OK(sd_varlink_server_bind_method(s, "io.test.DoSomething", method_something));
|
||||
ASSERT_OK(sd_event_add_io(e, &server_event_source, server_pair[1], EPOLLIN|EPOLLOUT, io_callback, &server_iov));
|
||||
|
||||
/* Test two: write the data as method response to a client */
|
||||
assert_se(socketpair(AF_UNIX, SOCK_STREAM, 0, client_pair) >= 0);
|
||||
assert_se(sd_varlink_connect_fd(&c, client_pair[0]) >= 0);
|
||||
ASSERT_OK(socketpair(AF_UNIX, SOCK_STREAM, 0, client_pair));
|
||||
ASSERT_OK(sd_varlink_connect_fd(&c, client_pair[0]));
|
||||
TAKE_FD(client_pair[0]);
|
||||
assert_se(sd_varlink_set_description(c, "myclient") >= 0);
|
||||
assert_se(sd_varlink_attach_event(c, e, /* priority= */ 0) >= 0);
|
||||
assert_se(sd_varlink_bind_reply(c, reply_callback) >= 0);
|
||||
assert_se(sd_varlink_invoke(c, "io.test.DoSomething", /* parameters= */ NULL) >= 0);
|
||||
assert_se(sd_event_add_io(e, &client_event_source, client_pair[1], EPOLLIN|EPOLLOUT, io_callback, &client_iov) >= 0);
|
||||
ASSERT_OK(sd_varlink_set_description(c, "myclient"));
|
||||
ASSERT_OK(sd_varlink_attach_event(c, e, /* priority= */ 0));
|
||||
ASSERT_OK(sd_varlink_bind_reply(c, reply_callback));
|
||||
ASSERT_OK(sd_varlink_invoke(c, "io.test.DoSomething", /* parameters= */ NULL));
|
||||
ASSERT_OK(sd_event_add_io(e, &client_event_source, client_pair[1], EPOLLIN|EPOLLOUT, io_callback, &client_iov));
|
||||
|
||||
assert_se(sd_event_add_defer(e, &idle_event_source, idle_callback, /* userdata= */ NULL) >= 0);
|
||||
assert_se(sd_event_source_set_priority(idle_event_source, SD_EVENT_PRIORITY_IDLE) >= 0);
|
||||
ASSERT_OK(sd_event_add_defer(e, &idle_event_source, idle_callback, /* userdata= */ NULL));
|
||||
ASSERT_OK(sd_event_source_set_priority(idle_event_source, SD_EVENT_PRIORITY_IDLE));
|
||||
|
||||
assert_se(sd_event_loop(e) >= 0);
|
||||
ASSERT_OK(sd_event_loop(e));
|
||||
|
||||
null = safe_fclose(null);
|
||||
|
||||
|
||||
@@ -34,8 +34,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(mkdtemp_malloc("/tmp/fuzz-journal-remote-XXXXXX", &tmp) >= 0);
|
||||
assert_se(name = path_join(tmp, "fuzz-journal-remote.XXXXXX.journal"));
|
||||
ASSERT_OK(mkdtemp_malloc("/tmp/fuzz-journal-remote-XXXXXX", &tmp));
|
||||
name = ASSERT_NOT_NULL(path_join(tmp, "fuzz-journal-remote.XXXXXX.journal"));
|
||||
|
||||
fdin = fdin_close = memfd_new_and_seal("fuzz-journal-remote", data, size);
|
||||
if (fdin < 0)
|
||||
@@ -49,7 +49,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
r = journal_remote_server_init(&s, name, JOURNAL_WRITE_SPLIT_NONE, /* file_flags= */ 0);
|
||||
if (r < 0) {
|
||||
assert_se(IN_SET(r, -ENOMEM, -EMFILE, -ENFILE));
|
||||
ASSERT_TRUE(IN_SET(r, -ENOMEM, -EMFILE, -ENFILE));
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -57,19 +57,19 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
TAKE_FD(fdin_close);
|
||||
|
||||
if (size % 3 == 2)
|
||||
assert_se(s.sources[fdin]->client_certificate_subject = strdup(REMOTE_CERTIFICATE_SUBJECT_FIELD "CN=fuzz"));
|
||||
s.sources[fdin]->client_certificate_subject = ASSERT_NOT_NULL(strdup(REMOTE_CERTIFICATE_SUBJECT_FIELD "CN=fuzz"));
|
||||
|
||||
while (s.active)
|
||||
ASSERT_OK(journal_remote_handle_raw_source(/* event= */ NULL, fdin, /* revents= */ 0, &s));
|
||||
|
||||
assert_se(close(fdin) < 0 && errno == EBADF); /* Check that the fd is closed already */
|
||||
ASSERT_ERROR_ERRNO(close(fdin), EBADF); /* Check that the fd is closed already */
|
||||
|
||||
/* Out */
|
||||
|
||||
r = sd_journal_open_files(&j, (const char**) STRV_MAKE(name), SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "sd_journal_open_files([\"%s\"]) failed: %m", name);
|
||||
assert_se(IN_SET(r, -ENOMEM, -EMFILE, -ENFILE, -ENODATA));
|
||||
ASSERT_TRUE(IN_SET(r, -ENOMEM, -EMFILE, -ENFILE, -ENODATA));
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "journald-native.h"
|
||||
#include "memfd-util.h"
|
||||
#include "process-util.h"
|
||||
#include "tests.h"
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
@@ -22,7 +23,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
dummy_manager_new(&m, /* buffer= */ NULL, /* size= */ 0);
|
||||
|
||||
sealed_fd = memfd_new_and_seal(/* name= */ NULL, data, size);
|
||||
assert_se(sealed_fd >= 0);
|
||||
ASSERT_OK(sealed_fd);
|
||||
ucred = (struct ucred) {
|
||||
.pid = getpid_cached(),
|
||||
.uid = geteuid(),
|
||||
@@ -31,9 +32,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
(void) manager_process_native_file(m, sealed_fd, &ucred, tv, /* label= */ NULL);
|
||||
|
||||
unsealed_fd = mkostemp_safe(name);
|
||||
assert_se(unsealed_fd >= 0);
|
||||
assert_se(write(unsealed_fd, data, size) == (ssize_t) size);
|
||||
assert_se(lseek(unsealed_fd, 0, SEEK_SET) == 0);
|
||||
ASSERT_OK(unsealed_fd);
|
||||
ASSERT_EQ(write(unsealed_fd, data, size), (ssize_t) size);
|
||||
ASSERT_OK_ZERO_ERRNO(lseek(unsealed_fd, 0, SEEK_SET));
|
||||
(void) manager_process_native_file(m, unsealed_fd, &ucred, tv, /* label= */ NULL);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -73,7 +73,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_(iovw_done_free) struct iovec_wrapper iovw2 = {};
|
||||
ASSERT_OK(dhcp_message_build(lease2->message, &iovw2));
|
||||
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "dhcp6-internal.h"
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
|
||||
static int test_dhcp_fd[2] = EBADF_PAIR;
|
||||
|
||||
@@ -17,38 +18,38 @@ int dhcp6_network_send_udp_socket(int s, const struct in6_addr *server_address,
|
||||
}
|
||||
|
||||
int dhcp6_network_bind_udp_socket(int index, const struct in6_addr *local_address) {
|
||||
assert_se(socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_dhcp_fd) >= 0);
|
||||
ASSERT_OK(socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_dhcp_fd));
|
||||
return TAKE_FD(test_dhcp_fd[0]);
|
||||
}
|
||||
|
||||
static void fuzz_client(sd_dhcp6_client *client, const uint8_t *data, size_t size, DHCP6State state) {
|
||||
assert_se(sd_dhcp6_client_set_information_request(client, state == DHCP6_STATE_INFORMATION_REQUEST) >= 0);
|
||||
assert_se(sd_dhcp6_client_start(client) >= 0);
|
||||
ASSERT_OK(sd_dhcp6_client_set_information_request(client, state == DHCP6_STATE_INFORMATION_REQUEST));
|
||||
ASSERT_OK(sd_dhcp6_client_start(client));
|
||||
|
||||
client->state = state;
|
||||
|
||||
if (size >= sizeof(DHCP6Message))
|
||||
assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message *) data)->transaction_id) == 0);
|
||||
ASSERT_OK_ZERO(dhcp6_client_set_transaction_id(client, ((const DHCP6Message *) data)->transaction_id));
|
||||
|
||||
/* These states does not require lease to send message. */
|
||||
if (IN_SET(client->state, DHCP6_STATE_INFORMATION_REQUEST, DHCP6_STATE_SOLICITATION))
|
||||
assert_se(dhcp6_client_send_message(client) >= 0);
|
||||
ASSERT_OK(dhcp6_client_send_message(client));
|
||||
|
||||
assert_se(write(test_dhcp_fd[1], data, size) == (ssize_t) size);
|
||||
ASSERT_EQ(write(test_dhcp_fd[1], data, size), (ssize_t) size);
|
||||
|
||||
assert_se(sd_event_run(sd_dhcp6_client_get_event(client), UINT64_MAX) > 0);
|
||||
ASSERT_OK_POSITIVE(sd_event_run(sd_dhcp6_client_get_event(client), UINT64_MAX));
|
||||
|
||||
/* Check the state transition. */
|
||||
if (client->state != state)
|
||||
switch (state) {
|
||||
case DHCP6_STATE_INFORMATION_REQUEST:
|
||||
assert_se(client->state == DHCP6_STATE_STOPPED);
|
||||
ASSERT_EQ(client->state, DHCP6_STATE_STOPPED);
|
||||
break;
|
||||
case DHCP6_STATE_SOLICITATION:
|
||||
assert_se(IN_SET(client->state, DHCP6_STATE_REQUEST, DHCP6_STATE_BOUND));
|
||||
ASSERT_TRUE(IN_SET(client->state, DHCP6_STATE_REQUEST, DHCP6_STATE_BOUND));
|
||||
break;
|
||||
case DHCP6_STATE_REQUEST:
|
||||
assert_se(IN_SET(client->state, DHCP6_STATE_BOUND, DHCP6_STATE_SOLICITATION));
|
||||
ASSERT_TRUE(IN_SET(client->state, DHCP6_STATE_BOUND, DHCP6_STATE_SOLICITATION));
|
||||
break;
|
||||
default:
|
||||
assert_not_reached();
|
||||
@@ -60,7 +61,7 @@ static void fuzz_client(sd_dhcp6_client *client, const uint8_t *data, size_t siz
|
||||
dhcp6_client_send_message(client);
|
||||
}
|
||||
|
||||
assert_se(sd_dhcp6_client_stop(client) >= 0);
|
||||
ASSERT_OK(sd_dhcp6_client_stop(client));
|
||||
|
||||
test_dhcp_fd[1] = safe_close(test_dhcp_fd[1]);
|
||||
}
|
||||
@@ -73,29 +74,29 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
struct in6_addr hint = { { { 0x3f, 0xfe, 0x05, 0x01, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } };
|
||||
static const char *v1_data = "hogehoge", *v2_data = "foobar";
|
||||
|
||||
assert_se(setenv("SYSTEMD_NETWORK_TEST_MODE", "1", 1) >= 0);
|
||||
ASSERT_OK(setenv("SYSTEMD_NETWORK_TEST_MODE", "1", 1));
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
if (outside_size_range(size, /* lower= */ 0, 65536))
|
||||
return 0;
|
||||
|
||||
assert_se(sd_event_new(&e) >= 0);
|
||||
assert_se(sd_dhcp6_client_new(&client) >= 0);
|
||||
assert_se(sd_dhcp6_client_attach_event(client, e, /* priority= */ 0) >= 0);
|
||||
assert_se(sd_dhcp6_client_set_ifindex(client, 42) >= 0);
|
||||
assert_se(sd_dhcp6_client_set_local_address(client, &address) >= 0);
|
||||
ASSERT_OK(sd_event_new(&e));
|
||||
ASSERT_OK(sd_dhcp6_client_new(&client));
|
||||
ASSERT_OK(sd_dhcp6_client_attach_event(client, e, /* priority= */ 0));
|
||||
ASSERT_OK(sd_dhcp6_client_set_ifindex(client, 42));
|
||||
ASSERT_OK(sd_dhcp6_client_set_local_address(client, &address));
|
||||
|
||||
/* Used when sending message. */
|
||||
assert_se(sd_dhcp6_client_set_fqdn(client, "example.com") == 1);
|
||||
assert_se(sd_dhcp6_client_set_request_mud_url(client, "https://www.example.com/mudfile.json") >= 0);
|
||||
assert_se(sd_dhcp6_client_set_request_user_class(client, STRV_MAKE("u1", "u2", "u3")) >= 0);
|
||||
assert_se(sd_dhcp6_client_set_request_vendor_class(client, STRV_MAKE("v1", "v2", "v3")) >= 0);
|
||||
assert_se(sd_dhcp6_client_set_prefix_delegation_hint(client, 48, &hint) >= 0);
|
||||
assert_se(sd_dhcp6_option_new(123, v1_data, strlen(v1_data), 12345, &v1) >= 0);
|
||||
assert_se(sd_dhcp6_option_new(456, v2_data, strlen(v2_data), 45678, &v2) >= 0);
|
||||
assert_se(sd_dhcp6_client_add_vendor_option(client, v1) >= 0);
|
||||
assert_se(sd_dhcp6_client_add_vendor_option(client, v2) >= 0);
|
||||
ASSERT_EQ(sd_dhcp6_client_set_fqdn(client, "example.com"), 1);
|
||||
ASSERT_OK(sd_dhcp6_client_set_request_mud_url(client, "https://www.example.com/mudfile.json"));
|
||||
ASSERT_OK(sd_dhcp6_client_set_request_user_class(client, STRV_MAKE("u1", "u2", "u3")));
|
||||
ASSERT_OK(sd_dhcp6_client_set_request_vendor_class(client, STRV_MAKE("v1", "v2", "v3")));
|
||||
ASSERT_OK(sd_dhcp6_client_set_prefix_delegation_hint(client, 48, &hint));
|
||||
ASSERT_OK(sd_dhcp6_option_new(123, v1_data, strlen(v1_data), 12345, &v1));
|
||||
ASSERT_OK(sd_dhcp6_option_new(456, v2_data, strlen(v2_data), 45678, &v2));
|
||||
ASSERT_OK(sd_dhcp6_client_add_vendor_option(client, v1));
|
||||
ASSERT_OK(sd_dhcp6_client_add_vendor_option(client, v2));
|
||||
|
||||
fuzz_client(client, data, size, DHCP6_STATE_INFORMATION_REQUEST);
|
||||
fuzz_client(client, data, size, DHCP6_STATE_SOLICITATION);
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "lldp-network.h"
|
||||
#include "lldp-rx-internal.h"
|
||||
#include "memstream-util.h"
|
||||
#include "tests.h"
|
||||
|
||||
static int test_fd[2] = EBADF_PAIR;
|
||||
|
||||
@@ -34,21 +35,21 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(sd_event_new(&e) == 0);
|
||||
assert_se(sd_lldp_rx_new(&lldp_rx) >= 0);
|
||||
assert_se(sd_lldp_rx_set_ifindex(lldp_rx, 42) >= 0);
|
||||
assert_se(sd_lldp_rx_attach_event(lldp_rx, e, /* priority= */ 0) >= 0);
|
||||
assert_se(sd_lldp_rx_start(lldp_rx) >= 0);
|
||||
ASSERT_OK_ZERO(sd_event_new(&e));
|
||||
ASSERT_OK(sd_lldp_rx_new(&lldp_rx));
|
||||
ASSERT_OK(sd_lldp_rx_set_ifindex(lldp_rx, 42));
|
||||
ASSERT_OK(sd_lldp_rx_attach_event(lldp_rx, e, /* priority= */ 0));
|
||||
ASSERT_OK(sd_lldp_rx_start(lldp_rx));
|
||||
|
||||
assert_se(write(test_fd[1], data, size) == (ssize_t) size);
|
||||
assert_se(sd_event_run(e, /* timeout= */ 0) >= 0);
|
||||
ASSERT_EQ(write(test_fd[1], data, size), (ssize_t) size);
|
||||
ASSERT_OK(sd_event_run(e, /* timeout= */ 0));
|
||||
|
||||
assert_se(lldp_rx_build_neighbors_json(lldp_rx, &v) >= 0);
|
||||
assert_se(f = memstream_init(&m));
|
||||
ASSERT_OK(lldp_rx_build_neighbors_json(lldp_rx, &v));
|
||||
f = ASSERT_NOT_NULL(memstream_init(&m));
|
||||
(void) sd_json_variant_dump(v, SD_JSON_FORMAT_PRETTY|SD_JSON_FORMAT_COLOR, f, /* prefix= */ NULL);
|
||||
|
||||
assert_se(sd_lldp_rx_stop(lldp_rx) >= 0);
|
||||
assert_se(sd_lldp_rx_detach_event(lldp_rx) >= 0);
|
||||
ASSERT_OK(sd_lldp_rx_stop(lldp_rx));
|
||||
ASSERT_OK(sd_lldp_rx_detach_event(lldp_rx));
|
||||
test_fd[1] = safe_close(test_fd[1]);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "icmp6-util.h"
|
||||
#include "ndisc-option.h"
|
||||
#include "set.h"
|
||||
#include "tests.h"
|
||||
|
||||
static void test_with_sd_ndisc(const uint8_t *data, size_t size) {
|
||||
struct ether_addr mac_addr = {
|
||||
@@ -21,15 +22,15 @@ static void test_with_sd_ndisc(const uint8_t *data, size_t size) {
|
||||
_cleanup_(sd_event_unrefp) sd_event *e = NULL;
|
||||
_cleanup_(sd_ndisc_unrefp) sd_ndisc *nd = NULL;
|
||||
|
||||
assert_se(sd_event_new(&e) >= 0);
|
||||
assert_se(sd_ndisc_new(&nd) >= 0);
|
||||
assert_se(sd_ndisc_attach_event(nd, e, /* priority= */ 0) >= 0);
|
||||
assert_se(sd_ndisc_set_ifindex(nd, 42) >= 0);
|
||||
assert_se(sd_ndisc_set_mac(nd, &mac_addr) >= 0);
|
||||
assert_se(sd_ndisc_start(nd) >= 0);
|
||||
assert_se(write(test_fd[1], data, size) == (ssize_t) size);
|
||||
ASSERT_OK(sd_event_new(&e));
|
||||
ASSERT_OK(sd_ndisc_new(&nd));
|
||||
ASSERT_OK(sd_ndisc_attach_event(nd, e, /* priority= */ 0));
|
||||
ASSERT_OK(sd_ndisc_set_ifindex(nd, 42));
|
||||
ASSERT_OK(sd_ndisc_set_mac(nd, &mac_addr));
|
||||
ASSERT_OK(sd_ndisc_start(nd));
|
||||
ASSERT_EQ(write(test_fd[1], data, size), (ssize_t) size);
|
||||
(void) sd_event_run(e, UINT64_MAX);
|
||||
assert_se(sd_ndisc_stop(nd) >= 0);
|
||||
ASSERT_OK(sd_ndisc_stop(nd));
|
||||
test_fd[1] = safe_close(test_fd[1]);
|
||||
TAKE_FD(test_fd[0]); /* It should be already closed by sd_ndisc_stop(). */
|
||||
}
|
||||
@@ -41,17 +42,17 @@ static void test_with_sd_radv(const uint8_t *data, size_t size) {
|
||||
_cleanup_(sd_event_unrefp) sd_event *e = NULL;
|
||||
_cleanup_(sd_radv_unrefp) sd_radv *ra = NULL;
|
||||
|
||||
assert_se(socketpair(AF_UNIX, SOCK_SEQPACKET | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) >= 0);
|
||||
ASSERT_OK(socketpair(AF_UNIX, SOCK_SEQPACKET | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd));
|
||||
|
||||
assert_se(sd_event_new(&e) >= 0);
|
||||
assert_se(sd_radv_new(&ra) >= 0);
|
||||
assert_se(sd_radv_attach_event(ra, e, /* priority= */ 0) >= 0);
|
||||
assert_se(sd_radv_set_ifindex(ra, 42) >= 0);
|
||||
assert_se(sd_radv_set_mac(ra, &mac_addr) >= 0);
|
||||
assert_se(sd_radv_start(ra) >= 0);
|
||||
assert_se(write(test_fd[0], data, size) == (ssize_t) size);
|
||||
ASSERT_OK(sd_event_new(&e));
|
||||
ASSERT_OK(sd_radv_new(&ra));
|
||||
ASSERT_OK(sd_radv_attach_event(ra, e, /* priority= */ 0));
|
||||
ASSERT_OK(sd_radv_set_ifindex(ra, 42));
|
||||
ASSERT_OK(sd_radv_set_mac(ra, &mac_addr));
|
||||
ASSERT_OK(sd_radv_start(ra));
|
||||
ASSERT_EQ(write(test_fd[0], data, size), (ssize_t) size);
|
||||
(void) sd_event_run(e, UINT64_MAX);
|
||||
assert_se(sd_radv_stop(ra) >= 0);
|
||||
ASSERT_OK(sd_radv_stop(ra));
|
||||
test_fd[0] = safe_close(test_fd[0]);
|
||||
TAKE_FD(test_fd[1]); /* It should be already closed by sd_radv_stop(). */
|
||||
}
|
||||
@@ -61,8 +62,8 @@ static void test_with_icmp6_packet(const uint8_t *data, size_t size) {
|
||||
_cleanup_(icmp6_packet_unrefp) ICMP6Packet *packet = NULL;
|
||||
_cleanup_set_free_ Set *options = NULL;
|
||||
|
||||
assert_se(socketpair(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, fd_pair) >= 0);
|
||||
assert_se(write(fd_pair[1], data, size) == (ssize_t) size);
|
||||
ASSERT_OK(socketpair(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, fd_pair));
|
||||
ASSERT_EQ(write(fd_pair[1], data, size), (ssize_t) size);
|
||||
|
||||
if (icmp6_packet_receive(fd_pair[0], &packet) < 0)
|
||||
return;
|
||||
@@ -80,7 +81,7 @@ static void test_with_icmp6_packet(const uint8_t *data, size_t size) {
|
||||
if (icmp6_packet_receive(fd_pair[0], &packet) < 0)
|
||||
return;
|
||||
|
||||
assert_se(ndisc_parse_options(packet, &options) >= 0);
|
||||
ASSERT_OK(ndisc_parse_options(packet, &options));
|
||||
}
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
@@ -246,7 +246,7 @@ static void create_reply(sd_dhcp_client *client, sd_dhcp_message *request, uint8
|
||||
static void verify_header(sd_dhcp_message *m) {
|
||||
ASSERT_EQ(m->header.op, BOOTREQUEST);
|
||||
ASSERT_EQ(m->header.htype, ARPHRD_ETHER);
|
||||
ASSERT_EQ(memcmp_nn(m->header.chaddr, m->header.hlen, hw_addr.bytes, hw_addr.length), 0);
|
||||
ASSERT_MEMEQ_NN(m->header.chaddr, m->header.hlen, hw_addr.bytes, hw_addr.length);
|
||||
}
|
||||
|
||||
static void verify_basic_options(sd_dhcp_message *m, uint8_t type) {
|
||||
@@ -296,7 +296,7 @@ static void verify_request(sd_dhcp_message *m, uint8_t type) {
|
||||
STRV_FOREACH(s, vendor_specific_strv) {
|
||||
struct iovec v;
|
||||
ASSERT_OK(tlv_get(vendor_specific, ++c, &v));
|
||||
ASSERT_EQ(memcmp_nn(v.iov_base, v.iov_len, *s, strlen(*s)), 0);
|
||||
ASSERT_MEMEQ_NN(v.iov_base, v.iov_len, *s, strlen(*s));
|
||||
}
|
||||
|
||||
_cleanup_(iovw_done) struct iovec_wrapper iovw = {};
|
||||
@@ -304,7 +304,7 @@ static void verify_request(sd_dhcp_message *m, uint8_t type) {
|
||||
ASSERT_OK(iovw_put(&iovw, (void*) *s, strlen(*s)));
|
||||
_cleanup_(iovw_done_free) struct iovec_wrapper user_class = {};
|
||||
ASSERT_OK(dhcp_message_get_option_length_prefixed_data(m, SD_DHCP_OPTION_USER_CLASS, /* length_size= */ 1, &user_class));
|
||||
ASSERT_TRUE(iovw_equal(&user_class, &iovw));
|
||||
ASSERT_IOVW_EQ(&user_class, &iovw);
|
||||
|
||||
str = mfree(str);
|
||||
ASSERT_OK(dhcp_message_get_option_string(m, 163, &str));
|
||||
|
||||
@@ -88,16 +88,14 @@ static void verify_addresses(
|
||||
size_t n;
|
||||
_cleanup_free_ struct in_addr *addrs = NULL;
|
||||
ASSERT_OK(dhcp_message_get_option_addresses(m, SD_DHCP_OPTION_NTP_SERVER, &n, &addrs));
|
||||
ASSERT_EQ(n, n_ntp);
|
||||
ASSERT_EQ(memcmp(addrs, ntp, sizeof(struct in_addr) * n), 0);
|
||||
ASSERT_MEMEQ_NN(addrs, sizeof(struct in_addr) * n, ntp, sizeof(struct in_addr) * n_ntp);
|
||||
|
||||
ASSERT_ERROR(dhcp_message_get_option_be32(m, SD_DHCP_OPTION_SIP_SERVER, /* ret= */ NULL), ENODATA);
|
||||
ASSERT_ERROR(dhcp_message_get_option_address(m, SD_DHCP_OPTION_SIP_SERVER, /* ret= */ NULL), ENODATA);
|
||||
|
||||
addrs = mfree(addrs);
|
||||
ASSERT_OK(dhcp_message_get_option_addresses(m, SD_DHCP_OPTION_SIP_SERVER, &n, &addrs));
|
||||
ASSERT_EQ(n, n_sip);
|
||||
ASSERT_EQ(memcmp(addrs, sip, sizeof(struct in_addr) * n), 0);
|
||||
ASSERT_MEMEQ_NN(addrs, sizeof(struct in_addr) * n, sip, sizeof(struct in_addr) * n_sip);
|
||||
}
|
||||
|
||||
static void verify_string(sd_dhcp_message *m, const char *expected) {
|
||||
@@ -150,8 +148,7 @@ static void verify_6rd(
|
||||
ASSERT_EQ(ipv4masklen, expected_ipv4masklen);
|
||||
ASSERT_EQ(prefixlen, expected_prefixlen);
|
||||
ASSERT_TRUE(in6_addr_equal(&prefix, expected_prefix));
|
||||
ASSERT_EQ(n_br_addresses, expected_n_br_addresses);
|
||||
ASSERT_EQ(memcmp(br_addresses, expected_br_addresses, sizeof(struct in_addr) * n_br_addresses), 0);
|
||||
ASSERT_MEMEQ_NN(br_addresses, sizeof(struct in_addr) * n_br_addresses, expected_br_addresses, sizeof(struct in_addr) * expected_n_br_addresses);
|
||||
}
|
||||
|
||||
static void verify_client_id(sd_dhcp_message *m, const sd_dhcp_client_id *expected) {
|
||||
@@ -183,13 +180,13 @@ static void verify_sub_tlv(sd_dhcp_message *m, TLV *expected) {
|
||||
_cleanup_(iovec_done) struct iovec iov = {}, iov_expected = {};
|
||||
ASSERT_OK(tlv_build(tlv, &iov));
|
||||
ASSERT_OK(tlv_build(expected, &iov_expected));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &iov_expected));
|
||||
ASSERT_IOVEC_EQ(&iov, &iov_expected);
|
||||
}
|
||||
|
||||
static void verify_length_prefixed_data(sd_dhcp_message *m, const struct iovec_wrapper *expected) {
|
||||
_cleanup_(iovw_done_free) struct iovec_wrapper iovw = {};
|
||||
ASSERT_OK(dhcp_message_get_option_length_prefixed_data(m, SD_DHCP_OPTION_USER_CLASS, 1, &iovw));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, expected));
|
||||
ASSERT_IOVW_EQ(&iovw, expected);
|
||||
}
|
||||
|
||||
static void verify_send_udp(sd_dhcp_message *message, uint32_t xid, const struct hw_addr_data *hw_addr) {
|
||||
@@ -226,7 +223,7 @@ static void verify_send_udp(sd_dhcp_message *message, uint32_t xid, const struct
|
||||
_cleanup_(iovw_done_free) struct iovec_wrapper iovw = {}, iovw2 = {};
|
||||
ASSERT_OK(dhcp_message_build(message, &iovw));
|
||||
ASSERT_OK(dhcp_message_build(m, &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
}
|
||||
|
||||
static void verify_send_raw(sd_dhcp_message *message, uint32_t xid, const struct hw_addr_data *hw_addr) {
|
||||
@@ -277,7 +274,7 @@ static void verify_send_raw(sd_dhcp_message *message, uint32_t xid, const struct
|
||||
_cleanup_(iovw_done_free) struct iovec_wrapper iovw = {}, iovw2 = {};
|
||||
ASSERT_OK(dhcp_message_build(message, &iovw));
|
||||
ASSERT_OK(dhcp_message_build(m, &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
}
|
||||
|
||||
TEST(dhcp_message) {
|
||||
@@ -510,7 +507,7 @@ TEST(dhcp_message) {
|
||||
&hw_addr,
|
||||
&m2));
|
||||
|
||||
ASSERT_EQ(memcmp(&m2->header, &m->header, sizeof(m->header)), 0);
|
||||
ASSERT_MEMEQ(&m2->header, &m->header, sizeof(m->header));
|
||||
|
||||
/* verify parsed message */
|
||||
verify_header(m2, xid, &hw_addr);
|
||||
@@ -533,7 +530,7 @@ TEST(dhcp_message) {
|
||||
/* build again, and verify the packet */
|
||||
_cleanup_(iovw_done_free) struct iovec_wrapper iovw2 = {};
|
||||
ASSERT_OK(dhcp_message_build(m2, &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
|
||||
/* json */
|
||||
_cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
|
||||
@@ -544,7 +541,7 @@ TEST(dhcp_message) {
|
||||
|
||||
_cleanup_(iovw_done_free) struct iovec_wrapper iovw3 = {};
|
||||
ASSERT_OK(dhcp_message_build(m3, &iovw3));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw3));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw3);
|
||||
|
||||
/* send */
|
||||
verify_send_udp(m, xid, &hw_addr);
|
||||
|
||||
@@ -123,13 +123,13 @@ static int fake_server_handler(sd_event_source *s, int fd, uint32_t revents, voi
|
||||
|
||||
switch (tag) {
|
||||
case SD_DHCP_RELAY_AGENT_CIRCUIT_ID:
|
||||
ASSERT_TRUE(iovec_equal(&iov, &downstream->circuit_id));
|
||||
ASSERT_IOVEC_EQ(&iov, &downstream->circuit_id);
|
||||
break;
|
||||
case SD_DHCP_RELAY_AGENT_REMOTE_ID:
|
||||
ASSERT_TRUE(iovec_equal(&iov, &relay->remote_id));
|
||||
ASSERT_IOVEC_EQ(&iov, &relay->remote_id);
|
||||
break;
|
||||
case SD_DHCP_RELAY_AGENT_LINK_SELECTION:
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE(&downstream->address, sizeof(struct in_addr))));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE(&downstream->address, sizeof(struct in_addr)));
|
||||
break;
|
||||
case SD_DHCP_RELAY_AGENT_FLAGS: {
|
||||
ASSERT_TRUE(relay->server_identifier_override);
|
||||
@@ -142,10 +142,10 @@ static int fake_server_handler(sd_event_source *s, int fd, uint32_t revents, voi
|
||||
}
|
||||
case SD_DHCP_RELAY_AGENT_SERVER_IDENTIFIER_OVERRIDE:
|
||||
ASSERT_TRUE(relay->server_identifier_override);
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE(&downstream->address, sizeof(struct in_addr))));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE(&downstream->address, sizeof(struct in_addr)));
|
||||
break;
|
||||
case SD_DHCP_RELAY_AGENT_VIRTUAL_SUBNET_SELECTION:
|
||||
ASSERT_TRUE(iovec_equal(&iov, &downstream->vss));
|
||||
ASSERT_IOVEC_EQ(&iov, &downstream->vss);
|
||||
break;
|
||||
default:
|
||||
assert_not_reached();
|
||||
|
||||
@@ -257,7 +257,7 @@ TEST(option) {
|
||||
|
||||
ASSERT_OK(dhcp6_option_append(&buf, &pos, optcode, optlen, optval));
|
||||
|
||||
ASSERT_EQ(memcmp(packet, buf, sizeof(packet)), 0);
|
||||
ASSERT_MEMEQ(packet, buf, sizeof(packet));
|
||||
}
|
||||
|
||||
TEST(option_status) {
|
||||
@@ -906,7 +906,7 @@ static void test_client_verify_information_request(const DHCP6Message *msg, size
|
||||
|
||||
ASSERT_EQ(len, sizeof(msg_information_request));
|
||||
/* The elapsed time value is not deterministic. Skip it. */
|
||||
ASSERT_EQ(memcmp(msg, msg_information_request, len - sizeof(be16_t)), 0);
|
||||
ASSERT_MEMEQ(msg, msg_information_request, len - sizeof(be16_t));
|
||||
}
|
||||
|
||||
static void test_client_verify_solicit(const DHCP6Message *msg, size_t len) {
|
||||
@@ -914,7 +914,7 @@ static void test_client_verify_solicit(const DHCP6Message *msg, size_t len) {
|
||||
|
||||
ASSERT_EQ(len, sizeof(msg_solicit));
|
||||
/* The elapsed time value is not deterministic. Skip it. */
|
||||
ASSERT_EQ(memcmp(msg, msg_solicit, len - sizeof(be16_t)), 0);
|
||||
ASSERT_MEMEQ(msg, msg_solicit, len - sizeof(be16_t));
|
||||
}
|
||||
|
||||
/* The FQDN set while the client is running, in the wire format. */
|
||||
@@ -939,7 +939,7 @@ static void test_client_verify_solicit_with_new_fqdn(const DHCP6Message *msg, si
|
||||
|
||||
ASSERT_EQ(len, sizeof(expected));
|
||||
/* The elapsed time value is not deterministic. Skip it. */
|
||||
ASSERT_EQ(memcmp(msg, expected, len - sizeof(be16_t)), 0);
|
||||
ASSERT_MEMEQ(msg, expected, len - sizeof(be16_t));
|
||||
}
|
||||
|
||||
static void test_client_verify_renew_with_new_fqdn(const DHCP6Message *msg, size_t len) {
|
||||
@@ -960,8 +960,8 @@ static void test_client_verify_release(const DHCP6Message *msg, size_t len) {
|
||||
ASSERT_EQ(len, sizeof(msg_release));
|
||||
ASSERT_EQ(msg->type, DHCP6_MESSAGE_RELEASE);
|
||||
/* The transaction ID and elapsed time value are not deterministic. Skip them. */
|
||||
ASSERT_EQ(memcmp(msg->options, msg_release + offsetof(DHCP6Message, options),
|
||||
len - offsetof(DHCP6Message, options) - sizeof(be16_t)), 0);
|
||||
ASSERT_MEMEQ(msg->options, msg_release + offsetof(DHCP6Message, options),
|
||||
len - offsetof(DHCP6Message, options) - sizeof(be16_t));
|
||||
}
|
||||
|
||||
static void test_client_verify_request(const DHCP6Message *msg, size_t len) {
|
||||
@@ -970,8 +970,8 @@ static void test_client_verify_request(const DHCP6Message *msg, size_t len) {
|
||||
ASSERT_EQ(len, sizeof(msg_request));
|
||||
ASSERT_EQ(msg->type, DHCP6_MESSAGE_REQUEST);
|
||||
/* The transaction ID and elapsed time value are not deterministic. Skip them. */
|
||||
ASSERT_EQ(memcmp(msg->options, msg_request + offsetof(DHCP6Message, options),
|
||||
len - offsetof(DHCP6Message, options) - sizeof(be16_t)), 0);
|
||||
ASSERT_MEMEQ(msg->options, msg_request + offsetof(DHCP6Message, options),
|
||||
len - offsetof(DHCP6Message, options) - sizeof(be16_t));
|
||||
}
|
||||
|
||||
static void test_lease_common(sd_dhcp6_client *client) {
|
||||
@@ -986,7 +986,7 @@ static void test_lease_common(sd_dhcp6_client *client) {
|
||||
ASSERT_OK(sd_dhcp6_client_get_lease(client, &lease));
|
||||
|
||||
ASSERT_OK(dhcp6_lease_get_clientid(lease, &id, &len));
|
||||
ASSERT_EQ(memcmp_nn(id, len, client_id, sizeof(client_id)), 0);
|
||||
ASSERT_MEMEQ_NN(id, len, client_id, sizeof(client_id));
|
||||
|
||||
ASSERT_OK_EQ(sd_dhcp6_lease_get_domains(lease, &strv), 1);
|
||||
ASSERT_STREQ(strv[0], "lab.intra");
|
||||
@@ -1038,7 +1038,7 @@ static void test_lease_managed(sd_dhcp6_client *client) {
|
||||
ASSERT_OK(sd_dhcp6_client_get_lease(client, &lease));
|
||||
|
||||
ASSERT_OK(dhcp6_lease_get_serverid(lease, &id, &len));
|
||||
ASSERT_EQ(memcmp_nn(id, len, server_id, sizeof(server_id)), 0);
|
||||
ASSERT_MEMEQ_NN(id, len, server_id, sizeof(server_id));
|
||||
|
||||
ASSERT_TRUE(sd_dhcp6_lease_has_address(lease));
|
||||
ASSERT_TRUE(sd_dhcp6_lease_has_pd_prefix(lease));
|
||||
|
||||
@@ -65,17 +65,17 @@ TEST(udp_packet_build_and_verify) {
|
||||
&ip2,
|
||||
&udp2));
|
||||
|
||||
ASSERT_EQ(memcmp(&ip, &ip2, sizeof(struct iphdr)), 0);
|
||||
ASSERT_EQ(memcmp(&udp, &udp2, sizeof(struct udphdr)), 0);
|
||||
ASSERT_MEMEQ(&ip, &ip2, sizeof(struct iphdr));
|
||||
ASSERT_MEMEQ(&udp, &udp2, sizeof(struct udphdr));
|
||||
|
||||
_cleanup_(iovec_done) struct iovec packet = {};
|
||||
create_packet(&ip, &udp, &payload, &packet);
|
||||
|
||||
struct iovec iov;
|
||||
ASSERT_OK(udp_packet_verify(&packet, /* port= */ 43, /* checksum= */ false, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &joined));
|
||||
ASSERT_IOVEC_EQ(&iov, &joined);
|
||||
ASSERT_OK(udp_packet_verify(&packet, /* port= */ 43, /* checksum= */ true, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &joined));
|
||||
ASSERT_IOVEC_EQ(&iov, &joined);
|
||||
|
||||
/* UDP port mismatch */
|
||||
ASSERT_ERROR(udp_packet_verify(&packet, /* port= */ 42, /* checksum= */ false, /* ret_payload= */ NULL), EBADMSG);
|
||||
@@ -156,7 +156,7 @@ TEST(udp_packet_build_and_verify) {
|
||||
iovec_done(&packet);
|
||||
create_packet(&ip, &badudp, &payload, &packet);
|
||||
ASSERT_OK(udp_packet_verify(&packet, /* port= */ 43, /* checksum= */ false, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &joined));
|
||||
ASSERT_IOVEC_EQ(&iov, &joined);
|
||||
ASSERT_ERROR(udp_packet_verify(&packet, /* port= */ 43, /* checksum= */ true, /* ret_payload= */ NULL), EBADMSG);
|
||||
|
||||
/* missing UDP checksum */
|
||||
@@ -165,9 +165,9 @@ TEST(udp_packet_build_and_verify) {
|
||||
iovec_done(&packet);
|
||||
create_packet(&ip, &badudp, &payload, &packet);
|
||||
ASSERT_OK(udp_packet_verify(&packet, /* port= */ 43, /* checksum= */ false, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &joined));
|
||||
ASSERT_IOVEC_EQ(&iov, &joined);
|
||||
ASSERT_OK(udp_packet_verify(&packet, /* port= */ 43, /* checksum= */ true, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &joined));
|
||||
ASSERT_IOVEC_EQ(&iov, &joined);
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_DEBUG);
|
||||
@@ -114,13 +114,11 @@ static void test_receive_basic_packet(sd_event *e) {
|
||||
|
||||
ASSERT_OK_ZERO(sd_lldp_neighbor_get_chassis_id(neighbors[0], &type, &data, &length));
|
||||
ASSERT_EQ(type, SD_LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS);
|
||||
ASSERT_EQ(length, (size_t) ETH_ALEN);
|
||||
ASSERT_EQ(memcmp(data, "\x00\x01\x02\x03\x04\x05", ETH_ALEN), 0);
|
||||
ASSERT_MEMEQ_NN(data, length, "\x00\x01\x02\x03\x04\x05", ETH_ALEN);
|
||||
|
||||
ASSERT_OK_ZERO(sd_lldp_neighbor_get_port_id(neighbors[0], &type, &data, &length));
|
||||
ASSERT_EQ(type, SD_LLDP_PORT_SUBTYPE_INTERFACE_NAME);
|
||||
ASSERT_EQ(length, 3U);
|
||||
ASSERT_EQ(memcmp(data, "1/3", 3), 0);
|
||||
ASSERT_MEMEQ_NN(data, length, "1/3", 3);
|
||||
|
||||
ASSERT_OK_ZERO(sd_lldp_neighbor_get_port_description(neighbors[0], &str));
|
||||
ASSERT_STREQ(str, "Port");
|
||||
@@ -342,14 +340,12 @@ static void test_multiple_neighbors_sorted(sd_event *e) {
|
||||
ASSERT_OK_ZERO(sd_lldp_neighbor_get_chassis_id(neighbors[i], &type, &data, &length));
|
||||
ASSERT_EQ(type, SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT);
|
||||
expected_length = strlen(expected[2 * i]);
|
||||
ASSERT_EQ(length, expected_length);
|
||||
ASSERT_EQ(memcmp(data, expected[2 * i], expected_length), 0);
|
||||
ASSERT_MEMEQ_NN(data, length, expected[2 * i], expected_length);
|
||||
|
||||
ASSERT_OK_ZERO(sd_lldp_neighbor_get_port_id(neighbors[i], &type, &data, &length));
|
||||
ASSERT_EQ(type, SD_LLDP_PORT_SUBTYPE_PORT_COMPONENT);
|
||||
expected_length = strlen(expected[2 * i + 1]);
|
||||
ASSERT_EQ(length, expected_length);
|
||||
ASSERT_EQ(memcmp(data, expected[2 * i + 1], expected_length), 0);
|
||||
ASSERT_MEMEQ_NN(data, length, expected[2 * i + 1], expected_length);
|
||||
|
||||
ASSERT_OK_ZERO(sd_lldp_neighbor_get_ttl(neighbors[i], &ttl));
|
||||
ASSERT_EQ(ttl, 120U);
|
||||
|
||||
@@ -66,22 +66,22 @@ TEST(tlv) {
|
||||
|
||||
iovw = ASSERT_NOT_NULL(tlv_get_all(&tlv, 10));
|
||||
ASSERT_EQ(iovw->count, 1u);
|
||||
ASSERT_TRUE(iovec_equal(&iovw->iovec[0], &data0));
|
||||
ASSERT_IOVEC_EQ(&iovw->iovec[0], &data0);
|
||||
|
||||
iovw = ASSERT_NOT_NULL(tlv_get_all(&tlv, 11));
|
||||
ASSERT_EQ(iovw->count, 1u);
|
||||
ASSERT_TRUE(iovec_equal(&iovw->iovec[0], &data1));
|
||||
ASSERT_IOVEC_EQ(&iovw->iovec[0], &data1);
|
||||
|
||||
iovw = ASSERT_NOT_NULL(tlv_get_all(&tlv, 22));
|
||||
ASSERT_EQ(iovw->count, 3u);
|
||||
ASSERT_TRUE(iovec_equal(&iovw->iovec[0], &data2a));
|
||||
ASSERT_TRUE(iovec_equal(&iovw->iovec[1], &IOVEC_MAKE(data2b.iov_base, UINT8_MAX)));
|
||||
ASSERT_TRUE(iovec_equal(&iovw->iovec[2], &IOVEC_SHIFT(&data2b, UINT8_MAX)));
|
||||
ASSERT_IOVEC_EQ(&iovw->iovec[0], &data2a);
|
||||
ASSERT_IOVEC_EQ(&iovw->iovec[1], &IOVEC_MAKE(data2b.iov_base, UINT8_MAX));
|
||||
ASSERT_IOVEC_EQ(&iovw->iovec[2], &IOVEC_SHIFT(&data2b, UINT8_MAX));
|
||||
|
||||
iovw = ASSERT_NOT_NULL(tlv_get_all(&tlv, 33));
|
||||
ASSERT_EQ(iovw->count, 2u);
|
||||
ASSERT_TRUE(iovec_equal(&iovw->iovec[0], &IOVEC_MAKE(data3.iov_base, UINT8_MAX)));
|
||||
ASSERT_TRUE(iovec_equal(&iovw->iovec[1], &IOVEC_SHIFT(&data3, UINT8_MAX)));
|
||||
ASSERT_IOVEC_EQ(&iovw->iovec[0], &IOVEC_MAKE(data3.iov_base, UINT8_MAX));
|
||||
ASSERT_IOVEC_EQ(&iovw->iovec[1], &IOVEC_SHIFT(&data3, UINT8_MAX));
|
||||
|
||||
ASSERT_NULL(tlv_get_all(&tlv, 44));
|
||||
|
||||
@@ -89,34 +89,34 @@ TEST(tlv) {
|
||||
struct iovec iov;
|
||||
|
||||
ASSERT_OK(tlv_get(&tlv, 10, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &data0));
|
||||
ASSERT_IOVEC_EQ(&iov, &data0);
|
||||
ASSERT_OK(tlv_get_full(&tlv, 10, data0.iov_len, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &data0));
|
||||
ASSERT_IOVEC_EQ(&iov, &data0);
|
||||
ASSERT_ERROR(tlv_get_full(&tlv, 10, 123, &iov), ENODATA);
|
||||
|
||||
ASSERT_OK(tlv_get(&tlv, 11, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &data1));
|
||||
ASSERT_IOVEC_EQ(&iov, &data1);
|
||||
ASSERT_OK(tlv_get_full(&tlv, 11, data1.iov_len, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &data1));
|
||||
ASSERT_IOVEC_EQ(&iov, &data1);
|
||||
ASSERT_ERROR(tlv_get_full(&tlv, 11, 123, &iov), ENODATA);
|
||||
|
||||
ASSERT_OK(tlv_get(&tlv, 22, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &data2a));
|
||||
ASSERT_IOVEC_EQ(&iov, &data2a);
|
||||
ASSERT_OK(tlv_get_full(&tlv, 22, data2a.iov_len, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &data2a));
|
||||
ASSERT_IOVEC_EQ(&iov, &data2a);
|
||||
ASSERT_ERROR(tlv_get_full(&tlv, 22, data2b.iov_len, &iov), ENODATA);
|
||||
ASSERT_OK(tlv_get_full(&tlv, 22, UINT8_MAX, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE(data2b.iov_base, UINT8_MAX)));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE(data2b.iov_base, UINT8_MAX));
|
||||
ASSERT_OK(tlv_get_full(&tlv, 22, data2b.iov_len - UINT8_MAX, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_SHIFT(&data2b, UINT8_MAX)));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_SHIFT(&data2b, UINT8_MAX));
|
||||
|
||||
ASSERT_OK(tlv_get(&tlv, 33, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE(data3.iov_base, UINT8_MAX)));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE(data3.iov_base, UINT8_MAX));
|
||||
ASSERT_ERROR(tlv_get_full(&tlv, 33, data3.iov_len, &iov), ENODATA);
|
||||
ASSERT_OK(tlv_get_full(&tlv, 33, UINT8_MAX, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE(data3.iov_base, UINT8_MAX)));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE(data3.iov_base, UINT8_MAX));
|
||||
ASSERT_OK(tlv_get_full(&tlv, 33, data3.iov_len - UINT8_MAX, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_SHIFT(&data3, UINT8_MAX)));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_SHIFT(&data3, UINT8_MAX));
|
||||
|
||||
ASSERT_ERROR(tlv_get(&tlv, 44, /* ret= */ NULL), ENODATA);
|
||||
|
||||
@@ -124,21 +124,21 @@ TEST(tlv) {
|
||||
_cleanup_(iovec_done) struct iovec v = {};
|
||||
|
||||
ASSERT_OK(tlv_get_alloc(&tlv, 10, &v));
|
||||
ASSERT_TRUE(iovec_equal(&v, &data0));
|
||||
ASSERT_IOVEC_EQ(&v, &data0);
|
||||
iovec_done(&v);
|
||||
|
||||
ASSERT_OK(tlv_get_alloc(&tlv, 11, &v));
|
||||
ASSERT_TRUE(iovec_equal(&v, &data1));
|
||||
ASSERT_IOVEC_EQ(&v, &data1);
|
||||
iovec_done(&v);
|
||||
|
||||
ASSERT_OK(tlv_get_alloc(&tlv, 22, &v));
|
||||
ASSERT_EQ(v.iov_len, data2a.iov_len + data2b.iov_len);
|
||||
ASSERT_EQ(memcmp(v.iov_base, data2a.iov_base, data2a.iov_len), 0);
|
||||
ASSERT_EQ(memcmp((uint8_t*) v.iov_base + data2a.iov_len, data2b.iov_base, data2b.iov_len), 0);
|
||||
ASSERT_MEMEQ(v.iov_base, data2a.iov_base, data2a.iov_len);
|
||||
ASSERT_MEMEQ((uint8_t*) v.iov_base + data2a.iov_len, data2b.iov_base, data2b.iov_len);
|
||||
iovec_done(&v);
|
||||
|
||||
ASSERT_OK(tlv_get_alloc(&tlv, 33, &v));
|
||||
ASSERT_TRUE(iovec_equal(&v, &data3));
|
||||
ASSERT_IOVEC_EQ(&v, &data3);
|
||||
iovec_done(&v);
|
||||
|
||||
ASSERT_ERROR(tlv_get_alloc(&tlv, 44, /* ret= */ NULL), ENODATA);
|
||||
@@ -158,32 +158,32 @@ TEST(tlv) {
|
||||
|
||||
ASSERT_EQ(*p++, 11u);
|
||||
ASSERT_EQ(*p++, data1.iov_len);
|
||||
ASSERT_EQ(memcmp(p, data1.iov_base, data1.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, data1.iov_base, data1.iov_len);
|
||||
p += data1.iov_len;
|
||||
|
||||
ASSERT_EQ(*p++, 22u);
|
||||
ASSERT_EQ(*p++, data2a.iov_len);
|
||||
ASSERT_EQ(memcmp(p, data2a.iov_base, data2a.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, data2a.iov_base, data2a.iov_len);
|
||||
p += data2a.iov_len;
|
||||
|
||||
ASSERT_EQ(*p++, 22u);
|
||||
ASSERT_EQ(*p++, UINT8_MAX);
|
||||
ASSERT_EQ(memcmp(p, data2b.iov_base, UINT8_MAX), 0);
|
||||
ASSERT_MEMEQ(p, data2b.iov_base, UINT8_MAX);
|
||||
p += UINT8_MAX;
|
||||
|
||||
ASSERT_EQ(*p++, 22u);
|
||||
ASSERT_EQ(*p++, data2b.iov_len - UINT8_MAX);
|
||||
ASSERT_EQ(memcmp(p, (uint8_t*) data2b.iov_base + UINT8_MAX, data2b.iov_len - UINT8_MAX), 0);
|
||||
ASSERT_MEMEQ(p, (uint8_t*) data2b.iov_base + UINT8_MAX, data2b.iov_len - UINT8_MAX);
|
||||
p += data2b.iov_len - UINT8_MAX;
|
||||
|
||||
ASSERT_EQ(*p++, 33u);
|
||||
ASSERT_EQ(*p++, UINT8_MAX);
|
||||
ASSERT_EQ(memcmp(p, data3.iov_base, UINT8_MAX), 0);
|
||||
ASSERT_MEMEQ(p, data3.iov_base, UINT8_MAX);
|
||||
p += UINT8_MAX;
|
||||
|
||||
ASSERT_EQ(*p++, 33u);
|
||||
ASSERT_EQ(*p++, data3.iov_len - UINT8_MAX);
|
||||
ASSERT_EQ(memcmp(p, (uint8_t*) data3.iov_base + UINT8_MAX, data3.iov_len - UINT8_MAX), 0);
|
||||
ASSERT_MEMEQ(p, (uint8_t*) data3.iov_base + UINT8_MAX, data3.iov_len - UINT8_MAX);
|
||||
p += data3.iov_len - UINT8_MAX;
|
||||
|
||||
ASSERT_EQ(*p, 255u);
|
||||
@@ -195,13 +195,13 @@ TEST(tlv) {
|
||||
void *tagp;
|
||||
HASHMAP_FOREACH_KEY(iovw, tagp, tlv.entries) {
|
||||
struct iovec_wrapper *iovw2 = ASSERT_PTR(hashmap_get(tlv2->entries, tagp));
|
||||
ASSERT_TRUE(iovw_equal(iovw, iovw2));
|
||||
ASSERT_IOVW_EQ(iovw, iovw2);
|
||||
}
|
||||
|
||||
/* tlv_build() again, and check the reproducibility. */
|
||||
_cleanup_(iovec_done) struct iovec v2 = {};
|
||||
ASSERT_OK(tlv_build(tlv2, &v2));
|
||||
ASSERT_TRUE(iovec_equal(&v, &v2));
|
||||
ASSERT_IOVEC_EQ(&v, &v2);
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_DEBUG);
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "env-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "memstream-util.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_(memstream_done) MemStream m = {};
|
||||
@@ -21,7 +22,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fuzz_setup_logging();
|
||||
|
||||
r = sd_bus_new(&bus);
|
||||
assert_se(r >= 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
_cleanup_(bus_match_free) BusMatchNode root = {
|
||||
.type = BUS_MATCH_ROOT,
|
||||
@@ -35,7 +36,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
};
|
||||
|
||||
if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0)
|
||||
assert_se(g = memstream_init(&m));
|
||||
g = ASSERT_NOT_NULL(memstream_init(&m));
|
||||
|
||||
for (size_t offset = 0; offset < size; ) {
|
||||
_cleanup_free_ char *line = NULL;
|
||||
@@ -57,7 +58,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
log_debug_errno(r, "Failed to parse line: %m");
|
||||
continue;
|
||||
}
|
||||
assert_se(r >= 0); /* We only expect EINVAL and ENOMEM errors, or success. */
|
||||
ASSERT_OK(r); /* We only expect EINVAL and ENOMEM errors, or success. */
|
||||
|
||||
CLEANUP_ARRAY(components, n_components, bus_match_parse_free);
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "env-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "memstream-util.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_(memstream_done) MemStream ms = {};
|
||||
@@ -19,18 +20,18 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fuzz_setup_logging();
|
||||
|
||||
r = sd_bus_new(&bus);
|
||||
assert_se(r >= 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
assert_se(buffer = memdup(data, size));
|
||||
buffer = ASSERT_NOT_NULL(memdup(data, size));
|
||||
|
||||
r = bus_message_from_malloc(bus, buffer, size, /* fds= */ NULL, /* n_fds= */ 0, /* got_ctrunc= */ false, /* label= */ NULL, &m);
|
||||
if (r == -EBADMSG)
|
||||
return 0;
|
||||
assert_se(r >= 0);
|
||||
ASSERT_OK(r);
|
||||
TAKE_PTR(buffer);
|
||||
|
||||
if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0)
|
||||
assert_se(g = memstream_init(&ms));
|
||||
g = ASSERT_NOT_NULL(memstream_init(&ms));
|
||||
|
||||
(void) sd_bus_message_dump(m, g, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
@@ -39,7 +40,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
(void) sd_json_variant_dump(v, SD_JSON_FORMAT_PRETTY | SD_JSON_FORMAT_COLOR_AUTO, g, /* prefix= */ NULL);
|
||||
|
||||
r = sd_bus_message_rewind(m, /* complete= */ true);
|
||||
assert_se(r >= 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -455,8 +455,7 @@ int main(int argc, char *argv[]) {
|
||||
ASSERT_NOT_NULL(mf = memstream_init(&ms));
|
||||
sd_bus_message_dump(m, mf, /* flags= */ 0);
|
||||
ASSERT_OK(memstream_finalize(&ms, &second, &second_size));
|
||||
ASSERT_EQ(first_size, second_size);
|
||||
ASSERT_EQ(memcmp(first, second, first_size), 0);
|
||||
ASSERT_MEMEQ_NN(first, first_size, second, second_size);
|
||||
|
||||
ASSERT_OK(sd_bus_message_rewind(m, /* complete= */ true));
|
||||
|
||||
@@ -516,8 +515,7 @@ int main(int argc, char *argv[]) {
|
||||
ASSERT_STREQ(s, "hallo");
|
||||
|
||||
ASSERT_OK_POSITIVE(sd_bus_message_read_array(m, 'i', (const void**) &return_array, &sz));
|
||||
ASSERT_EQ(sz, sizeof(integer_array));
|
||||
ASSERT_EQ(memcmp(integer_array, return_array, sz), 0);
|
||||
ASSERT_MEMEQ_NN(integer_array, sizeof(integer_array), return_array, sz);
|
||||
|
||||
ASSERT_OK_POSITIVE(sd_bus_message_read_array(m, 'u', (const void**) &return_array, &sz));
|
||||
ASSERT_EQ(sz, 0U);
|
||||
@@ -545,8 +543,7 @@ int main(int argc, char *argv[]) {
|
||||
printf("<%.*s>\n", (int) first_size, first);
|
||||
printf("<%.*s>\n", (int) third_size, third);
|
||||
|
||||
ASSERT_EQ(first_size, third_size);
|
||||
ASSERT_EQ(memcmp(first, third, third_size), 0);
|
||||
ASSERT_MEMEQ_NN(first, first_size, third, third_size);
|
||||
|
||||
ASSERT_OK(sd_bus_message_rewind(m, /* complete= */ true));
|
||||
|
||||
|
||||
@@ -378,9 +378,9 @@ static int file_position_fiber(void *userdata) {
|
||||
ASSERT_OK_ZERO_ERRNO(lseek(fd, 0, SEEK_SET));
|
||||
|
||||
ASSERT_OK_EQ(sd_fiber_read(fd, buf, sizeof(buf)), (ssize_t) sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, "abc", sizeof(buf)), 0);
|
||||
ASSERT_MEMEQ(buf, "abc", sizeof(buf));
|
||||
ASSERT_OK_EQ(sd_fiber_read(fd, buf, sizeof(buf)), (ssize_t) sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, "def", sizeof(buf)), 0);
|
||||
ASSERT_MEMEQ(buf, "def", sizeof(buf));
|
||||
ASSERT_OK_ZERO(sd_fiber_read(fd, buf, sizeof(buf)));
|
||||
|
||||
return 0;
|
||||
@@ -414,7 +414,7 @@ static int pty_read_fiber(void *userdata) {
|
||||
n += k;
|
||||
}
|
||||
|
||||
ASSERT_EQ(memcmp(buf, "hello", sizeof(buf)), 0);
|
||||
ASSERT_MEMEQ(buf, "hello", sizeof(buf));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -566,7 +566,7 @@ TEST(loop_read_write_fallback) {
|
||||
char buf[16];
|
||||
ssize_t n = loop_read(pipefd[0], buf, STRLEN("fallback"), /* do_poll= */ true);
|
||||
ASSERT_OK_EQ(n, (ssize_t) STRLEN("fallback"));
|
||||
ASSERT_EQ(memcmp(buf, "fallback", STRLEN("fallback")), 0);
|
||||
ASSERT_MEMEQ(buf, "fallback", STRLEN("fallback"));
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_DEBUG);
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "journal-file.h"
|
||||
#include "journal-verify.h"
|
||||
#include "mmap-cache.h"
|
||||
#include "tests.h"
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
#define ENTRIES_MAX 256U
|
||||
@@ -21,8 +22,8 @@ static void make_file(char *name, const uint8_t *data, size_t size) {
|
||||
|
||||
/* sd_journal_open_files() refuses files without a name, so the input goes to a temporary file
|
||||
* instead of a memfd. */
|
||||
assert_se((fd = mkostemp_safe(name)) >= 0);
|
||||
assert_se(loop_write(fd, data, size) >= 0);
|
||||
fd = ASSERT_OK(mkostemp_safe(name));
|
||||
ASSERT_OK(loop_write(fd, data, size));
|
||||
}
|
||||
|
||||
static void read_journal(const char *name) {
|
||||
@@ -134,7 +135,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(m = mmap_cache_new());
|
||||
m = ASSERT_NOT_NULL(mmap_cache_new());
|
||||
|
||||
make_file(name, data, size);
|
||||
read_journal(name);
|
||||
|
||||
@@ -227,7 +227,7 @@ static void test_sync_then_archive_one(bool sync_done) {
|
||||
|
||||
ASSERT_OK(journal_file_archive(f, /* ret_previous_path= */ NULL));
|
||||
ASSERT_OK(journal_file_set_offline(f, /* wait= */ false));
|
||||
ASSERT_EQ(memcmp(f->header->signature, HEADER_SIGNATURE, sizeof(f->header->signature)), 0);
|
||||
ASSERT_MEMEQ(f->header->signature, HEADER_SIGNATURE, sizeof(f->header->signature));
|
||||
ASSERT_OK(journal_file_set_offline(f, /* wait= */ true));
|
||||
ASSERT_EQ(f->header->state, STATE_ARCHIVED);
|
||||
model_assert_file(f, &model);
|
||||
|
||||
@@ -742,8 +742,7 @@ TEST(cursor_and_data_lifetime) {
|
||||
ASSERT_OK(sd_journal_get_data_threshold(j, &size));
|
||||
ASSERT_EQ(size, 4U);
|
||||
ASSERT_OK(sd_journal_get_data(j, "BINARY", &data, &size));
|
||||
ASSERT_EQ(size, sizeof(binary));
|
||||
ASSERT_EQ(memcmp(data, binary, size), 0);
|
||||
ASSERT_MEMEQ_NN(data, size, binary, sizeof(binary));
|
||||
|
||||
ASSERT_OK(sd_journal_get_realtime_usec(j, &value));
|
||||
ASSERT_EQ(value, ts.realtime);
|
||||
@@ -751,34 +750,30 @@ TEST(cursor_and_data_lifetime) {
|
||||
ASSERT_EQ(value, ts.monotonic);
|
||||
ASSERT_EQ_ID128(id, boot_id);
|
||||
ASSERT_OK_POSITIVE(sd_journal_test_cursor(j, cursor));
|
||||
ASSERT_EQ(memcmp(data, binary, size), 0);
|
||||
ASSERT_MEMEQ(data, binary, size);
|
||||
ASSERT_ERROR(sd_journal_get_data(j, "MISSING", &data, &size), ENOENT);
|
||||
|
||||
ASSERT_OK(sd_journal_set_data_threshold(j, /* sz= */ 0));
|
||||
sd_journal_restart_data(j);
|
||||
ASSERT_OK_POSITIVE(sd_journal_enumerate_data(j, &data, &size));
|
||||
ASSERT_EQ(size, strlen(small));
|
||||
ASSERT_EQ(memcmp(data, small, size), 0);
|
||||
ASSERT_MEMEQ_NN(data, size, small, strlen(small));
|
||||
ASSERT_OK(sd_journal_get_seqnum(j, &value, &id));
|
||||
ASSERT_EQ(value, seqnum);
|
||||
ASSERT_EQ_ID128(id, seqnum_id);
|
||||
ASSERT_EQ(memcmp(data, small, size), 0);
|
||||
ASSERT_MEMEQ(data, small, size);
|
||||
ASSERT_OK_POSITIVE(sd_journal_enumerate_data(j, &data, &size));
|
||||
ASSERT_EQ(size, sizeof(binary));
|
||||
ASSERT_EQ(memcmp(data, binary, size), 0);
|
||||
ASSERT_MEMEQ_NN(data, size, binary, sizeof(binary));
|
||||
ASSERT_OK_ZERO(sd_journal_enumerate_data(j, &data, &size));
|
||||
|
||||
ASSERT_OK(sd_journal_query_unique(j, "BINARY"));
|
||||
ASSERT_OK_POSITIVE(sd_journal_enumerate_unique(j, &data, &size));
|
||||
ASSERT_EQ(size, sizeof(binary));
|
||||
ASSERT_EQ(memcmp(data, binary, size), 0);
|
||||
ASSERT_MEMEQ_NN(data, size, binary, sizeof(binary));
|
||||
ASSERT_OK(sd_journal_get_realtime_usec(j, &value));
|
||||
ASSERT_EQ(memcmp(data, binary, size), 0);
|
||||
ASSERT_MEMEQ(data, binary, size);
|
||||
ASSERT_OK_ZERO(sd_journal_enumerate_unique(j, &data, &size));
|
||||
sd_journal_restart_unique(j);
|
||||
ASSERT_OK_POSITIVE(sd_journal_enumerate_unique(j, &data, &size));
|
||||
ASSERT_EQ(size, sizeof(binary));
|
||||
ASSERT_EQ(memcmp(data, binary, size), 0);
|
||||
ASSERT_MEMEQ_NN(data, size, binary, sizeof(binary));
|
||||
|
||||
unsigned n_fields = 0;
|
||||
sd_journal_restart_fields(j);
|
||||
@@ -964,7 +959,7 @@ static void test_boot_id_one(void (*setup)(void), size_t n_ids_expected) {
|
||||
&ids_limited, &n_ids_limited));
|
||||
ASSERT_TRUE(ids_limited || i == 0);
|
||||
ASSERT_EQ(n_ids_limited, MIN(i, n_ids_expected));
|
||||
ASSERT_EQ(memcmp_safe(ids, ids_limited, n_ids_limited * sizeof(LogId)), 0);
|
||||
ASSERT_MEMEQ(ids, ids_limited, n_ids_limited * sizeof(LogId));
|
||||
}
|
||||
|
||||
for (size_t i = 0; i <= n_ids_expected + 1; i++) {
|
||||
@@ -978,7 +973,7 @@ static void test_boot_id_one(void (*setup)(void), size_t n_ids_expected) {
|
||||
ASSERT_TRUE(ids_limited || i == 0);
|
||||
ASSERT_EQ(n_ids_limited, MIN(i, n_ids_expected));
|
||||
for (size_t k = 0; k < n_ids_limited; k++)
|
||||
ASSERT_EQ(memcmp(&ids[n_ids - k - 1], &ids_limited[k], sizeof(LogId)), 0);
|
||||
ASSERT_MEMEQ(&ids[n_ids - k - 1], &ids_limited[k], sizeof(LogId));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -307,7 +307,7 @@ static bool check_compressed(uint64_t compress_threshold, uint64_t data_size) {
|
||||
struct iovec v;
|
||||
ASSERT_OK_POSITIVE(journal_file_data_payload_full(f, o, p, field, field_length, flags,
|
||||
-EBADF, (const void**) &v.iov_base, &v.iov_len));
|
||||
ASSERT_TRUE(iovec_equal(&v, &IOVEC_SHIFT(&iovec, skip)));
|
||||
ASSERT_IOVEC_EQ(&v, &IOVEC_SHIFT(&iovec, skip));
|
||||
|
||||
_cleanup_close_ int fd = ASSERT_OK(memfd_new("decompress-blob-to-fd-test"));
|
||||
size_t sz;
|
||||
@@ -323,7 +323,7 @@ static bool check_compressed(uint64_t compress_threshold, uint64_t data_size) {
|
||||
ASSERT_OK(iovec_alloc(sz, &w));
|
||||
|
||||
ASSERT_OK_EQ_ERRNO(pread(fd, w.iov_base, w.iov_len, 0), (ssize_t) w.iov_len);
|
||||
ASSERT_TRUE(iovec_equal(&w, &IOVEC_SHIFT(&iovec, skip)));
|
||||
ASSERT_IOVEC_EQ(&w, &IOVEC_SHIFT(&iovec, skip));
|
||||
}
|
||||
|
||||
(void) journal_file_offline_close(f);
|
||||
|
||||
@@ -1373,8 +1373,8 @@ TEST(json_iovec) {
|
||||
ASSERT_OK(json_variant_unbase64_iovec(sd_json_variant_by_key(j, "nr1"), &a));
|
||||
ASSERT_OK(json_variant_unhex_iovec(sd_json_variant_by_key(j, "nr2"), &b));
|
||||
|
||||
ASSERT_TRUE(iovec_equal(&iov1, &a));
|
||||
ASSERT_TRUE(iovec_equal(&iov2, &b));
|
||||
ASSERT_IOVEC_EQ(&iov1, &a);
|
||||
ASSERT_IOVEC_EQ(&iov2, &b);
|
||||
ASSERT_LT(iovec_memcmp(&iov2, &a), 0);
|
||||
ASSERT_GT(iovec_memcmp(&iov1, &b), 0);
|
||||
}
|
||||
@@ -2380,7 +2380,7 @@ TEST(json_dispatch_unhex_iovec32) {
|
||||
|
||||
ASSERT_OK(sd_json_dispatch(j, table, /* flags= */ 0, &data));
|
||||
ASSERT_EQ(data.digest.iov_len, 32U);
|
||||
ASSERT_EQ(memcmp(data.digest.iov_base, buf, 32), 0);
|
||||
ASSERT_MEMEQ(data.digest.iov_base, buf, 32);
|
||||
ASSERT_FALSE(iovec_is_set(&data.null_digest));
|
||||
|
||||
/* Dispatching again replaces the old value */
|
||||
@@ -2388,7 +2388,7 @@ TEST(json_dispatch_unhex_iovec32) {
|
||||
ASSERT_OK(sd_json_buildo(&j, SD_JSON_BUILD_PAIR_HEX("digest", buf + 1, 32)));
|
||||
ASSERT_OK(sd_json_dispatch(j, table, /* flags= */ 0, &data));
|
||||
ASSERT_EQ(data.digest.iov_len, 32U);
|
||||
ASSERT_EQ(memcmp(data.digest.iov_base, buf + 1, 32), 0);
|
||||
ASSERT_MEMEQ(data.digest.iov_base, buf + 1, 32);
|
||||
|
||||
/* Wrong sizes are refused, and leave the old value in place */
|
||||
size_t n;
|
||||
@@ -2397,7 +2397,7 @@ TEST(json_dispatch_unhex_iovec32) {
|
||||
ASSERT_OK(sd_json_buildo(&j, SD_JSON_BUILD_PAIR_HEX("digest", buf, n)));
|
||||
ASSERT_ERROR(sd_json_dispatch(j, table, /* flags= */ 0, &data), EINVAL);
|
||||
ASSERT_EQ(data.digest.iov_len, 32U);
|
||||
ASSERT_EQ(memcmp(data.digest.iov_base, buf + 1, 32), 0);
|
||||
ASSERT_MEMEQ(data.digest.iov_base, buf + 1, 32);
|
||||
}
|
||||
|
||||
/* Invalid hex strings are refused too */
|
||||
|
||||
@@ -105,7 +105,7 @@ static void test_fd(int fd, const void *buf, size_t n) {
|
||||
ssize_t m;
|
||||
|
||||
ASSERT_OK_ERRNO(m = read(fd, rbuf, n + 1));
|
||||
ASSERT_OK_ZERO(memcmp_nn(buf, n, rbuf, m));
|
||||
ASSERT_MEMEQ_NN(buf, n, rbuf, m);
|
||||
}
|
||||
|
||||
static int method_passfd(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "networkd-manager.h"
|
||||
#include "tests.h"
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
@@ -16,12 +17,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(fmkostemp_safe(netdev_config, "r+", &f) == 0);
|
||||
ASSERT_OK_ZERO(fmkostemp_safe(netdev_config, "r+", &f));
|
||||
if (size != 0)
|
||||
assert_se(fwrite(data, size, 1, f) == 1);
|
||||
ASSERT_EQ(fwrite(data, size, 1, f), (size_t) 1);
|
||||
|
||||
fflush(f);
|
||||
assert_se(manager_new(&manager, /* test_mode= */ true) >= 0);
|
||||
ASSERT_OK(manager_new(&manager, /* test_mode= */ true));
|
||||
(void) netdev_load_one(manager, netdev_config, &netdev);
|
||||
return 0;
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "networkd-manager.h"
|
||||
#include "tests.h"
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
@@ -15,12 +16,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(fmkostemp_safe(network_config, "r+", &f) == 0);
|
||||
ASSERT_OK_ZERO(fmkostemp_safe(network_config, "r+", &f));
|
||||
if (size != 0)
|
||||
assert_se(fwrite(data, size, 1, f) == 1);
|
||||
ASSERT_EQ(fwrite(data, size, 1, f), (size_t) 1);
|
||||
|
||||
fflush(f);
|
||||
assert_se(manager_new(&manager, /* test_mode= */ true) >= 0);
|
||||
ASSERT_OK(manager_new(&manager, /* test_mode= */ true));
|
||||
(void) network_load_one(manager, &manager->networks, network_config);
|
||||
return 0;
|
||||
}
|
||||
@@ -300,8 +300,7 @@ static void test_config_parse_dhcp_static_lease_one(
|
||||
|
||||
ASSERT_EQ(hashmap_size(network->dhcp_static_leases_by_section), 1u);
|
||||
ASSERT_NOT_NULL(lease = hashmap_first(network->dhcp_static_leases_by_section));
|
||||
ASSERT_EQ(lease->client_id.size, expected_size);
|
||||
ASSERT_EQ(memcmp(lease->client_id.raw, expected, expected_size), 0);
|
||||
ASSERT_MEMEQ_NN(lease->client_id.raw, lease->client_id.size, expected, expected_size);
|
||||
}
|
||||
|
||||
TEST(config_parse_dhcp_static_lease) {
|
||||
@@ -416,7 +415,7 @@ static void test_config_parse_multipath_route_verify(
|
||||
if (expected_gw) {
|
||||
union in_addr_union gw;
|
||||
ASSERT_OK(in_addr_from_string(expected_family, expected_gw, &gw));
|
||||
ASSERT_EQ(memcmp(&nh->gw, &gw, FAMILY_ADDRESS_SIZE(expected_family)), 0);
|
||||
ASSERT_MEMEQ(&nh->gw, &gw, FAMILY_ADDRESS_SIZE(expected_family));
|
||||
} else
|
||||
ASSERT_FALSE(in_addr_is_set(nh->family, &nh->gw));
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "nspawn-oci.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
@@ -12,7 +13,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
return 0;
|
||||
|
||||
f = data_to_file(data, size);
|
||||
assert_se(f);
|
||||
ASSERT_NOT_NULL(f);
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "nspawn-settings.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
@@ -12,7 +13,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
return 0;
|
||||
|
||||
f = data_to_file(data, size);
|
||||
assert_se(f);
|
||||
ASSERT_NOT_NULL(f);
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "dns-packet.h"
|
||||
#include "fuzz.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
|
||||
@@ -11,12 +12,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(dns_packet_new(&p, DNS_PROTOCOL_DNS, /* min_alloc_dsize= */ 0, DNS_PACKET_SIZE_MAX) >= 0);
|
||||
ASSERT_OK(dns_packet_new(&p, DNS_PROTOCOL_DNS, /* min_alloc_dsize= */ 0, DNS_PACKET_SIZE_MAX));
|
||||
p->size = 0; /* by default append starts after the header, undo that */
|
||||
assert_se(dns_packet_append_blob(p, data, size, /* start= */ NULL) >= 0);
|
||||
ASSERT_OK(dns_packet_append_blob(p, data, size, /* start= */ NULL));
|
||||
if (size < DNS_PACKET_HEADER_SIZE) {
|
||||
/* make sure we pad the packet back up to the minimum header size */
|
||||
assert_se(p->allocated >= DNS_PACKET_HEADER_SIZE);
|
||||
ASSERT_GE(p->allocated, (size_t) DNS_PACKET_HEADER_SIZE);
|
||||
memzero(DNS_PACKET_DATA(p) + size, DNS_PACKET_HEADER_SIZE - size);
|
||||
p->size = DNS_PACKET_HEADER_SIZE;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "fd-util.h"
|
||||
#include "fuzz.h"
|
||||
#include "resolved-etc-hosts.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
@@ -11,7 +12,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
fuzz_setup_logging();
|
||||
|
||||
f = data_to_file(data, size);
|
||||
assert_se(f);
|
||||
ASSERT_NOT_NULL(f);
|
||||
|
||||
(void) etc_hosts_parse(&h, f);
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "fuzz.h"
|
||||
#include "memstream-util.h"
|
||||
#include "string-util.h"
|
||||
#include "tests.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL, *copy = NULL;
|
||||
@@ -22,16 +23,16 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
fuzz_setup_logging();
|
||||
|
||||
assert_se(copy = dns_resource_record_copy(rr));
|
||||
assert_se(dns_resource_record_equal(copy, rr) > 0);
|
||||
copy = ASSERT_NOT_NULL(dns_resource_record_copy(rr));
|
||||
ASSERT_OK_POSITIVE(dns_resource_record_equal(copy, rr));
|
||||
|
||||
assert_se(f = memstream_init(&m));
|
||||
f = ASSERT_NOT_NULL(memstream_init(&m));
|
||||
(void) fprintf(f, "%s", strna(dns_resource_record_to_string(rr)));
|
||||
|
||||
assert_se(dns_resource_record_to_json(rr, &v) >= 0);
|
||||
assert_se(sd_json_variant_dump(v, SD_JSON_FORMAT_PRETTY|SD_JSON_FORMAT_COLOR|SD_JSON_FORMAT_SOURCE, f, /* prefix= */ NULL) >= 0);
|
||||
assert_se(dns_resource_record_to_wire_format(rr, /* canonical= */ false) >= 0);
|
||||
assert_se(dns_resource_record_to_wire_format(rr, /* canonical= */ true) >= 0);
|
||||
ASSERT_OK(dns_resource_record_to_json(rr, &v));
|
||||
ASSERT_OK(sd_json_variant_dump(v, SD_JSON_FORMAT_PRETTY|SD_JSON_FORMAT_COLOR|SD_JSON_FORMAT_SOURCE, f, /* prefix= */ NULL));
|
||||
ASSERT_OK(dns_resource_record_to_wire_format(rr, /* canonical= */ false));
|
||||
ASSERT_OK(dns_resource_record_to_wire_format(rr, /* canonical= */ true));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1341,8 +1341,7 @@ TEST(dns_cache_export_shared_to_packet) {
|
||||
/* ip */ 0xc0, 0xa8, 0x01, 0x7f
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(dns_cache_export_shared_to_packet_multi) {
|
||||
@@ -1410,17 +1409,13 @@ TEST(dns_cache_export_shared_to_packet_multi) {
|
||||
/* cache key order is not deterministic; the packets could come out in either order */
|
||||
|
||||
if (memcmp(DNS_PACKET_DATA(packet), data1, size1) == 0) {
|
||||
ASSERT_EQ(packet->size, size1);
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data1, size1), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data1, size1);
|
||||
|
||||
ASSERT_EQ(packet->more->size, size2);
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet->more), data2, size2), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet->more), packet->more->size, data2, size2);
|
||||
} else {
|
||||
ASSERT_EQ(packet->size, size2);
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data2, size2), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data2, size2);
|
||||
|
||||
ASSERT_EQ(packet->more->size, size1);
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet->more), data1, size1), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet->more), packet->more->size, data1, size1);
|
||||
}
|
||||
|
||||
ASSERT_NULL(packet->more->more);
|
||||
|
||||
@@ -178,8 +178,7 @@ TEST(packet_append_key_single_a) {
|
||||
/* IN */ 0x00, 0x01
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_key_single_soa_any_class) {
|
||||
@@ -210,8 +209,7 @@ TEST(packet_append_key_single_soa_any_class) {
|
||||
/* ANY */ 0x00, 0xff
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_key_cache_flush_mdns) {
|
||||
@@ -242,8 +240,7 @@ TEST(packet_append_key_cache_flush_mdns) {
|
||||
0x80, 0x01
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
/* The cache-flush bit is defined for mDNS only. RRs taken from our mDNS zone carry
|
||||
@@ -276,8 +273,7 @@ TEST(packet_append_key_cache_flush_dns) {
|
||||
/* IN */ 0x00, 0x01
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
/* mDNS probes carry the proposed RRs from our mDNS zone in the Authority Section. Those items carry
|
||||
@@ -309,8 +305,7 @@ TEST(packet_append_key_cache_flush_mdns_query) {
|
||||
/* IN */ 0x00, 0x01
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
@@ -371,8 +366,7 @@ TEST(packet_append_question_compression) {
|
||||
/* IN */ 0x00, 0x01
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
@@ -403,8 +397,7 @@ TEST(packet_append_opt_basic) {
|
||||
/* rdata */ 0x00, 0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_opt_change_max_udp) {
|
||||
@@ -431,8 +424,7 @@ TEST(packet_append_opt_change_max_udp) {
|
||||
/* rdata */ 0x00, 0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_opt_dnssec_ok) {
|
||||
@@ -459,8 +451,7 @@ TEST(packet_append_opt_dnssec_ok) {
|
||||
/* rdata */ 0x00, 0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_opt_rcode) {
|
||||
@@ -487,8 +478,7 @@ TEST(packet_append_opt_rcode) {
|
||||
/* rdata */ 0x00, 0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_opt_nsid) {
|
||||
@@ -519,8 +509,7 @@ TEST(packet_append_opt_nsid) {
|
||||
'm', 'p', 'l', 'e', '.', 'c', 'o', 'm'
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_key_and_opt) {
|
||||
@@ -559,8 +548,7 @@ TEST(packet_append_key_and_opt) {
|
||||
/* rdata */ 0x00, 0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_truncate_opt) {
|
||||
@@ -593,8 +581,7 @@ TEST(packet_truncate_opt) {
|
||||
/* IN */ 0x00, 0x01
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
@@ -627,8 +614,7 @@ TEST(packet_patch_max_udp_size) {
|
||||
/* rdata */ 0x00, 0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_patch_max_udp_size_no_opt) {
|
||||
@@ -647,8 +633,7 @@ TEST(packet_patch_max_udp_size_no_opt) {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
@@ -696,8 +681,7 @@ TEST(packet_dup) {
|
||||
ASSERT_OK(dns_packet_dup(&p2, p1));
|
||||
ASSERT_NOT_NULL(p2);
|
||||
|
||||
ASSERT_EQ(p2->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(p2), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(p2), p2->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
@@ -742,8 +726,7 @@ TEST(packet_append_answer_single_a) {
|
||||
/* ip */ 0xc0, 0xa8, 0x01, 0x7f
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_single_ns) {
|
||||
@@ -785,8 +768,7 @@ TEST(packet_append_answer_single_ns) {
|
||||
0xc0, 0x0c
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_single_cname) {
|
||||
@@ -828,8 +810,7 @@ TEST(packet_append_answer_single_cname) {
|
||||
/* name */ 0xc0, 0x10
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_single_hinfo) {
|
||||
@@ -872,8 +853,7 @@ TEST(packet_append_answer_single_hinfo) {
|
||||
/* os */ 0x09, 'G', 'N', 'U', '/', 'L', 'i', 'n', 'u', 'x'
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_single_ptr) {
|
||||
@@ -920,8 +900,7 @@ TEST(packet_append_answer_single_ptr) {
|
||||
0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
/* Reverse lookups for link-local addresses are answered from resolved's own mDNS zone, whose answer
|
||||
@@ -972,8 +951,7 @@ TEST(packet_append_answer_single_ptr_ip6_cache_flush) {
|
||||
0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_single_mx) {
|
||||
@@ -1017,8 +995,7 @@ TEST(packet_append_answer_single_mx) {
|
||||
0xc0, 0x0c
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_single_txt) {
|
||||
@@ -1072,8 +1049,7 @@ TEST(packet_append_answer_single_txt) {
|
||||
0x05, 'w', 'o', 'r', 'l', 'd'
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_single_loc) {
|
||||
@@ -1126,8 +1102,7 @@ TEST(packet_append_answer_single_loc) {
|
||||
/* altitude */ 0x00, 0x98, 0x96, 0x80
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_single_srv) {
|
||||
@@ -1179,8 +1154,7 @@ TEST(packet_append_answer_single_srv) {
|
||||
0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_single_naptr) {
|
||||
@@ -1243,8 +1217,7 @@ TEST(packet_append_answer_single_naptr) {
|
||||
0x00
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(packet_append_answer_rrsig_with_a) {
|
||||
@@ -1325,8 +1298,7 @@ TEST(packet_append_answer_rrsig_with_a) {
|
||||
/* signature */ 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
static DnsSvcParam* add_svcb_param(DnsResourceRecord *rr, uint16_t key, const char *value, size_t len) {
|
||||
@@ -1420,8 +1392,7 @@ TEST(packet_append_answer_single_svcb) {
|
||||
0x2f, 0xd7, 0xdb, 0x7b, 0x28, 0x7e, 0x60, 0xbb
|
||||
};
|
||||
|
||||
ASSERT_EQ(packet->size, sizeof(data));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(packet), data, sizeof(data)), 0);
|
||||
ASSERT_MEMEQ_NN(DNS_PACKET_DATA(packet), packet->size, data, sizeof(data));
|
||||
}
|
||||
|
||||
static void dump_packet_data(DnsPacket *packet) {
|
||||
|
||||
@@ -829,7 +829,7 @@ TEST(dns_resource_record_new_address_ipv6) {
|
||||
ASSERT_EQ(rr->key->class, DNS_CLASS_IN);
|
||||
ASSERT_EQ(rr->key->type, DNS_TYPE_AAAA);
|
||||
ASSERT_STREQ(dns_resource_key_name(rr->key), "www.example.com");
|
||||
ASSERT_EQ(memcmp(&rr->aaaa.in6_addr, &addr.in6, sizeof(struct in6_addr)), 0);
|
||||
ASSERT_MEMEQ(&rr->aaaa.in6_addr, &addr.in6, sizeof(struct in6_addr));
|
||||
|
||||
test_to_json_from_json(rr);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "dns-answer.h"
|
||||
#include "dns-packet.h"
|
||||
#include "dns-rr.h"
|
||||
#include "memory-util.h"
|
||||
#include "resolved-dns-stub.h"
|
||||
#include "string-util.h"
|
||||
#include "tests.h"
|
||||
@@ -136,7 +135,7 @@ static void parse_reply(DnsPacket *reply, DnsPacket **ret_parsed, char **ret_lay
|
||||
ASSERT_EQ(rr->key->type, DNS_TYPE_DNSKEY);
|
||||
ASSERT_EQ(rr->dnskey.key_size, DNSKEY_KEY_SIZE);
|
||||
fill = *(uint8_t*) rr->dnskey.key;
|
||||
ASSERT_TRUE(memeqbyte(fill, rr->dnskey.key, rr->dnskey.key_size));
|
||||
ASSERT_MEMEQ_BYTE(fill, rr->dnskey.key, rr->dnskey.key_size);
|
||||
ASSERT_OK(strextendf(&layout, "%c", fill));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ static void receive_and_check_question(int fd, const uint8_t *expected_question,
|
||||
}
|
||||
ASSERT_EQ(n_read, question_size);
|
||||
|
||||
ASSERT_EQ(memcmp(expected_question, actual_question, question_size), 0);
|
||||
ASSERT_MEMEQ(expected_question, actual_question, question_size);
|
||||
}
|
||||
|
||||
static void send_answer(int fd, const uint8_t *answer, size_t answer_size) {
|
||||
@@ -278,8 +278,8 @@ static void test_dns_stream(bool tls) {
|
||||
while (n_received_packets != 1)
|
||||
ASSERT_OK_POSITIVE(sd_event_run(event, EVENT_TIMEOUT_USEC));
|
||||
ASSERT_NOT_NULL(DNS_PACKET_DATA(received_packets[0]));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(received_packets[0]),
|
||||
ANSWER_A + 2, sizeof(ANSWER_A) - 2), 0);
|
||||
ASSERT_MEMEQ(DNS_PACKET_DATA(received_packets[0]),
|
||||
ANSWER_A + 2, sizeof(ANSWER_A) - 2);
|
||||
dns_packet_unref(TAKE_PTR(received_packets[0]));
|
||||
n_received_packets = 0;
|
||||
|
||||
@@ -289,8 +289,8 @@ static void test_dns_stream(bool tls) {
|
||||
while (n_received_packets != 1)
|
||||
ASSERT_OK_POSITIVE(sd_event_run(event, EVENT_TIMEOUT_USEC));
|
||||
ASSERT_NOT_NULL(DNS_PACKET_DATA(received_packets[0]));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(received_packets[0]),
|
||||
ANSWER_AAAA + 2, sizeof(ANSWER_AAAA) - 2), 0);
|
||||
ASSERT_MEMEQ(DNS_PACKET_DATA(received_packets[0]),
|
||||
ANSWER_AAAA + 2, sizeof(ANSWER_AAAA) - 2);
|
||||
dns_packet_unref(TAKE_PTR(received_packets[0]));
|
||||
n_received_packets = 0;
|
||||
|
||||
@@ -305,10 +305,10 @@ static void test_dns_stream(bool tls) {
|
||||
ASSERT_OK_POSITIVE(sd_event_run(event, EVENT_TIMEOUT_USEC));
|
||||
ASSERT_NOT_NULL(DNS_PACKET_DATA(received_packets[0]));
|
||||
ASSERT_NOT_NULL(DNS_PACKET_DATA(received_packets[1]));
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(received_packets[0]),
|
||||
ANSWER_A + 2, sizeof(ANSWER_A) - 2), 0);
|
||||
ASSERT_EQ(memcmp(DNS_PACKET_DATA(received_packets[1]),
|
||||
ANSWER_AAAA + 2, sizeof(ANSWER_AAAA) - 2), 0);
|
||||
ASSERT_MEMEQ(DNS_PACKET_DATA(received_packets[0]),
|
||||
ANSWER_A + 2, sizeof(ANSWER_A) - 2);
|
||||
ASSERT_MEMEQ(DNS_PACKET_DATA(received_packets[1]),
|
||||
ANSWER_AAAA + 2, sizeof(ANSWER_AAAA) - 2);
|
||||
dns_packet_unref(TAKE_PTR(received_packets[0]));
|
||||
dns_packet_unref(TAKE_PTR(received_packets[1]));
|
||||
n_received_packets = 0;
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "hexdump.h"
|
||||
#include "iovec-util.h"
|
||||
#include "iovec-wrapper.h"
|
||||
#include "memstream-util.h"
|
||||
|
||||
void hexdump(FILE *f, const void *p, size_t s) {
|
||||
const uint8_t *b = p;
|
||||
unsigned n = 0;
|
||||
|
||||
assert(b || s == 0);
|
||||
|
||||
if (s == SIZE_MAX)
|
||||
s = strlen(p);
|
||||
|
||||
if (!f)
|
||||
f = stdout;
|
||||
|
||||
while (s > 0) {
|
||||
size_t i;
|
||||
|
||||
fprintf(f, "%04x ", n);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
|
||||
if (i >= s)
|
||||
fputs(" ", f);
|
||||
else
|
||||
fprintf(f, "%02x ", b[i]);
|
||||
|
||||
if (i == 7)
|
||||
fputc(' ', f);
|
||||
}
|
||||
|
||||
fputc(' ', f);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
|
||||
if (i >= s)
|
||||
fputc(' ', f);
|
||||
else
|
||||
fputc(isprint(b[i]) ? (char) b[i] : '.', f);
|
||||
}
|
||||
|
||||
fputc('\n', f);
|
||||
|
||||
if (s < 16)
|
||||
break;
|
||||
|
||||
n += 16;
|
||||
b += 16;
|
||||
s -= 16;
|
||||
}
|
||||
}
|
||||
|
||||
static void dump_hex_line(FILE *f, char tag, const uint8_t *p, size_t size, size_t off) {
|
||||
assert(f);
|
||||
|
||||
fprintf(f, "%c %04zx ", tag, off);
|
||||
|
||||
for (size_t i = 0; i < 16; i++) {
|
||||
if (off + i < size)
|
||||
fprintf(f, "%02x ", p[off + i]);
|
||||
else
|
||||
fputs(" ", f);
|
||||
|
||||
if (i == 7)
|
||||
fputc(' ', f);
|
||||
}
|
||||
|
||||
fputs(" |", f);
|
||||
for (size_t i = 0; i < 16; i++) {
|
||||
if (off + i < size) {
|
||||
uint8_t c = p[off + i];
|
||||
fputc(isprint(c) ? (char) c : '.', f);
|
||||
} else
|
||||
fputc(' ', f);
|
||||
}
|
||||
fputs("|\n", f);
|
||||
}
|
||||
|
||||
char* hexdump_memcmp(const void *m1, size_t l1, const void *m2, size_t l2) {
|
||||
_cleanup_(memstream_done) MemStream m = {};
|
||||
const uint8_t *a = m1, *b = m2;
|
||||
size_t mx = MAX(l1, l2);
|
||||
FILE *f;
|
||||
|
||||
/* Returns a hexdump(3)-like side-by-side representation of two memory regions. For each 16 byte
|
||||
* chunk that differs a marker line pointing at the diverging bytes ('<' is the first region, '>' the
|
||||
* second) is appended. */
|
||||
|
||||
f = memstream_init(&m);
|
||||
if (!f)
|
||||
return NULL;
|
||||
|
||||
for (size_t off = 0; off < mx; off += 16) {
|
||||
dump_hex_line(f, '<', a, l1, off);
|
||||
dump_hex_line(f, '>', b, l2, off);
|
||||
|
||||
/* Figure out whether this chunk differs at all, and only then emit the marker line. */
|
||||
bool any = false;
|
||||
for (size_t i = 0; i < 16 && off + i < mx; i++) {
|
||||
bool pa = off + i < l1, pb = off + i < l2;
|
||||
if (pa != pb || (pa && pb && a[off + i] != b[off + i])) {
|
||||
any = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!any)
|
||||
continue;
|
||||
|
||||
fputs(" ", f); /* align with the 8-char "%c %04zx " prefix: tag + space + 4 hex + 2 spaces */
|
||||
for (size_t i = 0; i < 16; i++) {
|
||||
bool pa = off + i < l1, pb = off + i < l2;
|
||||
bool diff = pa != pb || (pa && pb && a[off + i] != b[off + i]);
|
||||
fputs(diff ? "^^ " : " ", f);
|
||||
|
||||
if (i == 7)
|
||||
fputc(' ', f);
|
||||
}
|
||||
fputc('\n', f);
|
||||
}
|
||||
|
||||
char *ret;
|
||||
if (memstream_finalize(&m, &ret, NULL) < 0)
|
||||
return NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
char* hexdump_memcmp_byte(uint8_t byte, const void *data, size_t length) {
|
||||
_cleanup_free_ uint8_t *expected = NULL;
|
||||
|
||||
/* Like hexdump_memcmp(), but compares the memory region against a region of the same length filled
|
||||
* with 'byte'. Used by ASSERT_MEMEQ_BYTE() and ASSERT_MEMEQ_ZERO(). */
|
||||
|
||||
if (length > 0) {
|
||||
expected = malloc(length);
|
||||
if (!expected)
|
||||
return NULL;
|
||||
memset(expected, byte, length);
|
||||
}
|
||||
|
||||
return hexdump_memcmp(data, length, expected, length);
|
||||
}
|
||||
|
||||
char* hexdump_iovw_compare(const struct iovec_wrapper *a, const struct iovec_wrapper *b) {
|
||||
_cleanup_(memstream_done) MemStream m = {};
|
||||
size_t na = a ? a->count : 0, nb = b ? b->count : 0, mx = MAX(na, nb);
|
||||
FILE *f;
|
||||
|
||||
/* Dumps the elements of two iovec wrappers that differ, element by element, reusing
|
||||
* hexdump_memcmp(). Used by ASSERT_IOVW_EQ(). */
|
||||
|
||||
f = memstream_init(&m);
|
||||
if (!f)
|
||||
return NULL;
|
||||
|
||||
for (size_t i = 0; i < mx; i++) {
|
||||
const struct iovec *ia = i < na ? a->iovec + i : NULL;
|
||||
const struct iovec *ib = i < nb ? b->iovec + i : NULL;
|
||||
|
||||
if (ia && ib && iovec_memcmp(ia, ib) == 0)
|
||||
continue;
|
||||
|
||||
_cleanup_free_ char *d = hexdump_memcmp(ia ? ia->iov_base : NULL, ia ? ia->iov_len : 0,
|
||||
ib ? ib->iov_base : NULL, ib ? ib->iov_len : 0);
|
||||
fprintf(f, "element %zu differs:\n%s", i, d ?: "");
|
||||
}
|
||||
|
||||
char *ret;
|
||||
if (memstream_finalize(&m, &ret, NULL) < 0)
|
||||
return NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
#include "forward.h"
|
||||
|
||||
void hexdump(FILE *f, const void *p, size_t s) _nonnull_if_nonzero_(2, 3);
|
||||
|
||||
/* Returns a hexdump(3)-like side-by-side dump of two memory regions, marking the differing bytes. Returns
|
||||
* NULL on OOM. Meant for assertion failure messages, see ASSERT_MEMEQ() and friends. */
|
||||
char* hexdump_memcmp(const void *m1, size_t l1, const void *m2, size_t l2);
|
||||
|
||||
/* Like hexdump_memcmp(), but compares against a region of the same length filled with 'byte'. */
|
||||
char* hexdump_memcmp_byte(uint8_t byte, const void *data, size_t length);
|
||||
|
||||
/* Dumps the differing elements of two iovec wrappers, element by element. Used by ASSERT_IOVW_EQ(). */
|
||||
char* hexdump_iovw_compare(const struct iovec_wrapper *a, const struct iovec_wrapper *b);
|
||||
@@ -95,6 +95,7 @@ shared_sources = files(
|
||||
'gnutls-util.c',
|
||||
'gpt.c',
|
||||
'group-record.c',
|
||||
'hexdump.c',
|
||||
'hibernate-util.c',
|
||||
'host-properties.c',
|
||||
'hostname-setup.c',
|
||||
|
||||
@@ -5,8 +5,12 @@
|
||||
|
||||
#include "errno-list.h"
|
||||
#include "forward.h"
|
||||
#include "hexdump.h" /* IWYU pragma: keep */
|
||||
#include "iovec-util.h" /* IWYU pragma: keep */
|
||||
#include "iovec-wrapper.h" /* IWYU pragma: keep */
|
||||
#include "log.h"
|
||||
#include "log-assert-critical.h"
|
||||
#include "memory-util.h" /* IWYU pragma: keep */
|
||||
#include "path-util.h" /* IWYU pragma: keep */
|
||||
#include "static-destruct.h" /* IWYU pragma: keep */
|
||||
#include "signal-util.h" /* IWYU pragma: keep */
|
||||
@@ -563,6 +567,85 @@ _noreturn_ void log_test_failed_internal(const char *file, int line, const char
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifdef __COVERITY__
|
||||
# define ASSERT_MEMEQ(p1, p2, n) __coverity_check__(memcmp_safe((p1), (p2), (n)) == 0)
|
||||
#else
|
||||
# define ASSERT_MEMEQ(p1, p2, n) \
|
||||
({ \
|
||||
const void *_p1 = (p1), *_p2 = (p2); \
|
||||
size_t _n = (n); \
|
||||
if (memcmp_safe(_p1, _p2, _n) != 0) { \
|
||||
_cleanup_free_ char *_dump = hexdump_memcmp(_p1, _n, _p2, _n); \
|
||||
log_test_failed("Expected \"%s\" and \"%s\" to have equal contents (%zu bytes):\n%s", \
|
||||
#p1, #p2, _n, strnull(_dump)); \
|
||||
} \
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifdef __COVERITY__
|
||||
# define ASSERT_MEMEQ_NN(p1, l1, p2, l2) __coverity_check__(memcmp_nn((p1), (l1), (p2), (l2)) == 0)
|
||||
#else
|
||||
# define ASSERT_MEMEQ_NN(p1, l1, p2, l2) \
|
||||
({ \
|
||||
const void *_p1 = (p1), *_p2 = (p2); \
|
||||
size_t _l1 = (l1), _l2 = (l2); \
|
||||
if (memcmp_nn(_p1, _l1, _p2, _l2) != 0) { \
|
||||
_cleanup_free_ char *_dump = hexdump_memcmp(_p1, _l1, _p2, _l2); \
|
||||
log_test_failed("Expected \"%s\" (%zu bytes) and \"%s\" (%zu bytes) to have equal contents:\n%s", \
|
||||
#p1, _l1, #p2, _l2, strnull(_dump)); \
|
||||
} \
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifdef __COVERITY__
|
||||
# define ASSERT_IOVEC_EQ(i1, i2) __coverity_check__(iovec_memcmp((i1), (i2)) == 0)
|
||||
#else
|
||||
# define ASSERT_IOVEC_EQ(i1, i2) \
|
||||
({ \
|
||||
const struct iovec *_i1 = (i1), *_i2 = (i2); \
|
||||
if (iovec_memcmp(_i1, _i2) != 0) { \
|
||||
_cleanup_free_ char *_dump = hexdump_memcmp(_i1 ? _i1->iov_base : NULL, \
|
||||
_i1 ? _i1->iov_len : 0, \
|
||||
_i2 ? _i2->iov_base : NULL, \
|
||||
_i2 ? _i2->iov_len : 0); \
|
||||
log_test_failed("Expected iovec \"%s\" (%zu bytes) and \"%s\" (%zu bytes) to have equal contents:\n%s", \
|
||||
#i1, _i1 ? _i1->iov_len : 0, #i2, _i2 ? _i2->iov_len : 0, strnull(_dump)); \
|
||||
} \
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifdef __COVERITY__
|
||||
# define ASSERT_MEMEQ_BYTE(byte, data, length) __coverity_check__(memeqbyte((byte), (data), (length)))
|
||||
#else
|
||||
# define ASSERT_MEMEQ_BYTE(byte, data, length) \
|
||||
({ \
|
||||
uint8_t _byte = (byte); \
|
||||
const void *_data = (data); \
|
||||
size_t _length = (length); \
|
||||
if (!memeqbyte(_byte, _data, _length)) { \
|
||||
_cleanup_free_ char *_dump = hexdump_memcmp_byte(_byte, _data, _length); \
|
||||
log_test_failed("Expected all %zu bytes of \"%s\" to be 0x%02x:\n%s", \
|
||||
_length, #data, _byte, strnull(_dump)); \
|
||||
} \
|
||||
})
|
||||
#endif
|
||||
|
||||
#define ASSERT_MEMEQ_ZERO(data, length) ASSERT_MEMEQ_BYTE(0x00, data, length)
|
||||
|
||||
#ifdef __COVERITY__
|
||||
# define ASSERT_IOVW_EQ(a, b) __coverity_check__(iovw_equal((a), (b)))
|
||||
#else
|
||||
# define ASSERT_IOVW_EQ(a, b) \
|
||||
({ \
|
||||
const struct iovec_wrapper *_a = (a), *_b = (b); \
|
||||
if (!iovw_equal(_a, _b)) { \
|
||||
_cleanup_free_ char *_dump = hexdump_iovw_compare(_a, _b); \
|
||||
log_test_failed("Expected iovec wrappers \"%s\" (%zu elements) and \"%s\" (%zu elements) to be equal:\n%s", \
|
||||
#a, _a ? _a->count : 0, #b, _b ? _b->count : 0, strnull(_dump)); \
|
||||
} \
|
||||
})
|
||||
#endif
|
||||
|
||||
/* DECIMAL_STR_FMT() uses _Generic which cannot be used in string concatenation so we have to format the
|
||||
* input into strings first and then format those into the final assertion message. */
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "strv.h"
|
||||
#include "systemctl.h"
|
||||
#include "systemctl-util.h"
|
||||
#include "tests.h"
|
||||
|
||||
static int verb_noop(int argc, char *argv[], uintptr_t _data, void *userdata) { return 0; }
|
||||
_alias_(verb_noop)
|
||||
@@ -87,7 +88,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
if (orig_stdout_fd < 0)
|
||||
log_warning_errno(errno, "Failed to duplicate fd 1, ignoring: %m");
|
||||
else
|
||||
assert_se(freopen("/dev/null", "w", stdout));
|
||||
ASSERT_NOT_NULL(freopen("/dev/null", "w", stdout));
|
||||
}
|
||||
|
||||
/* We need to reset some global state manually here since libfuzzer feeds a single process with
|
||||
@@ -104,7 +105,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
log_info(r == 0 ? "Done!" : "Action!");
|
||||
|
||||
if (orig_stdout_fd >= 0)
|
||||
assert_se(freopen(FORMAT_PROC_FD_PATH(orig_stdout_fd), "w", stdout));
|
||||
ASSERT_NOT_NULL(freopen(FORMAT_PROC_FD_PATH(orig_stdout_fd), "w", stdout));
|
||||
|
||||
release_busses(); /* We open the bus for communication with logind.
|
||||
* It needs to be closed to avoid apparent leaks. */
|
||||
|
||||
@@ -125,6 +125,7 @@ simple_tests += files(
|
||||
'test-gunicode.c',
|
||||
'test-hash-funcs.c',
|
||||
'test-hexdecoct.c',
|
||||
'test-hexdump.c',
|
||||
'test-hmac.c',
|
||||
'test-hostname-setup.c',
|
||||
'test-hostname-util.c',
|
||||
|
||||
@@ -17,7 +17,7 @@ TEST(alloca) {
|
||||
|
||||
t = alloca0_align(997, 1024);
|
||||
ASSERT_FALSE((uintptr_t)t & 0x1ff);
|
||||
ASSERT_EQ(memcmp(t, zero, 997), 0);
|
||||
ASSERT_MEMEQ(t, zero, 997);
|
||||
}
|
||||
|
||||
TEST(GREEDY_REALLOC) {
|
||||
@@ -63,14 +63,14 @@ TEST(GREEDY_REALLOC) {
|
||||
ASSERT_NOT_NULL(GREEDY_REALLOC_APPEND(before, n_before, c, n_c));
|
||||
ASSERT_NOT_NULL(before);
|
||||
ASSERT_EQ(n_before, n_c);
|
||||
ASSERT_EQ(memcmp_safe(c, before, n_c), 0);
|
||||
ASSERT_MEMEQ(c, before, n_c);
|
||||
|
||||
ASSERT_NOT_NULL(GREEDY_REALLOC_APPEND(c, n_c, from, n_from));
|
||||
ASSERT_EQ(n_c, n_before + n_from);
|
||||
ASSERT_GE(MALLOC_ELEMENTSOF(c), n_c);
|
||||
ASSERT_GE(MALLOC_SIZEOF_SAFE(c), n_c * sizeof(int));
|
||||
ASSERT_EQ(memcmp_safe(c, before, n_before), 0);
|
||||
ASSERT_EQ(memcmp_safe(&c[n_before], from, n_from), 0);
|
||||
ASSERT_MEMEQ(c, before, n_before);
|
||||
ASSERT_MEMEQ(&c[n_before], from, n_from);
|
||||
|
||||
before = mfree(before);
|
||||
ASSERT_NULL(before);
|
||||
@@ -78,14 +78,14 @@ TEST(GREEDY_REALLOC) {
|
||||
ASSERT_NOT_NULL(GREEDY_REALLOC_APPEND(before, n_before, c, n_c));
|
||||
ASSERT_NOT_NULL(before);
|
||||
ASSERT_EQ(n_before, n_c);
|
||||
ASSERT_EQ(memcmp_safe(c, before, n_c), 0);
|
||||
ASSERT_MEMEQ(c, before, n_c);
|
||||
|
||||
ASSERT_NOT_NULL(GREEDY_REALLOC_APPEND(c, n_c, NULL, 0));
|
||||
ASSERT_NOT_NULL(c);
|
||||
ASSERT_EQ(n_c, n_before);
|
||||
ASSERT_GE(MALLOC_ELEMENTSOF(c), n_c);
|
||||
ASSERT_GE(MALLOC_SIZEOF_SAFE(c), n_c * sizeof(int));
|
||||
ASSERT_EQ(memcmp_safe(c, before, n_c), 0);
|
||||
ASSERT_MEMEQ(c, before, n_c);
|
||||
}
|
||||
|
||||
for (j = 0; j < i * n_from; j++)
|
||||
|
||||
@@ -137,8 +137,7 @@ TEST(benchmark) {
|
||||
log_error("%s \"compressed\" %zu -> %zu", label, size, j);
|
||||
|
||||
ASSERT_OK_ZERO(decompress_blob(c, buf, j, &buf2, &k, /* dst_max= */ 0));
|
||||
ASSERT_EQ(k, size);
|
||||
ASSERT_EQ(memcmp(text, buf2, size), 0);
|
||||
ASSERT_MEMEQ_NN(text, size, buf2, k);
|
||||
|
||||
total += size;
|
||||
compressed += j;
|
||||
|
||||
+12
-17
@@ -58,7 +58,7 @@ TEST(compress_decompress_blob) {
|
||||
|
||||
ASSERT_OK_ZERO(decompress_blob(c, compressed, csize, (void **) &decompressed, &csize, /* dst_max= */ 0));
|
||||
ASSERT_NOT_NULL(decompressed);
|
||||
ASSERT_EQ(memcmp(decompressed, input, input_len), 0);
|
||||
ASSERT_MEMEQ(decompressed, input, input_len);
|
||||
|
||||
ASSERT_FAIL(decompress_blob(c, "garbage", 7, (void **) &decompressed, &csize, /* dst_max= */ 0));
|
||||
}
|
||||
@@ -74,7 +74,7 @@ static void verify_memfd(int fd, size_t sz, const void *expected, size_t expecte
|
||||
|
||||
_cleanup_free_ void *buf = ASSERT_NOT_NULL(malloc(expected_size));
|
||||
ASSERT_OK_EQ_ERRNO(pread(fd, buf, expected_size, 0), (ssize_t) expected_size);
|
||||
ASSERT_EQ(memcmp(buf, expected, expected_size), 0);
|
||||
ASSERT_MEMEQ(buf, expected, expected_size);
|
||||
}
|
||||
|
||||
TEST(decompress_blob_to_fd) {
|
||||
@@ -215,8 +215,7 @@ TEST(decompress_blob_zstd_frame_at_buffer_boundary) {
|
||||
_cleanup_free_ void *decompressed = NULL;
|
||||
size_t dsize = 0;
|
||||
ASSERT_OK_ZERO(decompress_blob(COMPRESSION_ZSTD, compressed, st.st_size - 4, &decompressed, &dsize, /* dst_max= */ 0));
|
||||
ASSERT_EQ(dsize, input_size);
|
||||
ASSERT_EQ(memcmp(decompressed, input, input_size), 0);
|
||||
ASSERT_MEMEQ_NN(decompressed, dsize, input, input_size);
|
||||
}
|
||||
|
||||
TEST(decompress_blob_zstd_unknown_size) {
|
||||
@@ -261,15 +260,14 @@ TEST(decompress_blob_zstd_unknown_size) {
|
||||
_cleanup_free_ void *decompressed = NULL;
|
||||
size_t dsize = 0;
|
||||
ASSERT_OK_ZERO(decompress_blob(COMPRESSION_ZSTD, compressed, st.st_size, &decompressed, &dsize, /* dst_max= */ 0));
|
||||
ASSERT_EQ(dsize, input_size);
|
||||
ASSERT_EQ(memcmp(decompressed, input, input_size), 0);
|
||||
ASSERT_MEMEQ_NN(decompressed, dsize, input, input_size);
|
||||
|
||||
/* Decompression capped via dst_max must stop at the requested size. */
|
||||
decompressed = mfree(decompressed);
|
||||
dsize = 0;
|
||||
ASSERT_OK_ZERO(decompress_blob(COMPRESSION_ZSTD, compressed, st.st_size, &decompressed, &dsize, 4096));
|
||||
ASSERT_EQ(dsize, 4096u);
|
||||
ASSERT_EQ(memcmp(decompressed, input, 4096), 0);
|
||||
ASSERT_MEMEQ(decompressed, input, 4096);
|
||||
|
||||
/* decompress_startswith() must still find the prefix without a recorded content size. */
|
||||
_cleanup_free_ void *buf = NULL;
|
||||
@@ -288,8 +286,8 @@ TEST(decompress_blob_zstd_unknown_size) {
|
||||
dsize = 0;
|
||||
ASSERT_OK_ZERO(decompress_blob(COMPRESSION_ZSTD, multiframe, csize * 2, &decompressed, &dsize, /* dst_max= */ 0));
|
||||
ASSERT_EQ(dsize, input_size * 2);
|
||||
ASSERT_EQ(memcmp(decompressed, input, input_size), 0);
|
||||
ASSERT_EQ(memcmp((uint8_t*) decompressed + input_size, input, input_size), 0);
|
||||
ASSERT_MEMEQ(decompressed, input, input_size);
|
||||
ASSERT_MEMEQ((uint8_t*) decompressed + input_size, input, input_size);
|
||||
|
||||
/* Kernel zboot payloads are usually compressed without a content checksum, which is the case that
|
||||
* exercises the buffer-growth/buffered-flush logic without the checksum trailer masking
|
||||
@@ -299,8 +297,7 @@ TEST(decompress_blob_zstd_unknown_size) {
|
||||
decompressed = mfree(decompressed);
|
||||
dsize = 0;
|
||||
ASSERT_OK_ZERO(decompress_blob(COMPRESSION_ZSTD, compressed, csize - 4, &decompressed, &dsize, /* dst_max= */ 0));
|
||||
ASSERT_EQ(dsize, input_size);
|
||||
ASSERT_EQ(memcmp(decompressed, input, input_size), 0);
|
||||
ASSERT_MEMEQ_NN(decompressed, dsize, input, input_size);
|
||||
|
||||
/* A valid but short unknown-size stream whose content is shorter than the requested prefix must
|
||||
* report "too short" (0), not a corruption error. */
|
||||
@@ -544,7 +541,7 @@ static void compare_fd(int fda, int fdb) {
|
||||
|
||||
ASSERT_OK(loop_read_exact(fda, bufa, to_read, /* do_poll= */ false));
|
||||
ASSERT_OK(loop_read_exact(fdb, bufb, to_read, /* do_poll= */ false));
|
||||
ASSERT_EQ(memcmp(bufa, bufb, to_read), 0);
|
||||
ASSERT_MEMEQ(bufa, bufb, to_read);
|
||||
offset += to_read;
|
||||
}
|
||||
}
|
||||
@@ -791,7 +788,7 @@ TEST(compressor_decompressor_push_api) {
|
||||
|
||||
ASSERT_EQ(result.size, sizeof(text) * 4);
|
||||
for (unsigned i = 0; i < 4; i++)
|
||||
ASSERT_EQ(memcmp(result.buf + sizeof(text) * i, text, sizeof(text)), 0);
|
||||
ASSERT_MEMEQ(result.buf + sizeof(text) * i, text, sizeof(text));
|
||||
free(result.buf);
|
||||
|
||||
decompressor = compressor_free(decompressor);
|
||||
@@ -852,8 +849,7 @@ TEST(decompressor_force) {
|
||||
ASSERT_OK(decompressor_push(decompressor, full_compressed, total_compressed, test_decompressor_callback, &result));
|
||||
ASSERT_OK(decompressor_push(decompressor, /* data= */ NULL, /* size= */ 0, test_decompressor_callback, &result));
|
||||
|
||||
ASSERT_EQ(result.size, sizeof(text));
|
||||
ASSERT_EQ(memcmp(result.buf, text, sizeof(text)), 0);
|
||||
ASSERT_MEMEQ_NN(result.buf, result.size, text, sizeof(text));
|
||||
free(result.buf);
|
||||
}
|
||||
}
|
||||
@@ -898,8 +894,7 @@ TEST(decompressor_push_output_buffer_boundary) {
|
||||
ASSERT_OK(decompressor_push(decompressor, full + split, full_size - split, test_decompressor_callback, &result));
|
||||
ASSERT_OK(decompressor_push(decompressor, /* data= */ NULL, /* size= */ 0, test_decompressor_callback, &result));
|
||||
|
||||
ASSERT_EQ(result.size, src_size);
|
||||
ASSERT_EQ(memcmp(result.buf, src, src_size), 0);
|
||||
ASSERT_MEMEQ_NN(result.buf, result.size, src, src_size);
|
||||
free(result.buf);
|
||||
}
|
||||
}
|
||||
|
||||
+15
-16
@@ -20,7 +20,6 @@
|
||||
#include "io-util.h"
|
||||
#include "log.h"
|
||||
#include "memfd-util.h"
|
||||
#include "memory-util.h"
|
||||
#include "mkdir.h"
|
||||
#include "path-util.h"
|
||||
#include "rm-rf.h"
|
||||
@@ -429,7 +428,7 @@ TEST_RET(copy_bytes) {
|
||||
ASSERT_OK_ZERO_ERRNO(lseek(infd, 0, SEEK_SET));
|
||||
ASSERT_OK_EQ_ERRNO(read(infd, buf2, sizeof(buf2)), n);
|
||||
|
||||
ASSERT_EQ(memcmp(buf, buf2, n), 0);
|
||||
ASSERT_MEMEQ(buf, buf2, n);
|
||||
|
||||
/* test copy_bytes with invalid descriptors */
|
||||
ASSERT_ERROR(copy_bytes(pipefd[0], pipefd[0], 1, /* copy_flags= */ 0), EBADF);
|
||||
@@ -520,7 +519,7 @@ TEST(copy_bytes_offset) {
|
||||
ASSERT_EQ(foffset, 8U);
|
||||
ASSERT_EQ(toffset, 10U);
|
||||
ASSERT_OK_EQ_ERRNO(pread(dst, buf, sizeof(buf), 0), (ssize_t) sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, "XXXX234567XXXXXX", sizeof(buf)), 0);
|
||||
ASSERT_MEMEQ(buf, "XXXX234567XXXXXX", sizeof(buf));
|
||||
ASSERT_OK_EQ_ERRNO(lseek(src, 0, SEEK_CUR), (off_t) 1);
|
||||
ASSERT_OK_EQ_ERRNO(lseek(dst, 0, SEEK_CUR), (off_t) 2);
|
||||
|
||||
@@ -536,7 +535,7 @@ TEST(copy_bytes_offset) {
|
||||
toffset = 3;
|
||||
ASSERT_OK_EQ(copy_bytes_offset(src, &foffset, dst, &toffset, /* max_bytes= */ 2, COPY_TRUNCATE), 1);
|
||||
ASSERT_OK_EQ_ERRNO(pread(dst, buf, sizeof(buf), 0), (ssize_t) 5);
|
||||
ASSERT_EQ(memcmp(buf, "XXX01", 5), 0);
|
||||
ASSERT_MEMEQ(buf, "XXX01", 5);
|
||||
ASSERT_OK_EQ_ERRNO(lseek(dst, 0, SEEK_CUR), (off_t) 2);
|
||||
|
||||
/* copy_file_range() refuses pipes. Copying into a pipe tests sendfile() with a source offset. */
|
||||
@@ -551,7 +550,7 @@ TEST(copy_bytes_offset) {
|
||||
/* copy_flags= */ 0));
|
||||
ASSERT_EQ(foffset, 16U);
|
||||
ASSERT_OK_EQ_ERRNO(read(pipe_fds[0], buf, sizeof(buf)), (ssize_t) 6);
|
||||
ASSERT_EQ(memcmp(buf, "abcdef", 6), 0);
|
||||
ASSERT_MEMEQ(buf, "abcdef", 6);
|
||||
ASSERT_OK_EQ_ERRNO(lseek(src, 0, SEEK_CUR), (off_t) 1);
|
||||
|
||||
/* Copying from a pipe tests the fallback to read() and pwrite(). */
|
||||
@@ -567,7 +566,7 @@ TEST(copy_bytes_offset) {
|
||||
/* copy_flags= */ 0));
|
||||
ASSERT_EQ(toffset, 6U);
|
||||
ASSERT_OK_EQ_ERRNO(pread(dst, buf, sizeof(buf), 0), (ssize_t) 6);
|
||||
ASSERT_EQ(memcmp(buf, "Xhello", 6), 0);
|
||||
ASSERT_MEMEQ(buf, "Xhello", 6);
|
||||
ASSERT_OK_EQ_ERRNO(lseek(dst, 0, SEEK_CUR), (off_t) 2);
|
||||
}
|
||||
|
||||
@@ -610,9 +609,9 @@ TEST(copy_bytes_offset_reflink) {
|
||||
ASSERT_EQ(toffset, 2 * bs);
|
||||
|
||||
ASSERT_OK_EQ_ERRNO(pread(dst, buf, 3 * bs, 0), (ssize_t) (3 * bs));
|
||||
ASSERT_TRUE(memeqbyte('b', buf, bs));
|
||||
ASSERT_TRUE(memeqbyte('c', buf + bs, bs));
|
||||
ASSERT_TRUE(memeqbyte('b', buf + 2 * bs, bs));
|
||||
ASSERT_MEMEQ_BYTE('b', buf, bs);
|
||||
ASSERT_MEMEQ_BYTE('c', buf + bs, bs);
|
||||
ASSERT_MEMEQ_BYTE('b', buf + 2 * bs, bs);
|
||||
ASSERT_OK_EQ_ERRNO(lseek(src, 0, SEEK_CUR), (off_t) 5);
|
||||
ASSERT_OK_EQ_ERRNO(lseek(dst, 0, SEEK_CUR), (off_t) 7);
|
||||
}
|
||||
@@ -652,11 +651,11 @@ TEST_RET(copy_bytes_offset_holes) {
|
||||
ASSERT_EQ(toffset, 4 * bs + 1);
|
||||
|
||||
ASSERT_OK_EQ_ERRNO(pread(dst, buf, 5 * bs, 0), (ssize_t) (5 * bs));
|
||||
ASSERT_TRUE(memeqbyte('X', buf, bs + 1));
|
||||
ASSERT_TRUE(memeqzero(buf + bs + 1, bs));
|
||||
ASSERT_TRUE(memeqbyte('D', buf + 2 * bs + 1, bs));
|
||||
ASSERT_TRUE(memeqzero(buf + 3 * bs + 1, bs));
|
||||
ASSERT_TRUE(memeqbyte('X', buf + 4 * bs + 1, bs - 1));
|
||||
ASSERT_MEMEQ_BYTE('X', buf, bs + 1);
|
||||
ASSERT_MEMEQ_ZERO(buf + bs + 1, bs);
|
||||
ASSERT_MEMEQ_BYTE('D', buf + 2 * bs + 1, bs);
|
||||
ASSERT_MEMEQ_ZERO(buf + 3 * bs + 1, bs);
|
||||
ASSERT_MEMEQ_BYTE('X', buf + 4 * bs + 1, bs - 1);
|
||||
ASSERT_OK_EQ_ERRNO(lseek(src, 0, SEEK_CUR), (off_t) 5);
|
||||
ASSERT_OK_EQ_ERRNO(lseek(dst, 0, SEEK_CUR), (off_t) 7);
|
||||
|
||||
@@ -685,7 +684,7 @@ TEST_RET(copy_bytes_offset_overflow) {
|
||||
ASSERT_EQ(foffset, 8U);
|
||||
ASSERT_EQ(toffset, (uint64_t) INT64_MAX);
|
||||
ASSERT_OK_EQ_ERRNO(pread(dst, buf, sizeof(buf), INT64_MAX - 8), (ssize_t) sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, "01234567", sizeof(buf)), 0);
|
||||
ASSERT_MEMEQ(buf, "01234567", sizeof(buf));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -955,7 +954,7 @@ static void assert_fsverity_eq(int dirfd_a, int dirfd_b, const char *name) {
|
||||
if (enabled_a) {
|
||||
ASSERT_EQ(digest_a->digest_algorithm, digest_b->digest_algorithm);
|
||||
ASSERT_EQ(digest_a->digest_size, digest_b->digest_size);
|
||||
ASSERT_EQ(memcmp(digest_a->digest, digest_b->digest, digest_a->digest_size), 0);
|
||||
ASSERT_MEMEQ(digest_a->digest, digest_b->digest, digest_a->digest_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -239,11 +239,11 @@ TEST(cpu_set_to_from_dbus) {
|
||||
|
||||
ASSERT_LE(allocated, sizeof expected);
|
||||
ASSERT_GE(allocated, DIV_ROUND_UP(201u, 8u)); /* We need at least 201 bits for our mask */
|
||||
ASSERT_EQ(memcmp(array, expected, allocated), 0);
|
||||
ASSERT_MEMEQ(array, expected, allocated);
|
||||
|
||||
ASSERT_OK(cpu_set_from_dbus(array, allocated, &c2));
|
||||
ASSERT_CPUSET_COUNT(c2, 104);
|
||||
ASSERT_EQ(memcmp_nn(c.set, c.allocated, c2.set, c2.allocated), 0);
|
||||
ASSERT_MEMEQ_NN(c.set, c.allocated, c2.set, c2.allocated);
|
||||
}
|
||||
|
||||
TEST(cpus_in_affinity_mask) {
|
||||
|
||||
@@ -152,7 +152,7 @@ TEST(read_credential_with_decryption) {
|
||||
_cleanup_(iovec_done_erase) struct iovec result = {};
|
||||
|
||||
ASSERT_OK_EQ(read_credential_with_decryption("foo", &result.iov_base, &result.iov_len), 1);
|
||||
ASSERT_TRUE(iovec_equal(&binary, &result));
|
||||
ASSERT_IOVEC_EQ(&binary, &result);
|
||||
}
|
||||
{
|
||||
_cleanup_(erase_and_freep) char *text = NULL;
|
||||
@@ -244,7 +244,7 @@ TEST(read_credential_with_decryption_encrypted) {
|
||||
WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_TRUNCATE));
|
||||
ASSERT_OK_EQ(read_credential_with_decryption("foo", &result.iov_base,
|
||||
&result.iov_len), 1);
|
||||
ASSERT_TRUE(iovec_equal(&input->data, &result));
|
||||
ASSERT_IOVEC_EQ(&input->data, &result);
|
||||
|
||||
r = read_credential_with_decryption("foo", (void**) &text, /* ret_size= */ NULL);
|
||||
if (input->contains_nul) {
|
||||
@@ -384,7 +384,7 @@ static void test_encrypt_decrypt_with(sd_id128_t mode, uid_t uid) {
|
||||
&decrypted);
|
||||
ASSERT_OK(r);
|
||||
|
||||
ASSERT_TRUE(iovec_equal(&plaintext, &decrypted));
|
||||
ASSERT_IOVEC_EQ(&plaintext, &decrypted);
|
||||
}
|
||||
|
||||
static bool try_tpm2(void) {
|
||||
|
||||
+28
-28
@@ -20,10 +20,10 @@ TEST(openssl_pkey_from_pem) {
|
||||
ASSERT_EQ(curve_id, NID_X9_62_prime256v1);
|
||||
|
||||
DEFINE_HEX_PTR(expected_x, "ae39c4b812ec225f6b869870caf5cd3e18f88c19cf0d79f22742bd532acd81de");
|
||||
ASSERT_EQ(memcmp_nn(x, x_len, expected_x, expected_x_len), 0);
|
||||
ASSERT_MEMEQ_NN(x, x_len, expected_x, expected_x_len);
|
||||
|
||||
DEFINE_HEX_PTR(expected_y, "92e40e764fea12bed9028fa66b9788571b7c004145e9a01952fad1eab51a8be5");
|
||||
ASSERT_EQ(memcmp_nn(y, y_len, expected_y, expected_y_len), 0);
|
||||
ASSERT_MEMEQ_NN(y, y_len, expected_y, expected_y_len);
|
||||
|
||||
DEFINE_HEX_PTR(key_rsa, "2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d494942496a414e42676b71686b6947397730424151454641414f43415138414d49494243674b4341514541795639434950652f505852337a436f63787045300a6a575262546c3568585844436b472f584b79374b6d2f4439584942334b734f5a31436a5937375571372f674359363170697838697552756a73413464503165380a593445336c68556d374a332b6473766b626f4b64553243626d52494c2f6675627771694c4d587a41673342575278747234547545443533527a373634554650640a307a70304b68775231496230444c67772f344e67566f314146763378784b4d6478774d45683567676b73733038326332706c354a504e32587677426f744e6b4d0a5471526c745a4a35355244436170696e7153334577376675646c4e735851357746766c7432377a7637344b585165616d704c59433037584f6761304c676c536b0a79754774586b6a50542f735542544a705374615769674d5a6f714b7479563463515a58436b4a52684459614c47587673504233687a766d5671636e6b47654e540a65774944415141420a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a");
|
||||
_cleanup_(EVP_PKEY_freep) EVP_PKEY *pkey_rsa = NULL;
|
||||
@@ -34,10 +34,10 @@ TEST(openssl_pkey_from_pem) {
|
||||
ASSERT_OK(rsa_pkey_to_n_e(pkey_rsa, &n, &n_len, &e, &e_len));
|
||||
|
||||
DEFINE_HEX_PTR(expected_n, "c95f4220f7bf3d7477cc2a1cc691348d645b4e5e615d70c2906fd72b2eca9bf0fd5c80772ac399d428d8efb52aeff80263ad698b1f22b91ba3b00e1d3f57bc638137961526ec9dfe76cbe46e829d53609b99120bfdfb9bc2a88b317cc0837056471b6be13b840f9dd1cfbeb85053ddd33a742a1c11d486f40cb830ff8360568d4016fdf1c4a31dc7030487982092cb34f36736a65e493cdd97bf0068b4d90c4ea465b59279e510c26a98a7a92dc4c3b7ee76536c5d0e7016f96ddbbcefef829741e6a6a4b602d3b5ce81ad0b8254a4cae1ad5e48cf4ffb140532694ad6968a0319a2a2adc95e1c4195c29094610d868b197bec3c1de1cef995a9c9e419e3537b");
|
||||
ASSERT_EQ(memcmp_nn(n, n_len, expected_n, expected_n_len), 0);
|
||||
ASSERT_MEMEQ_NN(n, n_len, expected_n, expected_n_len);
|
||||
|
||||
DEFINE_HEX_PTR(expected_e, "010001");
|
||||
ASSERT_EQ(memcmp_nn(e, e_len, expected_e, expected_e_len), 0);
|
||||
ASSERT_MEMEQ_NN(e, e_len, expected_e, expected_e_len);
|
||||
}
|
||||
|
||||
TEST(rsa_pkey_n_e) {
|
||||
@@ -61,9 +61,9 @@ TEST(rsa_pkey_n_e) {
|
||||
_cleanup_free_ void *n2 = NULL, *e2 = NULL;
|
||||
size_t n2_size, e2_size;
|
||||
ASSERT_OK(rsa_pkey_to_n_e(pkey, &n2, &n2_size, &e2, &e2_size));
|
||||
ASSERT_EQ(memcmp_nn(n, n_len, n2, n2_size), 0);
|
||||
ASSERT_MEMEQ_NN(n, n_len, n2, n2_size);
|
||||
ASSERT_LE(e2_size, sizeof(uint32_t));
|
||||
ASSERT_EQ(memcmp(&((uint8_t*) &e)[sizeof(uint32_t) - e2_size], e2, e2_size), 0);
|
||||
ASSERT_MEMEQ(&((uint8_t*) &e)[sizeof(uint32_t) - e2_size], e2, e2_size);
|
||||
}
|
||||
|
||||
TEST(ecc_pkey_curve_x_y) {
|
||||
@@ -90,8 +90,8 @@ TEST(ecc_pkey_curve_x_y) {
|
||||
int curveid2;
|
||||
ASSERT_OK(ecc_pkey_to_curve_x_y(pkey, &curveid2, &x2, &x2_size, &y2, &y2_size));
|
||||
ASSERT_EQ(curveid, curveid2);
|
||||
ASSERT_EQ(memcmp_nn(x, x_len, x2, x2_size), 0);
|
||||
ASSERT_EQ(memcmp_nn(y, y_len, y2, y2_size), 0);
|
||||
ASSERT_MEMEQ_NN(x, x_len, x2, x2_size);
|
||||
ASSERT_MEMEQ_NN(y, y_len, y2, y2_size);
|
||||
}
|
||||
|
||||
TEST(ecc_pkey_curve_x_y_leading_zero) {
|
||||
@@ -109,10 +109,10 @@ TEST(ecc_pkey_curve_x_y_leading_zero) {
|
||||
ASSERT_EQ(curve_id, NID_secp384r1);
|
||||
|
||||
DEFINE_HEX_PTR(expected_x, "0066d96e6276481d41247c9cd7180ecc976781782055b4e966f40fa50913546cbcb1bc2fc2c1eb7191ead3366fc7fd65");
|
||||
ASSERT_EQ(memcmp_nn(x, x_size, expected_x, expected_x_len), 0);
|
||||
ASSERT_MEMEQ_NN(x, x_size, expected_x, expected_x_len);
|
||||
|
||||
DEFINE_HEX_PTR(expected_y, "0bac7365d6951c2d46d3ce7195c949c290995a152a5a17ecfe3a77cc29a70e322e2723d6e42407208d1ef96646a5b708");
|
||||
ASSERT_EQ(memcmp_nn(y, y_size, expected_y, expected_y_len), 0);
|
||||
ASSERT_MEMEQ_NN(y, y_size, expected_y, expected_y_len);
|
||||
}
|
||||
|
||||
TEST(ecc_pkey_curve_x_y_p521) {
|
||||
@@ -130,10 +130,10 @@ TEST(ecc_pkey_curve_x_y_p521) {
|
||||
ASSERT_EQ(curve_id, NID_secp521r1);
|
||||
|
||||
DEFINE_HEX_PTR(expected_x, "00a11cc63c5568cb90b318a97c498bb11f859de92b862df800e5b33e46b5c62f5c81b17283e38ea82f4beed1f36aab39dfcc49bd63d4c6709f4bf16ab127bb7655e4");
|
||||
ASSERT_EQ(memcmp_nn(x, x_size, expected_x, expected_x_len), 0);
|
||||
ASSERT_MEMEQ_NN(x, x_size, expected_x, expected_x_len);
|
||||
|
||||
DEFINE_HEX_PTR(expected_y, "015059c5923fc8d80edccc709b664932592c9f5699fd7e4a401011b57f92d214cac37f279f212d84b39d39dc9e9d0020dbc9d5d40985f9f4740e2c3d03c8ef10b0ca");
|
||||
ASSERT_EQ(memcmp_nn(y, y_size, expected_y, expected_y_len), 0);
|
||||
ASSERT_MEMEQ_NN(y, y_size, expected_y, expected_y_len);
|
||||
}
|
||||
|
||||
TEST(invalid) {
|
||||
@@ -209,7 +209,7 @@ static void verify_digest(const char *digest_alg, const struct iovec *data, size
|
||||
ASSERT_OK(r);
|
||||
|
||||
DEFINE_HEX_PTR(e, expect);
|
||||
ASSERT_EQ(memcmp_nn(e, e_len, digest, digest_size), 0);
|
||||
ASSERT_MEMEQ_NN(e, e_len, digest, digest_size);
|
||||
}
|
||||
|
||||
#define _DEFINE_DIGEST_TEST(uniq, alg, expect, ...) \
|
||||
@@ -272,16 +272,16 @@ static void verify_hmac(
|
||||
|
||||
if (n_data == 0) {
|
||||
ASSERT_OK_ZERO(openssl_hmac(digest_alg, k, k_len, /* buf= */ NULL, /* len= */ 0, &digest, &digest_size));
|
||||
ASSERT_EQ(memcmp_nn(e, e_len, digest, digest_size), 0);
|
||||
ASSERT_MEMEQ_NN(e, e_len, digest, digest_size);
|
||||
digest = mfree(digest);
|
||||
} else if(n_data == 1) {
|
||||
ASSERT_OK_ZERO(openssl_hmac(digest_alg, k, k_len, data[0].iov_base, data[0].iov_len, &digest, &digest_size));
|
||||
ASSERT_EQ(memcmp_nn(e, e_len, digest, digest_size), 0);
|
||||
ASSERT_MEMEQ_NN(e, e_len, digest, digest_size);
|
||||
digest = mfree(digest);
|
||||
}
|
||||
|
||||
ASSERT_OK_ZERO(openssl_hmac_many(digest_alg, k, k_len, data, n_data, &digest, &digest_size));
|
||||
ASSERT_EQ(memcmp_nn(e, e_len, digest, digest_size), 0);
|
||||
ASSERT_MEMEQ_NN(e, e_len, digest, digest_size);
|
||||
}
|
||||
|
||||
#define _DEFINE_HMAC_TEST(uniq, alg, key, expect, ...) \
|
||||
@@ -354,7 +354,7 @@ TEST(kdf_kb_hmac_derive) {
|
||||
DEFINE_HEX_PTR(expected_derived_key, "A9DA9CEEB9578DBE7DD2862F82898B086E85FF2D10C4E8EC5BD99D0D7F003A2DE1574EB4BD789C03EF5235259BCB3A009DA303EA4DB4CA6BF507DB7C5A063279");
|
||||
|
||||
ASSERT_OK(kdf_kb_hmac_derive("COUNTER", "SHA256", key, key_len, salt, strlen(salt), info, info_len, /* seed= */ NULL, /* seed_size= */ 0, 64, &derived_key));
|
||||
ASSERT_EQ(memcmp_nn(derived_key, 64, expected_derived_key, expected_derived_key_len), 0);
|
||||
ASSERT_MEMEQ_NN(derived_key, 64, expected_derived_key, expected_derived_key_len);
|
||||
}
|
||||
|
||||
static void check_ss_derive(const char *hex_key, const char *hex_salt, const char *hex_info, const char *hex_expected) {
|
||||
@@ -365,7 +365,7 @@ static void check_ss_derive(const char *hex_key, const char *hex_salt, const cha
|
||||
|
||||
_cleanup_free_ void *derived_key = NULL;
|
||||
ASSERT_OK(kdf_ss_derive("SHA256", key, key_len, salt, salt_len, info, info_len, expected_len, &derived_key));
|
||||
ASSERT_EQ(memcmp_nn(derived_key, expected_len, expected, expected_len), 0);
|
||||
ASSERT_MEMEQ_NN(derived_key, expected_len, expected, expected_len);
|
||||
}
|
||||
|
||||
TEST(kdf_ss_derive) {
|
||||
@@ -408,7 +408,7 @@ static void check_hkdf_derive(
|
||||
&IOVEC_MAKE(info, info_len),
|
||||
expected_len,
|
||||
&derived));
|
||||
ASSERT_EQ(memcmp_nn(derived.iov_base, derived.iov_len, expected, expected_len), 0);
|
||||
ASSERT_MEMEQ_NN(derived.iov_base, derived.iov_len, expected, expected_len);
|
||||
}
|
||||
|
||||
TEST(kdf_hkdf_derive) {
|
||||
@@ -484,7 +484,7 @@ TEST(kdf_hkdf_derive) {
|
||||
/* salt= */ NULL,
|
||||
&IOVEC_MAKE((void*) info, sizeof(info)),
|
||||
expected_len, &derived));
|
||||
ASSERT_EQ(memcmp_nn(derived.iov_base, derived.iov_len, expected, expected_len), 0);
|
||||
ASSERT_MEMEQ_NN(derived.iov_base, derived.iov_len, expected, expected_len);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -507,16 +507,16 @@ static void check_cipher(
|
||||
|
||||
if (n_data == 0) {
|
||||
ASSERT_OK(openssl_cipher(alg, bits, mode, key, key_len, iv, iv_len, /* buf= */ NULL, /* len= */ 0, &enc_buf, &enc_buf_len));
|
||||
ASSERT_EQ(memcmp_nn(enc_buf, enc_buf_len, expected, expected_len), 0);
|
||||
ASSERT_MEMEQ_NN(enc_buf, enc_buf_len, expected, expected_len);
|
||||
enc_buf = mfree(enc_buf);
|
||||
} else if (n_data == 1) {
|
||||
ASSERT_OK(openssl_cipher(alg, bits, mode, key, key_len, iv, iv_len, data[0].iov_base, data[0].iov_len, &enc_buf, &enc_buf_len));
|
||||
ASSERT_EQ(memcmp_nn(enc_buf, enc_buf_len, expected, expected_len), 0);
|
||||
ASSERT_MEMEQ_NN(enc_buf, enc_buf_len, expected, expected_len);
|
||||
enc_buf = mfree(enc_buf);
|
||||
}
|
||||
|
||||
ASSERT_OK(openssl_cipher_many(alg, bits, mode, key, key_len, iv, iv_len, data, n_data, &enc_buf, &enc_buf_len));
|
||||
ASSERT_EQ(memcmp_nn(enc_buf, enc_buf_len, expected, expected_len), 0);
|
||||
ASSERT_MEMEQ_NN(enc_buf, enc_buf_len, expected, expected_len);
|
||||
}
|
||||
|
||||
TEST(openssl_cipher) {
|
||||
@@ -614,8 +614,8 @@ TEST(ecc_ecdh) {
|
||||
ASSERT_OK(ecc_ecdh(pkeyA, pkeyC, &secretAC, &secretAC_size));
|
||||
ASSERT_OK(ecc_ecdh(pkeyC, pkeyA, &secretCA, &secretCA_size));
|
||||
|
||||
ASSERT_EQ(memcmp_nn(secretAB, secretAB_size, secretBA, secretBA_size), 0);
|
||||
ASSERT_EQ(memcmp_nn(secretAC, secretAC_size, secretCA, secretCA_size), 0);
|
||||
ASSERT_MEMEQ_NN(secretAB, secretAB_size, secretBA, secretBA_size);
|
||||
ASSERT_MEMEQ_NN(secretAC, secretAC_size, secretCA, secretCA_size);
|
||||
ASSERT_NE(memcmp_nn(secretAC, secretAC_size, secretAB, secretAB_size), 0);
|
||||
}
|
||||
|
||||
@@ -680,7 +680,7 @@ TEST(openssl_load_x509_certificate_from_pem) {
|
||||
ASSERT_OK(openssl_load_x509_certificate_from_pem(&IOVEC_MAKE_STRING(prefixed), &skipped, &more));
|
||||
ASSERT_FALSE(more);
|
||||
ASSERT_OK(x509_fingerprint(skipped, fp2));
|
||||
ASSERT_EQ(memcmp(fp, fp2, sizeof(fp)), 0);
|
||||
ASSERT_MEMEQ(fp, fp2, sizeof(fp));
|
||||
|
||||
/* The first certificate wins, the second is reported, and ret_more is optional */
|
||||
_cleanup_free_ char *two = strjoin(pem, pem2);
|
||||
@@ -688,11 +688,11 @@ TEST(openssl_load_x509_certificate_from_pem) {
|
||||
ASSERT_OK(openssl_load_x509_certificate_from_pem(&IOVEC_MAKE_STRING(two), &first, &more));
|
||||
ASSERT_TRUE(more);
|
||||
ASSERT_OK(x509_fingerprint(first, fp2));
|
||||
ASSERT_EQ(memcmp(fp, fp2, sizeof(fp)), 0);
|
||||
ASSERT_MEMEQ(fp, fp2, sizeof(fp));
|
||||
ASSERT_OK(openssl_load_x509_certificate_from_pem(&IOVEC_MAKE_STRING(two), &first_again,
|
||||
/* ret_more= */ NULL));
|
||||
ASSERT_OK(x509_fingerprint(first_again, fp2));
|
||||
ASSERT_EQ(memcmp(fp, fp2, sizeof(fp)), 0);
|
||||
ASSERT_MEMEQ(fp, fp2, sizeof(fp));
|
||||
|
||||
static const char garbage[] = "-----BEGIN CERTIFICATE-----\nAAAA\n-----END CERTIFICATE-----\n";
|
||||
ASSERT_FAIL(openssl_load_x509_certificate_from_pem(&IOVEC_MAKE_STRING(garbage), &bad, &more));
|
||||
|
||||
@@ -33,7 +33,7 @@ static void assert_equal_fd(int fd1, int fd2) {
|
||||
if (x == 0)
|
||||
break;
|
||||
|
||||
ASSERT_EQ(memcmp(a, b, x), 0);
|
||||
ASSERT_MEMEQ(a, b, x);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ static void test_copy_data_fd_full_one(size_t size) {
|
||||
copy_fd = ASSERT_OK(copy_data_fd_full(fd, *max_size));
|
||||
|
||||
ASSERT_EQ(loop_read(copy_fd, buf, size + 1, /* do_poll= */ false), (ssize_t) size);
|
||||
ASSERT_EQ(memcmp(buf, data, size), 0);
|
||||
ASSERT_MEMEQ(buf, data, size);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@ static void assert_fd_contents(int fd, const char *contents) {
|
||||
ASSERT_TRUE(S_ISREG(st.st_mode));
|
||||
ASSERT_EQ((size_t) st.st_size, strlen(contents));
|
||||
ASSERT_EQ(pread(fd, buf, sizeof(buf), 0), (ssize_t) strlen(contents));
|
||||
ASSERT_EQ(memcmp(buf, contents, strlen(contents)), 0);
|
||||
ASSERT_MEMEQ(buf, contents, strlen(contents));
|
||||
}
|
||||
|
||||
TEST(open_seekable_data_fd) {
|
||||
|
||||
@@ -68,7 +68,7 @@ static void test_dns_name_to_wire_format_one(const char *what, const char *expec
|
||||
|
||||
if (r >= 0) {
|
||||
assert(expect); /* for gcc */
|
||||
ASSERT_EQ(memcmp(buffer, expect, r), 0);
|
||||
ASSERT_MEMEQ(buffer, expect, r);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,7 +134,7 @@ static void test_dns_name_from_wire_format_one(const char *expect, const uint8_t
|
||||
|
||||
if (r >= 0) {
|
||||
assert(expect); /* for gcc */
|
||||
ASSERT_EQ(memcmp(name, expect, r), 0);
|
||||
ASSERT_MEMEQ(name, expect, r);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -183,7 +183,7 @@ TEST(ellipsize_esc_infinite_loop) {
|
||||
_cleanup_free_ char *t = NULL;
|
||||
|
||||
t = ASSERT_NOT_NULL(ellipsize_mem(s, 5, 5, 50));
|
||||
ASSERT_EQ(memcmp(t, s, 5), 0);
|
||||
ASSERT_MEMEQ(t, s, 5);
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_INFO);
|
||||
@@ -139,19 +139,19 @@ TEST(cunescape) {
|
||||
unescaped = mfree(unescaped);
|
||||
|
||||
ASSERT_OK_EQ(cunescape("\\x00\\x00\\x00", UNESCAPE_ACCEPT_NUL, &unescaped), 3);
|
||||
ASSERT_EQ(memcmp(unescaped, "\0\0\0", 3), 0);
|
||||
ASSERT_MEMEQ(unescaped, "\0\0\0", 3);
|
||||
unescaped = mfree(unescaped);
|
||||
|
||||
ASSERT_OK_EQ(cunescape("\\u0000\\u0000\\u0000", UNESCAPE_ACCEPT_NUL, &unescaped), 3);
|
||||
ASSERT_EQ(memcmp(unescaped, "\0\0\0", 3), 0);
|
||||
ASSERT_MEMEQ(unescaped, "\0\0\0", 3);
|
||||
unescaped = mfree(unescaped);
|
||||
|
||||
ASSERT_OK_EQ(cunescape("\\U00000000\\U00000000\\U00000000", UNESCAPE_ACCEPT_NUL, &unescaped), 3);
|
||||
ASSERT_EQ(memcmp(unescaped, "\0\0\0", 3), 0);
|
||||
ASSERT_MEMEQ(unescaped, "\0\0\0", 3);
|
||||
unescaped = mfree(unescaped);
|
||||
|
||||
ASSERT_OK_EQ(cunescape("\\000\\000\\000", UNESCAPE_ACCEPT_NUL, &unescaped), 3);
|
||||
ASSERT_EQ(memcmp(unescaped, "\0\0\0", 3), 0);
|
||||
ASSERT_MEMEQ(unescaped, "\0\0\0", 3);
|
||||
}
|
||||
|
||||
static void test_shell_escape_one(const char *s, const char *bad, const char *expected) {
|
||||
|
||||
@@ -255,7 +255,7 @@ TEST(rearrange_stdio) {
|
||||
ASSERT_OK_EQ_ERRNO(read(pipe_read_fd, buffer, sizeof(buffer)), 1);
|
||||
ASSERT_EQ(buffer[0], 'z');
|
||||
ASSERT_OK_EQ_ERRNO(read(0, buffer, sizeof(buffer)), 6);
|
||||
ASSERT_EQ(memcmp(buffer, "foobar", 6), 0);
|
||||
ASSERT_MEMEQ(buffer, "foobar", 6);
|
||||
|
||||
ASSERT_OK(fd_cloexec(1, /* cloexec= */ true)); /* stays in place, but the flag must still be cleared */
|
||||
ASSERT_OK(rearrange_stdio(-EBADF, 1, 2));
|
||||
|
||||
+14
-21
@@ -561,47 +561,41 @@ TEST(read_full_file_full) {
|
||||
ASSERT_OK(fflush_and_check(f));
|
||||
|
||||
ASSERT_OK(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, SIZE_MAX, /* flags= */ 0, /* bind_name= */ NULL, &rbuf, &rbuf_size));
|
||||
ASSERT_EQ(rbuf_size, sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, rbuf, rbuf_size), 0);
|
||||
ASSERT_MEMEQ_NN(buf, sizeof(buf), rbuf, rbuf_size);
|
||||
rbuf = mfree(rbuf);
|
||||
|
||||
ASSERT_OK(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, 128, /* flags= */ 0, /* bind_name= */ NULL, &rbuf, &rbuf_size));
|
||||
ASSERT_EQ(rbuf_size, 128U);
|
||||
ASSERT_EQ(memcmp(buf, rbuf, rbuf_size), 0);
|
||||
ASSERT_MEMEQ(buf, rbuf, rbuf_size);
|
||||
rbuf = mfree(rbuf);
|
||||
|
||||
ASSERT_ERROR(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, 128, READ_FULL_FILE_FAIL_WHEN_LARGER, /* bind_name= */ NULL, &rbuf, &rbuf_size), E2BIG);
|
||||
ASSERT_ERROR(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, sizeof(buf)-1, READ_FULL_FILE_FAIL_WHEN_LARGER, /* bind_name= */ NULL, &rbuf, &rbuf_size), E2BIG);
|
||||
ASSERT_OK(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, sizeof(buf), READ_FULL_FILE_FAIL_WHEN_LARGER, /* bind_name= */ NULL, &rbuf, &rbuf_size));
|
||||
ASSERT_EQ(rbuf_size, sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, rbuf, rbuf_size), 0);
|
||||
ASSERT_MEMEQ_NN(buf, sizeof(buf), rbuf, rbuf_size);
|
||||
rbuf = mfree(rbuf);
|
||||
|
||||
ASSERT_ERROR(read_full_file_full(AT_FDCWD, fn, 47, 128, READ_FULL_FILE_FAIL_WHEN_LARGER, /* bind_name= */ NULL, &rbuf, &rbuf_size), E2BIG);
|
||||
ASSERT_ERROR(read_full_file_full(AT_FDCWD, fn, 47, sizeof(buf)-47-1, READ_FULL_FILE_FAIL_WHEN_LARGER, /* bind_name= */ NULL, &rbuf, &rbuf_size), E2BIG);
|
||||
ASSERT_OK(read_full_file_full(AT_FDCWD, fn, 47, sizeof(buf)-47, READ_FULL_FILE_FAIL_WHEN_LARGER, /* bind_name= */ NULL, &rbuf, &rbuf_size));
|
||||
ASSERT_EQ(rbuf_size, sizeof(buf)-47);
|
||||
ASSERT_EQ(memcmp(buf+47, rbuf, rbuf_size), 0);
|
||||
ASSERT_MEMEQ_NN(buf+47, sizeof(buf)-47, rbuf, rbuf_size);
|
||||
rbuf = mfree(rbuf);
|
||||
|
||||
ASSERT_OK(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, sizeof(buf)+1, READ_FULL_FILE_FAIL_WHEN_LARGER, /* bind_name= */ NULL, &rbuf, &rbuf_size));
|
||||
ASSERT_EQ(rbuf_size, sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, rbuf, rbuf_size), 0);
|
||||
ASSERT_MEMEQ_NN(buf, sizeof(buf), rbuf, rbuf_size);
|
||||
rbuf = mfree(rbuf);
|
||||
|
||||
ASSERT_OK(read_full_file_full(AT_FDCWD, fn, 1234, SIZE_MAX, /* flags= */ 0, /* bind_name= */ NULL, &rbuf, &rbuf_size));
|
||||
ASSERT_EQ(rbuf_size, sizeof(buf) - 1234);
|
||||
ASSERT_EQ(memcmp(buf + 1234, rbuf, rbuf_size), 0);
|
||||
ASSERT_MEMEQ_NN(buf + 1234, sizeof(buf) - 1234, rbuf, rbuf_size);
|
||||
rbuf = mfree(rbuf);
|
||||
|
||||
ASSERT_OK(read_full_file_full(AT_FDCWD, fn, 2345, 777, /* flags= */ 0, /* bind_name= */ NULL, &rbuf, &rbuf_size));
|
||||
ASSERT_EQ(rbuf_size, 777U);
|
||||
ASSERT_EQ(memcmp(buf + 2345, rbuf, rbuf_size), 0);
|
||||
ASSERT_MEMEQ(buf + 2345, rbuf, rbuf_size);
|
||||
rbuf = mfree(rbuf);
|
||||
|
||||
ASSERT_OK(read_full_file_full(AT_FDCWD, fn, 4700, 20, /* flags= */ 0, /* bind_name= */ NULL, &rbuf, &rbuf_size));
|
||||
ASSERT_EQ(rbuf_size, 11U);
|
||||
ASSERT_EQ(memcmp(buf + 4700, rbuf, rbuf_size), 0);
|
||||
ASSERT_MEMEQ_NN(buf + 4700, 11U, rbuf, rbuf_size);
|
||||
rbuf = mfree(rbuf);
|
||||
|
||||
ASSERT_OK(read_full_file_full(AT_FDCWD, fn, 10000, 99, /* flags= */ 0, /* bind_name= */ NULL, &rbuf, &rbuf_size));
|
||||
@@ -612,8 +606,7 @@ TEST(read_full_file_full) {
|
||||
_cleanup_close_ int fd = -EBADF;
|
||||
ASSERT_OK(fd = xopenat(AT_FDCWD, fn, O_RDONLY));
|
||||
ASSERT_OK(read_full_file_at(fd, /* filename= */ NULL, &rbuf, &rbuf_size));
|
||||
ASSERT_EQ(rbuf_size, sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, rbuf, rbuf_size), 0);
|
||||
ASSERT_MEMEQ_NN(buf, sizeof(buf), rbuf, rbuf_size);
|
||||
}
|
||||
|
||||
TEST(xfopenat_empty_path) {
|
||||
@@ -750,13 +743,13 @@ TEST(write_data_file_atomic_at) {
|
||||
|
||||
_cleanup_(iovec_done) struct iovec ra = {};
|
||||
ASSERT_OK(read_full_file(abs_wdfa, (char**) &ra.iov_base, &ra.iov_len));
|
||||
ASSERT_TRUE(iovec_equal(&a, &ra));
|
||||
ASSERT_IOVEC_EQ(&a, &ra);
|
||||
ASSERT_OK_ERRNO(unlink(abs_wdfa));
|
||||
|
||||
ASSERT_OK(write_data_file_atomic_at(XAT_FDROOT, rel_wdfa, &a, /* flags= */ 0));
|
||||
iovec_done(&ra);
|
||||
ASSERT_OK(read_full_file(abs_wdfa, (char**) &ra.iov_base, &ra.iov_len));
|
||||
ASSERT_TRUE(iovec_equal(&a, &ra));
|
||||
ASSERT_IOVEC_EQ(&a, &ra);
|
||||
ASSERT_OK_ERRNO(unlink(abs_wdfa));
|
||||
|
||||
ASSERT_ERROR(write_data_file_atomic_at(AT_FDCWD, /* path= */ NULL, &a, /* flags= */ 0), EINVAL);
|
||||
@@ -772,13 +765,13 @@ TEST(write_data_file_atomic_at) {
|
||||
ASSERT_OK(write_data_file_atomic_at(AT_FDCWD, "wdfa", &a, /* flags= */ 0));
|
||||
iovec_done(&ra);
|
||||
ASSERT_OK(read_full_file(abs_wdfa, (char**) &ra.iov_base, &ra.iov_len));
|
||||
ASSERT_TRUE(iovec_equal(&a, &ra));
|
||||
ASSERT_IOVEC_EQ(&a, &ra);
|
||||
ASSERT_OK_ERRNO(unlink(abs_wdfa));
|
||||
|
||||
ASSERT_OK(write_data_file_atomic_at(XAT_FDROOT, rel_wdfa, &a, /* flags= */ 0));
|
||||
iovec_done(&ra);
|
||||
ASSERT_OK(read_full_file(abs_wdfa, (char**) &ra.iov_base, &ra.iov_len));
|
||||
ASSERT_TRUE(iovec_equal(&a, &ra));
|
||||
ASSERT_IOVEC_EQ(&a, &ra);
|
||||
ASSERT_OK_ERRNO(unlink(abs_wdfa));
|
||||
|
||||
ASSERT_OK_ERRNO(chdir(cwd));
|
||||
@@ -787,7 +780,7 @@ TEST(write_data_file_atomic_at) {
|
||||
ASSERT_OK(write_data_file_atomic_at(XAT_FDROOT, rel_zzz_wdfa, &a, WRITE_DATA_FILE_MKDIR_0755));
|
||||
iovec_done(&ra);
|
||||
ASSERT_OK(read_full_file(abs_zzz_wdfa, (char**) &ra.iov_base, &ra.iov_len));
|
||||
ASSERT_TRUE(iovec_equal(&a, &ra));
|
||||
ASSERT_IOVEC_EQ(&a, &ra);
|
||||
ASSERT_OK_ERRNO(unlink(abs_zzz_wdfa));
|
||||
|
||||
r = write_data_file_atomic_at(AT_FDCWD, abs_zzz, &a, /* flags= */ 0);
|
||||
|
||||
@@ -737,8 +737,6 @@ TEST(xopenat_full) {
|
||||
|
||||
/* Test that we can reopen an existing fd with xopenat_full() by specifying an empty path. */
|
||||
|
||||
assert_se((fd = xopenat_full(tfd, "def", O_PATH, /* xopen_flags= */ 0, /* mode= */ 0)) >= 0);
|
||||
assert_se((fd2 = xopenat_full(fd, "", O_RDWR, XO_EMPTY_PATH, 0644)) >= 0);
|
||||
fd = ASSERT_OK(xopenat_full(tfd, "def", O_PATH, /* xopen_flags= */ 0, /* mode= */ 0));
|
||||
fd2 = ASSERT_OK(xopenat_full(fd, "", O_RDWR, XO_EMPTY_PATH, 0644));
|
||||
}
|
||||
|
||||
+12
-12
@@ -318,12 +318,12 @@ TEST(fsprg) {
|
||||
|
||||
/* Verify state */
|
||||
if (i < ELEMENTSOF(expected_state))
|
||||
ASSERT_TRUE(iovec_equal(&state, &IOVEC_MAKE(expected_state[i], sizeof(expected_state[i]))));
|
||||
ASSERT_IOVEC_EQ(&state, &IOVEC_MAKE(expected_state[i], sizeof(expected_state[i])));
|
||||
|
||||
/* Verify key */
|
||||
ASSERT_OK(FSPRG_GetKey(state.iov_base, key.iov_base, key.iov_len, /* idx= */ 0));
|
||||
if (i < ELEMENTSOF(expected_key))
|
||||
ASSERT_TRUE(iovec_equal(&key, &IOVEC_MAKE(expected_key[i], sizeof(expected_key[i]))));
|
||||
ASSERT_IOVEC_EQ(&key, &IOVEC_MAKE(expected_key[i], sizeof(expected_key[i])));
|
||||
|
||||
/* Verify epoch */
|
||||
ASSERT_EQ(FSPRG_GetEpoch(state.iov_base), (uint64_t) i);
|
||||
@@ -333,12 +333,12 @@ TEST(fsprg) {
|
||||
|
||||
/* Generate state by FSPRG_GetState0() */
|
||||
ASSERT_OK(FSPRG_GenState0(state.iov_base, mpk.iov_base, seed.iov_base, seed.iov_len));
|
||||
ASSERT_TRUE(iovec_equal(&state, &states[0]));
|
||||
ASSERT_IOVEC_EQ(&state, &states[0]);
|
||||
|
||||
/* Generate states by FSPRG_Evolve() */
|
||||
for (size_t i = 1; i < n_states; i++) {
|
||||
ASSERT_OK(FSPRG_Evolve(state.iov_base));
|
||||
ASSERT_TRUE(iovec_equal(&state, &states[i]));
|
||||
ASSERT_IOVEC_EQ(&state, &states[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,12 +355,12 @@ TEST(fsprg) {
|
||||
|
||||
/* Verify state */
|
||||
if (i < ELEMENTSOF(expected_state))
|
||||
ASSERT_EQ(iovec_memcmp(&state, &IOVEC_MAKE(expected_state[i], sizeof(expected_state[i]))), 0);
|
||||
ASSERT_IOVEC_EQ(&state, &IOVEC_MAKE(expected_state[i], sizeof(expected_state[i])));
|
||||
|
||||
/* Verify key */
|
||||
ASSERT_OK(fsprg_get_key(&state, &key));
|
||||
if (i < ELEMENTSOF(expected_key))
|
||||
ASSERT_EQ(iovec_memcmp(&key, &IOVEC_MAKE(expected_key[i], sizeof(expected_key[i]))), 0);
|
||||
ASSERT_IOVEC_EQ(&key, &IOVEC_MAKE(expected_key[i], sizeof(expected_key[i])));
|
||||
|
||||
/* Verify epoch */
|
||||
uint64_t epoch;
|
||||
@@ -368,19 +368,19 @@ TEST(fsprg) {
|
||||
ASSERT_EQ(epoch, (uint64_t) i);
|
||||
|
||||
if (iovec_is_set(&states[i]))
|
||||
ASSERT_EQ(iovec_memcmp(&state, &states[i]), 0);
|
||||
ASSERT_IOVEC_EQ(&state, &states[i]);
|
||||
else
|
||||
ASSERT_NOT_NULL(iovec_memdup(&state, &states[i]));
|
||||
}
|
||||
|
||||
/* Generate state by fsprg_generate_state(0) */
|
||||
ASSERT_OK(fsprg_generate_state(FSPRG_RECOMMENDED_SECPAR, /* epoch= */ 0, &seed, &state));
|
||||
ASSERT_EQ(iovec_memcmp(&state, &states[0]), 0);
|
||||
ASSERT_IOVEC_EQ(&state, &states[0]);
|
||||
|
||||
/* Generate states by fsprg_evolve() */
|
||||
for (unsigned i = 1; i < n_states; i++) {
|
||||
ASSERT_OK(fsprg_evolve(&state));
|
||||
ASSERT_EQ(iovec_memcmp(&state, &states[i]), 0);
|
||||
ASSERT_IOVEC_EQ(&state, &states[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -440,7 +440,7 @@ TEST(hmac) {
|
||||
|
||||
/* Verify tag */
|
||||
if (i < ELEMENTSOF(expected_tag))
|
||||
ASSERT_TRUE(iovec_equal(&tag, &IOVEC_MAKE(expected_tag[i], sizeof(expected_tag[i]))));
|
||||
ASSERT_IOVEC_EQ(&tag, &IOVEC_MAKE(expected_tag[i], sizeof(expected_tag[i])));
|
||||
|
||||
/* Save tag */
|
||||
ASSERT_NOT_NULL(iovec_memdup(&tag, &tags[i]));
|
||||
@@ -487,11 +487,11 @@ TEST(hmac) {
|
||||
|
||||
/* Verify tag */
|
||||
if (i < ELEMENTSOF(expected_tag))
|
||||
ASSERT_TRUE(iovec_equal(&tag, &IOVEC_MAKE(expected_tag[i], sizeof(expected_tag[i]))));
|
||||
ASSERT_IOVEC_EQ(&tag, &IOVEC_MAKE(expected_tag[i], sizeof(expected_tag[i])));
|
||||
|
||||
/* Compare with the tag generated by gcrypt */
|
||||
if (iovec_is_set(&tags[i]))
|
||||
ASSERT_TRUE(iovec_equal(&tag, &tags[i]));
|
||||
ASSERT_IOVEC_EQ(&tag, &tags[i]);
|
||||
|
||||
/* Increment epoch */
|
||||
ASSERT_OK(fsprg_evolve(&state));
|
||||
|
||||
+3
-4
@@ -7,7 +7,6 @@
|
||||
#include "gpt.h"
|
||||
#include "log.h"
|
||||
#include "memfd-util.h"
|
||||
#include "memory-util.h"
|
||||
#include "pretty-print.h"
|
||||
#include "strv.h"
|
||||
#include "tests.h"
|
||||
@@ -275,8 +274,8 @@ TEST(gpt_probe_sector_512) {
|
||||
ASSERT_NOT_NULL(ret_entries);
|
||||
|
||||
GptPartitionEntry *e = ret_entries;
|
||||
ASSERT_EQ(memcmp_nn(e[0].unique_partition_guid, sizeof(e[0].unique_partition_guid), entries[0].unique_partition_guid, sizeof(entries[0].unique_partition_guid)), 0);
|
||||
ASSERT_EQ(memcmp_nn(e[1].unique_partition_guid, sizeof(e[1].unique_partition_guid), entries[1].unique_partition_guid, sizeof(entries[1].unique_partition_guid)), 0);
|
||||
ASSERT_MEMEQ_NN(e[0].unique_partition_guid, sizeof(e[0].unique_partition_guid), entries[0].unique_partition_guid, sizeof(entries[0].unique_partition_guid));
|
||||
ASSERT_MEMEQ_NN(e[1].unique_partition_guid, sizeof(e[1].unique_partition_guid), entries[1].unique_partition_guid, sizeof(entries[1].unique_partition_guid));
|
||||
ASSERT_EQ(le64toh(e[0].starting_lba), UINT64_C(100));
|
||||
ASSERT_EQ(le64toh(e[1].starting_lba), UINT64_C(300));
|
||||
}
|
||||
@@ -302,7 +301,7 @@ TEST(gpt_probe_sector_4096) {
|
||||
ASSERT_EQ(n, 1u);
|
||||
|
||||
GptPartitionEntry *e = ret_entries;
|
||||
ASSERT_EQ(memcmp_nn(e[0].unique_partition_guid, sizeof(e[0].unique_partition_guid), entry.unique_partition_guid, sizeof(entry.unique_partition_guid)), 0);
|
||||
ASSERT_MEMEQ_NN(e[0].unique_partition_guid, sizeof(e[0].unique_partition_guid), entry.unique_partition_guid, sizeof(entry.unique_partition_guid));
|
||||
ASSERT_EQ(le64toh(e[0].starting_lba), UINT64_C(50));
|
||||
}
|
||||
|
||||
|
||||
@@ -935,8 +935,7 @@ TEST(hashmap_dump_sorted) {
|
||||
ASSERT_OK_EQ(hashmap_put(m, "key 2", expected[2]), 1);
|
||||
|
||||
ASSERT_OK(hashmap_dump_sorted(m, &vals, &n));
|
||||
ASSERT_EQ(n, ELEMENTSOF(expected));
|
||||
ASSERT_EQ(memcmp(vals, expected, n * sizeof(void*)), 0);
|
||||
ASSERT_MEMEQ_NN(vals, n * sizeof(void*), expected, ELEMENTSOF(expected) * sizeof(void*));
|
||||
|
||||
vals = mfree(vals);
|
||||
|
||||
@@ -959,14 +958,12 @@ TEST(hashmap_dump_sorted) {
|
||||
ASSERT_OK_EQ(hashmap_put(m, UINT_TO_PTR(111U), expected[0]), 1);
|
||||
|
||||
ASSERT_OK(hashmap_dump_sorted(m, &vals, &n));
|
||||
ASSERT_EQ(n, ELEMENTSOF(expected));
|
||||
ASSERT_EQ(memcmp(vals, expected, n * sizeof(void*)), 0);
|
||||
ASSERT_MEMEQ_NN(vals, n * sizeof(void*), expected, ELEMENTSOF(expected) * sizeof(void*));
|
||||
|
||||
vals = mfree(vals);
|
||||
|
||||
ASSERT_OK(hashmap_dump_keys_sorted(m, &vals, &n));
|
||||
ASSERT_EQ(n, ELEMENTSOF(expected_keys2));
|
||||
ASSERT_EQ(memcmp(vals, expected_keys2, n * sizeof(void*)), 0);
|
||||
ASSERT_MEMEQ_NN(vals, n * sizeof(void*), expected_keys2, ELEMENTSOF(expected_keys2) * sizeof(void*));
|
||||
}
|
||||
|
||||
/* Signal to test-hashmap.c that tests from this compilation unit were run. */
|
||||
|
||||
@@ -80,7 +80,7 @@ static void test_hexmem_one(const char *in, const char *expected) {
|
||||
ASSERT_STREQ(result, expected);
|
||||
|
||||
ASSERT_OK(unhexmem(result, &mem, &len));
|
||||
ASSERT_EQ(memcmp_safe(mem, in, len), 0);
|
||||
ASSERT_MEMEQ(mem, in, len);
|
||||
}
|
||||
|
||||
TEST(hexmem) {
|
||||
@@ -301,15 +301,13 @@ TEST(base64mem_linebreak) {
|
||||
ASSERT_EQ((size_t) l, strlen(encoded));
|
||||
|
||||
ASSERT_OK(unbase64mem(encoded, &decoded, &decoded_size));
|
||||
ASSERT_EQ(decoded_size, n);
|
||||
ASSERT_EQ(memcmp(data, decoded, n), 0);
|
||||
ASSERT_MEMEQ_NN(data, n, decoded, decoded_size);
|
||||
|
||||
/* Also try in secure mode */
|
||||
decoded = mfree(decoded);
|
||||
decoded_size = 0;
|
||||
ASSERT_OK(unbase64mem_full(encoded, SIZE_MAX, /* secure= */ true, &decoded, &decoded_size));
|
||||
ASSERT_EQ(decoded_size, n);
|
||||
ASSERT_EQ(memcmp(data, decoded, n), 0);
|
||||
ASSERT_MEMEQ_NN(data, n, decoded, decoded_size);
|
||||
|
||||
for (size_t j = 0; j < (size_t) l; j++)
|
||||
ASSERT_EQ(encoded[j] == '\n', j % (m + 1) == m);
|
||||
@@ -435,8 +433,7 @@ static void test_unbase64mem_one(const char *input, const char *output, int ret)
|
||||
|
||||
ASSERT_EQ(unbase64mem(input, &buffer, &size), ret);
|
||||
if (ret >= 0) {
|
||||
ASSERT_EQ(size, strlen(output));
|
||||
ASSERT_EQ(memcmp(buffer, output, size), 0);
|
||||
ASSERT_MEMEQ_NN(buffer, size, output, strlen(output));
|
||||
ASSERT_EQ(((char*) buffer)[size], 0);
|
||||
}
|
||||
|
||||
@@ -446,8 +443,7 @@ static void test_unbase64mem_one(const char *input, const char *output, int ret)
|
||||
|
||||
ASSERT_EQ(unbase64mem_full(input, SIZE_MAX, /* secure= */ true, &buffer, &size), ret);
|
||||
if (ret >= 0) {
|
||||
ASSERT_EQ(size, strlen(output));
|
||||
ASSERT_EQ(memcmp(buffer, output, size), 0);
|
||||
ASSERT_MEMEQ_NN(buffer, size, output, strlen(output));
|
||||
ASSERT_EQ(((char*) buffer)[size], 0);
|
||||
}
|
||||
}
|
||||
@@ -478,29 +474,6 @@ TEST(unbase64mem) {
|
||||
test_unbase64mem_one(" Z m 8 = q u u x ", /* output= */ NULL, -ENAMETOOLONG);
|
||||
}
|
||||
|
||||
TEST(hexdump) {
|
||||
uint8_t data[146];
|
||||
unsigned i;
|
||||
|
||||
hexdump(stdout, NULL, 0);
|
||||
hexdump(stdout, "", 0);
|
||||
hexdump(stdout, "", SIZE_MAX);
|
||||
hexdump(stdout, "", 1);
|
||||
hexdump(stdout, "x", 1);
|
||||
hexdump(stdout, "x", SIZE_MAX);
|
||||
hexdump(stdout, "x", 2);
|
||||
hexdump(stdout, "foobar", 7);
|
||||
hexdump(stdout, "foobar", SIZE_MAX);
|
||||
hexdump(stdout, "f\nobar", 7);
|
||||
hexdump(stdout, "f\nobar", SIZE_MAX);
|
||||
hexdump(stdout, "xxxxxxxxxxxxxxxxxxxxyz", 23);
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(data); i++)
|
||||
data[i] = i*2;
|
||||
|
||||
hexdump(stdout, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(base64withwithouturl) {
|
||||
static const uint8_t plaintext[] = {
|
||||
0xcc, 0xa1, 0x72, 0x22, 0xae, 0xda, 0x66, 0x7e, 0x04, 0xa6, 0xe0, 0x82,
|
||||
@@ -519,12 +492,12 @@ TEST(base64withwithouturl) {
|
||||
|
||||
/* This is regular base64 */
|
||||
ASSERT_OK(unbase64mem("zKFyIq7aZn4EpuCCmpcF9jPgD8JFE1g/xfT0Mas8X4M0WycyigRsQ4IH4yysufus0AORQsuk3oeGhRC7t1tLyKD0Ih0VcYedv5+p8e6itqrIwzecu98+rNyUVDhWBzS0PMwxEw==", &buffer, &size));
|
||||
ASSERT_EQ(memcmp_nn(plaintext, sizeof(plaintext), buffer, size), 0);
|
||||
ASSERT_MEMEQ_NN(plaintext, sizeof(plaintext), buffer, size);
|
||||
buffer = mfree(buffer);
|
||||
|
||||
/* This is the same but in base64url */
|
||||
ASSERT_OK(unbase64mem("zKFyIq7aZn4EpuCCmpcF9jPgD8JFE1g_xfT0Mas8X4M0WycyigRsQ4IH4yysufus0AORQsuk3oeGhRC7t1tLyKD0Ih0VcYedv5-p8e6itqrIwzecu98-rNyUVDhWBzS0PMwxEw==", &buffer, &size));
|
||||
ASSERT_EQ(memcmp_nn(plaintext, sizeof(plaintext), buffer, size), 0);
|
||||
ASSERT_MEMEQ_NN(plaintext, sizeof(plaintext), buffer, size);
|
||||
|
||||
/* Hint: use xxd -i to generate the static C array from some data, and basenc --base64 + basenc
|
||||
* --base64url to generate the correctly encoded base64 strings */
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "hexdump.h"
|
||||
#include "iovec-util.h"
|
||||
#include "iovec-wrapper.h"
|
||||
#include "tests.h"
|
||||
|
||||
TEST(hexdump) {
|
||||
uint8_t data[146];
|
||||
unsigned i;
|
||||
|
||||
hexdump(stdout, NULL, 0);
|
||||
hexdump(stdout, "", 0);
|
||||
hexdump(stdout, "", SIZE_MAX);
|
||||
hexdump(stdout, "", 1);
|
||||
hexdump(stdout, "x", 1);
|
||||
hexdump(stdout, "x", SIZE_MAX);
|
||||
hexdump(stdout, "x", 2);
|
||||
hexdump(stdout, "foobar", 7);
|
||||
hexdump(stdout, "foobar", SIZE_MAX);
|
||||
hexdump(stdout, "f\nobar", 7);
|
||||
hexdump(stdout, "f\nobar", SIZE_MAX);
|
||||
hexdump(stdout, "xxxxxxxxxxxxxxxxxxxxyz", 23);
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(data); i++)
|
||||
data[i] = i*2;
|
||||
|
||||
hexdump(stdout, data, sizeof(data));
|
||||
}
|
||||
|
||||
TEST(hexdump_memcmp) {
|
||||
static const uint8_t a[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
0x10, 0x11 };
|
||||
static const uint8_t b[] = { 0x00, 0x01, 0xff, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
0x10 };
|
||||
|
||||
/* Equal regions: no marker lines, just the two sides. */
|
||||
_cleanup_free_ char *s = ASSERT_NOT_NULL(hexdump_memcmp(a, sizeof(a), a, sizeof(a)));
|
||||
log_info("equal:\n%s", s);
|
||||
|
||||
/* Differing byte and differing length. */
|
||||
free(s);
|
||||
s = ASSERT_NOT_NULL(hexdump_memcmp(a, sizeof(a), b, sizeof(b)));
|
||||
log_info("differ:\n%s", s);
|
||||
|
||||
/* Empty regions are fine. */
|
||||
free(s);
|
||||
s = ASSERT_NOT_NULL(hexdump_memcmp(NULL, 0, NULL, 0));
|
||||
ASSERT_STREQ(s, "");
|
||||
}
|
||||
|
||||
TEST(hexdump_memcmp_byte) {
|
||||
static const uint8_t a[] = { 'x', 'x', 'x', 'y', 'x', 'x' };
|
||||
|
||||
/* All bytes match 'byte': no marker lines. */
|
||||
_cleanup_free_ char *s = ASSERT_NOT_NULL(hexdump_memcmp_byte('x', (const uint8_t[]) { 'x', 'x' }, 2));
|
||||
log_info("all equal:\n%s", s);
|
||||
|
||||
/* One byte differs from 'byte'. */
|
||||
free(s);
|
||||
s = ASSERT_NOT_NULL(hexdump_memcmp_byte('x', a, sizeof(a)));
|
||||
log_info("differ:\n%s", s);
|
||||
|
||||
/* Empty region is fine. */
|
||||
free(s);
|
||||
s = ASSERT_NOT_NULL(hexdump_memcmp_byte(0x00, NULL, 0));
|
||||
ASSERT_STREQ(s, "");
|
||||
}
|
||||
|
||||
TEST(hexdump_iovw_compare) {
|
||||
struct iovec iov_a[] = { IOVEC_MAKE_STRING("foo"), IOVEC_MAKE_STRING("bar") };
|
||||
struct iovec iov_b[] = { IOVEC_MAKE_STRING("foo"), IOVEC_MAKE_STRING("baz") };
|
||||
struct iovec_wrapper wa = { .iovec = iov_a, .count = ELEMENTSOF(iov_a) };
|
||||
struct iovec_wrapper wb = { .iovec = iov_b, .count = ELEMENTSOF(iov_b) };
|
||||
|
||||
/* Equal wrappers: empty dump. */
|
||||
_cleanup_free_ char *s = ASSERT_NOT_NULL(hexdump_iovw_compare(&wa, &wa));
|
||||
ASSERT_STREQ(s, "");
|
||||
|
||||
/* One element differs. */
|
||||
free(s);
|
||||
s = ASSERT_NOT_NULL(hexdump_iovw_compare(&wa, &wb));
|
||||
log_info("differ:\n%s", s);
|
||||
|
||||
/* Different element count. */
|
||||
struct iovec_wrapper wc = { .iovec = iov_a, .count = 1 };
|
||||
free(s);
|
||||
s = ASSERT_NOT_NULL(hexdump_iovw_compare(&wa, &wc));
|
||||
log_info("count differ:\n%s", s);
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_INFO);
|
||||
@@ -75,16 +75,14 @@ TEST_RET(initrd_cpio_credentials_basic) {
|
||||
ASSERT_TRUE(S_ISREG(st.st_mode));
|
||||
ASSERT_EQ((mode_t) (st.st_mode & 07777), (mode_t) 0400);
|
||||
ASSERT_OK(read_full_file(foo_path, &foo_content, &foo_size));
|
||||
ASSERT_EQ(foo_size, 5U);
|
||||
ASSERT_EQ(memcmp(foo_content, "hello", 5), 0);
|
||||
ASSERT_MEMEQ_NN(foo_content, foo_size, "hello", 5);
|
||||
|
||||
ASSERT_NOT_NULL(bar_path = path_join(extract_dir, ".extra/system_credentials/bar.cred"));
|
||||
ASSERT_OK_ERRNO(stat(bar_path, &st));
|
||||
ASSERT_TRUE(S_ISREG(st.st_mode));
|
||||
ASSERT_EQ((mode_t) (st.st_mode & 07777), (mode_t) 0400);
|
||||
ASSERT_OK(read_full_file(bar_path, &bar_content, &bar_size));
|
||||
ASSERT_EQ(bar_size, 7U);
|
||||
ASSERT_EQ(memcmp(bar_content, "abc\0def", 7), 0);
|
||||
ASSERT_MEMEQ_NN(bar_content, bar_size, "abc\0def", 7);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ static void test_sparse_write_one(int fd, const char *buffer, size_t n) {
|
||||
ASSERT_OK_EQ_ERRNO(lseek(fd, 0, SEEK_SET), 0);
|
||||
ASSERT_OK_EQ_ERRNO(read(fd, check, n), (ssize_t) n);
|
||||
|
||||
ASSERT_EQ(memcmp(buffer, check, n), 0);
|
||||
ASSERT_MEMEQ(buffer, check, n);
|
||||
}
|
||||
|
||||
TEST(sparse_write) {
|
||||
@@ -73,7 +73,7 @@ TEST(pwritev_full) {
|
||||
ASSERT_OK(pwritev_full(fd, iovec, n, 7, &written));
|
||||
ASSERT_EQ(written, sizeof(expected));
|
||||
ASSERT_EQ(pread(fd, buf, sizeof(buf), 7), (ssize_t) sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, expected, sizeof(expected)), 0);
|
||||
ASSERT_MEMEQ(buf, expected, sizeof(expected));
|
||||
|
||||
/* Written iovecs are advanced past the data */
|
||||
FOREACH_ARRAY(i, iovec, n)
|
||||
@@ -89,7 +89,7 @@ TEST(pwrite_full) {
|
||||
ASSERT_OK(pwrite_full(fd, /* buf= */ NULL, /* nbytes= */ 0, /* offset= */ 0));
|
||||
ASSERT_OK(pwrite_full(fd, "abc", 3, 5));
|
||||
ASSERT_EQ(pread(fd, buf, sizeof(buf), 5), (ssize_t) sizeof(buf));
|
||||
ASSERT_EQ(memcmp(buf, "abc", 3), 0);
|
||||
ASSERT_MEMEQ(buf, "abc", 3);
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_INFO);
|
||||
+41
-41
@@ -8,11 +8,11 @@
|
||||
TEST(iovec_shift) {
|
||||
const struct iovec iov = CONST_IOVEC_MAKE_STRING("54321");
|
||||
|
||||
ASSERT_EQ(iovec_memcmp(&IOVEC_SHIFT(&iov, 0), &CONST_IOVEC_MAKE_STRING("54321")), 0);
|
||||
ASSERT_EQ(iovec_memcmp(&IOVEC_SHIFT(&iov, 1), &CONST_IOVEC_MAKE_STRING("4321")), 0);
|
||||
ASSERT_EQ(iovec_memcmp(&IOVEC_SHIFT(&iov, 2), &CONST_IOVEC_MAKE_STRING("321")), 0);
|
||||
ASSERT_EQ(iovec_memcmp(&IOVEC_SHIFT(&iov, 3), &CONST_IOVEC_MAKE_STRING("21")), 0);
|
||||
ASSERT_EQ(iovec_memcmp(&IOVEC_SHIFT(&iov, 4), &CONST_IOVEC_MAKE_STRING("1")), 0);
|
||||
ASSERT_IOVEC_EQ(&IOVEC_SHIFT(&iov, 0), &CONST_IOVEC_MAKE_STRING("54321"));
|
||||
ASSERT_IOVEC_EQ(&IOVEC_SHIFT(&iov, 1), &CONST_IOVEC_MAKE_STRING("4321"));
|
||||
ASSERT_IOVEC_EQ(&IOVEC_SHIFT(&iov, 2), &CONST_IOVEC_MAKE_STRING("321"));
|
||||
ASSERT_IOVEC_EQ(&IOVEC_SHIFT(&iov, 3), &CONST_IOVEC_MAKE_STRING("21"));
|
||||
ASSERT_IOVEC_EQ(&IOVEC_SHIFT(&iov, 4), &CONST_IOVEC_MAKE_STRING("1"));
|
||||
ASSERT_FALSE(iovec_is_set(&IOVEC_SHIFT(&iov, 5)));
|
||||
ASSERT_FALSE(iovec_is_set(&IOVEC_SHIFT(&iov, 6)));
|
||||
ASSERT_FALSE(iovec_is_set(&IOVEC_SHIFT(&iov, 7)));
|
||||
@@ -25,11 +25,11 @@ TEST(iovec_shift) {
|
||||
TEST(iovec_inc) {
|
||||
struct iovec iov = IOVEC_MAKE_STRING("54321");
|
||||
|
||||
ASSERT_EQ(iovec_memcmp(iovec_inc(&iov, /* shift= */ 0), &CONST_IOVEC_MAKE_STRING("54321")), 0);
|
||||
ASSERT_EQ(iovec_memcmp(iovec_inc(&iov, 1), &CONST_IOVEC_MAKE_STRING("4321")), 0);
|
||||
ASSERT_EQ(iovec_memcmp(iovec_inc(&iov, 1), &CONST_IOVEC_MAKE_STRING("321")), 0);
|
||||
ASSERT_EQ(iovec_memcmp(iovec_inc(&iov, 1), &CONST_IOVEC_MAKE_STRING("21")), 0);
|
||||
ASSERT_EQ(iovec_memcmp(iovec_inc(&iov, 1), &CONST_IOVEC_MAKE_STRING("1")), 0);
|
||||
ASSERT_IOVEC_EQ(iovec_inc(&iov, /* shift= */ 0), &CONST_IOVEC_MAKE_STRING("54321"));
|
||||
ASSERT_IOVEC_EQ(iovec_inc(&iov, 1), &CONST_IOVEC_MAKE_STRING("4321"));
|
||||
ASSERT_IOVEC_EQ(iovec_inc(&iov, 1), &CONST_IOVEC_MAKE_STRING("321"));
|
||||
ASSERT_IOVEC_EQ(iovec_inc(&iov, 1), &CONST_IOVEC_MAKE_STRING("21"));
|
||||
ASSERT_IOVEC_EQ(iovec_inc(&iov, 1), &CONST_IOVEC_MAKE_STRING("1"));
|
||||
ASSERT_FALSE(iovec_is_set(iovec_inc(&iov, 1)));
|
||||
ASSERT_FALSE(iovec_is_set(iovec_inc(&iov, 1)));
|
||||
ASSERT_FALSE(iovec_is_set(iovec_inc(&iov, 1)));
|
||||
@@ -50,28 +50,28 @@ TEST(iovec_inc_many) {
|
||||
ASSERT_OK(iovw_put_iov(&iovw, &IOVEC_MAKE_STRING("ccc")));
|
||||
|
||||
ASSERT_FALSE(iovec_inc_many(iovw.iovec, iovw.count, 0));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[0], &IOVEC_MAKE_STRING("aaa")));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[1], &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[0], &IOVEC_MAKE_STRING("aaa"));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[1], &IOVEC_MAKE_STRING("bbb"));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc"));
|
||||
|
||||
ASSERT_FALSE(iovec_inc_many(iovw.iovec, iovw.count, 1));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[0], &IOVEC_MAKE_STRING("aa")));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[1], &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[0], &IOVEC_MAKE_STRING("aa"));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[1], &IOVEC_MAKE_STRING("bbb"));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc"));
|
||||
|
||||
ASSERT_FALSE(iovec_inc_many(iovw.iovec, iovw.count, 3));
|
||||
ASSERT_FALSE(iovec_is_set(&iovw.iovec[0]));
|
||||
ASSERT_NULL(iovw.iovec[0].iov_base);
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, 0u);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[1], &IOVEC_MAKE_STRING("bb")));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[1], &IOVEC_MAKE_STRING("bb"));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc"));
|
||||
|
||||
ASSERT_FALSE(iovec_inc_many(iovw.iovec, iovw.count, 4));
|
||||
ASSERT_NULL(iovw.iovec[0].iov_base);
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, 0u);
|
||||
ASSERT_NULL(iovw.iovec[1].iov_base);
|
||||
ASSERT_EQ(iovw.iovec[1].iov_len, 0u);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[2], &IOVEC_MAKE_STRING("c")));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[2], &IOVEC_MAKE_STRING("c"));
|
||||
|
||||
ASSERT_TRUE(iovec_inc_many(iovw.iovec, iovw.count, 1));
|
||||
ASSERT_NULL(iovw.iovec[0].iov_base);
|
||||
@@ -98,13 +98,13 @@ TEST(iovec_memcmp) {
|
||||
struct iovec iov1_truncated = iov1;
|
||||
iov1_truncated.iov_len /= 2;
|
||||
|
||||
ASSERT_EQ(iovec_memcmp(NULL, NULL), 0);
|
||||
ASSERT_EQ(iovec_memcmp(&iov1, &iov1), 0);
|
||||
ASSERT_EQ(iovec_memcmp(&iov2, &iov2), 0);
|
||||
ASSERT_EQ(iovec_memcmp(&empty, &empty), 0);
|
||||
ASSERT_EQ(iovec_memcmp(&iov1_truncated, &iov1_truncated), 0);
|
||||
ASSERT_EQ(iovec_memcmp(&empty, NULL), 0);
|
||||
ASSERT_EQ(iovec_memcmp(NULL, &empty), 0);
|
||||
ASSERT_IOVEC_EQ(NULL, NULL);
|
||||
ASSERT_IOVEC_EQ(&iov1, &iov1);
|
||||
ASSERT_IOVEC_EQ(&iov2, &iov2);
|
||||
ASSERT_IOVEC_EQ(&empty, &empty);
|
||||
ASSERT_IOVEC_EQ(&iov1_truncated, &iov1_truncated);
|
||||
ASSERT_IOVEC_EQ(&empty, NULL);
|
||||
ASSERT_IOVEC_EQ(NULL, &empty);
|
||||
ASSERT_LT(iovec_memcmp(&iov1, &iov2), 0);
|
||||
ASSERT_GT(iovec_memcmp(&iov2, &iov1), 0);
|
||||
ASSERT_GT(iovec_memcmp(&iov1, &empty), 0);
|
||||
@@ -121,7 +121,7 @@ TEST(iovec_memcmp) {
|
||||
_cleanup_(iovec_done) struct iovec copy = {};
|
||||
|
||||
ASSERT_NOT_NULL(iovec_memdup(&iov1, ©));
|
||||
ASSERT_EQ(iovec_memcmp(&iov1, ©), 0);
|
||||
ASSERT_IOVEC_EQ(&iov1, ©);
|
||||
}
|
||||
|
||||
TEST(iovec_set_and_valid) {
|
||||
@@ -153,7 +153,7 @@ TEST(iovec_append) {
|
||||
ASSERT_PTR_EQ(iovec_append(&iov, &IOVEC_MAKE_STRING("p")), &iov);
|
||||
ASSERT_PTR_EQ(iovec_append(&iov, &IOVEC_MAKE_STRING("")), &iov);
|
||||
|
||||
ASSERT_EQ(iovec_memcmp(&iov, &IOVEC_MAKE_STRING("waldoquuxp")), 0);
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("waldoquuxp"));
|
||||
}
|
||||
|
||||
TEST(iovec_consume) {
|
||||
@@ -169,28 +169,28 @@ TEST(iovec_consume) {
|
||||
|
||||
/* Reducing by more than the length fails, and leaves the iovec unmodified */
|
||||
ASSERT_NULL(iovec_consume(&iov, 12));
|
||||
ASSERT_EQ(iovec_memcmp(&iov, &IOVEC_MAKE_STRING("foobarwaldo")), 0);
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("foobarwaldo"));
|
||||
|
||||
ASSERT_PTR_EQ(iovec_consume(&iov, 0), &iov);
|
||||
ASSERT_EQ(iovec_memcmp(&iov, &IOVEC_MAKE_STRING("foobarwaldo")), 0);
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("foobarwaldo"));
|
||||
|
||||
ASSERT_PTR_EQ(iovec_consume(&iov, 3), &iov);
|
||||
ASSERT_EQ(iovec_memcmp(&iov, &IOVEC_MAKE_STRING("barwaldo")), 0);
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("barwaldo"));
|
||||
|
||||
ASSERT_PTR_EQ(iovec_consume(&iov, 3), &iov);
|
||||
ASSERT_EQ(iovec_memcmp(&iov, &IOVEC_MAKE_STRING("waldo")), 0);
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("waldo"));
|
||||
|
||||
/* Appending after reducing must continue right after the remaining data, i.e. the reduce must not
|
||||
* confuse the length bookkeeping the append relies on. This is the read-then-consume cycle the
|
||||
* users of this helper go through. */
|
||||
ASSERT_PTR_EQ(iovec_append(&iov, &IOVEC_MAKE_STRING("quux")), &iov);
|
||||
ASSERT_EQ(iovec_memcmp(&iov, &IOVEC_MAKE_STRING("waldoquux")), 0);
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("waldoquux"));
|
||||
|
||||
ASSERT_PTR_EQ(iovec_consume(&iov, 5), &iov);
|
||||
ASSERT_EQ(iovec_memcmp(&iov, &IOVEC_MAKE_STRING("quux")), 0);
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("quux"));
|
||||
|
||||
ASSERT_PTR_EQ(iovec_append(&iov, &IOVEC_MAKE_STRING("piff")), &iov);
|
||||
ASSERT_EQ(iovec_memcmp(&iov, &IOVEC_MAKE_STRING("quuxpiff")), 0);
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("quuxpiff"));
|
||||
|
||||
/* Reducing by the full remaining length empties the iovec, but keeps the buffer allocated */
|
||||
ASSERT_PTR_EQ(iovec_consume(&iov, 8), &iov);
|
||||
@@ -207,7 +207,7 @@ TEST(iovec_make_byte) {
|
||||
struct iovec x = IOVEC_MAKE_BYTE('x');
|
||||
|
||||
ASSERT_EQ(x.iov_len, 1U);
|
||||
ASSERT_EQ(memcmp_nn(x.iov_base, x.iov_len, "x", 1), 0);
|
||||
ASSERT_MEMEQ_NN(x.iov_base, x.iov_len, "x", 1);
|
||||
}
|
||||
|
||||
TEST(iovec_done_and_memdup) {
|
||||
@@ -218,21 +218,21 @@ TEST(iovec_done_and_memdup) {
|
||||
ASSERT_OK_ZERO(iovec_done_and_memdup(&iov, &(struct iovec) {}));
|
||||
ASSERT_TRUE(!iovec_is_set(&iov));
|
||||
ASSERT_OK_POSITIVE(iovec_done_and_memdup(&iov, &IOVEC_MAKE_STRING("aaa")));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE_STRING("aaa")));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("aaa"));
|
||||
ASSERT_OK_POSITIVE(iovec_done_and_memdup(&iov, &IOVEC_MAKE_STRING("bbbbb")));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE_STRING("bbbbb")));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("bbbbb"));
|
||||
ASSERT_OK_POSITIVE(iovec_done_and_memdup(&iov, /* source= */ NULL));
|
||||
ASSERT_TRUE(!iovec_is_set(&iov));
|
||||
ASSERT_OK_POSITIVE(iovec_done_and_memdup(&iov, &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("ccc"));
|
||||
ASSERT_OK_POSITIVE(iovec_done_and_memdup(&iov, &(struct iovec) {}));
|
||||
ASSERT_TRUE(!iovec_is_set(&iov));
|
||||
ASSERT_OK_ZERO(iovec_done_and_memdup(&iov, &iov));
|
||||
ASSERT_TRUE(!iovec_is_set(&iov));
|
||||
ASSERT_OK_POSITIVE(iovec_done_and_memdup(&iov, &IOVEC_MAKE_STRING("ddd")));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE_STRING("ddd")));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("ddd"));
|
||||
ASSERT_OK_ZERO(iovec_done_and_memdup(&iov, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE_STRING("ddd")));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE_STRING("ddd"));
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_INFO);
|
||||
+90
-106
@@ -44,24 +44,24 @@ TEST(iovw_compare) {
|
||||
ASSERT_LT(iovw_compare(NULL, &a1), 0);
|
||||
ASSERT_EQ(iovw_compare(NULL, NULL), 0);
|
||||
|
||||
ASSERT_TRUE(iovw_equal(&a1, &a1));
|
||||
ASSERT_TRUE(iovw_equal(&a1, &a2));
|
||||
ASSERT_TRUE(iovw_equal(&a2, &a1));
|
||||
ASSERT_IOVW_EQ(&a1, &a1);
|
||||
ASSERT_IOVW_EQ(&a1, &a2);
|
||||
ASSERT_IOVW_EQ(&a2, &a1);
|
||||
ASSERT_FALSE(iovw_equal(&a1, &b));
|
||||
ASSERT_FALSE(iovw_equal(&b, &a1));
|
||||
ASSERT_TRUE(iovw_equal(&b, &b));
|
||||
ASSERT_IOVW_EQ(&b, &b);
|
||||
ASSERT_FALSE(iovw_equal(&a1, &c));
|
||||
ASSERT_FALSE(iovw_equal(&c, &a1));
|
||||
ASSERT_TRUE(iovw_equal(&c, &c));
|
||||
ASSERT_IOVW_EQ(&c, &c);
|
||||
ASSERT_FALSE(iovw_equal(&a1, &d));
|
||||
ASSERT_FALSE(iovw_equal(&d, &a1));
|
||||
ASSERT_TRUE(iovw_equal(&d, &d));
|
||||
ASSERT_IOVW_EQ(&d, &d);
|
||||
ASSERT_FALSE(iovw_equal(&a1, &e));
|
||||
ASSERT_FALSE(iovw_equal(&e, &a1));
|
||||
ASSERT_TRUE(iovw_equal(&e, &e));
|
||||
ASSERT_IOVW_EQ(&e, &e);
|
||||
ASSERT_FALSE(iovw_equal(&a1, NULL));
|
||||
ASSERT_FALSE(iovw_equal(NULL, &a1));
|
||||
ASSERT_TRUE(iovw_equal(NULL, NULL));
|
||||
ASSERT_IOVW_EQ(NULL, NULL);
|
||||
}
|
||||
|
||||
TEST(iovw_put) {
|
||||
@@ -77,18 +77,15 @@ TEST(iovw_put) {
|
||||
ASSERT_OK(iovw_put(&iovw, (char*) "q", 1));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, 3U);
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "foo", 3), 0);
|
||||
ASSERT_EQ(iovw.iovec[1].iov_len, 6U);
|
||||
ASSERT_EQ(memcmp(iovw.iovec[1].iov_base, "barbar", 6), 0);
|
||||
ASSERT_EQ(iovw.iovec[2].iov_len, 1U);
|
||||
ASSERT_EQ(memcmp(iovw.iovec[2].iov_base, "q", 1), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[0].iov_base, iovw.iovec[0].iov_len, "foo", 3);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[1].iov_base, iovw.iovec[1].iov_len, "barbar", 6);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[2].iov_base, iovw.iovec[2].iov_len, "q", 1);
|
||||
|
||||
ASSERT_OK(iovw_put_full(&iovw, /* accept_zero= */ false, /* data= */ NULL, /* len= */ 0));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
ASSERT_OK(iovw_put_full(&iovw, /* accept_zero= */ true, /* data= */ NULL, /* len= */ 0));
|
||||
ASSERT_EQ(iovw.count, 4U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[3], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[3], &(struct iovec) {});
|
||||
}
|
||||
|
||||
TEST(iovw_put_iov) {
|
||||
@@ -104,15 +101,15 @@ TEST(iovw_put_iov) {
|
||||
ASSERT_OK(iovw_put_iov(&iovw, &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_OK(iovw_put_iov(&iovw, &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[0], &IOVEC_MAKE_STRING("aaa")));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[1], &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[0], &IOVEC_MAKE_STRING("aaa"));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[1], &IOVEC_MAKE_STRING("bbb"));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc"));
|
||||
|
||||
ASSERT_OK(iovw_put_iov_full(&iovw, /* accept_zero= */ false, &(struct iovec) {}));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
ASSERT_OK(iovw_put_iov_full(&iovw, /* accept_zero= */ true, &(struct iovec) {}));
|
||||
ASSERT_EQ(iovw.count, 4U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[3], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[3], &(struct iovec) {});
|
||||
}
|
||||
|
||||
TEST(iovw_put_iovw) {
|
||||
@@ -137,12 +134,12 @@ TEST(iovw_put_iovw) {
|
||||
|
||||
ASSERT_OK(iovw_put_iovw(&target, &source));
|
||||
ASSERT_EQ(target.count, 6U);
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[0], &IOVEC_MAKE_STRING("xxx")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[1], &IOVEC_MAKE_STRING("yyy")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[2], &IOVEC_MAKE_STRING("zzz")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[3], &IOVEC_MAKE_STRING("aaa")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[4], &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[5], &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[0], &IOVEC_MAKE_STRING("xxx"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[1], &IOVEC_MAKE_STRING("yyy"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[2], &IOVEC_MAKE_STRING("zzz"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[3], &IOVEC_MAKE_STRING("aaa"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[4], &IOVEC_MAKE_STRING("bbb"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[5], &IOVEC_MAKE_STRING("ccc"));
|
||||
|
||||
/* iovw_put_iovw() does not copy data, hence the pointers must be equal */
|
||||
ASSERT_PTR_EQ(target.iovec[3].iov_base, source.iovec[0].iov_base);
|
||||
@@ -151,23 +148,23 @@ TEST(iovw_put_iovw) {
|
||||
|
||||
/* Source is unchanged */
|
||||
ASSERT_EQ(source.count, 4U);
|
||||
ASSERT_TRUE(iovec_equal(&source.iovec[0], &IOVEC_MAKE_STRING("aaa")));
|
||||
ASSERT_TRUE(iovec_equal(&source.iovec[1], &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_TRUE(iovec_equal(&source.iovec[2], &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_TRUE(iovec_equal(&source.iovec[3], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&source.iovec[0], &IOVEC_MAKE_STRING("aaa"));
|
||||
ASSERT_IOVEC_EQ(&source.iovec[1], &IOVEC_MAKE_STRING("bbb"));
|
||||
ASSERT_IOVEC_EQ(&source.iovec[2], &IOVEC_MAKE_STRING("ccc"));
|
||||
ASSERT_IOVEC_EQ(&source.iovec[3], &(struct iovec) {});
|
||||
|
||||
ASSERT_OK(iovw_put_iovw_full(&target, /* accept_zero= */ true, &source));
|
||||
ASSERT_EQ(target.count, 10U);
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[0], &IOVEC_MAKE_STRING("xxx")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[1], &IOVEC_MAKE_STRING("yyy")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[2], &IOVEC_MAKE_STRING("zzz")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[3], &IOVEC_MAKE_STRING("aaa")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[4], &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[5], &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[6], &IOVEC_MAKE_STRING("aaa")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[7], &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[8], &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[9], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[0], &IOVEC_MAKE_STRING("xxx"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[1], &IOVEC_MAKE_STRING("yyy"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[2], &IOVEC_MAKE_STRING("zzz"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[3], &IOVEC_MAKE_STRING("aaa"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[4], &IOVEC_MAKE_STRING("bbb"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[5], &IOVEC_MAKE_STRING("ccc"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[6], &IOVEC_MAKE_STRING("aaa"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[7], &IOVEC_MAKE_STRING("bbb"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[8], &IOVEC_MAKE_STRING("ccc"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[9], &(struct iovec) {});
|
||||
|
||||
/* Cannot pass the same objects */
|
||||
ASSERT_ERROR(iovw_put_iovw(&target, &target), EINVAL);
|
||||
@@ -185,24 +182,22 @@ TEST(iovw_extend) {
|
||||
char buf[4] = { 'o', 'n', 'e', '\0' };
|
||||
ASSERT_OK(iovw_extend(&iovw, buf, 3));
|
||||
ASSERT_EQ(iovw.count, 1U);
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, 3U);
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "one", 3), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[0].iov_base, iovw.iovec[0].iov_len, "one", 3);
|
||||
|
||||
/* Insert with a NUL */
|
||||
ASSERT_OK(iovw_extend(&iovw, buf, 4));
|
||||
ASSERT_EQ(iovw.count, 2U);
|
||||
ASSERT_EQ(iovw.iovec[1].iov_len, 4U);
|
||||
ASSERT_EQ(memcmp(iovw.iovec[1].iov_base, "one\0", 4), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[1].iov_base, iovw.iovec[1].iov_len, "one\0", 4);
|
||||
|
||||
/* Mutating the caller's buffer does not affect what's stored */
|
||||
memset(buf, 'X', sizeof buf);
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "one", 3), 0);
|
||||
ASSERT_MEMEQ(iovw.iovec[0].iov_base, "one", 3);
|
||||
|
||||
ASSERT_OK(iovw_extend_full(&iovw, /* accept_zero= */ false, /* data= */ NULL, /* len= */ 0));
|
||||
ASSERT_EQ(iovw.count, 2U);
|
||||
ASSERT_OK(iovw_extend_full(&iovw, /* accept_zero= */ true, /* data= */ NULL, /* len= */ 0));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[2], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[2], &(struct iovec) {});
|
||||
}
|
||||
|
||||
TEST(iovw_extend_iov) {
|
||||
@@ -217,15 +212,15 @@ TEST(iovw_extend_iov) {
|
||||
ASSERT_OK(iovw_extend_iov(&iovw, &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_OK(iovw_extend_iov(&iovw, &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[0], &IOVEC_MAKE_STRING("aaa")));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[1], &IOVEC_MAKE_STRING("bbb")));
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc")));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[0], &IOVEC_MAKE_STRING("aaa"));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[1], &IOVEC_MAKE_STRING("bbb"));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[2], &IOVEC_MAKE_STRING("ccc"));
|
||||
|
||||
ASSERT_OK(iovw_extend_iov_full(&iovw, /* accept_zero= */ false, &(struct iovec) {}));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
ASSERT_OK(iovw_extend_iov_full(&iovw, /* accept_zero= */ true, &(struct iovec) {}));
|
||||
ASSERT_EQ(iovw.count, 4U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[3], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[3], &(struct iovec) {});
|
||||
}
|
||||
|
||||
TEST(iovw_extend_iovw) {
|
||||
@@ -254,19 +249,17 @@ TEST(iovw_extend_iovw) {
|
||||
ASSERT_TRUE(target.iovec[1].iov_base != source.iovec[0].iov_base);
|
||||
ASSERT_TRUE(target.iovec[2].iov_base != source.iovec[1].iov_base);
|
||||
|
||||
ASSERT_EQ(target.iovec[1].iov_len, 3U);
|
||||
ASSERT_EQ(memcmp(target.iovec[1].iov_base, "one", 3), 0);
|
||||
ASSERT_EQ(target.iovec[2].iov_len, 6U);
|
||||
ASSERT_EQ(memcmp(target.iovec[2].iov_base, "twotwo", 6), 0);
|
||||
ASSERT_MEMEQ_NN(target.iovec[1].iov_base, target.iovec[1].iov_len, "one", 3);
|
||||
ASSERT_MEMEQ_NN(target.iovec[2].iov_base, target.iovec[2].iov_len, "twotwo", 6);
|
||||
|
||||
ASSERT_OK(iovw_extend_iovw_full(&target, /* accept_zero= */ true, &source));
|
||||
ASSERT_EQ(target.count, 6U);
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[0], &IOVEC_MAKE_STRING("zero")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[1], &IOVEC_MAKE_STRING("one")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[2], &IOVEC_MAKE_STRING("twotwo")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[3], &IOVEC_MAKE_STRING("one")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[4], &IOVEC_MAKE_STRING("twotwo")));
|
||||
ASSERT_TRUE(iovec_equal(&target.iovec[5], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[0], &IOVEC_MAKE_STRING("zero"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[1], &IOVEC_MAKE_STRING("one"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[2], &IOVEC_MAKE_STRING("twotwo"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[3], &IOVEC_MAKE_STRING("one"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[4], &IOVEC_MAKE_STRING("twotwo"));
|
||||
ASSERT_IOVEC_EQ(&target.iovec[5], &(struct iovec) {});
|
||||
|
||||
/* Source is unchanged */
|
||||
ASSERT_EQ(source.count, 3U);
|
||||
@@ -295,11 +288,11 @@ TEST(iovw_consume) {
|
||||
ASSERT_EQ(iovw.count, 1U);
|
||||
ASSERT_OK(iovw_consume_full(&iovw, /* accept_zero= */ true, /* data= */ NULL, /* len= */ 0));
|
||||
ASSERT_EQ(iovw.count, 2U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[1], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[1], &(struct iovec) {});
|
||||
q = ASSERT_NOT_NULL(strdup(""));
|
||||
ASSERT_OK(iovw_consume_full(&iovw, /* accept_zero= */ true, q, /* len= */ 0));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[2], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[2], &(struct iovec) {});
|
||||
}
|
||||
|
||||
TEST(iovw_consume_iov) {
|
||||
@@ -335,14 +328,14 @@ TEST(iovw_consume_iov) {
|
||||
ASSERT_EQ(iovw.count, 1U);
|
||||
ASSERT_OK(iovw_consume_iov_full(&iovw, /* accept_zero= */ true, &(struct iovec) {}));
|
||||
ASSERT_EQ(iovw.count, 2U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[1], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[1], &(struct iovec) {});
|
||||
iov = (struct iovec) {
|
||||
.iov_base = ASSERT_NOT_NULL(strdup("")),
|
||||
.iov_len = 0,
|
||||
};
|
||||
ASSERT_OK(iovw_consume_iov_full(&iovw, /* accept_zero= */ true, &iov));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
ASSERT_TRUE(iovec_equal(&iovw.iovec[2], &(struct iovec) {}));
|
||||
ASSERT_IOVEC_EQ(&iovw.iovec[2], &(struct iovec) {});
|
||||
}
|
||||
|
||||
TEST(iovw_isempty) {
|
||||
@@ -362,18 +355,14 @@ TEST(iovw_put_string_field) {
|
||||
ASSERT_OK(iovw_put_string_field(&iovw, "BAZ=", "quux"));
|
||||
ASSERT_EQ(iovw.count, 2U);
|
||||
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, strlen("FOO=bar"));
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "FOO=bar", strlen("FOO=bar")), 0);
|
||||
ASSERT_EQ(iovw.iovec[1].iov_len, strlen("BAZ=quux"));
|
||||
ASSERT_EQ(memcmp(iovw.iovec[1].iov_base, "BAZ=quux", strlen("BAZ=quux")), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[0].iov_base, iovw.iovec[0].iov_len, "FOO=bar", strlen("FOO=bar"));
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[1].iov_base, iovw.iovec[1].iov_len, "BAZ=quux", strlen("BAZ=quux"));
|
||||
|
||||
/* Non-replacing put: a second FOO= just appends rather than replacing */
|
||||
ASSERT_OK(iovw_put_string_field(&iovw, "FOO=", "second"));
|
||||
ASSERT_EQ(iovw.count, 3U);
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, strlen("FOO=bar"));
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "FOO=bar", strlen("FOO=bar")), 0);
|
||||
ASSERT_EQ(iovw.iovec[2].iov_len, strlen("FOO=second"));
|
||||
ASSERT_EQ(memcmp(iovw.iovec[2].iov_base, "FOO=second", strlen("FOO=second")), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[0].iov_base, iovw.iovec[0].iov_len, "FOO=bar", strlen("FOO=bar"));
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[2].iov_base, iovw.iovec[2].iov_len, "FOO=second", strlen("FOO=second"));
|
||||
}
|
||||
|
||||
TEST(iovw_replace_string_field) {
|
||||
@@ -382,14 +371,12 @@ TEST(iovw_replace_string_field) {
|
||||
/* If the field does not exist yet, replace acts like put */
|
||||
ASSERT_OK(iovw_replace_string_field(&iovw, "A=", "1"));
|
||||
ASSERT_EQ(iovw.count, 1U);
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, strlen("A=1"));
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "A=1", strlen("A=1")), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[0].iov_base, iovw.iovec[0].iov_len, "A=1", strlen("A=1"));
|
||||
|
||||
/* Replacing an existing field updates it in place */
|
||||
ASSERT_OK(iovw_replace_string_field(&iovw, "A=", "twentytwo"));
|
||||
ASSERT_EQ(iovw.count, 1U);
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, strlen("A=twentytwo"));
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "A=twentytwo", strlen("A=twentytwo")), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[0].iov_base, iovw.iovec[0].iov_len, "A=twentytwo", strlen("A=twentytwo"));
|
||||
|
||||
/* Distinct field still appends */
|
||||
ASSERT_OK(iovw_replace_string_field(&iovw, "B=", "x"));
|
||||
@@ -401,14 +388,12 @@ TEST(iovw_put_string_fieldf) {
|
||||
|
||||
ASSERT_OK(iovw_put_string_fieldf(&iovw, "N=", "%d-%s", 42, "answer"));
|
||||
ASSERT_EQ(iovw.count, 1U);
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, strlen("N=42-answer"));
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "N=42-answer", strlen("N=42-answer")), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[0].iov_base, iovw.iovec[0].iov_len, "N=42-answer", strlen("N=42-answer"));
|
||||
|
||||
/* Replacing variant */
|
||||
ASSERT_OK(iovw_replace_string_fieldf(&iovw, "N=", "%d", 7));
|
||||
ASSERT_EQ(iovw.count, 1U);
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, strlen("N=7"));
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "N=7", strlen("N=7")), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[0].iov_base, iovw.iovec[0].iov_len, "N=7", strlen("N=7"));
|
||||
}
|
||||
|
||||
TEST(iovw_put_string_field_free) {
|
||||
@@ -419,8 +404,7 @@ TEST(iovw_put_string_field_free) {
|
||||
ASSERT_NOT_NULL(v);
|
||||
ASSERT_OK(iovw_put_string_field_free(&iovw, "K=", v));
|
||||
ASSERT_EQ(iovw.count, 1U);
|
||||
ASSERT_EQ(iovw.iovec[0].iov_len, strlen("K=hello"));
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, "K=hello", strlen("K=hello")), 0);
|
||||
ASSERT_MEMEQ_NN(iovw.iovec[0].iov_base, iovw.iovec[0].iov_len, "K=hello", strlen("K=hello"));
|
||||
}
|
||||
|
||||
TEST(iovw_rebase) {
|
||||
@@ -453,9 +437,9 @@ TEST(iovw_rebase) {
|
||||
ASSERT_EQ(iovw.iovec[2].iov_len, 8U);
|
||||
|
||||
/* And the contents through the new base match what we staged there */
|
||||
ASSERT_EQ(memcmp(iovw.iovec[0].iov_base, new_base + 0, 4), 0);
|
||||
ASSERT_EQ(memcmp(iovw.iovec[1].iov_base, new_base + 10, 2), 0);
|
||||
ASSERT_EQ(memcmp(iovw.iovec[2].iov_base, new_base + 30, 8), 0);
|
||||
ASSERT_MEMEQ(iovw.iovec[0].iov_base, new_base + 0, 4);
|
||||
ASSERT_MEMEQ(iovw.iovec[1].iov_base, new_base + 10, 2);
|
||||
ASSERT_MEMEQ(iovw.iovec[2].iov_base, new_base + 30, 8);
|
||||
}
|
||||
|
||||
TEST(iovw_size) {
|
||||
@@ -485,7 +469,7 @@ TEST(iovw_concat) {
|
||||
ASSERT_OK(iovw_put(&iovw, (char*) "bar", 4));
|
||||
|
||||
ASSERT_OK(iovw_concat(&iovw, &iov));
|
||||
ASSERT_TRUE(iovec_equal(&iov, &IOVEC_MAKE("foo\0bar\0", 8)));
|
||||
ASSERT_IOVEC_EQ(&iov, &IOVEC_MAKE("foo\0bar\0", 8));
|
||||
}
|
||||
|
||||
TEST(iovw_to_cstring) {
|
||||
@@ -524,10 +508,10 @@ TEST(iovw_merge_and_iovec_split) {
|
||||
ASSERT_EQ(v.iov_len, 1 + a.iov_len);
|
||||
p = ASSERT_NOT_NULL(v.iov_base);
|
||||
ASSERT_EQ(*p++, a.iov_len);
|
||||
ASSERT_EQ(memcmp(p, a.iov_base, a.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, a.iov_base, a.iov_len);
|
||||
p += a.iov_len;
|
||||
ASSERT_OK(iovec_split(&v, sizeof(uint8_t), &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
|
||||
iovec_done(&v);
|
||||
iovw_done_free(&iovw2);
|
||||
@@ -537,10 +521,10 @@ TEST(iovw_merge_and_iovec_split) {
|
||||
p = ASSERT_NOT_NULL(v.iov_base);
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, a.iov_len);
|
||||
ASSERT_EQ(memcmp(p, a.iov_base, a.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, a.iov_base, a.iov_len);
|
||||
p += a.iov_len;
|
||||
ASSERT_OK(iovec_split(&v, sizeof(uint16_t), &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
|
||||
iovec_done(&v);
|
||||
iovw_done_free(&iovw2);
|
||||
@@ -552,10 +536,10 @@ TEST(iovw_merge_and_iovec_split) {
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, a.iov_len);
|
||||
ASSERT_EQ(memcmp(p, a.iov_base, a.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, a.iov_base, a.iov_len);
|
||||
p += a.iov_len;
|
||||
ASSERT_OK(iovec_split(&v, sizeof(uint32_t), &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
|
||||
iovec_done(&v);
|
||||
iovw_done_free(&iovw2);
|
||||
@@ -568,15 +552,15 @@ TEST(iovw_merge_and_iovec_split) {
|
||||
ASSERT_EQ(v.iov_len, 3 + a.iov_len + b.iov_len + c.iov_len);
|
||||
p = ASSERT_NOT_NULL(v.iov_base);
|
||||
ASSERT_EQ(*p++, a.iov_len);
|
||||
ASSERT_EQ(memcmp(p, a.iov_base, a.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, a.iov_base, a.iov_len);
|
||||
p += a.iov_len;
|
||||
ASSERT_EQ(*p++, b.iov_len);
|
||||
ASSERT_EQ(memcmp(p, b.iov_base, b.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, b.iov_base, b.iov_len);
|
||||
p += b.iov_len;
|
||||
ASSERT_EQ(*p++, c.iov_len);
|
||||
ASSERT_EQ(memcmp(p, c.iov_base, c.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, c.iov_base, c.iov_len);
|
||||
ASSERT_OK(iovec_split(&v, sizeof(uint8_t), &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
|
||||
iovec_done(&v);
|
||||
iovw_done_free(&iovw2);
|
||||
@@ -586,17 +570,17 @@ TEST(iovw_merge_and_iovec_split) {
|
||||
p = ASSERT_NOT_NULL(v.iov_base);
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, a.iov_len);
|
||||
ASSERT_EQ(memcmp(p, a.iov_base, a.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, a.iov_base, a.iov_len);
|
||||
p += a.iov_len;
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, b.iov_len);
|
||||
ASSERT_EQ(memcmp(p, b.iov_base, b.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, b.iov_base, b.iov_len);
|
||||
p += b.iov_len;
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, c.iov_len);
|
||||
ASSERT_EQ(memcmp(p, c.iov_base, c.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, c.iov_base, c.iov_len);
|
||||
ASSERT_OK(iovec_split(&v, sizeof(uint16_t), &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
|
||||
iovec_done(&v);
|
||||
iovw_done_free(&iovw2);
|
||||
@@ -608,21 +592,21 @@ TEST(iovw_merge_and_iovec_split) {
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, a.iov_len);
|
||||
ASSERT_EQ(memcmp(p, a.iov_base, a.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, a.iov_base, a.iov_len);
|
||||
p += a.iov_len;
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, b.iov_len);
|
||||
ASSERT_EQ(memcmp(p, b.iov_base, b.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, b.iov_base, b.iov_len);
|
||||
p += b.iov_len;
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, 0);
|
||||
ASSERT_EQ(*p++, c.iov_len);
|
||||
ASSERT_EQ(memcmp(p, c.iov_base, c.iov_len), 0);
|
||||
ASSERT_MEMEQ(p, c.iov_base, c.iov_len);
|
||||
ASSERT_OK(iovec_split(&v, sizeof(uint32_t), &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
|
||||
iovec_done(&v);
|
||||
iovw_done_free(&iovw2);
|
||||
@@ -637,7 +621,7 @@ TEST(iovw_merge_and_iovec_split) {
|
||||
with_empty.iovec[4] = c;
|
||||
ASSERT_OK(iovw_merge(&iovw, sizeof(uint8_t), &v));
|
||||
ASSERT_OK(iovw_merge(&with_empty, sizeof(uint8_t), &v2));
|
||||
ASSERT_TRUE(iovec_equal(&v, &v2));
|
||||
ASSERT_IOVEC_EQ(&v, &v2);
|
||||
|
||||
iovec_done(&v);
|
||||
iovec_done(&v2);
|
||||
@@ -655,7 +639,7 @@ TEST(iovw_merge_and_iovec_split) {
|
||||
p = mempcpy(p, c.iov_base, c.iov_len);
|
||||
*p++ = 0;
|
||||
ASSERT_OK(iovec_split(&IOVEC_MAKE(buf, sz), sizeof(uint8_t), &iovw2));
|
||||
ASSERT_TRUE(iovw_equal(&iovw, &iovw2));
|
||||
ASSERT_IOVW_EQ(&iovw, &iovw2);
|
||||
|
||||
iovw_done_free(&iovw2);
|
||||
|
||||
@@ -672,7 +656,7 @@ TEST(iovw_merge_and_iovec_split) {
|
||||
ASSERT_OK(iovw_merge(&(struct iovec_wrapper) { .iovec = &large, .count = 1, }, sizeof(uint16_t), &v));
|
||||
ASSERT_OK(iovec_split(&v, sizeof(uint16_t), &iovw2));
|
||||
ASSERT_EQ(iovw2.count, 1u);
|
||||
ASSERT_TRUE(iovec_equal(&iovw2.iovec[0], &large));
|
||||
ASSERT_IOVEC_EQ(&iovw2.iovec[0], &large);
|
||||
|
||||
iovec_done(&v);
|
||||
iovw_done_free(&iovw2);
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
#include "tests.h"
|
||||
|
||||
static void assert_iovec_entry(const struct iovec *iovec, const char* content) {
|
||||
ASSERT_EQ(strlen(content), iovec->iov_len);
|
||||
ASSERT_EQ(memcmp(content, iovec->iov_base, iovec->iov_len), 0);
|
||||
ASSERT_MEMEQ_NN(content, strlen(content), iovec->iov_base, iovec->iov_len);
|
||||
}
|
||||
|
||||
#define COREDUMP_PROC_GROUP \
|
||||
|
||||
@@ -33,8 +33,7 @@ static void assert_decompressed(int fd) {
|
||||
|
||||
ASSERT_OK_POSITIVE(kernel_decompress(fd, &decompressed_fd));
|
||||
ASSERT_OK(read_full_file_full(decompressed_fd, /* filename= */ NULL, UINT64_MAX, SIZE_MAX, /* flags= */ 0, /* bind_name= */ NULL, &data, &size));
|
||||
ASSERT_EQ(size, strlen(banner));
|
||||
ASSERT_EQ(memcmp(data, banner, size), 0);
|
||||
ASSERT_MEMEQ_NN(data, size, banner, strlen(banner));
|
||||
}
|
||||
|
||||
static void assert_uname(int fd, const char *expected) {
|
||||
|
||||
@@ -133,7 +133,7 @@ TEST(gzip_round_trip) {
|
||||
/* Verify the decompressed content matches the original */
|
||||
char result[4096];
|
||||
ASSERT_OK_EQ_ERRNO(pread(kernel_fd, result, sizeof(result), 0), (ssize_t) sizeof(result));
|
||||
ASSERT_EQ(memcmp(buf, result, sizeof(buf)), 0);
|
||||
ASSERT_MEMEQ(buf, result, sizeof(buf));
|
||||
}
|
||||
|
||||
TEST(zboot_synthetic) {
|
||||
@@ -199,7 +199,7 @@ TEST(zboot_synthetic) {
|
||||
/* Verify decompressed content matches original payload */
|
||||
char result[512];
|
||||
ASSERT_OK_EQ_ERRNO(pread(kernel_fd, result, sizeof(result), 0), (ssize_t) sizeof(result));
|
||||
ASSERT_EQ(memcmp(payload, result, sizeof(payload)), 0);
|
||||
ASSERT_MEMEQ(payload, result, sizeof(payload));
|
||||
}
|
||||
|
||||
TEST(system_kernel) {
|
||||
|
||||
+5
-5
@@ -102,9 +102,9 @@ static void test_log_format_iovec_sentinel(
|
||||
|
||||
for (size_t i = 0; i < n; i++)
|
||||
if (i < m)
|
||||
ASSERT_TRUE(iovec_equal(&iovec[i], &IOVEC_MAKE_STRING(v[i])));
|
||||
ASSERT_IOVEC_EQ(&iovec[i], &IOVEC_MAKE_STRING(v[i]));
|
||||
else {
|
||||
ASSERT_TRUE(iovec_equal(&iovec[i], &IOVEC_MAKE_STRING(expected[i - m])));
|
||||
ASSERT_IOVEC_EQ(&iovec[i], &IOVEC_MAKE_STRING(expected[i - m]));
|
||||
free(iovec[i].iov_base);
|
||||
}
|
||||
|
||||
@@ -120,12 +120,12 @@ static void test_log_format_iovec_sentinel(
|
||||
|
||||
for (size_t i = 0; i < n; i++)
|
||||
if (i < m)
|
||||
ASSERT_TRUE(iovec_equal(&iovec[i], &IOVEC_MAKE_STRING(v[i])));
|
||||
ASSERT_IOVEC_EQ(&iovec[i], &IOVEC_MAKE_STRING(v[i]));
|
||||
else if ((i - m) % 2 == 0) {
|
||||
ASSERT_TRUE(iovec_equal(&iovec[i], &IOVEC_MAKE_STRING(expected[(i - m) / 2])));
|
||||
ASSERT_IOVEC_EQ(&iovec[i], &IOVEC_MAKE_STRING(expected[(i - m) / 2]));
|
||||
free(iovec[i].iov_base);
|
||||
} else
|
||||
ASSERT_TRUE(iovec_equal(&iovec[i], &IOVEC_MAKE_STRING("\n")));
|
||||
ASSERT_IOVEC_EQ(&iovec[i], &IOVEC_MAKE_STRING("\n"));
|
||||
}
|
||||
|
||||
#define test_log_format_iovec_one(...) \
|
||||
|
||||
@@ -41,7 +41,7 @@ static void assert_digest(const struct iovec *digest, const char *hex) {
|
||||
_cleanup_(iovec_done) struct iovec expected = {};
|
||||
|
||||
ASSERT_OK(unhexmem(hex, &expected.iov_base, &expected.iov_len));
|
||||
ASSERT_EQ(iovec_memcmp(digest, &expected), 0);
|
||||
ASSERT_IOVEC_EQ(digest, &expected);
|
||||
}
|
||||
|
||||
TEST(manifest_parse_sums) {
|
||||
@@ -871,13 +871,13 @@ TEST(uapi16_dispatch) {
|
||||
ASSERT_TRUE(o.user_xattrs_set);
|
||||
ASSERT_EQ(o.n_user_xattrs, 4U);
|
||||
ASSERT_STREQ(o.user_xattrs[0].name, "a");
|
||||
ASSERT_EQ(iovec_memcmp(&o.user_xattrs[0].value, &IOVEC_MAKE_STRING("hello")), 0);
|
||||
ASSERT_IOVEC_EQ(&o.user_xattrs[0].value, &IOVEC_MAKE_STRING("hello"));
|
||||
ASSERT_STREQ(o.user_xattrs[1].name, "b");
|
||||
ASSERT_EQ(iovec_memcmp(&o.user_xattrs[1].value, &IOVEC_MAKE("\x00\x01\x02\x03", 4)), 0);
|
||||
ASSERT_IOVEC_EQ(&o.user_xattrs[1].value, &IOVEC_MAKE("\x00\x01\x02\x03", 4));
|
||||
ASSERT_STREQ(o.user_xattrs[2].name, "e");
|
||||
ASSERT_EQ(o.user_xattrs[2].value.iov_len, 0U);
|
||||
ASSERT_STREQ(o.user_xattrs[3].name, "u");
|
||||
ASSERT_EQ(iovec_memcmp(&o.user_xattrs[3].value, &IOVEC_MAKE("\xfb\xff", 2)), 0);
|
||||
ASSERT_IOVEC_EQ(&o.user_xattrs[3].value, &IOVEC_MAKE("\xfb\xff", 2));
|
||||
|
||||
/* … and they round-trip */
|
||||
_cleanup_(sd_json_variant_unrefp) sd_json_variant *x = NULL;
|
||||
|
||||
@@ -36,18 +36,18 @@ TEST(cleanup_array) {
|
||||
saved_n = n;
|
||||
|
||||
{
|
||||
ASSERT_TRUE(memeqbyte('x', saved_iov, sizeof(struct iovec) * saved_n));
|
||||
ASSERT_MEMEQ_BYTE('x', saved_iov, sizeof(struct iovec) * saved_n);
|
||||
ASSERT_NOT_NULL(iov);
|
||||
ASSERT_GT(n, 0U);
|
||||
|
||||
CLEANUP_ARRAY(iov, n, my_destructor);
|
||||
|
||||
ASSERT_TRUE(memeqbyte('x', saved_iov, sizeof(struct iovec) * saved_n));
|
||||
ASSERT_MEMEQ_BYTE('x', saved_iov, sizeof(struct iovec) * saved_n);
|
||||
ASSERT_NOT_NULL(iov);
|
||||
ASSERT_GT(n, 0U);
|
||||
}
|
||||
|
||||
ASSERT_TRUE(memeqbyte('y', saved_iov, sizeof(struct iovec) * saved_n));
|
||||
ASSERT_MEMEQ_BYTE('y', saved_iov, sizeof(struct iovec) * saved_n);
|
||||
ASSERT_NULL(iov);
|
||||
ASSERT_EQ(n, 0U);
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "local-addresses.h"
|
||||
#include "log.h"
|
||||
#include "main-func.h"
|
||||
#include "memory-util.h"
|
||||
#include "nss-test-util.h"
|
||||
#include "nss-util.h"
|
||||
#include "parse-util.h"
|
||||
@@ -72,9 +71,9 @@ static void assert_myhostname_gaih_addrtuples(const struct gaih_addrtuple *tuple
|
||||
|
||||
for (const struct gaih_addrtuple *it = tuples; it; it = it->next)
|
||||
if (it->family == AF_INET)
|
||||
ASSERT_TRUE(memeqzero(
|
||||
ASSERT_MEMEQ_ZERO(
|
||||
(const uint8_t*) it->addr + sizeof(struct in_addr),
|
||||
sizeof(it->addr) - sizeof(struct in_addr)));
|
||||
sizeof(it->addr) - sizeof(struct in_addr));
|
||||
}
|
||||
|
||||
static void print_struct_hostent(struct hostent *host, const char *canon) {
|
||||
|
||||
@@ -93,7 +93,7 @@ static void test_strv_make_nulstr_one(char **l) {
|
||||
ASSERT_STRV_EQ(l, q);
|
||||
|
||||
ASSERT_OK(strv_make_nulstr(q, &c, &m));
|
||||
ASSERT_EQ(memcmp_nn(b, n, c, m), 0);
|
||||
ASSERT_MEMEQ_NN(b, n, c, m);
|
||||
|
||||
NULSTR_FOREACH(s, b)
|
||||
ASSERT_STREQ(s, l[i++]);
|
||||
@@ -119,7 +119,7 @@ TEST(set_make_nulstr) {
|
||||
|
||||
ASSERT_OK_ZERO(set_make_nulstr(set, &nulstr, &len));
|
||||
ASSERT_EQ(len, 0U);
|
||||
ASSERT_EQ(memcmp(expect, nulstr, len + 2), 0);
|
||||
ASSERT_MEMEQ(expect, nulstr, len + 2);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -131,7 +131,7 @@ TEST(set_make_nulstr) {
|
||||
|
||||
ASSERT_OK_ZERO(set_make_nulstr(set, &nulstr, &len));
|
||||
ASSERT_EQ(len, 0U);
|
||||
ASSERT_EQ(memcmp(expect, nulstr, len + 2), 0);
|
||||
ASSERT_MEMEQ(expect, nulstr, len + 2);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -143,7 +143,7 @@ TEST(set_make_nulstr) {
|
||||
|
||||
ASSERT_OK_ZERO(set_make_nulstr(set, &nulstr, &len));
|
||||
ASSERT_EQ(len, 4U);
|
||||
ASSERT_EQ(memcmp(expect, nulstr, len + 1), 0);
|
||||
ASSERT_MEMEQ(expect, nulstr, len + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ static void test_strv_make_nulstr_binary_one(char **l, const char *b, size_t n)
|
||||
size_t m;
|
||||
|
||||
ASSERT_OK(strv_make_nulstr(l, &a, &m));
|
||||
ASSERT_EQ(memcmp_nn(a, m, b, n), 0);
|
||||
ASSERT_MEMEQ_NN(a, m, b, n);
|
||||
ASSERT_NOT_NULL(z = strv_parse_nulstr(a, m));
|
||||
ASSERT_STRV_EQ(l, z);
|
||||
}
|
||||
|
||||
Loaded 100 of 121 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user