test-conf-files.c revision 09e00c524fd4d21a3508c27d01d265b8a6c9ae30
cca4aeeead1985f503d175eb1fcad9ed66f2e25dLennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
cca4aeeead1985f503d175eb1fcad9ed66f2e25dLennart Poettering
cca4aeeead1985f503d175eb1fcad9ed66f2e25dLennart Poettering/***
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering This file is part of systemd.
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering
cca4aeeead1985f503d175eb1fcad9ed66f2e25dLennart Poettering Copyright 2014 Michael Marineau
cca4aeeead1985f503d175eb1fcad9ed66f2e25dLennart Poettering
cca4aeeead1985f503d175eb1fcad9ed66f2e25dLennart Poettering systemd is free software; you can redistribute it and/or modify it
cca4aeeead1985f503d175eb1fcad9ed66f2e25dLennart Poettering under the terms of the GNU Lesser General Public License as published by
cca4aeeead1985f503d175eb1fcad9ed66f2e25dLennart Poettering the Free Software Foundation; either version 2.1 of the License, or
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen (at your option) any later version.
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen systemd is distributed in the hope that it will be useful, but
9339db7187c61eb7ae7e6ffcddb2b2f2686954ebLennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen Lesser General Public License for more details.
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen You should have received a copy of the GNU Lesser General Public License
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen along with systemd; If not, see <http://www.gnu.org/licenses/>.
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen***/
bb243d471b9e5f0bb467c22f05c5fb2ab08c0201Colin Guthrie
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen#include <stdio.h>
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen#include <stdarg.h>
9261bb7c5058fd543e42020f72f5762349f92c65Tom Gundersen
c4708f132381e4bbc864d5241381b5cde4f54878Zbigniew Jędrzejewski-Szmek#include "conf-files.h"
c4708f132381e4bbc864d5241381b5cde4f54878Zbigniew Jędrzejewski-Szmek#include "macro.h"
c4708f132381e4bbc864d5241381b5cde4f54878Zbigniew Jędrzejewski-Szmek#include "strv.h"
#include "util.h"
static void setup_test_dir(char *tmp_dir, const char *files, ...) {
va_list ap;
assert_se(mkdtemp(tmp_dir) != NULL);
va_start(ap, files);
while (files != NULL) {
_cleanup_free_ char *path = strappend(tmp_dir, files);
assert_se(touch_file(path, true, (usec_t) -1, (uid_t) -1, (gid_t) -1, 0) == 0);
files = va_arg(ap, const char *);
}
va_end(ap);
}
static void test_conf_files_list(bool use_root) {
char tmp_dir[] = "/tmp/test-conf-files-XXXXXX";
_cleanup_strv_free_ char **found_files = NULL;
const char *root_dir, *search_1, *search_2, *expect_a, *expect_b;
setup_test_dir(tmp_dir,
"/dir1/a.conf",
"/dir2/a.conf",
"/dir2/b.conf",
NULL);
if (use_root) {
root_dir = tmp_dir;
search_1 = "/dir1";
search_2 = "/dir2";
} else {
root_dir = NULL;
search_1 = strappenda(tmp_dir, "/dir1");
search_2 = strappenda(tmp_dir, "/dir2");
}
expect_a = strappenda(tmp_dir, "/dir1/a.conf");
expect_b = strappenda(tmp_dir, "/dir2/b.conf");
assert_se(conf_files_list(&found_files, ".conf", root_dir, search_1, search_2, NULL) == 0);
strv_print(found_files);
assert_se(found_files);
assert_se(streq_ptr(found_files[0], expect_a));
assert_se(streq_ptr(found_files[1], expect_b));
assert_se(found_files[2] == NULL);
assert_se(rm_rf_dangerous(tmp_dir, false, true, false) == 0);
}
int main(int argc, char **argv) {
test_conf_files_list(false);
test_conf_files_list(true);
return 0;
}