2010-08-14 21:59:25 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2010-07-21 04:57:35 +04:00
/***
This file is part of systemd .
Copyright 2010 Lennart Poettering
systemd is free software ; you can redistribute it and / or modify it
2012-04-12 02:20:58 +04:00
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
2010-07-21 04:57:35 +04:00
( 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
2012-04-12 02:20:58 +04:00
Lesser General Public License for more details .
2010-07-21 04:57:35 +04:00
2012-04-12 02:20:58 +04:00
You should have received a copy of the GNU Lesser General Public License
2010-07-21 04:57:35 +04:00
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
# include <unistd.h>
# include <string.h>
# include "util.h"
# include "strv.h"
2013-02-11 06:46:08 +04:00
# include "env-util.h"
2010-07-21 04:57:35 +04:00
2013-02-08 03:22:26 +04:00
static void test_strv_env_delete ( void ) {
_cleanup_strv_free_ char * * a = NULL , * * b = NULL , * * c = NULL , * * d = NULL ;
a = strv_new ( " FOO=BAR " , " WALDO=WALDO " , " WALDO= " , " PIEP " , " SCHLUMPF=SMURF " , NULL ) ;
2013-02-11 06:52:32 +04:00
assert_se ( a ) ;
2013-02-08 03:22:26 +04:00
b = strv_new ( " PIEP " , " FOO " , NULL ) ;
2013-02-11 06:52:32 +04:00
assert_se ( b ) ;
2013-02-08 03:22:26 +04:00
c = strv_new ( " SCHLUMPF " , NULL ) ;
2013-02-11 06:52:32 +04:00
assert_se ( c ) ;
2013-02-08 03:22:26 +04:00
d = strv_env_delete ( a , 2 , b , c ) ;
2013-02-11 06:52:32 +04:00
assert_se ( d ) ;
2013-02-08 03:22:26 +04:00
2013-02-11 06:52:32 +04:00
assert_se ( streq ( d [ 0 ] , " WALDO=WALDO " ) ) ;
assert_se ( streq ( d [ 1 ] , " WALDO= " ) ) ;
assert_se ( strv_length ( d ) = = 2 ) ;
2013-02-08 03:22:26 +04:00
}
static void test_strv_env_unset ( void ) {
_cleanup_strv_free_ char * * l = NULL ;
l = strv_new ( " PIEP " , " SCHLUMPF=SMURFF " , " NANANANA=YES " , NULL ) ;
2013-02-11 06:52:32 +04:00
assert_se ( l ) ;
2013-02-08 03:22:26 +04:00
2013-02-11 06:52:32 +04:00
assert_se ( strv_env_unset ( l , " SCHLUMPF " ) = = l ) ;
2013-02-08 03:22:26 +04:00
2013-02-11 06:52:32 +04:00
assert_se ( streq ( l [ 0 ] , " PIEP " ) ) ;
assert_se ( streq ( l [ 1 ] , " NANANANA=YES " ) ) ;
assert_se ( strv_length ( l ) = = 2 ) ;
2013-02-08 03:22:26 +04:00
}
static void test_strv_env_set ( void ) {
_cleanup_strv_free_ char * * l = NULL , * * r = NULL ;
l = strv_new ( " PIEP " , " SCHLUMPF=SMURFF " , " NANANANA=YES " , NULL ) ;
2013-02-11 06:52:32 +04:00
assert_se ( l ) ;
2013-02-08 03:22:26 +04:00
r = strv_env_set ( l , " WALDO=WALDO " ) ;
2013-02-11 06:52:32 +04:00
assert_se ( r ) ;
2013-02-08 03:22:26 +04:00
2013-02-11 06:52:32 +04:00
assert_se ( streq ( r [ 0 ] , " PIEP " ) ) ;
assert_se ( streq ( r [ 1 ] , " SCHLUMPF=SMURFF " ) ) ;
assert_se ( streq ( r [ 2 ] , " NANANANA=YES " ) ) ;
assert_se ( streq ( r [ 3 ] , " WALDO=WALDO " ) ) ;
assert_se ( strv_length ( r ) = = 4 ) ;
2013-02-08 03:22:26 +04:00
}
2013-02-08 00:10:31 +04:00
static void test_strv_env_merge ( void ) {
_cleanup_strv_free_ char * * a = NULL , * * b = NULL , * * r = NULL ;
a = strv_new ( " FOO=BAR " , " WALDO=WALDO " , " WALDO= " , " PIEP " , " SCHLUMPF=SMURF " , NULL ) ;
2013-02-11 06:52:32 +04:00
assert_se ( a ) ;
2013-02-08 00:10:31 +04:00
b = strv_new ( " FOO=KKK " , " FOO= " , " PIEP= " , " SCHLUMPF=SMURFF " , " NANANANA=YES " , NULL ) ;
2013-02-11 06:52:32 +04:00
assert_se ( b ) ;
2010-07-21 04:57:35 +04:00
2013-02-08 00:10:31 +04:00
r = strv_env_merge ( 2 , a , b ) ;
2013-02-11 06:52:32 +04:00
assert_se ( r ) ;
assert_se ( streq ( r [ 0 ] , " FOO= " ) ) ;
assert_se ( streq ( r [ 1 ] , " WALDO= " ) ) ;
assert_se ( streq ( r [ 2 ] , " PIEP " ) ) ;
assert_se ( streq ( r [ 3 ] , " SCHLUMPF=SMURFF " ) ) ;
assert_se ( streq ( r [ 4 ] , " PIEP= " ) ) ;
assert_se ( streq ( r [ 5 ] , " NANANANA=YES " ) ) ;
assert_se ( strv_length ( r ) = = 6 ) ;
assert_se ( strv_env_clean ( r ) = = r ) ;
assert_se ( streq ( r [ 0 ] , " FOO= " ) ) ;
assert_se ( streq ( r [ 1 ] , " WALDO= " ) ) ;
assert_se ( streq ( r [ 2 ] , " SCHLUMPF=SMURFF " ) ) ;
assert_se ( streq ( r [ 3 ] , " PIEP= " ) ) ;
assert_se ( streq ( r [ 4 ] , " NANANANA=YES " ) ) ;
assert_se ( strv_length ( r ) = = 5 ) ;
2013-02-08 00:10:31 +04:00
}
static void test_replace_env_arg ( void ) {
2010-07-21 04:57:35 +04:00
const char * env [ ] = {
" FOO=BAR BAR " ,
" BAR=waldo " ,
NULL
} ;
const char * line [ ] = {
" FOO$FOO " ,
" FOO$FOOFOO " ,
" FOO${FOO}$FOO " ,
" FOO${FOO} " ,
" ${FOO} " ,
" $FOO " ,
" $FOO$FOO " ,
" ${FOO}${BAR} " ,
" ${FOO " ,
NULL
} ;
2013-02-08 00:10:31 +04:00
_cleanup_strv_free_ char * * r = NULL ;
2010-07-21 04:57:35 +04:00
r = replace_env_argv ( ( char * * ) line , ( char * * ) env ) ;
2013-02-11 06:52:32 +04:00
assert_se ( r ) ;
assert_se ( streq ( r [ 0 ] , " FOO$FOO " ) ) ;
assert_se ( streq ( r [ 1 ] , " FOO$FOOFOO " ) ) ;
assert_se ( streq ( r [ 2 ] , " FOOBAR BAR$FOO " ) ) ;
assert_se ( streq ( r [ 3 ] , " FOOBAR BAR " ) ) ;
assert_se ( streq ( r [ 4 ] , " BAR BAR " ) ) ;
assert_se ( streq ( r [ 5 ] , " BAR " ) ) ;
assert_se ( streq ( r [ 6 ] , " BAR " ) ) ;
assert_se ( streq ( r [ 7 ] , " BAR BARwaldo " ) ) ;
assert_se ( streq ( r [ 8 ] , " ${FOO " ) ) ;
assert_se ( strv_length ( r ) = = 9 ) ;
2013-02-08 00:10:31 +04:00
}
2011-01-06 22:38:02 +03:00
2013-02-11 06:52:32 +04:00
static void test_one_normalize ( const char * input , const char * output ) {
2013-02-08 00:10:31 +04:00
_cleanup_free_ char * t ;
2011-01-06 22:38:02 +03:00
2013-02-08 00:10:31 +04:00
t = normalize_env_assignment ( input ) ;
2013-02-11 06:52:32 +04:00
assert_se ( t ) ;
assert_se ( streq ( t , output ) ) ;
2013-02-08 00:10:31 +04:00
}
2011-01-06 22:38:02 +03:00
2013-02-08 00:10:31 +04:00
static void test_normalize_env_assignment ( void ) {
test_one_normalize ( " foo=bar " , " foo=bar " ) ;
test_one_normalize ( " =bar " , " =bar " ) ;
test_one_normalize ( " foo= " , " foo= " ) ;
test_one_normalize ( " = " , " = " ) ;
test_one_normalize ( " " , " " ) ;
test_one_normalize ( " a= \" waldo \" " , " a=waldo " ) ;
test_one_normalize ( " a= \" waldo " , " a= \" waldo " ) ;
test_one_normalize ( " a=waldo \" " , " a=waldo \" " ) ;
test_one_normalize ( " a= \' " , " a=' " ) ;
test_one_normalize ( " a= \' \' " , " a= " ) ;
test_one_normalize ( " xyz " , " xyz " ) ;
test_one_normalize ( " xyz = bar " , " xyz=bar " ) ;
test_one_normalize ( " xyz = 'bar ' " , " xyz=bar " ) ;
test_one_normalize ( " ' xyz' = 'bar ' " , " ' xyz'=bar " ) ;
}
2011-01-06 22:38:02 +03:00
2013-02-11 06:46:08 +04:00
static void test_env_clean ( void ) {
_cleanup_strv_free_ char * * e ;
e = strv_new ( " FOOBAR=WALDO " ,
" FOOBAR=WALDO " ,
" FOOBAR " ,
" F " ,
" X= " ,
" F=F " ,
" = " ,
" =F " ,
" " ,
" 0000=000 " ,
" äöüß=abcd " ,
" abcd=äöüß " ,
" xyz \n =xyz " ,
" xyz=xyz \n " ,
" another=one " ,
" another=final one " ,
NULL ) ;
2013-02-11 06:52:32 +04:00
assert_se ( e ) ;
assert_se ( ! strv_env_is_valid ( e ) ) ;
assert_se ( strv_env_clean ( e ) = = e ) ;
assert_se ( strv_env_is_valid ( e ) ) ;
2013-02-11 06:46:08 +04:00
assert_se ( streq ( e [ 0 ] , " FOOBAR=WALDO " ) ) ;
assert_se ( streq ( e [ 1 ] , " X= " ) ) ;
assert_se ( streq ( e [ 2 ] , " F=F " ) ) ;
assert_se ( streq ( e [ 3 ] , " abcd=äöüß " ) ) ;
assert_se ( streq ( e [ 4 ] , " another=final one " ) ) ;
assert_se ( e [ 5 ] = = NULL ) ;
}
2013-02-12 00:40:59 +04:00
static void test_env_name_is_valid ( void ) {
assert_se ( env_name_is_valid ( " test " ) ) ;
assert_se ( ! env_name_is_valid ( NULL ) ) ;
assert_se ( ! env_name_is_valid ( " " ) ) ;
assert_se ( ! env_name_is_valid ( " 5_starting_with_a_number_is_wrong " ) ) ;
assert_se ( ! env_name_is_valid ( " #¤%&?_only_numbers_letters_and_underscore_allowed " ) ) ;
}
2013-02-08 00:10:31 +04:00
int main ( int argc , char * argv [ ] ) {
2013-02-08 03:22:26 +04:00
test_strv_env_delete ( ) ;
test_strv_env_unset ( ) ;
test_strv_env_set ( ) ;
2013-02-08 00:10:31 +04:00
test_strv_env_merge ( ) ;
test_replace_env_arg ( ) ;
test_normalize_env_assignment ( ) ;
2013-02-11 06:46:08 +04:00
test_env_clean ( ) ;
2013-02-12 00:40:59 +04:00
test_env_name_is_valid ( ) ;
2011-01-06 22:38:02 +03:00
2011-01-05 18:06:35 +03:00
return 0 ;
2010-07-21 04:57:35 +04:00
}