From 7778fada8294e2d63ce0c583dc703e2ee3af5aaa Mon Sep 17 00:00:00 2001 From: Davin McCall Date: Mon, 19 Feb 2018 10:39:24 +0000 Subject: [PATCH] Add a new test. --- src/service.cc | 2 ++ src/tests/tests.cc | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/service.cc b/src/service.cc index 1cbd504..363f096 100644 --- a/src/service.cc +++ b/src/service.cc @@ -445,6 +445,8 @@ void service_record::do_stop() noexcept { if (pinned_started) return; + // A service that does actually stop for any reason should have its explicit activation released, unless + // it will restart: if (start_explicit && ! do_auto_restart()) { start_explicit = false; release(false); diff --git a/src/tests/tests.cc b/src/tests/tests.cc index 893522f..0fa5764 100644 --- a/src/tests/tests.cc +++ b/src/tests/tests.cc @@ -182,8 +182,8 @@ void test5() assert(s1->get_state() == service_state_t::STARTED); } -// Test 6: service pinned in start state is not stopped when its dependency stops. -void test6() +// Test that service pinned in start state is not stopped when its dependency stops. +void test_pin1() { service_set sset; @@ -224,6 +224,35 @@ void test6() assert(s1->get_state() == service_state_t::STOPPED); } +// Test that service pinned started is released when stop issued and stops when unpinned +void test_pin2() +{ + service_set sset; + + service_record *s1 = new service_record(&sset, "test-service-1", service_type_t::INTERNAL, {}); + sset.add_service(s1); + + // Pin s3: + s1->pin_start(); + + // Start the service: + sset.start_service(s1); + + assert(s1->get_state() == service_state_t::STARTED); + + // Issue stop: + s1->stop(true); + sset.process_queues(); + + // s3 should remain started: + assert(s1->get_state() == service_state_t::STARTED); + + // If we now unpin, s1 should stop: + s1->unpin(); + sset.process_queues(); + assert(s1->get_state() == service_state_t::STOPPED); +} + // Test 7: stopping a soft dependency doesn't cause the dependent to stop. void test7() { @@ -371,7 +400,8 @@ int main(int argc, char **argv) RUN_TEST(test3); RUN_TEST(test4); RUN_TEST(test5); - RUN_TEST(test6); + RUN_TEST(test_pin1); + RUN_TEST(test_pin2); RUN_TEST(test7); RUN_TEST(test8); RUN_TEST(test9); -- 2.25.1