2012-11-16 02:03:31 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
/***
This file is part of systemd .
Copyright 2012 Lennart Poettering
2013-03-29 04:17:24 +04:00
Copyright 2013 Zbigniew Jędrzejewski - Szmek
2012-11-16 02:03:31 +04:00
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 <locale.h>
2013-03-29 04:17:24 +04:00
# include <stdlib.h>
# include <unistd.h>
# include <errno.h>
2012-11-16 02:03:31 +04:00
# include "util.h"
# include "log.h"
2013-03-29 04:17:24 +04:00
# include "macro.h"
2012-11-16 02:03:31 +04:00
# include "sd-messages.h"
2013-03-29 04:17:24 +04:00
# include "catalog.h"
2012-11-16 02:03:31 +04:00
2013-03-29 04:17:24 +04:00
static void test_import ( Hashmap * h , struct strbuf * sb ,
const char * contents , ssize_t size , int code ) {
int r ;
char name [ ] = " /tmp/test-catalog.XXXXXX " ;
2013-04-18 11:11:22 +04:00
_cleanup_close_ int fd = mkstemp ( name ) ;
2013-03-29 04:17:24 +04:00
assert ( fd > = 0 ) ;
assert_se ( write ( fd , contents , size ) = = size ) ;
r = catalog_import_file ( h , sb , name ) ;
assert ( r = = code ) ;
unlink ( name ) ;
}
static void test_catalog_importing ( void ) {
Hashmap * h ;
struct strbuf * sb ;
assert_se ( h = hashmap_new ( catalog_hash_func , catalog_compare_func ) ) ;
assert_se ( sb = strbuf_new ( ) ) ;
# define BUF "xxx"
test_import ( h , sb , BUF , sizeof ( BUF ) , - EINVAL ) ;
# undef BUF
assert ( hashmap_isempty ( h ) ) ;
log_debug ( " ---------------------------------------- " ) ;
# define BUF \
" -- 0027229ca0644181a76c4e92458afaff dededededededededededededededede \n " \
" Subject: message \n " \
" \n " \
" payload \n "
test_import ( h , sb , BUF , sizeof ( BUF ) , - EINVAL ) ;
# undef BUF
log_debug ( " ---------------------------------------- " ) ;
# define BUF \
" -- 0027229ca0644181a76c4e92458afaff dededededededededededededededed \n " \
" Subject: message \n " \
" \n " \
" payload \n "
test_import ( h , sb , BUF , sizeof ( BUF ) , 0 ) ;
# undef BUF
assert ( hashmap_size ( h ) = = 1 ) ;
2012-11-16 02:03:31 +04:00
2013-03-29 04:17:24 +04:00
log_debug ( " ---------------------------------------- " ) ;
hashmap_free_free ( h ) ;
strbuf_cleanup ( sb ) ;
}
static const char * database = NULL ;
static void test_catalog_update ( void ) {
int r ;
static char name [ ] = " /tmp/test-catalog.XXXXXX " ;
r = mkstemp ( name ) ;
assert ( r > = 0 ) ;
database = name ;
/* Test what happens if there are no files. */
r = catalog_update ( database , NULL , NULL ) ;
assert ( r > = 0 ) ;
/* Note: this might actually not find anything, if systemd was
* not installed before . That should be fine too . */
r = catalog_update ( database , NULL , catalog_file_dirs ) ;
assert ( r > = 0 ) ;
}
int main ( int argc , char * argv [ ] ) {
2012-11-16 02:03:31 +04:00
_cleanup_free_ char * text = NULL ;
2013-03-29 04:17:24 +04:00
int r ;
2012-11-16 02:03:31 +04:00
setlocale ( LC_ALL , " de_DE.UTF-8 " ) ;
log_set_max_level ( LOG_DEBUG ) ;
2013-03-29 04:17:24 +04:00
test_catalog_importing ( ) ;
2012-11-16 02:03:31 +04:00
2013-03-29 04:17:24 +04:00
test_catalog_update ( ) ;
2013-03-20 04:54:04 +04:00
2013-03-29 04:17:24 +04:00
r = catalog_list ( stdout , database , true ) ;
assert_se ( r > = 0 ) ;
2012-11-16 02:03:31 +04:00
2013-03-29 04:17:24 +04:00
r = catalog_list ( stdout , database , false ) ;
assert_se ( r > = 0 ) ;
2012-11-16 02:03:31 +04:00
2013-03-29 04:17:24 +04:00
assert_se ( catalog_get ( database , SD_MESSAGE_COREDUMP , & text ) > = 0 ) ;
2012-11-16 02:03:31 +04:00
printf ( " >>>%s<<< \n " , text ) ;
2013-03-29 04:17:24 +04:00
if ( database )
unlink ( database ) ;
2012-11-16 02:03:31 +04:00
return 0 ;
}