diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
commit | e6918187568dbd01842d8d1d2c808ce16a894239 (patch) | |
tree | 64f88b554b444a49f656b6c656111a145cbbaa28 /src/jaegertracing/opentelemetry-cpp/sdk/test/metrics/meter_provider_sdk_test.cc | |
parent | Initial commit. (diff) | |
download | ceph-e6918187568dbd01842d8d1d2c808ce16a894239.tar.xz ceph-e6918187568dbd01842d8d1d2c808ce16a894239.zip |
Adding upstream version 18.2.2.upstream/18.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/jaegertracing/opentelemetry-cpp/sdk/test/metrics/meter_provider_sdk_test.cc')
-rw-r--r-- | src/jaegertracing/opentelemetry-cpp/sdk/test/metrics/meter_provider_sdk_test.cc | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/jaegertracing/opentelemetry-cpp/sdk/test/metrics/meter_provider_sdk_test.cc b/src/jaegertracing/opentelemetry-cpp/sdk/test/metrics/meter_provider_sdk_test.cc new file mode 100644 index 000000000..b0fabe50b --- /dev/null +++ b/src/jaegertracing/opentelemetry-cpp/sdk/test/metrics/meter_provider_sdk_test.cc @@ -0,0 +1,91 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#ifndef ENABLE_METRICS_PREVIEW +# include <gtest/gtest.h> +# include "opentelemetry/sdk/metrics/export/metric_producer.h" +# include "opentelemetry/sdk/metrics/meter.h" +# include "opentelemetry/sdk/metrics/meter_provider.h" +# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/metric_reader.h" +# include "opentelemetry/sdk/metrics/view/instrument_selector.h" +# include "opentelemetry/sdk/metrics/view/meter_selector.h" + +using namespace opentelemetry::sdk::metrics; + +class MockMetricExporter : public MetricExporter +{ + +public: + MockMetricExporter() = default; + opentelemetry::sdk::common::ExportResult Export(const ResourceMetrics &records) noexcept override + { + return opentelemetry::sdk::common::ExportResult::kSuccess; + } + + bool ForceFlush( + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override + { + return true; + } + + bool Shutdown(std::chrono::microseconds timeout = std::chrono::microseconds(0)) noexcept override + { + return true; + } +}; + +class MockMetricReader : public MetricReader +{ +public: + MockMetricReader(std::unique_ptr<MetricExporter> exporter) : exporter_(std::move(exporter)) {} + virtual bool OnForceFlush(std::chrono::microseconds timeout) noexcept override { return true; } + virtual bool OnShutDown(std::chrono::microseconds timeout) noexcept override { return true; } + virtual void OnInitialized() noexcept override {} + +private: + std::unique_ptr<MetricExporter> exporter_; +}; + +TEST(MeterProvider, GetMeter) +{ + + MeterProvider mp1; + // std::unique_ptr<View> view{std::unique_ptr<View>()}; + // MeterProvider mp1(std::move(exporters), std::move(readers), std::move(views); + auto m1 = mp1.GetMeter("test"); + auto m2 = mp1.GetMeter("test"); + auto m3 = mp1.GetMeter("different", "1.0.0"); + auto m4 = mp1.GetMeter(""); + auto m5 = mp1.GetMeter(opentelemetry::nostd::string_view{}); + auto m6 = mp1.GetMeter("different", "1.0.0", "https://opentelemetry.io/schemas/1.2.0"); + ASSERT_NE(nullptr, m1); + ASSERT_NE(nullptr, m2); + ASSERT_NE(nullptr, m3); + ASSERT_NE(nullptr, m6); + + // Should return the same instance each time. + ASSERT_EQ(m1, m2); + ASSERT_NE(m1, m3); + ASSERT_EQ(m4, m5); + ASSERT_NE(m3, m6); + + // Should be an sdk::trace::Tracer with the processor attached. +# ifdef OPENTELEMETRY_RTTI_ENABLED + auto sdkMeter1 = dynamic_cast<Meter *>(m1.get()); +# else + auto sdkMeter1 = static_cast<Meter *>(m1.get()); +# endif + ASSERT_NE(nullptr, sdkMeter1); + std::unique_ptr<MockMetricExporter> exporter(new MockMetricExporter()); + std::unique_ptr<MetricReader> reader{new MockMetricReader(std::move(exporter))}; + ASSERT_NO_THROW(mp1.AddMetricReader(std::move(reader))); + + std::unique_ptr<View> view{std::unique_ptr<View>()}; + std::unique_ptr<InstrumentSelector> instrument_selector{ + new InstrumentSelector(InstrumentType::kCounter, "instru1")}; + std::unique_ptr<MeterSelector> meter_selector{new MeterSelector("name1", "version1", "schema1")}; + ASSERT_NO_THROW( + mp1.AddView(std::move(instrument_selector), std::move(meter_selector), std::move(view))); +} +#endif |