]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-engine.c
2 This file is part of systemd.
4 Copyright 2010 Lennart Poettering
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
11 systemd is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
27 #include "test-helper.h"
30 int main(int argc
, char *argv
[]) {
31 _cleanup_(rm_rf_and_freep
) char *runtime_dir
= NULL
;
32 _cleanup_(sd_bus_error_free
) sd_bus_error err
= SD_BUS_ERROR_NULL
;
34 Unit
*a
= NULL
, *b
= NULL
, *c
= NULL
, *d
= NULL
, *e
= NULL
, *g
= NULL
, *h
= NULL
;
40 assert_se(runtime_dir
= setup_fake_runtime_dir());
42 /* prepare the test */
43 assert_se(set_unit_path(TEST_DIR
) >= 0);
44 r
= manager_new(UNIT_FILE_USER
, true, &m
);
45 if (MANAGER_SKIP_TEST(r
)) {
46 printf("Skipping test: manager_new: %s\n", strerror(-r
));
47 return EXIT_TEST_SKIP
;
50 assert_se(manager_startup(m
, serial
, fdset
) >= 0);
53 assert_se(manager_load_unit(m
, "a.service", NULL
, NULL
, &a
) >= 0);
54 assert_se(manager_load_unit(m
, "b.service", NULL
, NULL
, &b
) >= 0);
55 assert_se(manager_load_unit(m
, "c.service", NULL
, NULL
, &c
) >= 0);
56 manager_dump_units(m
, stdout
, "\t");
58 printf("Test1: (Trivial)\n");
59 r
= manager_add_job(m
, JOB_START
, c
, JOB_REPLACE
, &err
, &j
);
60 if (sd_bus_error_is_set(&err
))
61 log_error("error: %s: %s", err
.name
, err
.message
);
63 manager_dump_jobs(m
, stdout
, "\t");
66 manager_clear_jobs(m
);
67 assert_se(manager_load_unit(m
, "d.service", NULL
, NULL
, &d
) >= 0);
68 assert_se(manager_load_unit(m
, "e.service", NULL
, NULL
, &e
) >= 0);
69 manager_dump_units(m
, stdout
, "\t");
71 printf("Test2: (Cyclic Order, Unfixable)\n");
72 assert_se(manager_add_job(m
, JOB_START
, d
, JOB_REPLACE
, NULL
, &j
) == -EDEADLK
);
73 manager_dump_jobs(m
, stdout
, "\t");
75 printf("Test3: (Cyclic Order, Fixable, Garbage Collector)\n");
76 assert_se(manager_add_job(m
, JOB_START
, e
, JOB_REPLACE
, NULL
, &j
) == 0);
77 manager_dump_jobs(m
, stdout
, "\t");
79 printf("Test4: (Identical transaction)\n");
80 assert_se(manager_add_job(m
, JOB_START
, e
, JOB_FAIL
, NULL
, &j
) == 0);
81 manager_dump_jobs(m
, stdout
, "\t");
84 assert_se(manager_load_unit(m
, "g.service", NULL
, NULL
, &g
) >= 0);
85 manager_dump_units(m
, stdout
, "\t");
87 printf("Test5: (Colliding transaction, fail)\n");
88 assert_se(manager_add_job(m
, JOB_START
, g
, JOB_FAIL
, NULL
, &j
) == -EDEADLK
);
90 printf("Test6: (Colliding transaction, replace)\n");
91 assert_se(manager_add_job(m
, JOB_START
, g
, JOB_REPLACE
, NULL
, &j
) == 0);
92 manager_dump_jobs(m
, stdout
, "\t");
94 printf("Test7: (Unmergeable job type, fail)\n");
95 assert_se(manager_add_job(m
, JOB_STOP
, g
, JOB_FAIL
, NULL
, &j
) == -EDEADLK
);
97 printf("Test8: (Mergeable job type, fail)\n");
98 assert_se(manager_add_job(m
, JOB_RESTART
, g
, JOB_FAIL
, NULL
, &j
) == 0);
99 manager_dump_jobs(m
, stdout
, "\t");
101 printf("Test9: (Unmergeable job type, replace)\n");
102 assert_se(manager_add_job(m
, JOB_STOP
, g
, JOB_REPLACE
, NULL
, &j
) == 0);
103 manager_dump_jobs(m
, stdout
, "\t");
106 assert_se(manager_load_unit(m
, "h.service", NULL
, NULL
, &h
) >= 0);
107 manager_dump_units(m
, stdout
, "\t");
109 printf("Test10: (Unmergeable job type of auxiliary job, fail)\n");
110 assert_se(manager_add_job(m
, JOB_START
, h
, JOB_FAIL
, NULL
, &j
) == 0);
111 manager_dump_jobs(m
, stdout
, "\t");