009-system-context.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //
  2. // Copyright (c) 2019-2020 Ivan Baidakou (basiliscos) (the dot dmol at gmail dot com)
  3. //
  4. // Distributed under the MIT Software License
  5. //
  6. #include "catch.hpp"
  7. #include "rotor.hpp"
  8. #include "supervisor_test.h"
  9. #include "system_context_test.h"
  10. namespace r = rotor;
  11. namespace rt = rotor::test;
  12. TEST_CASE("misconfigured root supervisor", "[system_context]") {
  13. rt::system_context_test_t system_context;
  14. auto sup = system_context.create_supervisor<rt::supervisor_test_t>().finish();
  15. REQUIRE(!sup);
  16. REQUIRE(system_context.ec.value() == static_cast<int>(r::error_code_t::actor_misconfigured));
  17. REQUIRE(system_context.ec.message() == "actor is misconfigured");
  18. REQUIRE(!system_context.get_supervisor());
  19. }
  20. TEST_CASE("properly configured root supervisor", "[system_context]") {
  21. rt::system_context_test_t system_context;
  22. auto sup = system_context.create_supervisor<rt::supervisor_test_t>().timeout(rt::default_timeout).finish();
  23. REQUIRE(sup);
  24. REQUIRE(system_context.ec.value() == 0);
  25. REQUIRE(system_context.get_supervisor() == sup);
  26. sup->do_process();
  27. sup->do_shutdown();
  28. sup->do_process();
  29. sup.reset();
  30. }
  31. TEST_CASE("root supervisor cannot be created twice", "[system_context]") {
  32. rt::system_context_test_t system_context;
  33. auto sup1 = system_context.create_supervisor<rt::supervisor_test_t>().timeout(rt::default_timeout).finish();
  34. REQUIRE(sup1);
  35. REQUIRE(system_context.get_supervisor() == sup1);
  36. auto sup2 = system_context.create_supervisor<rt::supervisor_test_t>().timeout(rt::default_timeout).finish();
  37. REQUIRE(!sup2);
  38. REQUIRE(system_context.get_supervisor() == sup1);
  39. REQUIRE(system_context.ec.value() == static_cast<int>(r::error_code_t::supervisor_defined));
  40. REQUIRE(system_context.ec.message() == std::string("supervisor is already defined"));
  41. sup1->do_process();
  42. sup1->do_shutdown();
  43. sup1->do_process();
  44. }