008-config-builder.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //
  2. // Copyright (c) 2019-2021 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 "actor_test.h"
  10. #include "system_context_test.h"
  11. #include "access.h"
  12. namespace r = rotor;
  13. namespace rt = rotor::test;
  14. template <typename Actor> struct sample_config_builder_t : public r::actor_config_builder_t<Actor> {
  15. using parent_t = r::actor_config_builder_t<Actor>;
  16. using parent_t::parent_t;
  17. bool validate() noexcept override { return false; }
  18. };
  19. struct sample_actor_t : public rt::actor_test_t {
  20. using rt::actor_test_t::actor_test_t;
  21. template <typename Actor> using config_builder_t = sample_config_builder_t<Actor>;
  22. };
  23. TEST_CASE("direct builder configuration", "[config_builder]") {
  24. r::system_context_t system_context;
  25. auto sup = system_context.create_supervisor<rt::supervisor_test_t>()
  26. .timeout(rt::default_timeout)
  27. .locality(&system_context)
  28. .finish();
  29. REQUIRE(sup);
  30. REQUIRE(sup->locality == &system_context);
  31. sup->do_process();
  32. sup->do_shutdown();
  33. sup->do_process();
  34. sup->do_process();
  35. CHECK(rt::empty(sup->get_subscription()));
  36. }
  37. TEST_CASE("indirect builder configuration", "[config_builder]") {
  38. r::system_context_t system_context;
  39. auto sup = system_context.create_supervisor<rt::supervisor_test_t>()
  40. .locality(&system_context)
  41. .timeout(rt::default_timeout)
  42. .finish();
  43. REQUIRE(sup);
  44. REQUIRE(sup->locality == &system_context);
  45. sup->do_process();
  46. sup->do_shutdown();
  47. sup->do_process();
  48. }
  49. TEST_CASE("validation", "[config_builder]") {
  50. rt::system_context_test_t system_context;
  51. auto sup = system_context.create_supervisor<rt::supervisor_test_t>()
  52. .locality(&system_context)
  53. .timeout(rt::default_timeout)
  54. .finish();
  55. REQUIRE(sup);
  56. SECTION("custom validator failed") {
  57. auto act = sup->create_actor<sample_actor_t>().timeout(rt::default_timeout).finish();
  58. REQUIRE(!act);
  59. CHECK(system_context.reason->ec == r::error_code_t::actor_misconfigured);
  60. }
  61. sup->do_process();
  62. sup->do_shutdown();
  63. sup->do_process();
  64. }