]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-load-fragment: add unit test for RefreshOnReload= parser
authorMike Yuan <me@yhndnzj.com>
Tue, 10 Feb 2026 06:34:57 +0000 (07:34 +0100)
committerMike Yuan <me@yhndnzj.com>
Tue, 10 Feb 2026 20:54:13 +0000 (21:54 +0100)
src/test/test-load-fragment.c

index 9ddc8a2eba2b85c97ec3c7d3b2f920747c99b7ad..892e471d8ab0cc10b00cda7cab4ebd53adb0af23 100644 (file)
@@ -21,6 +21,7 @@
 #include "open-file.h"
 #include "pcre2-util.h"
 #include "rm-rf.h"
+#include "service.h"
 #include "set.h"
 #include "specifier.h"
 #include "string-util.h"
@@ -1033,6 +1034,86 @@ TEST(config_parse_open_file) {
         ASSERT_NULL(of);
 }
 
+TEST(config_parse_service_refresh_on_reload) {
+        ServiceRefreshOnReload flags;
+        _cleanup_strv_free_ char **l = NULL;
+        int r;
+
+        r = service_refresh_on_reload_from_string_many("extensions", &flags);
+        ASSERT_OK(r);
+        ASSERT_EQ(flags, SERVICE_RELOAD_EXTENSIONS);
+        ASSERT_OK(service_refresh_on_reload_to_strv(flags, &l));
+        ASSERT_TRUE(strv_equal(l, STRV_MAKE("extensions")));
+
+        l = strv_free(l);
+
+        r = service_refresh_on_reload_from_string_many("credentials extensions", &flags);
+        ASSERT_OK(r);
+        ASSERT_EQ(flags, SERVICE_RELOAD_EXTENSIONS|SERVICE_RELOAD_CREDENTIALS);
+        ASSERT_OK(service_refresh_on_reload_to_strv(flags, &l));
+        ASSERT_TRUE(strv_equal(l, STRV_MAKE("extensions", "credentials")));
+
+        ASSERT_ERROR(service_refresh_on_reload_from_string_many("hoge", &flags), EINVAL);
+
+        _cleanup_(manager_freep) Manager *m = NULL;
+        _cleanup_(unit_freep) Unit *u = NULL;
+
+        r = manager_new(RUNTIME_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+        if (manager_errno_skip_test(r)) {
+                log_notice_errno(r, "Skipping test: manager_new: %m");
+                return;
+        }
+
+        ASSERT_OK(r);
+        ASSERT_OK(manager_startup(m, NULL, NULL, NULL));
+
+        ASSERT_NOT_NULL(u = unit_new(m, sizeof(Service)));
+        ASSERT_OK_ZERO(unit_add_name(u, "foobar.service"));
+
+        ASSERT_FALSE(SERVICE(u)->refresh_on_reload_set);
+
+        ASSERT_OK(config_parse_service_refresh_on_reload(
+                                NULL, "fake", 1, "section", 1,
+                                "RefreshOnReload", 0, "no",
+                                NULL, u));
+        ASSERT_TRUE(SERVICE(u)->refresh_on_reload_set);
+        ASSERT_EQ(SERVICE(u)->refresh_on_reload_flags, 0);
+
+        ASSERT_OK(config_parse_service_refresh_on_reload(
+                                NULL, "fake", 1, "section", 1,
+                                "RefreshOnReload", 0, "yes",
+                                NULL, u));
+        ASSERT_TRUE(SERVICE(u)->refresh_on_reload_set);
+        ASSERT_EQ(SERVICE(u)->refresh_on_reload_flags, _SERVICE_REFRESH_ON_RELOAD_ALL);
+
+        ASSERT_OK(config_parse_service_refresh_on_reload(
+                                NULL, "fake", 1, "section", 1,
+                                "RefreshOnReload", 0, "~extensions",
+                                NULL, u));
+        ASSERT_TRUE(SERVICE(u)->refresh_on_reload_set);
+        ASSERT_EQ(SERVICE(u)->refresh_on_reload_flags, _SERVICE_REFRESH_ON_RELOAD_ALL & ~SERVICE_RELOAD_EXTENSIONS);
+
+        ASSERT_OK(config_parse_service_refresh_on_reload(
+                                NULL, "fake", 1, "section", 1,
+                                "RefreshOnReload", 0, "~extensions credentials",
+                                NULL, u));
+        ASSERT_TRUE(SERVICE(u)->refresh_on_reload_set);
+        ASSERT_EQ(SERVICE(u)->refresh_on_reload_flags, 0);
+
+        ASSERT_OK(config_parse_service_refresh_on_reload(
+                                NULL, "fake", 1, "section", 1,
+                                "RefreshOnReload", 0, "",
+                                NULL, u));
+        ASSERT_FALSE(SERVICE(u)->refresh_on_reload_set);
+
+        ASSERT_OK(config_parse_service_refresh_on_reload(
+                                NULL, "fake", 1, "section", 1,
+                                "RefreshOnReload", 0, "~extensions",
+                                NULL, u));
+        ASSERT_TRUE(SERVICE(u)->refresh_on_reload_set);
+        ASSERT_EQ(SERVICE(u)->refresh_on_reload_flags, SERVICE_REFRESH_ON_RELOAD_DEFAULT & ~SERVICE_RELOAD_EXTENSIONS);
+}
+
 static int intro(void) {
         if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
                 return log_tests_skipped("cgroupfs not available");