Skip to content

Commit f1b5fbd

Browse files
authored
[TEST] add a test for ElasticSearchRecordable (open-telemetry#3154)
1 parent 4341e12 commit f1b5fbd

File tree

1 file changed

+69
-23
lines changed

1 file changed

+69
-23
lines changed

exporters/elasticsearch/test/es_log_record_exporter_test.cc

Lines changed: 69 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,48 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
#include "opentelemetry/exporters/elasticsearch/es_log_record_exporter.h"
5-
#include "opentelemetry/ext/http/server/http_server.h"
6-
#include "opentelemetry/logs/provider.h"
5+
#include "opentelemetry/common/timestamp.h"
6+
#include "opentelemetry/exporters/elasticsearch/es_log_recordable.h"
7+
#include "opentelemetry/logs/severity.h"
8+
#include "opentelemetry/nostd/span.h"
9+
#include "opentelemetry/nostd/string_view.h"
10+
#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h"
711
#include "opentelemetry/sdk/logs/exporter.h"
8-
#include "opentelemetry/sdk/logs/logger_provider.h"
9-
#include "opentelemetry/sdk/logs/simple_log_record_processor.h"
12+
#include "opentelemetry/sdk/resource/resource.h"
1013

1114
#include <gtest/gtest.h>
12-
#include <iostream>
15+
#include <chrono>
16+
#include <string>
1317

1418
namespace sdklogs = opentelemetry::sdk::logs;
1519
namespace logs_api = opentelemetry::logs;
1620
namespace nostd = opentelemetry::nostd;
1721
namespace logs_exporter = opentelemetry::exporter::logs;
1822

19-
TEST(ElasticsearchLogsExporterTests, Dummy)
20-
{
21-
// to enable linking
22-
}
23-
24-
#if 0
2523
// Attempt to write a log to an invalid host/port, test that the Export() returns failure
26-
TEST(ElasticsearchLogsExporterTests, InvalidEndpoint)
24+
TEST(DISABLED_ElasticsearchLogsExporterTests, InvalidEndpoint)
2725
{
2826
// Create invalid connection options for the elasticsearch exporter
2927
logs_exporter::ElasticsearchExporterOptions options("localhost", -1);
3028

3129
// Create an elasticsearch exporter
32-
auto exporter =
33-
std::unique_ptr<sdklogs::LogRecordExporter>(new logs_exporter::ElasticsearchLogRecordExporter(options));
30+
auto exporter = std::unique_ptr<sdklogs::LogRecordExporter>(
31+
new logs_exporter::ElasticsearchLogRecordExporter(options));
3432

3533
// Create a log record and send to the exporter
3634
auto record = exporter->MakeRecordable();
3735
auto result = exporter->Export(nostd::span<std::unique_ptr<sdklogs::Recordable>>(&record, 1));
3836

3937
// Ensure the return value is failure
40-
ASSERT_EQ(result, sdk::common::ExportResult::kFailure);
38+
ASSERT_EQ(result, opentelemetry::sdk::common::ExportResult::kFailure);
4139
}
4240

4341
// Test that when the exporter is shutdown, any call to Export should return failure
44-
TEST(ElasticsearchLogsExporterTests, Shutdown)
42+
TEST(DISABLED_ElasticsearchLogsExporterTests, Shutdown)
4543
{
4644
// Create an elasticsearch exporter and immediately shut it down
47-
auto exporter =
48-
std::unique_ptr<sdklogs::LogRecordExporter>(new logs_exporter::ElasticsearchLogRecordExporter);
45+
auto exporter = std::unique_ptr<sdklogs::LogRecordExporter>(
46+
new logs_exporter::ElasticsearchLogRecordExporter);
4947
bool shutdownResult = exporter->Shutdown();
5048
ASSERT_TRUE(shutdownResult);
5149

@@ -54,15 +52,15 @@ TEST(ElasticsearchLogsExporterTests, Shutdown)
5452
auto result = exporter->Export(nostd::span<std::unique_ptr<sdklogs::Recordable>>(&record, 1));
5553

5654
// Ensure the return value is failure
57-
ASSERT_EQ(result, sdk::common::ExportResult::kFailure);
55+
ASSERT_EQ(result, opentelemetry::sdk::common::ExportResult::kFailure);
5856
}
5957

6058
// Test the elasticsearch recordable object
61-
TEST(ElasticsearchLogsExporterTests, RecordableCreation)
59+
TEST(DISABLED_ElasticsearchLogsExporterTests, RecordableCreation)
6260
{
6361
// Create an elasticsearch exporter
64-
auto exporter =
65-
std::unique_ptr<sdklogs::LogRecordExporter>(new logs_exporter::ElasticsearchLogRecordExporter);
62+
auto exporter = std::unique_ptr<sdklogs::LogRecordExporter>(
63+
new logs_exporter::ElasticsearchLogRecordExporter);
6664

6765
// Create a recordable
6866
auto record = exporter->MakeRecordable();
@@ -79,4 +77,52 @@ TEST(ElasticsearchLogsExporterTests, RecordableCreation)
7977

8078
exporter->Export(nostd::span<std::unique_ptr<sdklogs::Recordable>>(&record, 1));
8179
}
82-
#endif
80+
81+
TEST(ElasticsearchLogRecordableTests, BasicTests)
82+
{
83+
const auto severity = logs_api::Severity::kFatal;
84+
const std::array<nostd::string_view, 2> stringlist{
85+
{nostd::string_view("string1"), nostd::string_view("string2")}};
86+
87+
const std::int64_t expected_observed_ts = 1732063944999647774LL;
88+
const std::string expected_timestamp("2024-11-20T00:52:24.999647Z");
89+
const std::string expected_severity(
90+
opentelemetry::logs::SeverityNumToText[static_cast<std::size_t>(severity)]);
91+
const std::string expected_body("Body of the log message");
92+
const std::string expected_scope_name("scope_name");
93+
const bool expected_boolean = false;
94+
const int expected_int = 1;
95+
const double expected_double = 2.0;
96+
97+
const nlohmann::json expected{
98+
{"@timestamp", expected_timestamp},
99+
{"boolean", expected_boolean},
100+
{"double", expected_double},
101+
{"ecs", {{"version", "8.11.0"}}},
102+
{"int", expected_int},
103+
{"log", {{"level", expected_severity}, {"logger", expected_scope_name}}},
104+
{"message", expected_body},
105+
{"observedtimestamp", expected_observed_ts},
106+
{"stringlist", {stringlist[0], stringlist[1]}}};
107+
108+
const opentelemetry::common::SystemTimestamp now{std::chrono::nanoseconds(expected_observed_ts)};
109+
110+
const auto scope =
111+
opentelemetry::sdk::instrumentationscope::InstrumentationScope::Create(expected_scope_name);
112+
113+
opentelemetry::exporter::logs::ElasticSearchRecordable recordable;
114+
recordable.SetTimestamp(now);
115+
recordable.SetObservedTimestamp(now);
116+
recordable.SetSeverity(severity);
117+
recordable.SetBody(expected_body);
118+
recordable.SetInstrumentationScope(*scope);
119+
120+
recordable.SetAttribute("boolean", expected_boolean);
121+
recordable.SetAttribute("int", expected_int);
122+
recordable.SetAttribute("double", expected_double);
123+
recordable.SetAttribute("stringlist", stringlist);
124+
125+
const auto actual = recordable.GetJSON();
126+
127+
EXPECT_EQ(actual, expected);
128+
}

0 commit comments

Comments
 (0)