Tests: add a test for interrupted start of skippable scripted service.
[oweals/dinit.git] / src / tests / loadtests.cc
1 #include <string>
2 #include <iostream>
3 #include <cassert>
4 #include <cstdlib>
5 #include <cstring>
6
7 #include "service.h"
8 #include "proc-service.h"
9
10 std::string test_service_dir;
11
12 void init_test_service_dir()
13 {
14     test_service_dir = "./test-services";
15 }
16
17 void test_basic()
18 {
19     dirload_service_set sset(test_service_dir.c_str());
20     auto t1 = sset.load_service("t1");
21     assert(t1->get_name() == "t1");
22 }
23
24 void test_env_subst()
25 {
26     dirload_service_set sset(test_service_dir.c_str());
27     setenv("ONEVAR", "a", true);
28     setenv("TWOVAR", "hellohello", true);
29     // leave THREEVAR undefined
30     auto t2 = static_cast<base_process_service *>(sset.load_service("t2"));
31     auto exec_parts = t2->get_exec_arg_parts();
32     assert(strcmp("echo", exec_parts[0]) == 0);
33     assert(strcmp("a", exec_parts[1]) == 0);
34     assert(strcmp("hellohello", exec_parts[2]) == 0);
35     assert(strcmp("", exec_parts[3]) == 0);
36 }
37
38 #define RUN_TEST(name, spacing) \
39     std::cout << #name "..." spacing; \
40     name(); \
41     std::cout << "PASSED" << std::endl;
42
43 int main(int argc, char **argv)
44 {
45     init_test_service_dir();
46     RUN_TEST(test_basic, "    ");
47     RUN_TEST(test_env_subst, "");
48     return 0;
49 }