]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-os-util.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
11 #include "string-util.h"
14 #include "tmpfile-util.h"
16 TEST(path_is_os_tree
) {
17 assert_se(path_is_os_tree("/") > 0);
18 assert_se(path_is_os_tree("/etc") == 0);
19 assert_se(path_is_os_tree("/idontexist") == -ENOENT
);
22 TEST(parse_os_release
) {
23 /* Let's assume that we're running in a valid system, so os-release is available */
24 _cleanup_free_
char *id
= NULL
, *id2
= NULL
, *name
= NULL
, *foobar
= NULL
;
25 assert_se(parse_os_release(NULL
, "ID", &id
) == 0);
26 log_info("ID: %s", id
);
28 assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
29 assert_se(parse_os_release(NULL
, "ID", &id2
) == 0);
30 log_info("ID: %s", strnull(id2
));
32 _cleanup_(unlink_tempfilep
) char tmpfile
[] = "/tmp/test-os-util.XXXXXX";
33 assert_se(write_tmpfile(tmpfile
,
35 "NAME=the-name") == 0);
37 assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile
, 1) == 0);
38 assert_se(parse_os_release(NULL
, "ID", &id
, "NAME", &name
) == 0);
39 log_info("ID: %s NAME: %s", id
, name
);
40 assert_se(streq(id
, "the-id"));
41 assert_se(streq(name
, "the-name"));
43 _cleanup_(unlink_tempfilep
) char tmpfile2
[] = "/tmp/test-os-util.XXXXXX";
44 assert_se(write_tmpfile(tmpfile2
,
47 "NAME='the-name'") == 0);
49 assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile2
, 1) == 0);
50 assert_se(parse_os_release(NULL
, "ID", &id
, "NAME", &name
) == 0);
51 log_info("ID: %s NAME: %s", id
, name
);
52 assert_se(streq(id
, "the-id"));
53 assert_se(streq(name
, "the-name"));
55 assert_se(parse_os_release(NULL
, "FOOBAR", &foobar
) == 0);
56 log_info("FOOBAR: %s", strnull(foobar
));
57 assert_se(foobar
== NULL
);
59 assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
62 TEST(parse_extension_release
) {
63 /* Let's assume that we have a valid extension image */
64 _cleanup_free_
char *id
= NULL
, *version_id
= NULL
, *foobar
= NULL
, *a
= NULL
, *b
= NULL
;
65 _cleanup_(rm_rf_physical_and_freep
) char *tempdir
= NULL
;
67 int r
= mkdtemp_malloc("/tmp/test-os-util.XXXXXX", &tempdir
);
69 log_error_errno(r
, "Failed to setup working directory: %m");
71 assert_se(a
= path_join(tempdir
, "/usr/lib/extension-release.d/extension-release.test"));
72 assert_se(mkdir_parents(a
, 0777) >= 0);
74 r
= write_string_file(a
, "ID=the-id \n VERSION_ID=the-version-id", WRITE_STRING_FILE_CREATE
);
76 log_error_errno(r
, "Failed to write file: %m");
78 assert_se(parse_extension_release(tempdir
, IMAGE_SYSEXT
, "test", false, "ID", &id
, "VERSION_ID", &version_id
) == 0);
79 log_info("ID: %s VERSION_ID: %s", id
, version_id
);
80 assert_se(streq(id
, "the-id"));
81 assert_se(streq(version_id
, "the-version-id"));
83 assert_se(b
= path_join(tempdir
, "/etc/extension-release.d/extension-release.tester"));
84 assert_se(mkdir_parents(b
, 0777) >= 0);
86 r
= write_string_file(b
, "ID=\"ignored\" \n ID=\"the-id\" \n VERSION_ID='the-version-id'", WRITE_STRING_FILE_CREATE
);
88 log_error_errno(r
, "Failed to write file: %m");
90 assert_se(parse_extension_release(tempdir
, IMAGE_CONFEXT
, "tester", false, "ID", &id
, "VERSION_ID", &version_id
) == 0);
91 log_info("ID: %s VERSION_ID: %s", id
, version_id
);
92 assert_se(streq(id
, "the-id"));
93 assert_se(streq(version_id
, "the-version-id"));
95 assert_se(parse_extension_release(tempdir
, IMAGE_CONFEXT
, "tester", false, "FOOBAR", &foobar
) == 0);
96 log_info("FOOBAR: %s", strnull(foobar
));
97 assert_se(foobar
== NULL
);
99 assert_se(parse_extension_release(tempdir
, IMAGE_SYSEXT
, "test", false, "FOOBAR", &foobar
) == 0);
100 log_info("FOOBAR: %s", strnull(foobar
));
101 assert_se(foobar
== NULL
);
104 TEST(load_os_release_pairs
) {
105 _cleanup_(unlink_tempfilep
) char tmpfile
[] = "/tmp/test-os-util.XXXXXX";
106 assert_se(write_tmpfile(tmpfile
,
109 "NAME='the-name'") == 0);
111 assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile
, 1) == 0);
113 _cleanup_strv_free_
char **pairs
= NULL
;
114 assert_se(load_os_release_pairs(NULL
, &pairs
) == 0);
115 assert_se(strv_equal(pairs
, STRV_MAKE("ID", "the-id",
116 "NAME", "the-name")));
118 assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
121 TEST(os_release_support_ended
) {
124 assert_se(os_release_support_ended("1999-01-01", false, NULL
) == true);
125 assert_se(os_release_support_ended("2037-12-31", false, NULL
) == false);
126 assert_se(os_release_support_ended("-1-1-1", true, NULL
) == -EINVAL
);
128 r
= os_release_support_ended(NULL
, false, NULL
);
130 log_info_errno(r
, "Failed to check host: %m");
132 log_info_errno(r
, "Host is supported: %s", yes_no(!r
));
135 DEFINE_TEST_MAIN(LOG_DEBUG
);