| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | #include "prometheus/registry.h"#include "prometheus/counter.h"#include "prometheus/histogram.h"#include "prometheus/summary.h"#include <vector>#include <gmock/gmock.h>namespace prometheus {namespace {TEST(RegistryTest, collect_single_metric_family) {  Registry registry{};  auto& counter_family =      BuildCounter().Name("test").Help("a test").Register(registry);  counter_family.Add({{"name", "counter1"}});  counter_family.Add({{"name", "counter2"}});  auto collected = registry.Collect();  ASSERT_EQ(collected.size(), 1U);  EXPECT_EQ(collected[0].name, "test");  EXPECT_EQ(collected[0].help, "a test");  ASSERT_EQ(collected[0].metric.size(), 2U);  ASSERT_EQ(collected[0].metric.at(0).label.size(), 1U);  EXPECT_EQ(collected[0].metric.at(0).label.at(0).name, "name");  ASSERT_EQ(collected[0].metric.at(1).label.size(), 1U);  EXPECT_EQ(collected[0].metric.at(1).label.at(0).name, "name");}TEST(RegistryTest, build_histogram_family) {  Registry registry{};  auto& histogram_family =      BuildHistogram().Name("hist").Help("Test Histogram").Register(registry);  auto& histogram = histogram_family.Add({{"name", "test_histogram_1"}},                                         Histogram::BucketBoundaries{0, 1, 2});  histogram.Observe(1.1);  auto collected = registry.Collect();  ASSERT_EQ(collected.size(), 1U);}TEST(RegistryTest, reject_different_type_than_counter) {  const auto same_name = std::string{"same_name"};  Registry registry{};  EXPECT_NO_THROW(BuildCounter().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildGauge().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildHistogram().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildSummary().Name(same_name).Register(registry));}TEST(RegistryTest, reject_different_type_than_gauge) {  const auto same_name = std::string{"same_name"};  Registry registry{};  EXPECT_NO_THROW(BuildGauge().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildCounter().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildHistogram().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildSummary().Name(same_name).Register(registry));}TEST(RegistryTest, reject_different_type_than_histogram) {  const auto same_name = std::string{"same_name"};  Registry registry{};  EXPECT_NO_THROW(BuildHistogram().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildCounter().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildGauge().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildSummary().Name(same_name).Register(registry));}TEST(RegistryTest, reject_different_type_than_summary) {  const auto same_name = std::string{"same_name"};  Registry registry{};  EXPECT_NO_THROW(BuildSummary().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildCounter().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildGauge().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildHistogram().Name(same_name).Register(registry));}TEST(RegistryTest, append_same_families) {  Registry registry{Registry::InsertBehavior::NonStandardAppend};  std::size_t loops = 4;  while (loops-- > 0) {    BuildCounter()        .Name("counter")        .Help("Test Counter")        .Register(registry)        .Add({{"name", "test_counter"}});  }  auto collected = registry.Collect();  EXPECT_EQ(4U, collected.size());}TEST(RegistryTest, throw_for_same_family_name) {  const auto same_name = std::string{"same_name"};  Registry registry{Registry::InsertBehavior::Throw};  EXPECT_NO_THROW(BuildCounter().Name(same_name).Register(registry));  EXPECT_ANY_THROW(BuildCounter().Name(same_name).Register(registry));}TEST(RegistryTest, merge_same_families) {  Registry registry{Registry::InsertBehavior::Merge};  std::size_t loops = 4;  while (loops-- > 0) {    BuildCounter()        .Name("counter")        .Help("Test Counter")        .Register(registry)        .Add({{"name", "test_counter"}});  }  auto collected = registry.Collect();  EXPECT_EQ(1U, collected.size());}TEST(RegistryTest, do_not_merge_families_with_different_labels) {  Registry registry{Registry::InsertBehavior::Merge};  EXPECT_NO_THROW(BuildCounter()                      .Name("counter")                      .Help("Test Counter")                      .Labels({{"a", "A"}})                      .Register(registry));  EXPECT_ANY_THROW(BuildCounter()                       .Name("counter")                       .Help("Test Counter")                       .Labels({{"b", "B"}})                       .Register(registry));}}  // namespace}  // namespace prometheus
 |