1 #include <opentracing/mocktracer/tracer_factory.h>
6 #define CATCH_CONFIG_MAIN
7 #include <opentracing/catch2/catch.hpp>
8 using namespace opentracing
;
9 using namespace mocktracer
;
11 TEST_CASE("tracer_factory") {
12 MockTracerFactory tracer_factory
;
13 std::string error_message
;
15 SECTION("Creating a tracer from a nullptr yields an error.") {
16 const char* configuration
= nullptr;
17 auto tracer_maybe
= tracer_factory
.MakeTracer(configuration
, error_message
);
18 REQUIRE(!tracer_maybe
);
19 REQUIRE(!error_message
.empty());
22 SECTION("Creating a tracer from an empty string yields an error.") {
23 const char* configuration
= "";
24 auto tracer_maybe
= tracer_factory
.MakeTracer(configuration
, error_message
);
25 REQUIRE(!tracer_maybe
);
26 REQUIRE(!error_message
.empty());
29 SECTION("Creating a tracer from invalid JSON yields an error.") {
30 const char* configuration
= "{ abc";
31 auto tracer_maybe
= tracer_factory
.MakeTracer(configuration
, error_message
);
32 REQUIRE(!tracer_maybe
);
33 REQUIRE(!error_message
.empty());
37 "Creating a tracer from valid JSON but an invalid configuration "
39 const char* configuration
= R
"({ "abc
": 123 })";
40 auto tracer_maybe
= tracer_factory
.MakeTracer(configuration
, error_message
);
41 REQUIRE(!tracer_maybe
);
42 REQUIRE(!error_message
.empty());
43 REQUIRE(tracer_maybe
.error() == invalid_configuration_error
);
46 SECTION("Creating a tracer with an invalid output_file yields an error.") {
47 const char* configuration
= R
"({ "output_file
": "" })";
48 auto tracer_maybe
= tracer_factory
.MakeTracer(configuration
, error_message
);
49 REQUIRE(!tracer_maybe
);
50 REQUIRE(!error_message
.empty());
51 REQUIRE(tracer_maybe
.error() == invalid_configuration_error
);
54 SECTION("Creating a tracer with a valid config succeeds.") {
55 std::string span_filename
{"spans."};
56 const auto random_id
= std::random_device
{}();
57 span_filename
.append(std::to_string(random_id
));
58 std::string configuration
= R
"({ "output_file
": ")";
59 configuration.append(span_filename);
60 configuration.append(R"(" })");
63 tracer_factory
.MakeTracer(configuration
.c_str(), error_message
);
64 REQUIRE(tracer_maybe
);
66 std::remove(span_filename
.c_str());