]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-engine.c
Merge pull request #3247 from fbuihuu/ask-passowrd-on-all-consoles
[thirdparty/systemd.git] / src / test / test-engine.c
1 /***
2 This file is part of systemd.
3
4 Copyright 2010 Lennart Poettering
5
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.
10
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.
15
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/>.
18 ***/
19
20 #include <errno.h>
21 #include <stdio.h>
22 #include <string.h>
23
24 #include "bus-util.h"
25 #include "manager.h"
26 #include "rm-rf.h"
27 #include "test-helper.h"
28 #include "tests.h"
29
30 int main(int argc, char *argv[]) {
31 _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
32 _cleanup_(sd_bus_error_free) sd_bus_error err = SD_BUS_ERROR_NULL;
33 Manager *m = NULL;
34 Unit *a = NULL, *b = NULL, *c = NULL, *d = NULL, *e = NULL, *g = NULL, *h = NULL;
35 FILE *serial = NULL;
36 FDSet *fdset = NULL;
37 Job *j;
38 int r;
39
40 assert_se(runtime_dir = setup_fake_runtime_dir());
41
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;
48 }
49 assert_se(r >= 0);
50 assert_se(manager_startup(m, serial, fdset) >= 0);
51
52 printf("Load1:\n");
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");
57
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);
62 assert_se(r == 0);
63 manager_dump_jobs(m, stdout, "\t");
64
65 printf("Load2:\n");
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");
70
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");
74
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");
78
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");
82
83 printf("Load3:\n");
84 assert_se(manager_load_unit(m, "g.service", NULL, NULL, &g) >= 0);
85 manager_dump_units(m, stdout, "\t");
86
87 printf("Test5: (Colliding transaction, fail)\n");
88 assert_se(manager_add_job(m, JOB_START, g, JOB_FAIL, NULL, &j) == -EDEADLK);
89
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");
93
94 printf("Test7: (Unmergeable job type, fail)\n");
95 assert_se(manager_add_job(m, JOB_STOP, g, JOB_FAIL, NULL, &j) == -EDEADLK);
96
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");
100
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");
104
105 printf("Load4:\n");
106 assert_se(manager_load_unit(m, "h.service", NULL, NULL, &h) >= 0);
107 manager_dump_units(m, stdout, "\t");
108
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");
112
113 manager_free(m);
114
115 return 0;
116 }