userver: userver/testsuite/testpoint.hpp File Reference
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
testpoint.hpp File Reference

Detailed Description

Send testpoint notification. Works only if testpoint support is enabled (e.g. in components::TestsControl), otherwise does nothing.

Definition in file testpoint.hpp.

Go to the source code of this file.

Namespaces

namespace  testsuite
 Testsuite integration.
 

Macros

#define TESTPOINT_CALLBACK(name, json, callback)
 Send testpoint notification and receive data. Works only if testpoint support is enabled (e.g. in components::TestsControl), otherwise does nothing.
 
#define TESTPOINT(name, json)
 Send testpoint notification. Works only if testpoint support is enabled (e.g. in components::TestsControl), otherwise does nothing.
 
#define TESTPOINT_CALLBACK_NONCORO(name, json, task_processor, callback)
 Same as TESTPOINT_CALLBACK but must be called outside of coroutine (e.g. from std::thread routine).
 
#define TESTPOINT_NONCORO(name, json, task_processor)
 Same as TESTPOINT but must be called outside of coroutine (e.g. from std::thread routine).
 

Typedefs

using testsuite::TestpointCallback = utils::function_ref<void(const formats::json::Value&)>
 

Functions

bool testsuite::AreTestpointsAvailable () noexcept
 Returns true if testpoints are available in runtime.
 

Macro Definition Documentation

◆ TESTPOINT

#define TESTPOINT ( name,
json )

Send testpoint notification. Works only if testpoint support is enabled (e.g. in components::TestsControl), otherwise does nothing.

Example usage:

TESTPOINT("simple-testpoint", [] {
formats::json::ValueBuilder builder;
builder["payload"] = "Hello, world!";
return builder.ExtractValue();
}());
async def test_basic(service_client, testpoint):
@testpoint('simple-testpoint')
def simple_testpoint(data):
assert data == {'payload': 'Hello, world!'}
response = await service_client.get('/testpoint')
assert response.status == 200
assert 'application/json' in response.headers['Content-Type']
assert simple_testpoint.times_called == 1

Throws nothing if server::handlers::TestsControl is not loaded or it is disabled in static config via load-enabled: false.

Examples
postgresql/functional_tests/basic_chaos/postgres_service.cpp, samples/kafka_service/src/consume.cpp, samples/testsuite-support/src/tasks.cpp, samples/testsuite-support/src/testpoint.cpp, and samples/ydb_service/components/topic_reader.cpp.

Definition at line 87 of file testpoint.hpp.

◆ TESTPOINT_CALLBACK

#define TESTPOINT_CALLBACK ( name,
json,
callback )

Send testpoint notification and receive data. Works only if testpoint support is enabled (e.g. in components::TestsControl), otherwise does nothing.

Example usage:

formats::json::ValueBuilder result;
TESTPOINT_CALLBACK("injection-point", formats::json::Value(), [&result](const formats::json::Value& doc) {
result["value"] = doc["value"].As<std::string>("");
});
async def test_injection(service_client, testpoint):
@testpoint('injection-point')
def injection_point(data):
return {'value': 'injected'}
response = await service_client.get('/testpoint')
assert response.status == 200
assert 'application/json' in response.headers['Content-Type']
assert response.json() == {'value': 'injected'}
# testpoint supports callqueue interface
assert injection_point.times_called == 1

Throws nothing if server::handlers::TestsControl is not loaded or it is disabled in static config via load-enabled: false.

Examples
samples/testsuite-support/src/testpoint.cpp.

Definition at line 60 of file testpoint.hpp.

◆ TESTPOINT_CALLBACK_NONCORO

#define TESTPOINT_CALLBACK_NONCORO ( name,
json,
task_processor,
callback )

Same as TESTPOINT_CALLBACK but must be called outside of coroutine (e.g. from std::thread routine).

Throws nothing if server::handlers::TestsControl is not loaded or it is disabled in static config via load-enabled: false.

Definition at line 97 of file testpoint.hpp.

◆ TESTPOINT_NONCORO

#define TESTPOINT_NONCORO ( name,
json,
task_processor )

Same as TESTPOINT but must be called outside of coroutine (e.g. from std::thread routine).

Throws nothing if server::handlers::TestsControl is not loaded or it is disabled in static config via load-enabled: false.

Definition at line 118 of file testpoint.hpp.