2014-06-20 06:07:05 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
/***
This file is part of systemd .
Copyright 2014 Michael Marineau
systemd is free software ; you can redistribute it and / or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation ; either version 2.1 of the License , or
( at your option ) any later version .
systemd is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
# include <stdio.h>
# include <stdarg.h>
# include "conf-files.h"
# include "macro.h"
# include "strv.h"
# include "util.h"
2015-04-04 12:52:57 +03:00
# include "rm-rf.h"
2014-06-20 06:07:05 +04:00
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 ) ;
2014-11-28 22:52:55 +03:00
assert_se ( touch_file ( path , true , USEC_INFINITY , UID_INVALID , GID_INVALID , 0 ) = = 0 ) ;
2014-06-20 06:07:05 +04:00
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 ;
2015-02-03 04:05:59 +03:00
search_1 = strjoina ( tmp_dir , " /dir1 " ) ;
search_2 = strjoina ( tmp_dir , " /dir2 " ) ;
2014-06-20 06:07:05 +04:00
}
2015-02-03 04:05:59 +03:00
expect_a = strjoina ( tmp_dir , " /dir1/a.conf " ) ;
expect_b = strjoina ( tmp_dir , " /dir2/b.conf " ) ;
2014-06-20 06:07:05 +04:00
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 ) ;
2015-04-04 12:52:57 +03:00
assert_se ( rm_rf ( tmp_dir , REMOVE_ROOT | REMOVE_PHYSICAL ) = = 0 ) ;
2014-06-20 06:07:05 +04:00
}
int main ( int argc , char * * argv ) {
test_conf_files_list ( false ) ;
test_conf_files_list ( true ) ;
return 0 ;
}