2013-02-07 00:15:23 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
/***
This file is part of systemd .
Copyright 2010 Lennart Poettering
Copyright 2013 Thomas H . P . Andersen
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 <string.h>
2013-03-08 01:45:22 +04:00
# include <unistd.h>
# include <fcntl.h>
2013-04-25 07:04:02 +04:00
# include <locale.h>
2013-04-26 04:53:29 +04:00
# include <errno.h>
2013-02-07 00:15:23 +04:00
# include "util.h"
2013-09-29 16:40:58 +04:00
# include "strv.h"
2014-01-26 08:35:28 +04:00
# include "def.h"
# include "fileio.h"
2013-02-07 00:15:23 +04:00
static void test_streq_ptr ( void ) {
2013-02-12 00:40:59 +04:00
assert_se ( streq_ptr ( NULL , NULL ) ) ;
assert_se ( ! streq_ptr ( " abc " , " cdef " ) ) ;
2013-02-07 00:15:23 +04:00
}
static void test_first_word ( void ) {
2013-02-12 00:40:59 +04:00
assert_se ( first_word ( " Hello " , " " ) ) ;
assert_se ( first_word ( " Hello " , " Hello " ) ) ;
assert_se ( first_word ( " Hello world " , " Hello " ) ) ;
assert_se ( first_word ( " Hello \t world " , " Hello " ) ) ;
assert_se ( first_word ( " Hello \n world " , " Hello " ) ) ;
assert_se ( first_word ( " Hello \r world " , " Hello " ) ) ;
assert_se ( first_word ( " Hello " , " Hello " ) ) ;
assert_se ( ! first_word ( " Hello " , " Hellooo " ) ) ;
assert_se ( ! first_word ( " Hello " , " xxxxx " ) ) ;
assert_se ( ! first_word ( " Hellooo " , " Hello " ) ) ;
}
2013-03-08 01:45:22 +04:00
static void test_close_many ( void ) {
int fds [ 3 ] ;
char name0 [ ] = " /tmp/test-close-many.XXXXXX " ;
char name1 [ ] = " /tmp/test-close-many.XXXXXX " ;
char name2 [ ] = " /tmp/test-close-many.XXXXXX " ;
fds [ 0 ] = mkstemp ( name0 ) ;
fds [ 1 ] = mkstemp ( name1 ) ;
fds [ 2 ] = mkstemp ( name2 ) ;
close_many ( fds , 2 ) ;
assert_se ( fcntl ( fds [ 0 ] , F_GETFD ) = = - 1 ) ;
assert_se ( fcntl ( fds [ 1 ] , F_GETFD ) = = - 1 ) ;
assert_se ( fcntl ( fds [ 2 ] , F_GETFD ) > = 0 ) ;
close_nointr_nofail ( fds [ 2 ] ) ;
unlink ( name0 ) ;
unlink ( name1 ) ;
unlink ( name2 ) ;
}
2013-02-12 00:40:59 +04:00
static void test_parse_boolean ( void ) {
assert_se ( parse_boolean ( " 1 " ) = = 1 ) ;
assert_se ( parse_boolean ( " y " ) = = 1 ) ;
assert_se ( parse_boolean ( " Y " ) = = 1 ) ;
assert_se ( parse_boolean ( " yes " ) = = 1 ) ;
assert_se ( parse_boolean ( " YES " ) = = 1 ) ;
assert_se ( parse_boolean ( " true " ) = = 1 ) ;
assert_se ( parse_boolean ( " TRUE " ) = = 1 ) ;
assert_se ( parse_boolean ( " on " ) = = 1 ) ;
assert_se ( parse_boolean ( " ON " ) = = 1 ) ;
assert_se ( parse_boolean ( " 0 " ) = = 0 ) ;
assert_se ( parse_boolean ( " n " ) = = 0 ) ;
assert_se ( parse_boolean ( " N " ) = = 0 ) ;
assert_se ( parse_boolean ( " no " ) = = 0 ) ;
assert_se ( parse_boolean ( " NO " ) = = 0 ) ;
assert_se ( parse_boolean ( " false " ) = = 0 ) ;
assert_se ( parse_boolean ( " FALSE " ) = = 0 ) ;
assert_se ( parse_boolean ( " off " ) = = 0 ) ;
assert_se ( parse_boolean ( " OFF " ) = = 0 ) ;
assert_se ( parse_boolean ( " garbage " ) < 0 ) ;
assert_se ( parse_boolean ( " " ) < 0 ) ;
2013-02-07 00:15:23 +04:00
}
2013-02-21 01:34:06 +04:00
static void test_parse_pid ( void ) {
int r ;
pid_t pid ;
r = parse_pid ( " 100 " , & pid ) ;
assert_se ( r = = 0 ) ;
assert_se ( pid = = 100 ) ;
r = parse_pid ( " 0x7FFFFFFF " , & pid ) ;
assert_se ( r = = 0 ) ;
assert_se ( pid = = 2147483647 ) ;
pid = 65 ; /* pid is left unchanged on ERANGE. Set to known arbitrary value. */
r = parse_pid ( " 0 " , & pid ) ;
assert_se ( r = = - ERANGE ) ;
assert_se ( pid = = 65 ) ;
pid = 65 ; /* pid is left unchanged on ERANGE. Set to known arbitrary value. */
r = parse_pid ( " -100 " , & pid ) ;
assert_se ( r = = - ERANGE ) ;
assert_se ( pid = = 65 ) ;
pid = 65 ; /* pid is left unchanged on ERANGE. Set to known arbitrary value. */
r = parse_pid ( " 0xFFFFFFFFFFFFFFFFF " , & pid ) ;
assert ( r = = - ERANGE ) ;
assert_se ( pid = = 65 ) ;
}
static void test_parse_uid ( void ) {
int r ;
uid_t uid ;
r = parse_uid ( " 100 " , & uid ) ;
assert_se ( r = = 0 ) ;
assert_se ( uid = = 100 ) ;
}
static void test_safe_atolli ( void ) {
int r ;
long long l ;
r = safe_atolli ( " 12345 " , & l ) ;
assert_se ( r = = 0 ) ;
assert_se ( l = = 12345 ) ;
r = safe_atolli ( " junk " , & l ) ;
assert_se ( r = = - EINVAL ) ;
}
static void test_safe_atod ( void ) {
int r ;
double d ;
2013-04-25 07:04:02 +04:00
char * e ;
r = safe_atod ( " junk " , & d ) ;
assert_se ( r = = - EINVAL ) ;
2013-02-21 01:34:06 +04:00
r = safe_atod ( " 0.2244 " , & d ) ;
assert_se ( r = = 0 ) ;
assert_se ( abs ( d - 0.2244 ) < 0.000001 ) ;
2013-04-25 07:04:02 +04:00
r = safe_atod ( " 0,5 " , & d ) ;
2013-02-21 01:34:06 +04:00
assert_se ( r = = - EINVAL ) ;
2013-04-25 07:04:02 +04:00
errno = 0 ;
strtod ( " 0,5 " , & e ) ;
assert_se ( * e = = ' , ' ) ;
/* Check if this really is locale independent */
setlocale ( LC_NUMERIC , " de_DE.utf8 " ) ;
r = safe_atod ( " 0.2244 " , & d ) ;
assert_se ( r = = 0 ) ;
assert_se ( abs ( d - 0.2244 ) < 0.000001 ) ;
r = safe_atod ( " 0,5 " , & d ) ;
assert_se ( r = = - EINVAL ) ;
errno = 0 ;
assert_se ( abs ( strtod ( " 0,5 " , & e ) - 0.5 ) < 0.00001 ) ;
/* And check again, reset */
setlocale ( LC_NUMERIC , " C " ) ;
r = safe_atod ( " 0.2244 " , & d ) ;
assert_se ( r = = 0 ) ;
assert_se ( abs ( d - 0.2244 ) < 0.000001 ) ;
r = safe_atod ( " 0,5 " , & d ) ;
assert_se ( r = = - EINVAL ) ;
errno = 0 ;
strtod ( " 0,5 " , & e ) ;
assert_se ( * e = = ' , ' ) ;
2013-02-21 01:34:06 +04:00
}
2013-03-08 01:45:22 +04:00
static void test_strappend ( void ) {
2013-08-16 01:32:38 +04:00
_cleanup_free_ char * t1 , * t2 , * t3 , * t4 ;
2013-03-08 01:45:22 +04:00
2013-08-16 01:32:38 +04:00
t1 = strappend ( NULL , NULL ) ;
assert_se ( streq ( t1 , " " ) ) ;
2013-03-08 01:45:22 +04:00
2013-08-16 01:32:38 +04:00
t2 = strappend ( NULL , " suf " ) ;
assert_se ( streq ( t2 , " suf " ) ) ;
2013-03-08 01:45:22 +04:00
2013-08-16 01:32:38 +04:00
t3 = strappend ( " pre " , NULL ) ;
assert_se ( streq ( t3 , " pre " ) ) ;
2013-03-08 01:45:22 +04:00
2013-08-16 01:32:38 +04:00
t4 = strappend ( " pre " , " suf " ) ;
assert_se ( streq ( t4 , " presuf " ) ) ;
2013-03-08 01:45:22 +04:00
}
2013-02-26 02:41:55 +04:00
static void test_strstrip ( void ) {
2013-08-16 01:32:38 +04:00
char * r ;
char input [ ] = " hello, waldo. " ;
2013-02-26 02:41:55 +04:00
2013-08-16 01:32:38 +04:00
r = strstrip ( input ) ;
assert_se ( streq ( r , " hello, waldo. " ) ) ;
2013-02-26 02:41:55 +04:00
}
static void test_delete_chars ( void ) {
2013-08-16 01:32:38 +04:00
char * r ;
char input [ ] = " hello, waldo. abc " ;
2013-02-26 02:41:55 +04:00
2013-08-16 01:32:38 +04:00
r = delete_chars ( input , WHITESPACE ) ;
assert_se ( streq ( r , " hello,waldo.abc " ) ) ;
2013-02-26 02:41:55 +04:00
}
static void test_in_charset ( void ) {
2013-08-16 01:32:38 +04:00
assert_se ( in_charset ( " dddaaabbbcccc " , " abcd " ) ) ;
assert_se ( ! in_charset ( " dddaaabbbcccc " , " abc f " ) ) ;
2013-02-26 02:41:55 +04:00
}
2013-02-26 17:24:12 +04:00
static void test_hexchar ( void ) {
assert_se ( hexchar ( 0xa ) = = ' a ' ) ;
assert_se ( hexchar ( 0x0 ) = = ' 0 ' ) ;
}
static void test_unhexchar ( void ) {
assert_se ( unhexchar ( ' a ' ) = = 0xA ) ;
assert_se ( unhexchar ( ' A ' ) = = 0xA ) ;
assert_se ( unhexchar ( ' 0 ' ) = = 0x0 ) ;
}
static void test_octchar ( void ) {
assert_se ( octchar ( 00 ) = = ' 0 ' ) ;
assert_se ( octchar ( 07 ) = = ' 7 ' ) ;
}
static void test_unoctchar ( void ) {
assert_se ( unoctchar ( ' 0 ' ) = = 00 ) ;
assert_se ( unoctchar ( ' 7 ' ) = = 07 ) ;
}
static void test_decchar ( void ) {
assert_se ( decchar ( 0 ) = = ' 0 ' ) ;
assert_se ( decchar ( 9 ) = = ' 9 ' ) ;
}
static void test_undecchar ( void ) {
assert_se ( undecchar ( ' 0 ' ) = = 0 ) ;
assert_se ( undecchar ( ' 9 ' ) = = 9 ) ;
}
2013-07-16 02:07:36 +04:00
static void test_cescape ( void ) {
_cleanup_free_ char * escaped ;
escaped = cescape ( " abc \\ \" \b \f \n \r \t \v \003 \177 \234 \313 " ) ;
assert_se ( streq ( escaped , " abc \\ \\ \\ \" \\ b \\ f \\ n \\ r \\ t \\ v \\ 003 \\ 177 \\ 234 \\ 313 " ) ) ;
}
static void test_cunescape ( void ) {
_cleanup_free_ char * unescaped ;
unescaped = cunescape ( " abc \\ \\ \\ \" \\ b \\ f \\ n \\ r \\ t \\ v \\ 003 \\ 177 \\ 234 \\ 313 " ) ;
assert_se ( streq ( unescaped , " abc \\ \" \b \f \n \r \t \v \003 \177 \234 \313 " ) ) ;
}
2013-02-26 02:41:55 +04:00
static void test_foreach_word ( void ) {
char * w , * state ;
size_t l ;
int i = 0 ;
const char test [ ] = " test abc d \t e f " ;
const char * const expected [ ] = {
" test " ,
" abc " ,
" d " ,
" e " ,
" f " ,
" " ,
NULL
} ;
FOREACH_WORD ( w , l , test , state ) {
assert_se ( strneq ( expected [ i + + ] , w , l ) ) ;
}
}
2013-02-07 00:15:23 +04:00
static void test_foreach_word_quoted ( void ) {
char * w , * state ;
size_t l ;
2013-02-26 02:41:55 +04:00
int i = 0 ;
const char test [ ] = " test a b c 'd' e '' '' hhh '' '' \" a b c \" " ;
const char * const expected [ ] = {
" test " ,
" a " ,
" b " ,
" c " ,
" d " ,
" e " ,
" " ,
" " ,
" hhh " ,
" " ,
" " ,
" a b c " ,
NULL
} ;
2013-02-07 00:15:23 +04:00
printf ( " <%s> \n " , test ) ;
FOREACH_WORD_QUOTED ( w , l , test , state ) {
2013-02-26 02:41:55 +04:00
_cleanup_free_ char * t = NULL ;
2013-02-07 00:15:23 +04:00
assert_se ( t = strndup ( w , l ) ) ;
2013-02-26 02:41:55 +04:00
assert_se ( strneq ( expected [ i + + ] , w , l ) ) ;
2013-02-07 00:15:23 +04:00
printf ( " <%s> \n " , t ) ;
}
}
static void test_default_term_for_tty ( void ) {
puts ( default_term_for_tty ( " /dev/tty23 " ) ) ;
puts ( default_term_for_tty ( " /dev/ttyS23 " ) ) ;
puts ( default_term_for_tty ( " /dev/tty0 " ) ) ;
puts ( default_term_for_tty ( " /dev/pty0 " ) ) ;
puts ( default_term_for_tty ( " /dev/pts/0 " ) ) ;
puts ( default_term_for_tty ( " /dev/console " ) ) ;
puts ( default_term_for_tty ( " tty23 " ) ) ;
puts ( default_term_for_tty ( " ttyS23 " ) ) ;
puts ( default_term_for_tty ( " tty0 " ) ) ;
puts ( default_term_for_tty ( " pty0 " ) ) ;
puts ( default_term_for_tty ( " pts/0 " ) ) ;
puts ( default_term_for_tty ( " console " ) ) ;
}
2013-02-19 02:49:04 +04:00
static void test_memdup_multiply ( void ) {
int org [ ] = { 1 , 2 , 3 } ;
int * dup ;
dup = ( int * ) memdup_multiply ( org , sizeof ( int ) , 3 ) ;
assert_se ( dup ) ;
assert_se ( dup [ 0 ] = = 1 ) ;
assert_se ( dup [ 1 ] = = 2 ) ;
assert_se ( dup [ 2 ] = = 3 ) ;
free ( dup ) ;
}
2013-03-22 20:59:49 +04:00
static void test_hostname_is_valid ( void ) {
assert ( hostname_is_valid ( " foobar " ) ) ;
assert ( hostname_is_valid ( " foobar.com " ) ) ;
assert ( ! hostname_is_valid ( " fööbar " ) ) ;
assert ( ! hostname_is_valid ( " " ) ) ;
assert ( ! hostname_is_valid ( " . " ) ) ;
assert ( ! hostname_is_valid ( " .. " ) ) ;
assert ( ! hostname_is_valid ( " foobar. " ) ) ;
assert ( ! hostname_is_valid ( " .foobar " ) ) ;
assert ( ! hostname_is_valid ( " foo..bar " ) ) ;
assert ( ! hostname_is_valid ( " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " ) ) ;
}
2013-04-05 03:09:50 +04:00
static void test_u64log2 ( void ) {
assert ( u64log2 ( 0 ) = = 0 ) ;
assert ( u64log2 ( 8 ) = = 3 ) ;
assert ( u64log2 ( 9 ) = = 3 ) ;
assert ( u64log2 ( 15 ) = = 3 ) ;
assert ( u64log2 ( 16 ) = = 4 ) ;
assert ( u64log2 ( 1024 * 1024 ) = = 20 ) ;
assert ( u64log2 ( 1024 * 1024 + 5 ) = = 20 ) ;
}
2013-04-16 16:50:05 +04:00
static void test_get_process_comm ( void ) {
2013-07-18 10:30:06 +04:00
struct stat st ;
2013-04-16 16:50:05 +04:00
_cleanup_free_ char * a = NULL , * c = NULL , * d = NULL , * f = NULL , * i = NULL ;
unsigned long long b ;
pid_t e ;
uid_t u ;
gid_t g ;
dev_t h ;
int r ;
2013-07-18 10:30:06 +04:00
if ( stat ( " /proc/1/comm " , & st ) = = 0 ) {
assert_se ( get_process_comm ( 1 , & a ) > = 0 ) ;
log_info ( " pid1 comm: '%s' " , a ) ;
} else {
log_warning ( " /proc/1/comm does not exist. " ) ;
}
2013-04-16 16:50:05 +04:00
assert_se ( get_starttime_of_pid ( 1 , & b ) > = 0 ) ;
log_info ( " pid1 starttime: '%llu' " , b ) ;
assert_se ( get_process_cmdline ( 1 , 0 , true , & c ) > = 0 ) ;
log_info ( " pid1 cmdline: '%s' " , c ) ;
assert_se ( get_process_cmdline ( 1 , 8 , false , & d ) > = 0 ) ;
log_info ( " pid1 cmdline truncated: '%s' " , d ) ;
assert_se ( get_parent_of_pid ( 1 , & e ) > = 0 ) ;
log_info ( " pid1 ppid: '%llu' " , ( unsigned long long ) e ) ;
assert_se ( e = = 0 ) ;
assert_se ( is_kernel_thread ( 1 ) = = 0 ) ;
r = get_process_exe ( 1 , & f ) ;
assert_se ( r > = 0 | | r = = - EACCES ) ;
log_info ( " pid1 exe: '%s' " , strna ( f ) ) ;
assert_se ( get_process_uid ( 1 , & u ) = = 0 ) ;
log_info ( " pid1 uid: '%llu' " , ( unsigned long long ) u ) ;
assert_se ( u = = 0 ) ;
assert_se ( get_process_gid ( 1 , & g ) = = 0 ) ;
log_info ( " pid1 gid: '%llu' " , ( unsigned long long ) g ) ;
assert_se ( g = = 0 ) ;
assert ( get_ctty_devnr ( 1 , & h ) = = - ENOENT ) ;
getenv_for_pid ( 1 , " PATH " , & i ) ;
log_info ( " pid1 $PATH: '%s' " , strna ( i ) ) ;
}
2013-04-26 04:53:29 +04:00
static void test_protect_errno ( void ) {
errno = 12 ;
{
PROTECT_ERRNO ;
errno = 11 ;
}
assert ( errno = = 12 ) ;
}
2013-06-06 03:33:45 +04:00
static void test_parse_bytes ( void ) {
off_t bytes ;
assert_se ( parse_bytes ( " 111 " , & bytes ) = = 0 ) ;
assert_se ( bytes = = 111 ) ;
assert_se ( parse_bytes ( " 112 B " , & bytes ) = = 0 ) ;
assert_se ( bytes = = 112 ) ;
assert_se ( parse_bytes ( " 3 K " , & bytes ) = = 0 ) ;
assert_se ( bytes = = 3 * 1024 ) ;
assert_se ( parse_bytes ( " 4 M 11K " , & bytes ) = = 0 ) ;
assert_se ( bytes = = 4 * 1024 * 1024 + 11 * 1024 ) ;
assert_se ( parse_bytes ( " 3B3G " , & bytes ) = = 0 ) ;
assert_se ( bytes = = 3ULL * 1024 * 1024 * 1024 + 3 ) ;
assert_se ( parse_bytes ( " 3B3G4T " , & bytes ) = = 0 ) ;
assert_se ( bytes = = ( 4ULL * 1024 + 3 ) * 1024 * 1024 * 1024 + 3 ) ;
assert_se ( parse_bytes ( " 12P " , & bytes ) = = 0 ) ;
assert_se ( bytes = = 12ULL * 1024 * 1024 * 1024 * 1024 * 1024 ) ;
assert_se ( parse_bytes ( " 3E 2P " , & bytes ) = = 0 ) ;
assert_se ( bytes = = ( 3 * 1024 + 2ULL ) * 1024 * 1024 * 1024 * 1024 * 1024 ) ;
assert_se ( parse_bytes ( " 12X " , & bytes ) = = - EINVAL ) ;
assert_se ( parse_bytes ( " 1024E " , & bytes ) = = - ERANGE ) ;
assert_se ( parse_bytes ( " -1 " , & bytes ) = = - ERANGE ) ;
assert_se ( parse_bytes ( " -1024E " , & bytes ) = = - ERANGE ) ;
assert_se ( parse_bytes ( " -1024P " , & bytes ) = = - ERANGE ) ;
assert_se ( parse_bytes ( " -10B 20K " , & bytes ) = = - ERANGE ) ;
}
2013-07-16 02:07:36 +04:00
static void test_strextend ( void ) {
_cleanup_free_ char * str = strdup ( " 0123 " ) ;
strextend ( & str , " 456 " , " 78 " , " 9 " , NULL ) ;
assert_se ( streq ( str , " 0123456789 " ) ) ;
}
static void test_strrep ( void ) {
_cleanup_free_ char * one , * three , * zero ;
one = strrep ( " waldo " , 1 ) ;
three = strrep ( " waldo " , 3 ) ;
zero = strrep ( " waldo " , 0 ) ;
assert_se ( streq ( one , " waldo " ) ) ;
assert_se ( streq ( three , " waldowaldowaldo " ) ) ;
assert_se ( streq ( zero , " " ) ) ;
}
static void test_parse_user_at_host ( void ) {
_cleanup_free_ char * both = strdup ( " waldo@waldoscomputer " ) ;
_cleanup_free_ char * onlyhost = strdup ( " mikescomputer " ) ;
char * user = NULL , * host = NULL ;
parse_user_at_host ( both , & user , & host ) ;
assert_se ( streq ( user , " waldo " ) ) ;
assert_se ( streq ( host , " waldoscomputer " ) ) ;
user = host = NULL ;
parse_user_at_host ( onlyhost , & user , & host ) ;
assert_se ( user = = NULL ) ;
assert_se ( streq ( host , " mikescomputer " ) ) ;
}
2013-07-18 22:22:29 +04:00
static void test_split_pair ( void ) {
_cleanup_free_ char * a = NULL , * b = NULL ;
assert_se ( split_pair ( " " , " " , & a , & b ) = = - EINVAL ) ;
assert_se ( split_pair ( " foo=bar " , " " , & a , & b ) = = - EINVAL ) ;
assert_se ( split_pair ( " " , " = " , & a , & b ) = = - EINVAL ) ;
assert_se ( split_pair ( " foo=bar " , " = " , & a , & b ) > = 0 ) ;
assert_se ( streq ( a , " foo " ) ) ;
assert_se ( streq ( b , " bar " ) ) ;
free ( a ) ;
free ( b ) ;
assert_se ( split_pair ( " == " , " == " , & a , & b ) > = 0 ) ;
assert_se ( streq ( a , " " ) ) ;
assert_se ( streq ( b , " " ) ) ;
free ( a ) ;
free ( b ) ;
assert_se ( split_pair ( " === " , " == " , & a , & b ) > = 0 ) ;
assert_se ( streq ( a , " " ) ) ;
assert_se ( streq ( b , " = " ) ) ;
}
2013-09-17 23:47:08 +04:00
static void test_fstab_node_to_udev_node ( void ) {
char * n ;
n = fstab_node_to_udev_node ( " LABEL=applé/jack " ) ;
puts ( n ) ;
assert_se ( streq ( n , " /dev/disk/by-label/applé \\ x2fjack " ) ) ;
free ( n ) ;
n = fstab_node_to_udev_node ( " PARTLABEL=pinkié pie " ) ;
puts ( n ) ;
assert_se ( streq ( n , " /dev/disk/by-partlabel/pinkié \\ x20pie " ) ) ;
free ( n ) ;
n = fstab_node_to_udev_node ( " UUID=037b9d94-148e-4ee4-8d38-67bfe15bb535 " ) ;
puts ( n ) ;
assert_se ( streq ( n , " /dev/disk/by-uuid/037b9d94-148e-4ee4-8d38-67bfe15bb535 " ) ) ;
free ( n ) ;
n = fstab_node_to_udev_node ( " PARTUUID=037b9d94-148e-4ee4-8d38-67bfe15bb535 " ) ;
puts ( n ) ;
assert_se ( streq ( n , " /dev/disk/by-partuuid/037b9d94-148e-4ee4-8d38-67bfe15bb535 " ) ) ;
free ( n ) ;
n = fstab_node_to_udev_node ( " PONIES=awesome " ) ;
puts ( n ) ;
assert_se ( streq ( n , " PONIES=awesome " ) ) ;
free ( n ) ;
n = fstab_node_to_udev_node ( " /dev/xda1 " ) ;
puts ( n ) ;
assert_se ( streq ( n , " /dev/xda1 " ) ) ;
free ( n ) ;
}
2013-09-29 16:40:58 +04:00
static void test_get_files_in_directory ( void ) {
_cleanup_strv_free_ char * * l = NULL , * * t = NULL ;
assert_se ( get_files_in_directory ( " /tmp " , & l ) > = 0 ) ;
2013-10-09 06:04:04 +04:00
assert_se ( get_files_in_directory ( " . " , & t ) > = 0 ) ;
2013-09-29 16:40:58 +04:00
assert_se ( get_files_in_directory ( " . " , NULL ) > = 0 ) ;
}
2013-12-03 02:08:25 +04:00
static void test_in_set ( void ) {
assert_se ( IN_SET ( 1 , 1 ) ) ;
assert_se ( IN_SET ( 1 , 1 , 2 , 3 , 4 ) ) ;
assert_se ( IN_SET ( 2 , 1 , 2 , 3 , 4 ) ) ;
assert_se ( IN_SET ( 3 , 1 , 2 , 3 , 4 ) ) ;
assert_se ( IN_SET ( 4 , 1 , 2 , 3 , 4 ) ) ;
assert_se ( ! IN_SET ( 0 , 1 ) ) ;
assert_se ( ! IN_SET ( 0 , 1 , 2 , 3 , 4 ) ) ;
}
2014-01-26 08:35:28 +04:00
static void test_writev_safe ( void ) {
char name [ ] = " /tmp/test-writev_safe.XXXXXX " ;
_cleanup_free_ char * contents ;
size_t size ;
int fd , r ;
struct iovec iov [ 3 ] ;
IOVEC_SET_STRING ( iov [ 0 ] , " abc \n " ) ;
IOVEC_SET_STRING ( iov [ 1 ] , ALPHANUMERICAL " \n " ) ;
IOVEC_SET_STRING ( iov [ 2 ] , " " ) ;
fd = mkstemp ( name ) ;
printf ( " test_writev_safe: %s " , name ) ;
r = writev_safe ( fd , iov , 3 ) ;
assert ( r = = 0 ) ;
r = read_full_file ( name , & contents , & size ) ;
assert ( r = = 0 ) ;
printf ( " contents: %s " , contents ) ;
assert ( streq ( contents , " abc \n " ALPHANUMERICAL " \n " ) ) ;
}
2013-02-07 00:15:23 +04:00
int main ( int argc , char * argv [ ] ) {
test_streq_ptr ( ) ;
test_first_word ( ) ;
2013-03-08 01:45:22 +04:00
test_close_many ( ) ;
2013-02-12 00:40:59 +04:00
test_parse_boolean ( ) ;
2013-02-21 01:34:06 +04:00
test_parse_pid ( ) ;
test_parse_uid ( ) ;
test_safe_atolli ( ) ;
test_safe_atod ( ) ;
2013-03-08 01:45:22 +04:00
test_strappend ( ) ;
2013-02-26 02:41:55 +04:00
test_strstrip ( ) ;
test_delete_chars ( ) ;
test_in_charset ( ) ;
2013-02-26 17:24:12 +04:00
test_hexchar ( ) ;
test_unhexchar ( ) ;
test_octchar ( ) ;
test_unoctchar ( ) ;
test_decchar ( ) ;
test_undecchar ( ) ;
2013-07-16 02:07:36 +04:00
test_cescape ( ) ;
test_cunescape ( ) ;
2013-02-26 02:41:55 +04:00
test_foreach_word ( ) ;
2013-02-07 00:15:23 +04:00
test_foreach_word_quoted ( ) ;
2013-02-26 02:41:55 +04:00
test_default_term_for_tty ( ) ;
2013-02-19 02:49:04 +04:00
test_memdup_multiply ( ) ;
2013-03-22 20:59:49 +04:00
test_hostname_is_valid ( ) ;
2013-04-05 03:09:50 +04:00
test_u64log2 ( ) ;
2013-04-16 16:50:05 +04:00
test_get_process_comm ( ) ;
2013-04-26 04:53:29 +04:00
test_protect_errno ( ) ;
2013-06-06 03:33:45 +04:00
test_parse_bytes ( ) ;
2013-07-16 02:07:36 +04:00
test_strextend ( ) ;
test_strrep ( ) ;
test_parse_user_at_host ( ) ;
2013-07-18 22:22:29 +04:00
test_split_pair ( ) ;
2013-09-17 23:47:08 +04:00
test_fstab_node_to_udev_node ( ) ;
2013-09-29 16:40:58 +04:00
test_get_files_in_directory ( ) ;
2013-12-03 02:08:25 +04:00
test_in_set ( ) ;
2014-01-26 08:35:28 +04:00
test_writev_safe ( ) ;
2013-02-07 00:15:23 +04:00
return 0 ;
}