userver: userver/testsuite/testpoint_control.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
testpoint_control.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/testsuite/testpoint_control.hpp
4/// @brief @copybrief testsuite::TestpointControl
5
6#include <functional>
7#include <string>
8#include <unordered_set>
9
10#include <userver/formats/json_fwd.hpp>
11
12USERVER_NAMESPACE_BEGIN
13
14namespace testsuite {
15
16/// @brief Base testpoint client. Used to report TESTPOINT executions to
17/// testsuite.
18///
19/// Do not use directly unless you are writing a component for handling
20/// testpoints.
22 public:
23 using Callback = std::function<void(const formats::json::Value&)>;
24
25 virtual ~TestpointClientBase();
26
27 /// @param name the name of the testpoint
28 /// @param json the request that will be passed to testsuite handler
29 /// @param callback will be invoked with the response if the testpoint has
30 /// been handled on the testsuite side successfully
31 virtual void Execute(const std::string& name,
32 const formats::json::Value& json,
33 const Callback& callback) const = 0;
34
35 protected:
36 /// Must be called in destructors of derived classes
37 void Unregister() noexcept;
38};
39
40/// @brief Testpoint control interface for testsuite
41///
42/// All methods are coro-safe.
43/// All testpoints are disabled by default.
44/// Only 1 TestpointControl instance may exist globally at a time.
45class TestpointControl final {
46 public:
47 TestpointControl();
48 ~TestpointControl();
49
50 /// @brief Enable only the selected testpoints
51 void SetEnabledNames(std::unordered_set<std::string> names);
52
53 /// @brief Enable all defined testpoints
54 ///
55 /// Testpoints, for which there is no registered handler on the testsuite
56 /// side, will still be skipped, at the cost of an extra request.
58
59 /// @brief Makes a testpoint client globally accessible from testpoints. It
60 /// will unregister itself on destruction.
61 /// @note Only 1 client may be registered at a time.
63};
64
65} // namespace testsuite
66
67USERVER_NAMESPACE_END