| /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
| |
| #include <errno.h> |
| |
| #include "fs-util.h" |
| #include "log.h" |
| #include "os-util.h" |
| #include "string-util.h" |
| #include "strv.h" |
| #include "tests.h" |
| |
| TEST(path_is_os_tree) { |
| assert_se(path_is_os_tree("/") > 0); |
| assert_se(path_is_os_tree("/etc") == 0); |
| assert_se(path_is_os_tree("/idontexist") == -ENOENT); |
| } |
| |
| TEST(parse_os_release) { |
| /* Let's assume that we're running in a valid system, so os-release is available */ |
| _cleanup_free_ char *id = NULL, *id2 = NULL, *name = NULL, *foobar = NULL; |
| assert_se(parse_os_release(NULL, "ID", &id) == 0); |
| log_info("ID: %s", id); |
| |
| assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0); |
| assert_se(parse_os_release(NULL, "ID", &id2) == 0); |
| log_info("ID: %s", strnull(id2)); |
| |
| _cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX"; |
| assert_se(write_tmpfile(tmpfile, |
| "ID=the-id \n" |
| "NAME=the-name") == 0); |
| |
| assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0); |
| assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0); |
| log_info("ID: %s NAME: %s", id, name); |
| assert_se(streq(id, "the-id")); |
| assert_se(streq(name, "the-name")); |
| |
| _cleanup_(unlink_tempfilep) char tmpfile2[] = "/tmp/test-os-util.XXXXXX"; |
| assert_se(write_tmpfile(tmpfile2, |
| "ID=\"ignored\" \n" |
| "ID=\"the-id\" \n" |
| "NAME='the-name'") == 0); |
| |
| assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile2, 1) == 0); |
| assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0); |
| log_info("ID: %s NAME: %s", id, name); |
| assert_se(streq(id, "the-id")); |
| assert_se(streq(name, "the-name")); |
| |
| assert_se(parse_os_release(NULL, "FOOBAR", &foobar) == 0); |
| log_info("FOOBAR: %s", strnull(foobar)); |
| assert_se(foobar == NULL); |
| |
| assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0); |
| } |
| |
| TEST(load_os_release_pairs) { |
| _cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX"; |
| assert_se(write_tmpfile(tmpfile, |
| "ID=\"ignored\" \n" |
| "ID=\"the-id\" \n" |
| "NAME='the-name'") == 0); |
| |
| assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0); |
| |
| _cleanup_strv_free_ char **pairs = NULL; |
| assert_se(load_os_release_pairs(NULL, &pairs) == 0); |
| assert_se(strv_equal(pairs, STRV_MAKE("ID", "the-id", |
| "NAME", "the-name"))); |
| |
| assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0); |
| } |
| |
| TEST(os_release_support_ended) { |
| int r; |
| |
| assert_se(os_release_support_ended("1999-01-01", false, NULL) == true); |
| assert_se(os_release_support_ended("2037-12-31", false, NULL) == false); |
| assert_se(os_release_support_ended("-1-1-1", true, NULL) == -EINVAL); |
| |
| r = os_release_support_ended(NULL, false, NULL); |
| if (r < 0) |
| log_info_errno(r, "Failed to check host: %m"); |
| else |
| log_info_errno(r, "Host is supported: %s", yes_no(!r)); |
| } |
| |
| DEFINE_TEST_MAIN(LOG_DEBUG); |