mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 00:14:32 +09:00
test-journald-config: Modernize test
This commit is contained in:
@@ -5,90 +5,76 @@
|
||||
#include <sys/un.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "journald-manager.h"
|
||||
#include "journald-config.h"
|
||||
#include "log.h"
|
||||
#include "socket-util.h"
|
||||
#include "sparse-endian.h"
|
||||
#include "tests.h"
|
||||
|
||||
#define _COMPRESS_PARSE_CHECK(str, enab, thresh, varname) \
|
||||
do { \
|
||||
JournalCompressOptions varname = {-222, 111}; \
|
||||
config_parse_compress("", "", 0, "", 0, "", 0, str, \
|
||||
&varname, NULL); \
|
||||
assert_se((enab) == varname.enabled); \
|
||||
if (varname.enabled) \
|
||||
assert_se((thresh) == varname.threshold_bytes); \
|
||||
} while (0)
|
||||
static void compress_parse_check(const char *str, int expected_enabled, uint64_t expected_threshold) {
|
||||
JournalCompressOptions conf = { .enabled = -222, .threshold_bytes = 111 };
|
||||
|
||||
#define COMPRESS_PARSE_CHECK(str, enabled, threshold) \
|
||||
_COMPRESS_PARSE_CHECK(str, enabled, threshold, conf##__COUNTER__)
|
||||
ASSERT_OK(config_parse_compress("", "", 0, "", 0, "", 0, str, &conf, NULL));
|
||||
ASSERT_EQ(expected_enabled, conf.enabled);
|
||||
if (conf.enabled)
|
||||
ASSERT_EQ(expected_threshold, conf.threshold_bytes);
|
||||
}
|
||||
|
||||
TEST(config_compress) {
|
||||
COMPRESS_PARSE_CHECK("yes", true, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("no", false, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("y", true, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("n", false, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("true", true, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("false", false, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("t", true, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("f", false, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("on", true, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("off", false, UINT64_MAX);
|
||||
compress_parse_check("yes", true, UINT64_MAX);
|
||||
compress_parse_check("no", false, UINT64_MAX);
|
||||
compress_parse_check("y", true, UINT64_MAX);
|
||||
compress_parse_check("n", false, UINT64_MAX);
|
||||
compress_parse_check("true", true, UINT64_MAX);
|
||||
compress_parse_check("false", false, UINT64_MAX);
|
||||
compress_parse_check("t", true, UINT64_MAX);
|
||||
compress_parse_check("f", false, UINT64_MAX);
|
||||
compress_parse_check("on", true, UINT64_MAX);
|
||||
compress_parse_check("off", false, UINT64_MAX);
|
||||
|
||||
/* Weird size/bool overlapping case. We preserve backward compatibility instead of assuming these are byte
|
||||
* counts. */
|
||||
COMPRESS_PARSE_CHECK("1", true, UINT64_MAX);
|
||||
COMPRESS_PARSE_CHECK("0", false, UINT64_MAX);
|
||||
compress_parse_check("1", true, UINT64_MAX);
|
||||
compress_parse_check("0", false, UINT64_MAX);
|
||||
|
||||
/* IEC sizing */
|
||||
COMPRESS_PARSE_CHECK("1B", true, 1);
|
||||
COMPRESS_PARSE_CHECK("1K", true, 1024);
|
||||
COMPRESS_PARSE_CHECK("1M", true, 1024 * 1024);
|
||||
COMPRESS_PARSE_CHECK("1G", true, 1024 * 1024 * 1024);
|
||||
compress_parse_check("1B", true, 1);
|
||||
compress_parse_check("1K", true, 1024);
|
||||
compress_parse_check("1M", true, 1024 * 1024);
|
||||
compress_parse_check("1G", true, 1024 * 1024 * 1024);
|
||||
|
||||
/* Invalid Case */
|
||||
COMPRESS_PARSE_CHECK("-1", -222, 111);
|
||||
COMPRESS_PARSE_CHECK("blah blah", -222, 111);
|
||||
COMPRESS_PARSE_CHECK("", -1, UINT64_MAX);
|
||||
compress_parse_check("-1", -222, 111);
|
||||
compress_parse_check("blah blah", -222, 111);
|
||||
compress_parse_check("", -1, UINT64_MAX);
|
||||
}
|
||||
|
||||
#define _FORWARD_TO_SOCKET_PARSE_CHECK_FAILS(str, addr, varname) \
|
||||
do { \
|
||||
SocketAddress varname = {}; \
|
||||
config_parse_forward_to_socket("", "", 0, "", 0, "", 0, str, \
|
||||
&varname, NULL); \
|
||||
assert_se(socket_address_verify(&varname, true) < 0); \
|
||||
} while (0)
|
||||
static void forward_to_socket_parse_check_fails(const char *str) {
|
||||
SocketAddress conf = {};
|
||||
|
||||
#define FORWARD_TO_SOCKET_PARSE_CHECK_FAILS(str) \
|
||||
_FORWARD_TO_SOCKET_PARSE_CHECK_FAILS(str, addr, conf##__COUNTER__)
|
||||
ASSERT_OK(config_parse_forward_to_socket("", "", 0, "", 0, "", 0, str, &conf, NULL));
|
||||
ASSERT_FAIL(socket_address_verify(&conf, true));
|
||||
}
|
||||
|
||||
#define _FORWARD_TO_SOCKET_PARSE_CHECK(str, addr, varname) \
|
||||
do { \
|
||||
SocketAddress varname = {}; \
|
||||
config_parse_forward_to_socket("", "", 0, "", 0, "", 0, str, \
|
||||
&varname, NULL); \
|
||||
buf = mfree(buf); \
|
||||
buf2 = mfree(buf2); \
|
||||
socket_address_print(&varname, &buf); \
|
||||
socket_address_print(&addr, &buf2); \
|
||||
log_info("\"%s\" parsed as \"%s\", should be \"%s\"", str, buf, buf2); \
|
||||
log_info("socket_address_verify(&addr, false) = %d", socket_address_verify(&addr, false)); \
|
||||
log_info("socket_address_verify(&varname, false) = %d", socket_address_verify(&varname, false)); \
|
||||
log_info("socket_address_family(&addr) = %d", socket_address_family(&addr)); \
|
||||
log_info("socket_address_family(&varname) = %d", socket_address_family(&varname)); \
|
||||
log_info("addr.size = %u", addr.size); \
|
||||
log_info("varname.size = %u", varname.size); \
|
||||
assert_se(socket_address_equal(&varname, &addr)); \
|
||||
} while (0)
|
||||
static void forward_to_socket_parse_check(const char *str, const SocketAddress *expected_addr) {
|
||||
_cleanup_free_ char *buf = NULL, *buf2 = NULL;
|
||||
SocketAddress conf = {};
|
||||
|
||||
#define FORWARD_TO_SOCKET_PARSE_CHECK(str, addr) \
|
||||
_FORWARD_TO_SOCKET_PARSE_CHECK(str, addr, conf##__COUNTER__)
|
||||
ASSERT_OK(config_parse_forward_to_socket("", "", 0, "", 0, "", 0, str, &conf, NULL));
|
||||
ASSERT_OK(socket_address_print(&conf, &buf));
|
||||
ASSERT_OK(socket_address_print(expected_addr, &buf2));
|
||||
log_info("\"%s\" parsed as \"%s\", should be \"%s\"", str, buf, buf2);
|
||||
log_info("socket_address_verify(&expected_addr, false) = %d", socket_address_verify(expected_addr, false));
|
||||
log_info("socket_address_verify(&conf, false) = %d", socket_address_verify(&conf, false));
|
||||
log_info("socket_address_family(&expected_addr) = %d", socket_address_family(expected_addr));
|
||||
log_info("socket_address_family(&conf) = %d", socket_address_family(&conf));
|
||||
log_info("expected_addr.size = %u", expected_addr->size);
|
||||
log_info("conf.size = %u", conf.size);
|
||||
ASSERT_TRUE(socket_address_equal(&conf, expected_addr));
|
||||
}
|
||||
|
||||
TEST(config_forward_to_socket) {
|
||||
SocketAddress addr;
|
||||
_cleanup_free_ char *buf = NULL, *buf2 = NULL;
|
||||
|
||||
/* Valid AF_UNIX */
|
||||
addr = (SocketAddress) {
|
||||
@@ -98,11 +84,11 @@ TEST(config_forward_to_socket) {
|
||||
},
|
||||
.size = offsetof(struct sockaddr_un, sun_path) + strlen("/run/host/journal/socket") + 1,
|
||||
};
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK("/run/host/journal/socket", addr);
|
||||
forward_to_socket_parse_check("/run/host/journal/socket", &addr);
|
||||
|
||||
addr.size -= 1;
|
||||
memcpy(addr.sockaddr.un.sun_path, "\0run/host/journal/socket", sizeof("\0run/host/journal/socket"));
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK("@run/host/journal/socket", addr);
|
||||
forward_to_socket_parse_check("@run/host/journal/socket", &addr);
|
||||
|
||||
/* Valid AF_INET */
|
||||
addr = (SocketAddress) {
|
||||
@@ -113,7 +99,7 @@ TEST(config_forward_to_socket) {
|
||||
},
|
||||
.size = sizeof(struct sockaddr_in),
|
||||
};
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK("192.168.0.1:1234", addr);
|
||||
forward_to_socket_parse_check("192.168.0.1:1234", &addr);
|
||||
|
||||
/* Valid AF_INET6 */
|
||||
addr = (SocketAddress) {
|
||||
@@ -133,7 +119,7 @@ TEST(config_forward_to_socket) {
|
||||
},
|
||||
.size = sizeof(struct sockaddr_in6),
|
||||
};
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK("[2001:db8:4006:812::200e]:8080", addr);
|
||||
forward_to_socket_parse_check("[2001:db8:4006:812::200e]:8080", &addr);
|
||||
|
||||
/* Valid AF_VSOCK */
|
||||
addr = (SocketAddress) {
|
||||
@@ -144,34 +130,34 @@ TEST(config_forward_to_socket) {
|
||||
},
|
||||
.size = sizeof(struct sockaddr_vm),
|
||||
};
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK("vsock:123456:654321", addr);
|
||||
forward_to_socket_parse_check("vsock:123456:654321", &addr);
|
||||
|
||||
/* Invalid IPv4 */
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("256.123.45.12:1235");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("252.123.45.12:123500");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("252.123.45.12:0");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("252.123.45.12:-1");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("-1.123.45.12:22");
|
||||
forward_to_socket_parse_check_fails("256.123.45.12:1235");
|
||||
forward_to_socket_parse_check_fails("252.123.45.12:123500");
|
||||
forward_to_socket_parse_check_fails("252.123.45.12:0");
|
||||
forward_to_socket_parse_check_fails("252.123.45.12:-1");
|
||||
forward_to_socket_parse_check_fails("-1.123.45.12:22");
|
||||
|
||||
/* Invalid IPv6 */
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("[2001:db8:4006:812::200e]:80800");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("[1ffff:db8:4006:812::200e]:8080");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("[-1:db8:4006:812::200e]:8080");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("[2001:db8:4006:812::200e]:-1");
|
||||
forward_to_socket_parse_check_fails("[2001:db8:4006:812::200e]:80800");
|
||||
forward_to_socket_parse_check_fails("[1ffff:db8:4006:812::200e]:8080");
|
||||
forward_to_socket_parse_check_fails("[-1:db8:4006:812::200e]:8080");
|
||||
forward_to_socket_parse_check_fails("[2001:db8:4006:812::200e]:-1");
|
||||
|
||||
/* Invalid UNIX */
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("a/b/c");
|
||||
forward_to_socket_parse_check_fails("a/b/c");
|
||||
|
||||
/* Invalid VSock */
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("vsock:4294967296:1234");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("vsock:1234:4294967296");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("vsock:abcd:1234");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("vsock:1234:abcd");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("vsock:1234");
|
||||
forward_to_socket_parse_check_fails("vsock:4294967296:1234");
|
||||
forward_to_socket_parse_check_fails("vsock:1234:4294967296");
|
||||
forward_to_socket_parse_check_fails("vsock:abcd:1234");
|
||||
forward_to_socket_parse_check_fails("vsock:1234:abcd");
|
||||
forward_to_socket_parse_check_fails("vsock:1234");
|
||||
|
||||
/* Invalid Case */
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("");
|
||||
FORWARD_TO_SOCKET_PARSE_CHECK_FAILS("ahh yes sockets, mmh");
|
||||
forward_to_socket_parse_check_fails("");
|
||||
forward_to_socket_parse_check_fails("ahh yes sockets, mmh");
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_INFO);
|
||||
|
||||
Reference in New Issue
Block a user