reservoir_cell_test.cc 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW
  4. # include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h"
  5. # include <gtest/gtest.h>
  6. OPENTELEMETRY_BEGIN_NAMESPACE
  7. namespace sdk
  8. {
  9. namespace metrics
  10. {
  11. class ReservoirCellTestPeer : public ::testing::Test
  12. {
  13. public:
  14. int64_t GetLongVal(const opentelemetry::sdk::metrics::ReservoirCell &reservoir_cell)
  15. {
  16. return nostd::get<int64_t>(reservoir_cell.value_);
  17. }
  18. double GetDoubleVal(const opentelemetry::sdk::metrics::ReservoirCell &reservoir_cell)
  19. {
  20. return nostd::get<double>(reservoir_cell.value_);
  21. }
  22. opentelemetry::common::SystemTimestamp GetRecordTime(
  23. const opentelemetry::sdk::metrics::ReservoirCell &reservoir_cell)
  24. {
  25. return reservoir_cell.record_time_;
  26. }
  27. void FilteredTest()
  28. {
  29. MetricAttributes original{{"k1", "v1"}, {"k2", "v2"}, {"k3", "v3"}};
  30. MetricAttributes metric_point{{"k2", "v2"}, {"k4", "v4"}};
  31. MetricAttributes expected_result{{"k1", "v1"}, {"k3", "v3"}};
  32. auto result = opentelemetry::sdk::metrics::ReservoirCell::filtered(original, metric_point);
  33. ASSERT_TRUE(result == expected_result);
  34. }
  35. };
  36. TEST_F(ReservoirCellTestPeer, recordMeasurement)
  37. {
  38. opentelemetry::sdk::metrics::ReservoirCell reservoir_cell;
  39. reservoir_cell.RecordLongMeasurement(static_cast<int64_t>(1), MetricAttributes{},
  40. opentelemetry::context::Context{});
  41. ASSERT_TRUE(GetLongVal(reservoir_cell) == 1);
  42. reservoir_cell.RecordDoubleMeasurement(1.5, MetricAttributes{},
  43. opentelemetry::context::Context{});
  44. ASSERT_TRUE(GetDoubleVal(reservoir_cell) == 1.5);
  45. }
  46. TEST_F(ReservoirCellTestPeer, GetAndReset)
  47. {
  48. opentelemetry::sdk::metrics::ReservoirCell reservoir_cell;
  49. auto double_data = reservoir_cell.GetAndResetDouble(MetricAttributes{});
  50. ASSERT_TRUE(GetRecordTime(reservoir_cell) == opentelemetry::common::SystemTimestamp{});
  51. ASSERT_TRUE(double_data == nullptr);
  52. auto long_data = reservoir_cell.GetAndResetLong(MetricAttributes{});
  53. ASSERT_TRUE(GetRecordTime(reservoir_cell) == opentelemetry::common::SystemTimestamp{});
  54. ASSERT_TRUE(long_data == nullptr);
  55. }
  56. TEST_F(ReservoirCellTestPeer, Filtered)
  57. {
  58. FilteredTest();
  59. }
  60. } // namespace metrics
  61. } // namespace sdk
  62. OPENTELEMETRY_END_NAMESPACE
  63. #endif // ENABLE_METRICS_EXEMPLAR_PREVIEW