008-config-builder.cpp 2.3 KB

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