#include "labels.h" #include using namespace NMonitoring; Y_UNIT_TEST_SUITE(TLabelsTest) { TLabel pSolomon("project", "solomon"); TLabel pKikimr("project", "kikimr"); Y_UNIT_TEST(Equals) { UNIT_ASSERT(pSolomon == TLabel("project", "solomon")); UNIT_ASSERT_STRINGS_EQUAL(pSolomon.Name(), "project"); UNIT_ASSERT_STRINGS_EQUAL(pSolomon.Value(), "solomon"); UNIT_ASSERT(pSolomon != pKikimr); } Y_UNIT_TEST(ToString) { UNIT_ASSERT_STRINGS_EQUAL(pSolomon.ToString(), "project=solomon"); UNIT_ASSERT_STRINGS_EQUAL(pKikimr.ToString(), "project=kikimr"); } Y_UNIT_TEST(FromString) { auto pYql = TLabel::FromString("project=yql"); UNIT_ASSERT_EQUAL(pYql, TLabel("project", "yql")); UNIT_ASSERT_EQUAL(TLabel::FromString("k=v"), TLabel("k", "v")); UNIT_ASSERT_EQUAL(TLabel::FromString("k=v "), TLabel("k", "v")); UNIT_ASSERT_EQUAL(TLabel::FromString("k= v"), TLabel("k", "v")); UNIT_ASSERT_EQUAL(TLabel::FromString("k =v"), TLabel("k", "v")); UNIT_ASSERT_EQUAL(TLabel::FromString(" k=v"), TLabel("k", "v")); UNIT_ASSERT_EQUAL(TLabel::FromString(" k = v "), TLabel("k", "v")); UNIT_ASSERT_EXCEPTION_CONTAINS( TLabel::FromString(""), yexception, "invalid label string format"); UNIT_ASSERT_EXCEPTION_CONTAINS( TLabel::FromString("k v"), yexception, "invalid label string format"); UNIT_ASSERT_EXCEPTION_CONTAINS( TLabel::FromString(" =v"), yexception, "label name cannot be empty"); UNIT_ASSERT_EXCEPTION_CONTAINS( TLabel::FromString("k= "), yexception, "label value cannot be empty"); } Y_UNIT_TEST(TryFromString) { TLabel pYql; UNIT_ASSERT(TLabel::TryFromString("project=yql", pYql)); UNIT_ASSERT_EQUAL(pYql, TLabel("project", "yql")); { TLabel label; UNIT_ASSERT(TLabel::TryFromString("k=v", label)); UNIT_ASSERT_EQUAL(label, TLabel("k", "v")); } { TLabel label; UNIT_ASSERT(TLabel::TryFromString("k=v ", label)); UNIT_ASSERT_EQUAL(label, TLabel("k", "v")); } { TLabel label; UNIT_ASSERT(TLabel::TryFromString("k= v", label)); UNIT_ASSERT_EQUAL(label, TLabel("k", "v")); } { TLabel label; UNIT_ASSERT(TLabel::TryFromString("k =v", label)); UNIT_ASSERT_EQUAL(label, TLabel("k", "v")); } { TLabel label; UNIT_ASSERT(TLabel::TryFromString(" k=v", label)); UNIT_ASSERT_EQUAL(label, TLabel("k", "v")); } { TLabel label; UNIT_ASSERT(TLabel::TryFromString(" k = v ", label)); UNIT_ASSERT_EQUAL(label, TLabel("k", "v")); } } Y_UNIT_TEST(Labels) { TLabels labels; UNIT_ASSERT(labels.Add(TStringBuf("name1"), TStringBuf("value1"))); UNIT_ASSERT(labels.Size() == 1); UNIT_ASSERT(labels.Has(TStringBuf("name1"))); { auto l = labels.Find("name1"); UNIT_ASSERT(l.Defined()); UNIT_ASSERT_STRINGS_EQUAL(l->Name(), "name1"); UNIT_ASSERT_STRINGS_EQUAL(l->Value(), "value1"); } { auto l = labels.Find("name2"); UNIT_ASSERT(!l.Defined()); } // duplicated name UNIT_ASSERT(!labels.Add(TStringBuf("name1"), TStringBuf("value2"))); UNIT_ASSERT(labels.Size() == 1); UNIT_ASSERT(labels.Add(TStringBuf("name2"), TStringBuf("value2"))); UNIT_ASSERT(labels.Size() == 2); UNIT_ASSERT(labels.Has(TStringBuf("name2"))); { auto l = labels.Find("name2"); UNIT_ASSERT(l.Defined()); UNIT_ASSERT_STRINGS_EQUAL(l->Name(), "name2"); UNIT_ASSERT_STRINGS_EQUAL(l->Value(), "value2"); } UNIT_ASSERT_EQUAL(labels[0], TLabel("name1", "value1")); UNIT_ASSERT_EQUAL(labels[1], TLabel("name2", "value2")); TVector labelsCopy; for (auto&& label : labels) { labelsCopy.emplace_back(label.Name(), label.Value()); } UNIT_ASSERT_EQUAL(labelsCopy, TVector({ {"name1", "value1"}, {"name2", "value2"}, })); } Y_UNIT_TEST(Hash) { TLabel label("name", "value"); UNIT_ASSERT_EQUAL(ULL(2378153472115172159), label.Hash()); { TLabels labels = {{"name", "value"}}; UNIT_ASSERT_EQUAL(ULL(5420514431458887014), labels.Hash()); } { TLabels labels = {{"name1", "value1"}, {"name2", "value2"}}; UNIT_ASSERT_EQUAL(ULL(2226975250396609813), labels.Hash()); } } Y_UNIT_TEST(MakeEmptyLabels) { { auto labels = MakeLabels(); UNIT_ASSERT(labels); UNIT_ASSERT(labels->Empty()); UNIT_ASSERT_VALUES_EQUAL(labels->Size(), 0); } { auto labels = MakeLabels(); UNIT_ASSERT(labels); UNIT_ASSERT(labels->Empty()); UNIT_ASSERT_VALUES_EQUAL(labels->Size(), 0); } } Y_UNIT_TEST(MakeLabelsFromInitializerList) { auto labels = MakeLabels({{"my", "label"}}); UNIT_ASSERT(labels); UNIT_ASSERT(!labels->Empty()); UNIT_ASSERT_VALUES_EQUAL(labels->Size(), 1); UNIT_ASSERT(labels->Has("my")); auto label = labels->Get("my"); UNIT_ASSERT(label.has_value()); UNIT_ASSERT_STRINGS_EQUAL((*label)->Name(), "my"); UNIT_ASSERT_STRINGS_EQUAL((*label)->Value(), "label"); } Y_UNIT_TEST(MakeLabelsFromOtherLabel) { auto labels = MakeLabels({{"my", "label"}}); UNIT_ASSERT(labels); UNIT_ASSERT(!labels->Empty()); UNIT_ASSERT_VALUES_EQUAL(labels->Size(), 1); UNIT_ASSERT(labels->Has("my")); auto label = labels->Get("my"); UNIT_ASSERT(label.has_value()); UNIT_ASSERT_STRINGS_EQUAL((*label)->Name(), "my"); UNIT_ASSERT_STRINGS_EQUAL((*label)->Value(), "label"); } }