2013-04-03 21:04:03 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
/***
This file is part of systemd .
Copyright 2013 Lennart Poettering
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 <fcntl.h>
# include <unistd.h>
# include "util.h"
# include "fileio.h"
# include "strv.h"
static void test_parse_env_file ( void ) {
char t [ ] = " /tmp/test-parse-env-file-XXXXXX " ;
int fd , r ;
FILE * f ;
2013-04-17 13:02:56 +04:00
_cleanup_free_ char * one = NULL , * two = NULL , * three = NULL , * four = NULL , * five = NULL , * six = NULL , * seven = NULL , * eight = NULL , * nine = NULL ;
2013-04-03 21:56:39 +04:00
_cleanup_strv_free_ char * * a = NULL , * * b = NULL ;
2013-04-03 21:04:03 +04:00
char * * i ;
2013-04-03 21:56:39 +04:00
unsigned k ;
2013-04-03 21:04:03 +04:00
fd = mkostemp ( t , O_CLOEXEC ) ;
assert_se ( fd > = 0 ) ;
f = fdopen ( fd , " w " ) ;
assert_se ( f ) ;
fputs ( " one=BAR \n "
" # comment \n "
" # comment \n "
" two = bar \n "
" invalid line \n "
" three = \" 333 \n "
" xxxx \" \n "
" four = \' 44 \\ \" 44 \' \n "
" five = \' 55 \\ \' 55 \' \" FIVE \" cinco \n "
" six = seis sechs \\ \n "
" sis \n "
2013-04-17 13:02:56 +04:00
" export seven= \" sevenval \" #comment \n "
" eight=#comment \n "
" nine= " , f ) ;
2013-04-03 21:04:03 +04:00
fflush ( f ) ;
fclose ( f ) ;
r = parse_env_file (
t , NULL ,
" one " , & one ,
" two " , & two ,
" three " , & three ,
" four " , & four ,
" five " , & five ,
" six " , & six ,
" seven " , & seven ,
2013-04-17 13:02:56 +04:00
" eight " , & eight ,
" nine " , & nine ,
2013-04-03 21:04:03 +04:00
NULL ) ;
assert_se ( r > = 0 ) ;
log_info ( " one=[%s] " , strna ( one ) ) ;
log_info ( " two=[%s] " , strna ( two ) ) ;
log_info ( " three=[%s] " , strna ( three ) ) ;
log_info ( " four=[%s] " , strna ( four ) ) ;
log_info ( " five=[%s] " , strna ( five ) ) ;
log_info ( " six=[%s] " , strna ( six ) ) ;
log_info ( " seven=[%s] " , strna ( seven ) ) ;
2013-04-17 13:02:56 +04:00
log_info ( " eight=[%s] " , strna ( eight ) ) ;
log_info ( " nine=[%s] " , strna ( nine ) ) ;
2013-04-03 21:04:03 +04:00
assert_se ( streq ( one , " BAR " ) ) ;
assert_se ( streq ( two , " bar " ) ) ;
assert_se ( streq ( three , " 333 \n xxxx " ) ) ;
assert_se ( streq ( four , " 44 \" 44 " ) ) ;
assert_se ( streq ( five , " 55 \' 55FIVEcinco " ) ) ;
assert_se ( streq ( six , " seis sechs sis " ) ) ;
2013-04-17 13:02:56 +04:00
assert_se ( streq ( seven , " sevenval " ) ) ;
assert_se ( eight = = NULL ) ;
assert_se ( nine = = NULL ) ;
2013-04-03 21:04:03 +04:00
r = load_env_file ( t , NULL , & a ) ;
assert_se ( r > = 0 ) ;
STRV_FOREACH ( i , a )
2013-04-03 21:56:39 +04:00
log_info ( " Got: <%s> " , * i ) ;
assert_se ( streq ( a [ 0 ] , " one=BAR " ) ) ;
assert_se ( streq ( a [ 1 ] , " two=bar " ) ) ;
assert_se ( streq ( a [ 2 ] , " three=333 \n xxxx " ) ) ;
assert_se ( streq ( a [ 3 ] , " four=44 \" 44 " ) ) ;
assert_se ( streq ( a [ 4 ] , " five=55 \' 55FIVEcinco " ) ) ;
assert_se ( streq ( a [ 5 ] , " six=seis sechs sis " ) ) ;
2013-04-17 13:02:56 +04:00
assert_se ( streq ( a [ 6 ] , " seven=sevenval " ) ) ;
assert_se ( streq ( a [ 7 ] , " eight= " ) ) ;
assert_se ( streq ( a [ 8 ] , " nine= " ) ) ;
assert_se ( a [ 9 ] = = NULL ) ;
2013-04-03 21:56:39 +04:00
r = write_env_file ( " /tmp/test-fileio " , a ) ;
assert_se ( r > = 0 ) ;
r = load_env_file ( " /tmp/test-fileio " , NULL , & b ) ;
assert_se ( r > = 0 ) ;
k = 0 ;
STRV_FOREACH ( i , b ) {
log_info ( " Got2: <%s> " , * i ) ;
assert_se ( streq ( * i , a [ k + + ] ) ) ;
}
2013-04-03 21:04:03 +04:00
unlink ( t ) ;
2013-04-03 21:56:39 +04:00
unlink ( " /tmp/test-fileio " ) ;
2013-04-03 21:04:03 +04:00
}
int main ( int argc , char * argv [ ] ) {
test_parse_env_file ( ) ;
return 0 ;
}