]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/opentelemetry-cpp/sdk/test/logs/logger_sdk_test.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / sdk / test / logs / logger_sdk_test.cc
CommitLineData
1e59de90
TL
1// Copyright The OpenTelemetry Authors
2// SPDX-License-Identifier: Apache-2.0
3
4#ifdef ENABLE_LOGS_PREVIEW
5
6# include "opentelemetry/sdk/logs/log_record.h"
7# include "opentelemetry/sdk/logs/logger.h"
8
9# include <gtest/gtest.h>
10
11using namespace opentelemetry::sdk::logs;
12namespace logs_api = opentelemetry::logs;
13
14TEST(LoggerSDK, LogToNullProcessor)
15{
16 // Confirm Logger::Log() does not have undefined behavior
17 // even when there is no processor set
18 // since it calls Processor::OnReceive()
19
20 auto lp = std::shared_ptr<logs_api::LoggerProvider>(new LoggerProvider());
21 const std::string schema_url{"https://opentelemetry.io/schemas/1.11.0"};
22 auto logger = lp->GetLogger("logger", "", "opentelelemtry_library", "", schema_url);
23
24 auto sdk_logger = static_cast<opentelemetry::sdk::logs::Logger *>(logger.get());
25 ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetName(), "opentelelemtry_library");
26 ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetVersion(), "");
27 ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetSchemaURL(), schema_url);
28 // Log a sample log record to a nullptr processor
29 logger->Debug("Test log");
30}
31
32class MockProcessor final : public LogProcessor
33{
34private:
35 std::shared_ptr<LogRecord> record_received_;
36
37public:
38 // A processor used for testing that keeps a track of the recordable it received
39 explicit MockProcessor(std::shared_ptr<LogRecord> record_received) noexcept
40 : record_received_(record_received)
41 {}
42
43 std::unique_ptr<Recordable> MakeRecordable() noexcept
44 {
45 return std::unique_ptr<Recordable>(new LogRecord);
46 }
47 // OnReceive stores the record it receives into the shared_ptr recordable passed into its
48 // constructor
49 void OnReceive(std::unique_ptr<Recordable> &&record) noexcept
50 {
51 // Cast the recordable received into a concrete LogRecord type
52 auto copy = std::shared_ptr<LogRecord>(static_cast<LogRecord *>(record.release()));
53
54 // Copy over the received log record's severity, name, and body fields over to the recordable
55 // passed in the constructor
56 record_received_->SetSeverity(copy->GetSeverity());
57 record_received_->SetBody(copy->GetBody());
58 }
59 bool ForceFlush(std::chrono::microseconds timeout = std::chrono::microseconds(0)) noexcept
60 {
61 return true;
62 }
63 bool Shutdown(std::chrono::microseconds timeout = std::chrono::microseconds(0)) noexcept
64 {
65 return true;
66 }
67};
68
69TEST(LoggerSDK, LogToAProcessor)
70{
71 // Create an API LoggerProvider and logger
72 auto api_lp = std::shared_ptr<logs_api::LoggerProvider>(new LoggerProvider());
73 const std::string schema_url{"https://opentelemetry.io/schemas/1.11.0"};
74 auto logger = api_lp->GetLogger("logger", "", "opentelelemtry_library", "", schema_url);
75
76 // Cast the API LoggerProvider to an SDK Logger Provider and assert that it is still the same
77 // LoggerProvider by checking that getting a logger with the same name as the previously defined
78 // logger is the same instance
79 auto lp = static_cast<LoggerProvider *>(api_lp.get());
80 auto logger2 = lp->GetLogger("logger", "", "opentelelemtry_library", "", schema_url);
81 ASSERT_EQ(logger, logger2);
82
83 auto sdk_logger = static_cast<opentelemetry::sdk::logs::Logger *>(logger.get());
84 ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetName(), "opentelelemtry_library");
85 ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetVersion(), "");
86 ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetSchemaURL(), schema_url);
87 // Set a processor for the LoggerProvider
88 auto shared_recordable = std::shared_ptr<LogRecord>(new LogRecord());
89 lp->AddProcessor(std::unique_ptr<LogProcessor>(new MockProcessor(shared_recordable)));
90
91 // Check that the recordable created by the Log() statement is set properly
92 logger->Log(logs_api::Severity::kWarn, "Log Message");
93
94 ASSERT_EQ(shared_recordable->GetSeverity(), logs_api::Severity::kWarn);
95 ASSERT_EQ(shared_recordable->GetBody(), "Log Message");
96}
97#endif