2010-08-14 21:59:25 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2010-01-20 20:26:29 +03:00
2010-02-03 15:03:47 +03: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-02-03 15:03:47 +03: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-02-03 15:03:47 +03:00
2012-04-12 02:20:58 +04:00
You should have received a copy of the GNU Lesser General Public License
2010-02-03 15:03:47 +03:00
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
2010-01-20 20:26:29 +03:00
# include <stdio.h>
# include <errno.h>
# include <string.h>
# include "manager.h"
2014-01-07 17:41:24 +04:00
# include "bus-util.h"
2010-01-20 20:26:29 +03:00
int main ( int argc , char * argv [ ] ) {
2014-01-07 17:41:24 +04:00
_cleanup_bus_error_free_ sd_bus_error err = SD_BUS_ERROR_NULL ;
2010-01-20 20:26:29 +03:00
Manager * m = NULL ;
2010-01-26 23:39:06 +03:00
Unit * a = NULL , * b = NULL , * c = NULL , * d = NULL , * e = NULL , * g = NULL , * h = NULL ;
2014-01-07 17:41:24 +04:00
FILE * serial = NULL ;
FDSet * fdset = NULL ;
2010-01-20 20:26:29 +03:00
Job * j ;
2014-01-07 17:41:24 +04:00
int r ;
2010-01-20 20:26:29 +03:00
2014-01-07 17:41:24 +04:00
/* prepare the test */
assert_se ( set_unit_path ( TEST_DIR ) > = 0 ) ;
r = manager_new ( SYSTEMD_USER , true , & m ) ;
2014-10-13 00:05:49 +04:00
if ( IN_SET ( r , - EPERM , - EACCES , - EADDRINUSE , - EHOSTDOWN , - ENOENT ) ) {
2014-01-07 17:41:24 +04:00
printf ( " Skipping test: manager_new: %s " , strerror ( - r ) ) ;
return EXIT_TEST_SKIP ;
}
2014-10-05 01:51:45 +04:00
assert_se ( r > = 0 ) ;
2014-01-07 17:41:24 +04:00
assert_se ( manager_startup ( m , serial , fdset ) > = 0 ) ;
2010-01-20 20:26:29 +03:00
2010-01-21 04:59:12 +03:00
printf ( " Load1: \n " ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_load_unit ( m , " a.service " , NULL , NULL , & a ) > = 0 ) ;
assert_se ( manager_load_unit ( m , " b.service " , NULL , NULL , & b ) > = 0 ) ;
assert_se ( manager_load_unit ( m , " c.service " , NULL , NULL , & c ) > = 0 ) ;
2010-01-26 23:39:06 +03:00
manager_dump_units ( m , stdout , " \t " ) ;
2010-01-20 20:26:29 +03:00
printf ( " Test1: (Trivial) \n " ) ;
2014-01-07 17:41:24 +04:00
r = manager_add_job ( m , JOB_START , c , JOB_REPLACE , false , & err , & j ) ;
if ( sd_bus_error_is_set ( & err ) )
log_error ( " error: %s: %s " , err . name , err . message ) ;
2014-10-05 01:51:45 +04:00
assert_se ( r = = 0 ) ;
2010-01-20 20:26:29 +03:00
manager_dump_jobs ( m , stdout , " \t " ) ;
2010-01-21 04:59:12 +03:00
printf ( " Load2: \n " ) ;
2010-01-20 20:26:29 +03:00
manager_clear_jobs ( m ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_load_unit ( m , " d.service " , NULL , NULL , & d ) > = 0 ) ;
assert_se ( manager_load_unit ( m , " e.service " , NULL , NULL , & e ) > = 0 ) ;
2010-01-26 23:39:06 +03:00
manager_dump_units ( m , stdout , " \t " ) ;
2010-01-20 20:26:29 +03:00
printf ( " Test2: (Cyclic Order, Unfixable) \n " ) ;
2014-10-31 17:07:54 +03:00
assert_se ( manager_add_job ( m , JOB_START , d , JOB_REPLACE , false , NULL , & j ) = = - EDEADLOCK ) ;
2010-01-20 20:26:29 +03:00
manager_dump_jobs ( m , stdout , " \t " ) ;
2010-01-21 02:51:37 +03:00
printf ( " Test3: (Cyclic Order, Fixable, Garbage Collector) \n " ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_add_job ( m , JOB_START , e , JOB_REPLACE , false , NULL , & j ) = = 0 ) ;
2010-01-20 20:26:29 +03:00
manager_dump_jobs ( m , stdout , " \t " ) ;
2010-01-21 02:51:37 +03:00
printf ( " Test4: (Identical transaction) \n " ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_add_job ( m , JOB_START , e , JOB_FAIL , false , NULL , & j ) = = 0 ) ;
2010-01-21 02:51:37 +03:00
manager_dump_jobs ( m , stdout , " \t " ) ;
2010-01-21 04:59:12 +03:00
printf ( " Load3: \n " ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_load_unit ( m , " g.service " , NULL , NULL , & g ) > = 0 ) ;
2010-01-26 23:39:06 +03:00
manager_dump_units ( m , stdout , " \t " ) ;
2010-01-21 02:51:37 +03:00
printf ( " Test5: (Colliding transaction, fail) \n " ) ;
2014-10-31 17:07:54 +03:00
assert_se ( manager_add_job ( m , JOB_START , g , JOB_FAIL , false , NULL , & j ) = = - EDEADLOCK ) ;
2010-01-21 02:51:37 +03:00
printf ( " Test6: (Colliding transaction, replace) \n " ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_add_job ( m , JOB_START , g , JOB_REPLACE , false , NULL , & j ) = = 0 ) ;
2010-01-21 02:51:37 +03:00
manager_dump_jobs ( m , stdout , " \t " ) ;
2011-02-21 17:32:17 +03:00
printf ( " Test7: (Unmergeable job type, fail) \n " ) ;
2014-10-31 17:07:54 +03:00
assert_se ( manager_add_job ( m , JOB_STOP , g , JOB_FAIL , false , NULL , & j ) = = - EDEADLOCK ) ;
2010-01-21 04:59:12 +03:00
printf ( " Test8: (Mergeable job type, fail) \n " ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_add_job ( m , JOB_RESTART , g , JOB_FAIL , false , NULL , & j ) = = 0 ) ;
2010-01-21 04:59:12 +03:00
manager_dump_jobs ( m , stdout , " \t " ) ;
2011-02-21 17:32:17 +03:00
printf ( " Test9: (Unmergeable job type, replace) \n " ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_add_job ( m , JOB_STOP , g , JOB_REPLACE , false , NULL , & j ) = = 0 ) ;
2010-01-21 04:59:12 +03:00
manager_dump_jobs ( m , stdout , " \t " ) ;
printf ( " Load4: \n " ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_load_unit ( m , " h.service " , NULL , NULL , & h ) > = 0 ) ;
2010-01-26 23:39:06 +03:00
manager_dump_units ( m , stdout , " \t " ) ;
2010-01-21 04:59:12 +03:00
2011-02-21 17:32:17 +03:00
printf ( " Test10: (Unmergeable job type of auxiliary job, fail) \n " ) ;
2010-07-08 04:43:18 +04:00
assert_se ( manager_add_job ( m , JOB_START , h , JOB_FAIL , false , NULL , & j ) = = 0 ) ;
2010-01-21 04:59:12 +03:00
manager_dump_jobs ( m , stdout , " \t " ) ;
2010-01-20 20:26:29 +03:00
manager_free ( m ) ;
return 0 ;
}