diff options
author | Håvard Pettersen <havardpe@oath.com> | 2021-10-06 17:10:17 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2021-10-07 09:47:42 +0000 |
commit | e1a26413bd20ef269d53dc56552a8d8809ab4e58 (patch) | |
tree | f866cb22f63f765bb1fb2f259ada9d5d014f04b0 /vespalib/src/tests/issue | |
parent | f63d33eb7a47c3bfd80229098a71eae1b3b48300 (diff) |
capture issues by binding handlers to threads
Diffstat (limited to 'vespalib/src/tests/issue')
-rw-r--r-- | vespalib/src/tests/issue/CMakeLists.txt | 9 | ||||
-rw-r--r-- | vespalib/src/tests/issue/issue_test.cpp | 68 |
2 files changed, 77 insertions, 0 deletions
diff --git a/vespalib/src/tests/issue/CMakeLists.txt b/vespalib/src/tests/issue/CMakeLists.txt new file mode 100644 index 00000000000..7c8147979d7 --- /dev/null +++ b/vespalib/src/tests/issue/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vespalib_issue_test_app TEST + SOURCES + issue_test.cpp + DEPENDS + vespalib + GTest::GTest +) +vespa_add_test(NAME vespalib_issue_test_app COMMAND vespalib_issue_test_app) diff --git a/vespalib/src/tests/issue/issue_test.cpp b/vespalib/src/tests/issue/issue_test.cpp new file mode 100644 index 00000000000..01b151da482 --- /dev/null +++ b/vespalib/src/tests/issue/issue_test.cpp @@ -0,0 +1,68 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include <vespa/vespalib/util/issue.h> +#include <vespa/vespalib/gtest/gtest.h> + +using namespace vespalib; + +struct MyHandler : Issue::Handler { + std::vector<vespalib::string> list; + void handle(const Issue &issue) override { + list.push_back(issue.message()); + } +}; + +std::vector<vespalib::string> make_list(std::vector<vespalib::string> list) { + return list; +} + +TEST(IssueTest, log_issue_not_captured) { + Issue::report(Issue("this should be logged")); +} + +TEST(IssueTest, capture_an_issue) { + MyHandler my_handler; + { + Issue::report(Issue("this should be logged")); + Issue::Binding my_binding = Issue::listen(my_handler); + Issue::report(Issue("this should be captured")); + } + Issue::report(Issue("this should also be logged")); + EXPECT_EQ(my_handler.list, make_list({"this should be captured"})); +} + +TEST(IssueTest, capture_issues_with_nested_bindings) { + MyHandler my_handler1; + MyHandler my_handler2; + { + Issue::report(Issue("this should be logged")); + auto my_binding1 = Issue::listen(my_handler1); + Issue::report(Issue("issue1")); + { + auto my_binding2 = Issue::listen(my_handler2); + Issue::report(Issue("issue2")); + } + Issue::report(Issue("issue3")); + } + Issue::report(Issue("this should also be logged")); + EXPECT_EQ(my_handler1.list, make_list({"issue1", "issue3"})); + EXPECT_EQ(my_handler2.list, make_list({"issue2"})); +} + +TEST(IssueTest, handler_can_be_bound_multiple_times) { + MyHandler my_handler; + { + Issue::report(Issue("this should be logged")); + auto my_binding1 = Issue::listen(my_handler); + Issue::report(Issue("issue1")); + { + auto my_binding2 = Issue::listen(my_handler); + Issue::report(Issue("issue2")); + } + Issue::report(Issue("issue3")); + } + Issue::report(Issue("this should also be logged")); + EXPECT_EQ(my_handler.list, make_list({"issue1", "issue2", "issue3"})); +} + +GTEST_MAIN_RUN_ALL_TESTS() |