sync_instruments_test.cc 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include <gtest/gtest.h>
  4. #include <limits>
  5. #include <map>
  6. #include <memory>
  7. #include <string>
  8. #include <utility>
  9. #include "opentelemetry/common/key_value_iterable_view.h"
  10. #include "opentelemetry/context/context.h"
  11. #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h"
  12. #include "opentelemetry/sdk/metrics/instruments.h"
  13. #include "opentelemetry/sdk/metrics/state/metric_storage.h"
  14. #include "opentelemetry/sdk/metrics/state/multi_metric_storage.h"
  15. #include "opentelemetry/sdk/metrics/sync_instruments.h"
  16. using namespace opentelemetry;
  17. using namespace opentelemetry::sdk::instrumentationscope;
  18. using namespace opentelemetry::sdk::metrics;
  19. auto instrumentation_scope = InstrumentationScope::Create("opentelemetry-cpp", "0.1.0");
  20. using M = std::map<std::string, std::string>;
  21. TEST(SyncInstruments, LongCounter)
  22. {
  23. InstrumentDescriptor instrument_descriptor = {
  24. "long_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kLong};
  25. std::unique_ptr<SyncWritableMetricStorage> metric_storage(new SyncMultiMetricStorage());
  26. LongCounter counter(instrument_descriptor, std::move(metric_storage));
  27. counter.Add(10);
  28. counter.Add(10, opentelemetry::context::Context{});
  29. counter.Add(10, opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}));
  30. counter.Add(10, opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}),
  31. opentelemetry::context::Context{});
  32. counter.Add(10, opentelemetry::common::KeyValueIterableView<M>({}));
  33. counter.Add(10, opentelemetry::common::KeyValueIterableView<M>({}),
  34. opentelemetry::context::Context{});
  35. }
  36. TEST(SyncInstruments, DoubleCounter)
  37. {
  38. InstrumentDescriptor instrument_descriptor = {
  39. "double_counter", "description", "1", InstrumentType::kCounter, InstrumentValueType::kDouble};
  40. std::unique_ptr<SyncWritableMetricStorage> metric_storage(new SyncMultiMetricStorage());
  41. DoubleCounter counter(instrument_descriptor, std::move(metric_storage));
  42. counter.Add(10.10);
  43. counter.Add(10.10, opentelemetry::context::Context{});
  44. counter.Add(10.10,
  45. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}));
  46. counter.Add(10.10,
  47. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}),
  48. opentelemetry::context::Context{});
  49. counter.Add(10.10, opentelemetry::common::KeyValueIterableView<M>({}));
  50. counter.Add(10.10, opentelemetry::common::KeyValueIterableView<M>({}),
  51. opentelemetry::context::Context{});
  52. }
  53. TEST(SyncInstruments, LongUpDownCounter)
  54. {
  55. InstrumentDescriptor instrument_descriptor = {"long_updowncounter", "description", "1",
  56. InstrumentType::kUpDownCounter,
  57. InstrumentValueType::kLong};
  58. std::unique_ptr<SyncWritableMetricStorage> metric_storage(new SyncMultiMetricStorage());
  59. LongUpDownCounter counter(instrument_descriptor, std::move(metric_storage));
  60. counter.Add(10);
  61. counter.Add(10, opentelemetry::context::Context{});
  62. counter.Add(10, opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}));
  63. counter.Add(10, opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}),
  64. opentelemetry::context::Context{});
  65. counter.Add(10, opentelemetry::common::KeyValueIterableView<M>({}));
  66. counter.Add(10, opentelemetry::common::KeyValueIterableView<M>({}),
  67. opentelemetry::context::Context{});
  68. // negative values
  69. counter.Add(-10);
  70. counter.Add(-10, opentelemetry::context::Context{});
  71. counter.Add(-10,
  72. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}));
  73. counter.Add(-10, opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}),
  74. opentelemetry::context::Context{});
  75. counter.Add(-10, opentelemetry::common::KeyValueIterableView<M>({}));
  76. counter.Add(-10, opentelemetry::common::KeyValueIterableView<M>({}),
  77. opentelemetry::context::Context{});
  78. }
  79. TEST(SyncInstruments, DoubleUpDownCounter)
  80. {
  81. InstrumentDescriptor instrument_descriptor = {"double_updowncounter", "description", "1",
  82. InstrumentType::kUpDownCounter,
  83. InstrumentValueType::kDouble};
  84. std::unique_ptr<SyncWritableMetricStorage> metric_storage(new SyncMultiMetricStorage());
  85. DoubleUpDownCounter counter(instrument_descriptor, std::move(metric_storage));
  86. counter.Add(10.10);
  87. counter.Add(10.10, opentelemetry::context::Context{});
  88. counter.Add(10.10,
  89. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}),
  90. opentelemetry::context::Context{});
  91. counter.Add(10.10,
  92. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}));
  93. counter.Add(10.10, opentelemetry::common::KeyValueIterableView<M>({}),
  94. opentelemetry::context::Context{});
  95. counter.Add(10.10, opentelemetry::common::KeyValueIterableView<M>({}));
  96. }
  97. #if OPENTELEMETRY_ABI_VERSION_NO >= 2
  98. TEST(SyncInstruments, LongGauge)
  99. {
  100. InstrumentDescriptor instrument_descriptor = {"long_gauge", "description", "1",
  101. InstrumentType::kGauge, InstrumentValueType::kLong};
  102. std::unique_ptr<SyncWritableMetricStorage> metric_storage(new SyncMultiMetricStorage());
  103. LongGauge gauge(instrument_descriptor, std::move(metric_storage));
  104. gauge.Record(10);
  105. gauge.Record(10, opentelemetry::context::Context{});
  106. gauge.Record(10, opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}),
  107. opentelemetry::context::Context{});
  108. gauge.Record(10,
  109. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}));
  110. gauge.Record(10, opentelemetry::common::KeyValueIterableView<M>({}),
  111. opentelemetry::context::Context{});
  112. gauge.Record(10, opentelemetry::common::KeyValueIterableView<M>({}));
  113. }
  114. TEST(SyncInstruments, DoubleGauge)
  115. {
  116. InstrumentDescriptor instrument_descriptor = {
  117. "double_gauge", "description", "1", InstrumentType::kGauge, InstrumentValueType::kDouble};
  118. std::unique_ptr<SyncWritableMetricStorage> metric_storage(new SyncMultiMetricStorage());
  119. DoubleGauge gauge(instrument_descriptor, std::move(metric_storage));
  120. gauge.Record(10.10);
  121. gauge.Record(10.10, opentelemetry::context::Context{});
  122. gauge.Record(10.10,
  123. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}),
  124. opentelemetry::context::Context{});
  125. gauge.Record(10.10,
  126. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}));
  127. gauge.Record(10.10, opentelemetry::common::KeyValueIterableView<M>({}),
  128. opentelemetry::context::Context{});
  129. gauge.Record(10.10, opentelemetry::common::KeyValueIterableView<M>({}));
  130. }
  131. #endif
  132. TEST(SyncInstruments, LongHistogram)
  133. {
  134. InstrumentDescriptor instrument_descriptor = {
  135. "long_histogram", "description", "1", InstrumentType::kHistogram, InstrumentValueType::kLong};
  136. std::unique_ptr<SyncWritableMetricStorage> metric_storage(new SyncMultiMetricStorage());
  137. LongHistogram histogram(instrument_descriptor, std::move(metric_storage));
  138. histogram.Record(10, opentelemetry::context::Context{});
  139. histogram.Record(10,
  140. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}),
  141. opentelemetry::context::Context{});
  142. histogram.Record(10, opentelemetry::common::KeyValueIterableView<M>({}),
  143. opentelemetry::context::Context{});
  144. }
  145. TEST(SyncInstruments, DoubleHistogram)
  146. {
  147. InstrumentDescriptor instrument_descriptor = {"double_histogram", "description", "1",
  148. InstrumentType::kHistogram,
  149. InstrumentValueType::kDouble};
  150. std::unique_ptr<SyncWritableMetricStorage> metric_storage(new SyncMultiMetricStorage());
  151. DoubleHistogram histogram(instrument_descriptor, std::move(metric_storage));
  152. histogram.Record(10.10, opentelemetry::context::Context{});
  153. histogram.Record(-10.10, opentelemetry::context::Context{}); // This is ignored.
  154. histogram.Record(std::numeric_limits<double>::quiet_NaN(),
  155. opentelemetry::context::Context{}); // This is ignored too
  156. histogram.Record(std::numeric_limits<double>::infinity(),
  157. opentelemetry::context::Context{}); // This is ignored too
  158. histogram.Record(10.10,
  159. opentelemetry::common::KeyValueIterableView<M>({{"abc", "123"}, {"xyz", "456"}}),
  160. opentelemetry::context::Context{});
  161. histogram.Record(10.10, opentelemetry::common::KeyValueIterableView<M>({}),
  162. opentelemetry::context::Context{});
  163. }