From: Davin McCall Date: Thu, 14 Jun 2018 17:06:05 +0000 (+0100) Subject: Add test for scripted service start skip. X-Git-Tag: v0.3.0~25 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=d5c6fbc28b352c07fbaea118f0012fca092e0446;p=oweals%2Fdinit.git Add test for scripted service start skip. --- diff --git a/src/tests/proctests.cc b/src/tests/proctests.cc index e1eecda..58f522b 100644 --- a/src/tests/proctests.cc +++ b/src/tests/proctests.cc @@ -33,6 +33,12 @@ class base_process_service_test bsp->pid = -1; bsp->handle_exit_status(bp_sys::exit_status(true, false, exit_status)); } + + static void handle_signal_exit(base_process_service *bsp, int signo) + { + bsp->pid = -1; + bsp->handle_exit_status(bp_sys::exit_status(false, true, signo)); + } }; namespace bp_sys { @@ -520,6 +526,55 @@ void test_scripted_stop_fail() sset.remove_service(&p); } +void test_scripted_start_skip() +{ + using namespace std; + + service_set sset; + + string command = "test-command"; + list> command_offsets; + command_offsets.emplace_back(0, command.length()); + std::list depends; + + scripted_service p = scripted_service(&sset, "testscripted", std::move(command), command_offsets, depends); + init_service_defaults(p); + onstart_flags_t sflags; + sflags.skippable = true; + p.set_flags(sflags); + sset.add_service(&p); + + service_record *s2 = new service_record(&sset, "test-service-2", service_type_t::INTERNAL, {{&p, REG}}); + sset.add_service(s2); + + s2->start(true); + sset.process_queues(); + assert(p.get_state() == service_state_t::STARTING); + + base_process_service_test::exec_succeeded(&p); + sset.process_queues(); + assert(p.get_state() == service_state_t::STARTING); + + base_process_service_test::handle_signal_exit(&p, SIGINT); // interrupted + sset.process_queues(); + + assert(p.get_state() == service_state_t::STARTED); + assert(s2->get_state() == service_state_t::STARTED); + assert(p.was_start_skipped()); + assert(! s2->was_start_skipped()); + assert(sset.count_active_services() == 2); + + s2->stop(true); + sset.process_queues(); + + assert(p.get_state() == service_state_t::STOPPED); + assert(s2->get_state() == service_state_t::STOPPED); + assert(sset.count_active_services() == 0); + + event_loop.active_timers.clear(); + sset.remove_service(&p); +} + #define RUN_TEST(name, spacing) \ std::cout << #name "..." spacing; \ name(); \ @@ -538,4 +593,5 @@ int main(int argc, char **argv) RUN_TEST(test_scripted_stop_timeout, ""); RUN_TEST(test_scripted_start_fail, " "); RUN_TEST(test_scripted_stop_fail, " "); + RUN_TEST(test_scripted_start_skip, " "); }