summaryrefslogtreecommitdiffstats
path: root/library/cpp/tvmauth/client/ut
diff options
context:
space:
mode:
authorkomels <[email protected]>2022-04-15 16:53:39 +0300
committerkomels <[email protected]>2022-04-15 16:53:39 +0300
commit703a2fb6e100d202d1c7fcd052d73bd5affef408 (patch)
tree22b7320c06bb04d86dbf7b9af9ae44281331cd15 /library/cpp/tvmauth/client/ut
parent3375bbfda1e2afb03aa2072bf5f2f2c3a26026e8 (diff)
Move 'kikimr/yndx'-depending tests out of ydb/core
ref:0a380e13308d579e0545a76924330d1ca5129c43
Diffstat (limited to 'library/cpp/tvmauth/client/ut')
-rw-r--r--library/cpp/tvmauth/client/ut/async_updater_ut.cpp165
-rw-r--r--library/cpp/tvmauth/client/ut/checker_ut.cpp176
-rw-r--r--library/cpp/tvmauth/client/ut/client_status_ut.cpp18
-rw-r--r--library/cpp/tvmauth/client/ut/common.h240
-rw-r--r--library/cpp/tvmauth/client/ut/default_uid_checker_ut.cpp52
-rw-r--r--library/cpp/tvmauth/client/ut/disk_cache_ut.cpp204
-rw-r--r--library/cpp/tvmauth/client/ut/exponential_backoff_ut.cpp44
-rw-r--r--library/cpp/tvmauth/client/ut/facade_ut.cpp167
-rw-r--r--library/cpp/tvmauth/client/ut/files/ok.cachebin113 -> 0 bytes
-rw-r--r--library/cpp/tvmauth/client/ut/files/public_keysbin2840 -> 0 bytes
-rw-r--r--library/cpp/tvmauth/client/ut/files/rolesbin295 -> 0 bytes
-rw-r--r--library/cpp/tvmauth/client/ut/files/service_ticketsbin250 -> 0 bytes
-rw-r--r--library/cpp/tvmauth/client/ut/last_error_ut.cpp56
-rw-r--r--library/cpp/tvmauth/client/ut/logger_ut.cpp43
-rw-r--r--library/cpp/tvmauth/client/ut/roles/decoder_ut.cpp163
-rw-r--r--library/cpp/tvmauth/client/ut/roles/entities_index_ut.cpp358
-rw-r--r--library/cpp/tvmauth/client/ut/roles/parser_ut.cpp161
-rw-r--r--library/cpp/tvmauth/client/ut/roles/roles_ut.cpp419
-rw-r--r--library/cpp/tvmauth/client/ut/roles/tvmapi_roles_fetcher_ut.cpp197
-rw-r--r--library/cpp/tvmauth/client/ut/roles/tvmtool_roles_fetcher_ut.cpp103
-rw-r--r--library/cpp/tvmauth/client/ut/settings_ut.cpp169
-rw-r--r--library/cpp/tvmauth/client/ut/src_checker_ut.cpp47
-rw-r--r--library/cpp/tvmauth/client/ut/tvmapi_updater_ut.cpp1272
-rw-r--r--library/cpp/tvmauth/client/ut/tvmtool_updater_ut.cpp756
-rw-r--r--library/cpp/tvmauth/client/ut/utils_ut.cpp88
25 files changed, 0 insertions, 4898 deletions
diff --git a/library/cpp/tvmauth/client/ut/async_updater_ut.cpp b/library/cpp/tvmauth/client/ut/async_updater_ut.cpp
deleted file mode 100644
index 1c1e8cbaae5..00000000000
--- a/library/cpp/tvmauth/client/ut/async_updater_ut.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/misc/async_updater.h>
-
-#include <library/cpp/tvmauth/unittest.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(AsyncUpdater) {
- static const TString SRV_TICKET = "3:serv:CBAQ__________9_IgYIexCUkQY:GioCM49Ob6_f80y6FY0XBVN4hLXuMlFeyMvIMiDuQnZkbkLpRpQOuQo5YjWoBjM0Vf-XqOm8B7xtrvxSYHDD7Q4OatN2l-Iwg7i71lE3scUeD36x47st3nd0OThvtjrFx_D8mw_c0GT5KcniZlqq1SjhLyAk1b_zJsx8viRAhCU";
- static const TString PROD_TICKET = "3:user:CAsQ__________9_Gg4KAgh7EHsg0oXYzAQoAA:N8PvrDNLh-5JywinxJntLeQGDEHBUxfzjuvB8-_BEUv1x9CALU7do8irDlDYVeVVDr4AIpR087YPZVzWPAqmnBuRJS0tJXekmDDvrivLnbRrzY4IUXZ_fImB0fJhTyVetKv6RD11bGqnAJeDpIukBwPTbJc_EMvKDt8V490CJFw";
- static const TString TEST_TICKET = "3:user:CA0Q__________9_Gg4KAgh7EHsg0oXYzAQoAQ:FSADps3wNGm92Vyb1E9IVq5M6ZygdGdt1vafWWEhfDDeCLoVA-sJesxMl2pGW4OxJ8J1r_MfpG3ZoBk8rLVMHUFrPa6HheTbeXFAWl8quEniauXvKQe4VyrpA1SPgtRoFqi5upSDIJzEAe1YRJjq1EClQ_slMt8R0kA_JjKUX54";
- static const TString PROD_YATEAM_TICKET = "3:user:CAwQ__________9_Gg4KAgh7EHsg0oXYzAQoAg:M9dEFEWHLHXiL7brCsyfYlm254PE6VeshUjI62u2qMDRzt6-0jAoJTIdDiogerItht1YFYSn8fSqmMf23_rueGj-wkmvyNzbcBSk3jtK2U5sai_W0bK6OwukR9tzWzi1Gcgg9DrNEeIKFvs1EBqYCF4mPHWo5bgk0CR580Cgit4";
- static const TString TEST_YATEAM_TICKET = "3:user:CA4Q__________9_Gg4KAgh7EHsg0oXYzAQoAw:IlaV3htk3jYrviIOz3k3Dfwz7p-bYYpbrgdn53GiUrMGdrT9eobHeuzNvPLrWB0yuYZAD46C3MGxok4GGmHhT73mki4XOCX8yWT4jW_hzcHBik1442tjWwh8IWqV_7q5j5496suVuLWjnZORWbb7I-2iwdIlU1BUiDfhoAolCq8";
- static const TString STRESS_TICKET = "3:user:CA8Q__________9_Gg4KAgh7EHsg0oXYzAQoBA:GBuG_TLo6SL2OYFxp7Zly04HPNzmAF7Fu2E8E9SnwQDoxq9rf7VThSPtTmnBSAl5UVRRPkMsRtzzHZ87qtj6l-PvF0K7PrDu7-yS_xiFTgAl9sEfXAIHJVzZLoksGRgpoBtpBUg9vVaJsPns0kWFKJgq8M-Mk9agrSk7sb2VUeQ";
-
- class TTestUpdater: public TAsyncUpdaterBase {
- public:
- using TAsyncUpdaterBase::SetBbEnv;
- using TAsyncUpdaterBase::SetUserContext;
-
- TClientStatus GetStatus() const override {
- return TClientStatus();
- }
- };
-
- Y_UNIT_TEST(User) {
- TTestUpdater u;
-
- UNIT_ASSERT(!u.GetCachedUserContext());
-
- u.SetUserContext(NUnittest::TVMKNIFE_PUBLIC_KEYS);
- UNIT_ASSERT(!u.GetCachedUserContext());
-
- UNIT_ASSERT_NO_EXCEPTION(u.SetBbEnv(EBlackboxEnv::Prod));
- UNIT_ASSERT(u.GetCachedUserContext());
- UNIT_ASSERT(u.GetCachedUserContext()->Check(PROD_TICKET));
- UNIT_ASSERT_NO_EXCEPTION(u.GetCachedUserContext(EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(u.GetCachedUserContext(EBlackboxEnv::ProdYateam)->Check(PROD_YATEAM_TICKET));
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(u.SetBbEnv(EBlackboxEnv::Prod, EBlackboxEnv::Test),
- TBrokenTvmClientSettings,
- "Overriding of BlackboxEnv is illegal: Prod -> Test");
- UNIT_ASSERT_EXCEPTION_CONTAINS(u.GetCachedUserContext(EBlackboxEnv::Test),
- TBrokenTvmClientSettings,
- "Overriding of BlackboxEnv is illegal: Prod -> Test");
-
- UNIT_ASSERT(u.GetCachedUserContext());
- UNIT_ASSERT(u.GetCachedUserContext()->Check(PROD_TICKET));
- }
-
- class DummyUpdater: public TAsyncUpdaterBase {
- public:
- TClientStatus GetStatus() const override {
- return TClientStatus();
- }
-
- using TAsyncUpdaterBase::SetServiceContext;
- using TAsyncUpdaterBase::SetServiceTickets;
- using TAsyncUpdaterBase::SetUserContext;
- };
-
- Y_UNIT_TEST(Cache) {
- DummyUpdater d;
-
- UNIT_ASSERT(!d.GetCachedServiceTickets());
- TServiceTicketsPtr st = MakeIntrusiveConst<TServiceTickets>(TServiceTickets::TMapIdStr(),
- TServiceTickets::TMapIdStr(),
- TServiceTickets::TMapAliasId());
- d.SetServiceTickets(st);
- UNIT_ASSERT_EQUAL(st.Get(), d.GetCachedServiceTickets().Get());
-
- UNIT_ASSERT(!d.GetCachedServiceContext());
- TServiceContextPtr sc = MakeIntrusiveConst<TServiceContext>(TServiceContext::SigningFactory("kjndfadfndsfafdasd"));
- d.SetServiceContext(sc);
- UNIT_ASSERT_EQUAL(sc.Get(), d.GetCachedServiceContext().Get());
-
- UNIT_ASSERT(!d.GetCachedUserContext());
- d.SetUserContext(NUnittest::TVMKNIFE_PUBLIC_KEYS);
- }
-
- Y_UNIT_TEST(ServiceTickets_Aliases) {
- using TId = TServiceTickets::TMapIdStr;
- using TUnfetchedId = TServiceTickets::TIdSet;
- using TStr = TServiceTickets::TMapAliasStr;
- using TUnfetchedAlias = TServiceTickets::TAliasSet;
- using TAls = TServiceTickets::TMapAliasId;
- TServiceTickets t(TId{}, TId{}, TAls{});
-
- UNIT_ASSERT_NO_EXCEPTION(t = TServiceTickets(TId({{1, "t1"}, {2, "t2"}}),
- TId({{3, "e1"}}),
- TAls()));
- UNIT_ASSERT_EQUAL(TId({{1, "t1"}, {2, "t2"}}), t.TicketsById);
- UNIT_ASSERT_EQUAL(TId({{3, "e1"}}), t.ErrorsById);
- UNIT_ASSERT_EQUAL(TStr(), t.TicketsByAlias);
- UNIT_ASSERT_EQUAL(TStr(), t.ErrorsByAlias);
-
- UNIT_ASSERT_NO_EXCEPTION(t = TServiceTickets(TId({{1, "t1"}, {2, "t2"}}),
- TId({{3, "e1"}}),
- TAls({{"1", 1}, {"2", 2}, {"3", 3}})));
- UNIT_ASSERT_EQUAL(TId({{1, "t1"}, {2, "t2"}}), t.TicketsById);
- UNIT_ASSERT_EQUAL(TId({{3, "e1"}}), t.ErrorsById);
- UNIT_ASSERT_EQUAL(TUnfetchedId(), t.UnfetchedIds);
- UNIT_ASSERT_EQUAL(TStr({{"1", "t1"}, {"2", "t2"}}), t.TicketsByAlias);
- UNIT_ASSERT_EQUAL(TStr({{"3", "e1"}}), t.ErrorsByAlias);
- UNIT_ASSERT_EQUAL(TUnfetchedAlias({}), t.UnfetchedAliases);
- }
-
- Y_UNIT_TEST(ServiceTickets_UnfetchedIds) {
- using TId = TServiceTickets::TMapIdStr;
- using TUnfetchedId = TServiceTickets::TIdSet;
- using TStr = TServiceTickets::TMapAliasStr;
- using TUnfetchedAlias = TServiceTickets::TAliasSet;
- using TAls = TServiceTickets::TMapAliasId;
- TServiceTickets t(TId({{1, "t1"}, {2, "t2"}}),
- TId(),
- TAls({{"1", 1}, {"2", 2}, {"3", 3}}));
-
- UNIT_ASSERT_EQUAL(TId({{1, "t1"}, {2, "t2"}}), t.TicketsById);
- UNIT_ASSERT_EQUAL(TId({}), t.ErrorsById);
- UNIT_ASSERT_EQUAL(TUnfetchedId({3}), t.UnfetchedIds);
- UNIT_ASSERT_EQUAL(TUnfetchedAlias({{"3"}}), t.UnfetchedAliases);
- UNIT_ASSERT_EQUAL(TStr({{"1", "t1"}, {"2", "t2"}}), t.TicketsByAlias);
- UNIT_ASSERT_EQUAL(TStr(), t.ErrorsByAlias);
- }
-
- Y_UNIT_TEST(ServiceTickets_InvalidationTime) {
- using TId = TServiceTickets::TMapIdStr;
- using TAls = TServiceTickets::TMapAliasId;
-
- TServiceTickets t(TId{}, TId{}, TAls{});
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), t.InvalidationTime);
-
- UNIT_ASSERT_NO_EXCEPTION(t = TServiceTickets(TId({{1, SRV_TICKET}}),
- TId(),
- TAls()));
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(std::numeric_limits<time_t>::max()), t.InvalidationTime);
-
- UNIT_ASSERT_NO_EXCEPTION(t = TServiceTickets(TId({
- {1, SRV_TICKET},
- {2, "serv"},
- }),
- TId(),
- TAls()));
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(std::numeric_limits<time_t>::max()), t.InvalidationTime);
-
- UNIT_ASSERT_NO_EXCEPTION(t = TServiceTickets(TId({
- {2, "serv"},
- }),
- TId(),
- TAls()));
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), t.InvalidationTime);
-
- UNIT_ASSERT_NO_EXCEPTION(t = TServiceTickets(TId({
- {1, SRV_TICKET},
- {2, "serv"},
- {3, "3:serv:CBAQeyIECAMQAw:TiZjG2Ut9j-9n0zcqxGW8xiYmnFa-i10-dbA0FKIInKzeDuueovWVEBcgbQHndblzRCxoIBMgbotOf7ALk2xoSBnRbOKomAIEtiTBL77GByL5O8K_HUGNYb-ygqnmZlIuLalgeRQAdsKstgUwQzufnOQyekipmamwo7EVQhr8Ug"},
- }),
- TId(),
- TAls()));
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(123), t.InvalidationTime);
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/checker_ut.cpp b/library/cpp/tvmauth/client/ut/checker_ut.cpp
deleted file mode 100644
index 54a25974c14..00000000000
--- a/library/cpp/tvmauth/client/ut/checker_ut.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/mocked_updater.h>
-#include <library/cpp/tvmauth/client/misc/checker.h>
-#include <library/cpp/tvmauth/client/misc/getter.h>
-#include <library/cpp/tvmauth/client/misc/api/threaded_updater.h>
-
-#include <library/cpp/tvmauth/type.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(ClientChecker) {
- static const TTvmId OK_CLIENT = 100500;
- static const TString PROD_TICKET = "3:user:CAsQ__________9_Gg4KAgh7EHsg0oXYzAQoAA:N8PvrDNLh-5JywinxJntLeQGDEHBUxfzjuvB8-_BEUv1x9CALU7do8irDlDYVeVVDr4AIpR087YPZVzWPAqmnBuRJS0tJXekmDDvrivLnbRrzY4IUXZ_fImB0fJhTyVetKv6RD11bGqnAJeDpIukBwPTbJc_EMvKDt8V490CJFw";
- static const TString TEST_TICKET = "3:user:CA0Q__________9_Gg4KAgh7EHsg0oXYzAQoAQ:FSADps3wNGm92Vyb1E9IVq5M6ZygdGdt1vafWWEhfDDeCLoVA-sJesxMl2pGW4OxJ8J1r_MfpG3ZoBk8rLVMHUFrPa6HheTbeXFAWl8quEniauXvKQe4VyrpA1SPgtRoFqi5upSDIJzEAe1YRJjq1EClQ_slMt8R0kA_JjKUX54";
- static const TString PROD_YATEAM_TICKET = "3:user:CAwQ__________9_Gg4KAgh7EHsg0oXYzAQoAg:M9dEFEWHLHXiL7brCsyfYlm254PE6VeshUjI62u2qMDRzt6-0jAoJTIdDiogerItht1YFYSn8fSqmMf23_rueGj-wkmvyNzbcBSk3jtK2U5sai_W0bK6OwukR9tzWzi1Gcgg9DrNEeIKFvs1EBqYCF4mPHWo5bgk0CR580Cgit4";
- static const TString TEST_YATEAM_TICKET = "3:user:CA4Q__________9_Gg4KAgh7EHsg0oXYzAQoAw:IlaV3htk3jYrviIOz3k3Dfwz7p-bYYpbrgdn53GiUrMGdrT9eobHeuzNvPLrWB0yuYZAD46C3MGxok4GGmHhT73mki4XOCX8yWT4jW_hzcHBik1442tjWwh8IWqV_7q5j5496suVuLWjnZORWbb7I-2iwdIlU1BUiDfhoAolCq8";
- static const TString STRESS_TICKET = "3:user:CA8Q__________9_Gg4KAgh7EHsg0oXYzAQoBA:GBuG_TLo6SL2OYFxp7Zly04HPNzmAF7Fu2E8E9SnwQDoxq9rf7VThSPtTmnBSAl5UVRRPkMsRtzzHZ87qtj6l-PvF0K7PrDu7-yS_xiFTgAl9sEfXAIHJVzZLoksGRgpoBtpBUg9vVaJsPns0kWFKJgq8M-Mk9agrSk7sb2VUeQ";
- static const TString SRV_TICKET = "3:serv:CBAQ__________9_IgYIexCUkQY:GioCM49Ob6_f80y6FY0XBVN4hLXuMlFeyMvIMiDuQnZkbkLpRpQOuQo5YjWoBjM0Vf-XqOm8B7xtrvxSYHDD7Q4OatN2l-Iwg7i71lE3scUeD36x47st3nd0OThvtjrFx_D8mw_c0GT5KcniZlqq1SjhLyAk1b_zJsx8viRAhCU";
-
- Y_UNIT_TEST(User) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(OK_CLIENT);
- s.EnableServiceTicketChecking();
- s.SetDiskCacheDir(GetCachePath());
-
- auto l = MakeIntrusive<TLogger>();
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- UNIT_ASSERT_EXCEPTION(TUserTicketChecker(u), TBrokenTvmClientSettings);
- }
- UNIT_ASSERT_C(l->Stream.Str().find("was successfully fetched") == TString::npos, l->Stream.Str());
-
- s.EnableUserTicketChecking(EBlackboxEnv::Prod);
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- TUserTicketChecker c(u);
- UNIT_ASSERT(c.Check(PROD_TICKET, {}));
- UNIT_ASSERT(!c.Check(TEST_TICKET, {}));
- UNIT_ASSERT(!c.Check(PROD_YATEAM_TICKET, {}));
- UNIT_ASSERT(!c.Check(TEST_YATEAM_TICKET, {}));
- UNIT_ASSERT(!c.Check(STRESS_TICKET, {}));
-
- UNIT_ASSERT(!c.Check(PROD_TICKET, EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(!c.Check(TEST_TICKET, EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(c.Check(PROD_YATEAM_TICKET, EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(!c.Check(TEST_YATEAM_TICKET, EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(!c.Check(STRESS_TICKET, EBlackboxEnv::ProdYateam));
-
- UNIT_ASSERT_EXCEPTION(c.Check(PROD_TICKET, EBlackboxEnv::Stress), TBrokenTvmClientSettings);
- }
-
- s.EnableUserTicketChecking(EBlackboxEnv::Test);
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- TUserTicketChecker c(u);
- UNIT_ASSERT(!c.Check(PROD_TICKET, {}));
- UNIT_ASSERT(c.Check(TEST_TICKET, {}));
- UNIT_ASSERT(!c.Check(PROD_YATEAM_TICKET, {}));
- UNIT_ASSERT(!c.Check(TEST_YATEAM_TICKET, {}));
- UNIT_ASSERT(!c.Check(STRESS_TICKET, {}));
- }
-
- s.EnableUserTicketChecking(EBlackboxEnv::ProdYateam);
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- TUserTicketChecker c(u);
- UNIT_ASSERT(!c.Check(PROD_TICKET, {}));
- UNIT_ASSERT(!c.Check(TEST_TICKET, {}));
- UNIT_ASSERT(c.Check(PROD_YATEAM_TICKET, {}));
- UNIT_ASSERT(!c.Check(TEST_YATEAM_TICKET, {}));
- UNIT_ASSERT(!c.Check(STRESS_TICKET, {}));
- }
-
- s.EnableUserTicketChecking(EBlackboxEnv::TestYateam);
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- TUserTicketChecker c(u);
- UNIT_ASSERT(!c.Check(PROD_TICKET, {}));
- UNIT_ASSERT(!c.Check(TEST_TICKET, {}));
- UNIT_ASSERT(!c.Check(PROD_YATEAM_TICKET, {}));
- UNIT_ASSERT(c.Check(TEST_YATEAM_TICKET, {}));
- UNIT_ASSERT(!c.Check(STRESS_TICKET, {}));
- }
-
- s.EnableUserTicketChecking(EBlackboxEnv::Stress);
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- TUserTicketChecker c(u);
- UNIT_ASSERT(c.Check(PROD_TICKET, {}));
- UNIT_ASSERT(!c.Check(TEST_TICKET, {}));
- UNIT_ASSERT(!c.Check(PROD_YATEAM_TICKET, {}));
- UNIT_ASSERT(!c.Check(TEST_YATEAM_TICKET, {}));
- UNIT_ASSERT(c.Check(STRESS_TICKET, {}));
- }
- }
-
- Y_UNIT_TEST(Service) {
- NTvmApi::TClientSettings s;
- s.EnableUserTicketChecking(EBlackboxEnv::Stress);
- s.SetSelfTvmId(OK_CLIENT);
- s.SetDiskCacheDir(GetCachePath());
-
- auto l = MakeIntrusive<TLogger>();
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- UNIT_ASSERT_EXCEPTION(TServiceTicketChecker(u), TBrokenTvmClientSettings);
- }
- UNIT_ASSERT_C(l->Stream.Str().find("was successfully fetched") == TString::npos, l->Stream.Str());
-
- s.EnableServiceTicketChecking();
- l = MakeIntrusive<TLogger>();
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- TServiceTicketChecker c(u);
- UNIT_ASSERT(c.Check(SRV_TICKET));
- UNIT_ASSERT(!c.Check(PROD_TICKET));
- }
- UNIT_ASSERT_C(l->Stream.Str().find("was successfully fetched") == TString::npos, l->Stream.Str());
-
- s.SetSelfTvmId(17);
- l = MakeIntrusive<TLogger>();
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- TServiceTicketChecker c(u);
- UNIT_ASSERT(!c.Check(SRV_TICKET));
- UNIT_ASSERT(!c.Check(PROD_TICKET));
- }
- UNIT_ASSERT_C(l->Stream.Str().find("was successfully fetched") == TString::npos, l->Stream.Str());
- }
-
- Y_UNIT_TEST(Tickets) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(OK_CLIENT);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.SetDiskCacheDir(GetCachePath());
-
- auto l = MakeIntrusive<TLogger>();
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus().GetCode());
- TServiceTicketGetter g(u);
- UNIT_ASSERT_VALUES_EQUAL("3:serv:CBAQ__________9_IgYIKhCUkQY:CX", g.GetTicket("blackbox"));
- UNIT_ASSERT_EXCEPTION_CONTAINS(g.GetTicket("blackbox2"),
- TBrokenTvmClientSettings,
- "Destination 'blackbox2' was not specified in settings. Check your settings (if you use Qloud/YP/tvmtool - check it's settings)");
- }
- UNIT_ASSERT_C(l->Stream.Str().find("was successfully fetched") == TString::npos, l->Stream.Str());
- }
-
- Y_UNIT_TEST(ErrorForDst) {
- TServiceTicketGetter g(new TMockedUpdater);
-
- UNIT_ASSERT_VALUES_EQUAL(TMockedUpdater::TSettings::CreateDeafult().Backends.at(0).Value,
- g.GetTicket("my_dest"));
- UNIT_ASSERT_VALUES_EQUAL(TMockedUpdater::TSettings::CreateDeafult().Backends.at(0).Value,
- g.GetTicket(42));
- UNIT_ASSERT_EXCEPTION_CONTAINS(g.GetTicket("my_bad_dest"),
- TMissingServiceTicket,
- "Failed to get ticket for 'my_bad_dest': Dst is not found");
- UNIT_ASSERT_EXCEPTION_CONTAINS(g.GetTicket(43),
- TMissingServiceTicket,
- "Failed to get ticket for '43': Dst is not found");
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/client_status_ut.cpp b/library/cpp/tvmauth/client/ut/client_status_ut.cpp
deleted file mode 100644
index a1c3ae74cea..00000000000
--- a/library/cpp/tvmauth/client/ut/client_status_ut.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <library/cpp/tvmauth/client/client_status.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(ClientStatus) {
- Y_UNIT_TEST(Common) {
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, TClientStatus().GetCode());
- UNIT_ASSERT_VALUES_EQUAL("", TClientStatus().GetLastError());
-
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Warning, TClientStatus(TClientStatus::Warning, "kek"));
- UNIT_ASSERT_VALUES_EQUAL("kek",
- TClientStatus(TClientStatus::Warning, "kek").GetLastError());
- UNIT_ASSERT_VALUES_EQUAL("2;TvmClient: kek\n",
- TClientStatus(TClientStatus::Error, "kek").CreateJugglerMessage());
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/common.h b/library/cpp/tvmauth/client/ut/common.h
deleted file mode 100644
index 0aee09aefc6..00000000000
--- a/library/cpp/tvmauth/client/ut/common.h
+++ /dev/null
@@ -1,240 +0,0 @@
-#pragma once
-
-#include <library/cpp/tvmauth/client/logger.h>
-#include <library/cpp/tvmauth/client/misc/disk_cache.h>
-#include <library/cpp/tvmauth/client/misc/roles/entities_index.h>
-
-#include <library/cpp/tvmauth/unittest.h>
-
-#include <library/cpp/cgiparam/cgiparam.h>
-#include <library/cpp/testing/mock_server/server.h>
-#include <library/cpp/testing/unittest/env.h>
-#include <library/cpp/testing/unittest/tests_data.h>
-
-#include <util/stream/str.h>
-#include <util/system/fs.h>
-
-class TLogger: public NTvmAuth::ILogger {
-public:
- void Log(int lvl, const TString& msg) override {
- Cout << TInstant::Now() << " lvl=" << lvl << " msg: " << msg << "\n";
- Stream << lvl << ": " << msg << Endl;
- }
-
- TStringStream Stream;
-};
-
-static inline TString GetFilePath(const char* name) {
- return ArcadiaSourceRoot() + "/library/cpp/tvmauth/client/ut/files/" + name;
-}
-
-static inline TString GetCachePath(const TString& dir = {}) {
- if (dir) {
- Y_ENSURE(NFs::MakeDirectoryRecursive("./" + dir));
- }
-
- auto wr = [](const TString& p, const TStringBuf body) {
- NTvmAuth::TDiskWriter w(p);
- Y_ENSURE(w.Write(body, TInstant::ParseIso8601("2050-01-01T00:00:00.000000Z")));
- };
- wr("./" + dir + "/public_keys", NTvmAuth::NUnittest::TVMKNIFE_PUBLIC_KEYS);
- wr("./" + dir + "/service_tickets",
- R"({
- "19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"},
- "213" : { "ticket" : "service_ticket_2"},
- "234" : { "error" : "Dst is not found" },
- "185" : { "ticket" : "service_ticket_3"}
-} 100500)");
-
- return "./" + dir;
-}
-
-static const TString AUTH_TOKEN = "strong_token";
-static const TString META = R"(
-{
-"bb_env" : "ProdYaTeam",
-"tenants" : [
- {
- "self": {
- "alias" : "me",
- "client_id": 100500
- },
- "dsts" : [
- {
- "alias" : "bbox",
- "client_id": 242
- },
- {
- "alias" : "pass_likers",
- "client_id": 11
- }
- ]
- },
- {
- "self": {
- "alias" : "tenant_with_roles",
- "client_id": 100500
- },
- "idm_slug": "some_slug",
- "dsts" : []
- },
- {
- "self": {
- "alias" : "push-client",
- "client_id": 100501
- },
- "dsts" : [
- {
- "alias" : "pass_likers",
- "client_id": 100502
- }
- ]
- },
- {
- "self": {
- "alias" : "multi_names_for_dst",
- "client_id": 100599
- },
- "dsts" : [
- {
- "alias" : "pass_likers",
- "client_id": 100502
- },
- {
- "alias" : "pass_haters",
- "client_id": 100502
- }
- ]
- },
- {
- "self": {
- "alias" : "something_else",
- "client_id": 100503
- },
- "dsts" : [
- ]
- }
-]
-})";
-
-static const TString TICKETS_ME =
- R"({
- "pass_likers": {
- "ticket": "3:serv:CBAQ__________9_IgYIlJEGEAs:T-apeMNWFc_vHPQ3iLaZv9NjG-hf5-i23O4AhRu1M68ryN3FU5qvyqTSSiPbtJdFP6EE41QQBzEs59dHn9DRkqQNwwKf1is00Oewwj2XKO0uHukuzd9XxZnro7MfjPswsjWufxX28rmJtlfSXwAtyKt8TI5yKJnMeBPQ0m5R3k8",
- "tvm_id": 11
- },
- "bbox": {
- "ticket": "3:serv:CBAQ__________9_IgcIlJEGEPIB:N7luw0_rVmBosTTI130jwDbQd0-cMmqJeEl0ma4ZlIo_mHXjBzpOuMQ3A9YagbmOBOt8TZ_gzGvVSegWZkEeB24gM22acw0w-RcHaQKrzSOA5Zq8WLNIC8QUa4_WGTlAsb7R7eC4KTAGgouIquNAgMBdTuGOuZHnMLvZyLnOMKc",
- "tvm_id": 242
- }
- })";
-
-static const TString SERVICE_TICKET_PC = "3:serv:CBAQ__________9_IggIlpEGEJaRBg:BAxaQJCdK4eFuJ6i_egqPwvJgWtlh0enDQRPr84Nx2phZ_8QtxKAUCwEa7KOU_jVvIBQIC5-ETTl2vjBt7UyygF8frdK4ab6zJoWj4n07np6vbmWd385l8KvzztLt4QkBrPiE7U46dK3pL0U8tfBkSXE8rvUIsl3RvvgSNH2J3c";
-static const TString TICKETS_PC =
- R"({
- "pass_likers": {
- "ticket": "3:serv:CBAQ__________9_IggIlpEGEJaRBg:BAxaQJCdK4eFuJ6i_egqPwvJgWtlh0enDQRPr84Nx2phZ_8QtxKAUCwEa7KOU_jVvIBQIC5-ETTl2vjBt7UyygF8frdK4ab6zJoWj4n07np6vbmWd385l8KvzztLt4QkBrPiE7U46dK3pL0U8tfBkSXE8rvUIsl3RvvgSNH2J3c",
- "tvm_id": 100502
- }
- })";
-
-static const TString TICKETS_MANY_DSTS =
- R"({
- "pass_likers": {
- "ticket": "3:serv:CBAQ__________9_IggI95EGEJaRBg:D0MOLDhKQyI-OhC0ON9gYukz2hOctUipu1yXsvkw6NRuLhcBfvGayyUqF4ILrqepjz9GtPWIR_wO6oLSW35Z0YaFn60QWp5tG6IcAnr80lm_OnLHJt4kmEoLtGg1V0aWBT0YyouzGB2-QFNOVO86G7sYzU8FC6-V3Iyc4X7XTNc",
- "tvm_id": 100502
- },
- "who_are_you??": {
- "ticket": "kek",
- "tvm_id": 100503
- },
- "pass_haters": {
- "ticket": "3:serv:CBAQ__________9_IggI95EGEJaRBg:D0MOLDhKQyI-OhC0ON9gYukz2hOctUipu1yXsvkw6NRuLhcBfvGayyUqF4ILrqepjz9GtPWIR_wO6oLSW35Z0YaFn60QWp5tG6IcAnr80lm_OnLHJt4kmEoLtGg1V0aWBT0YyouzGB2-QFNOVO86G7sYzU8FC6-V3Iyc4X7XTNc",
- "tvm_id": 100502
- }
- })";
-
-static const TString TICKETS_SE = R"({})";
-
-static const TInstant BIRTHTIME = TInstant::Seconds(14380887840);
-class TTvmTool: public TRequestReplier {
-public:
- TString Meta;
- HttpCodes Code;
- TInstant Birthtime;
-
- TTvmTool()
- : Meta(META)
- , Code(HTTP_OK)
- , Birthtime(BIRTHTIME)
- {
- }
-
- bool DoReply(const TReplyParams& params) override {
- const TParsedHttpFull http(params.Input.FirstLine());
- if (http.Path == "/tvm/ping") {
- THttpResponse resp(HTTP_OK);
- resp.SetContent("OK");
- resp.OutTo(params.Output);
- return true;
- }
-
- auto it = std::find_if(params.Input.Headers().begin(),
- params.Input.Headers().end(),
- [](const THttpInputHeader& h) { return h.Name() == "Authorization"; });
- if (it == params.Input.Headers().end() || it->Value() != AUTH_TOKEN) {
- THttpResponse resp(HTTP_UNAUTHORIZED);
- resp.SetContent("pong");
- resp.OutTo(params.Output);
- return true;
- }
-
- THttpResponse resp(Code);
- if (http.Path == "/tvm/keys") {
- resp.SetContent(NTvmAuth::NUnittest::TVMKNIFE_PUBLIC_KEYS);
- } else if (http.Path == "/tvm/tickets") {
- TCgiParameters cg;
- cg.ScanAddAll(http.Cgi);
- if (cg.Get("src") == "100500") {
- resp.SetContent(TICKETS_ME);
- } else if (cg.Get("src") == "100501") {
- resp.SetContent(TICKETS_PC);
- } else if (cg.Get("src") == "100599") {
- resp.SetContent(TICKETS_MANY_DSTS);
- }
- } else if (http.Path == "/tvm/private_api/__meta__") {
- resp.SetContent(Meta);
- }
- resp.AddHeader("X-Ya-Tvmtool-Data-Birthtime", IntToString<10>(Birthtime.Seconds()));
- resp.OutTo(params.Output);
-
- return true;
- }
-};
-
-static inline NTvmAuth::NRoles::TEntitiesIndex CreateEntitiesIndex() {
- using namespace NTvmAuth::NRoles;
-
- TEntitiesIndex index(
- {
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#11"},
- }),
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#22"},
- {"key#3", "value#33"},
- }),
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#23"},
- {"key#3", "value#33"},
- }),
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#13"},
- {"key#3", "value#33"},
- }),
- });
-
- return index;
-}
diff --git a/library/cpp/tvmauth/client/ut/default_uid_checker_ut.cpp b/library/cpp/tvmauth/client/ut/default_uid_checker_ut.cpp
deleted file mode 100644
index a92530cab17..00000000000
--- a/library/cpp/tvmauth/client/ut/default_uid_checker_ut.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/mocked_updater.h>
-#include <library/cpp/tvmauth/client/misc/default_uid_checker.h>
-#include <library/cpp/tvmauth/client/misc/api/threaded_updater.h>
-
-#include <library/cpp/tvmauth/type.h>
-#include <library/cpp/tvmauth/unittest.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(DefaultUidChecker) {
- Y_UNIT_TEST(Ctor) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDefaultUidChecker(new TMockedUpdater),
- TBrokenTvmClientSettings,
- "Need to use TClientSettings::EnableRolesFetching");
- }
-
- Y_UNIT_TEST(Check) {
- NRoles::TRolesPtr roles = std::make_shared<NRoles::TRoles>(
- NRoles::TRoles::TMeta{},
- NRoles::TRoles::TTvmConsumers{},
- NRoles::TRoles::TUserConsumers{
- {12345, std::make_shared<NRoles::TConsumerRoles>(
- THashMap<TString, NRoles::TEntitiesPtr>())},
- },
- std::make_shared<TString>());
- const TDefaultUidChecker checker(new TMockedUpdater({.Roles = roles}));
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- checker.Check(NUnittest::CreateUserTicket(ETicketStatus::Expired, 12345, {})),
- TIllegalUsage,
- "User ticket must be valid");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- checker.Check(NUnittest::CreateUserTicket(ETicketStatus::Ok, 12345, {}, {}, EBlackboxEnv::Test)),
- TIllegalUsage,
- "User ticket must be from ProdYateam, got from Test");
-
- TCheckedUserTicket ticket;
- UNIT_ASSERT_NO_EXCEPTION(
- ticket = checker.Check(NUnittest::CreateUserTicket(ETicketStatus::Ok, 12345, {}, {}, EBlackboxEnv::ProdYateam)));
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::Ok, ticket.GetStatus());
-
- UNIT_ASSERT_NO_EXCEPTION(
- ticket = checker.Check(NUnittest::CreateUserTicket(ETicketStatus::Ok, 9999, {}, {}, EBlackboxEnv::ProdYateam)));
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::NoRoles, ticket.GetStatus());
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/disk_cache_ut.cpp b/library/cpp/tvmauth/client/ut/disk_cache_ut.cpp
deleted file mode 100644
index 7dd851c9b30..00000000000
--- a/library/cpp/tvmauth/client/ut/disk_cache_ut.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/logger.h>
-#include <library/cpp/tvmauth/client/misc/disk_cache.h>
-
-#include <library/cpp/tvmauth/src/utils.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-#include <library/cpp/testing/unittest/tests_data.h>
-
-#include <util/stream/file.h>
-#include <util/system/fs.h>
-#include <util/system/sysstat.h>
-
-#include <thread>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(ClientDisk) {
- Y_UNIT_TEST(Hash) {
- TString hash = TDiskReader::GetHash("asd");
- UNIT_ASSERT(hash);
- UNIT_ASSERT_VALUES_EQUAL(32, hash.size());
- UNIT_ASSERT_VALUES_EQUAL("Zj5_qYg31bPlqjBW76z8IV0rCsHmv-iN-McV6ybS1-g", NUtils::Bin2base64url(hash));
- }
-
- Y_UNIT_TEST(Timestamp) {
- time_t t = 100500;
-
- TString s = TDiskWriter::WriteTimestamp(t);
- UNIT_ASSERT_VALUES_EQUAL("lIgBAAAAAAA", NUtils::Bin2base64url(s));
- UNIT_ASSERT_VALUES_EQUAL(t, TDiskReader::GetTimestamp(s));
-
- t = 123123123213089;
- s = TDiskWriter::WriteTimestamp(t);
- UNIT_ASSERT_VALUES_EQUAL("IdMF1vpvAAA", NUtils::Bin2base64url(s));
- UNIT_ASSERT_VALUES_EQUAL(t, TDiskReader::GetTimestamp(s));
-
- t = time(nullptr);
- s = TDiskWriter::WriteTimestamp(t);
- UNIT_ASSERT_VALUES_EQUAL(t, TDiskReader::GetTimestamp(s));
- }
-
- const TInstant TIME = TInstant::Seconds(100500);
- const TString DATA = "oiweuhn \n vw3ut hweoi uhgewproritjhwequtherwoiughfdsv 8ty34q01u 34 1=3";
-
- Y_UNIT_TEST(ParseData_Ok) {
- TLogger l;
-
- const TInstant time = TInstant::Seconds(1523446554789);
-
- TString toFile = TDiskWriter::PrepareData(time, DATA);
- UNIT_ASSERT_VALUES_EQUAL(113, toFile.size());
- UNIT_ASSERT_VALUES_EQUAL("T8BnRIMoC6mlMXexPg9cV5jYxeFtgDWk97JTajHDunCloH20YgEAAG9pd2V1aG4gCiB2dzN1dCBod2VvaSB1aGdld3Byb3JpdGpod2VxdXRoZXJ3b2l1Z2hmZHN2IDh0eTM0cTAxdSAgIDM0ICAxPTM",
- NUtils::Bin2base64url(toFile));
-
- TDiskReader r("qwerty", &l);
- UNIT_ASSERT(r.ParseData(toFile));
- UNIT_ASSERT_VALUES_EQUAL(DATA, r.Data());
- UNIT_ASSERT_VALUES_EQUAL(time, r.Time());
- UNIT_ASSERT_VALUES_EQUAL("6: File 'qwerty' was successfully read\n",
- l.Stream.Str());
- }
-
- Y_UNIT_TEST(ParseData_SmallFile) {
- TLogger l;
-
- TString toFile = TDiskWriter::PrepareData(TIME, DATA);
- TDiskReader r("qwerty", &l);
- UNIT_ASSERT(!r.ParseData(toFile.substr(0, 17)));
- UNIT_ASSERT_VALUES_EQUAL("4: File 'qwerty' is too small\n",
- l.Stream.Str());
- }
-
- Y_UNIT_TEST(ParseData_Changed) {
- TLogger l;
-
- TString toFile = TDiskWriter::PrepareData(TIME, DATA);
- toFile[17] = toFile[17] + 1;
- TDiskReader r("qwerty", &l);
- UNIT_ASSERT(!r.ParseData(toFile));
- UNIT_ASSERT_VALUES_EQUAL("4: Content of 'qwerty' was incorrectly changed\n",
- l.Stream.Str());
- }
-
- Y_UNIT_TEST(Read_Ok) {
- TLogger l;
-
- TDiskReader r(GetFilePath("ok.cache"), &l);
- UNIT_ASSERT(r.Read());
- UNIT_ASSERT_VALUES_EQUAL(DATA, r.Data());
- UNIT_ASSERT_VALUES_EQUAL(TIME, r.Time());
- UNIT_ASSERT_C(l.Stream.Str().find("was successfully read") != TString::npos, l.Stream.Str());
- }
-
- Y_UNIT_TEST(Read_NoFile) {
- TLogger l;
-
- TDiskReader r("missing", &l);
- UNIT_ASSERT(!r.Read());
- UNIT_ASSERT_VALUES_EQUAL("7: File 'missing' does not exist\n",
- l.Stream.Str());
- }
-
-#ifdef _unix_
- Y_UNIT_TEST(Read_NoPermitions) {
- TLogger l;
-
- const TString path = GetWorkPath() + "/123";
- {
- TFileOutput output(path);
- }
- Chmod(path.data(), S_IWUSR);
-
- TDiskReader r(path, &l);
- UNIT_ASSERT(!r.Read());
- UNIT_ASSERT_C(l.Stream.Str().find("Permission denied") != TString::npos, l.Stream.Str());
-
- Chmod(path.data(), S_IRWXU);
- NFs::Remove(path);
- }
-#endif
-
- Y_UNIT_TEST(Write_Ok) {
- TLogger l;
-
- const TString path = "./tmp_file";
- TDiskWriter w(path, &l);
- UNIT_ASSERT_C(w.Write(DATA), l.Stream.Str());
- UNIT_ASSERT_C(l.Stream.Str().find("was successfully written") != TString::npos, l.Stream.Str());
- l.Stream.Clear();
-
- TDiskReader r(path, &l);
- UNIT_ASSERT_C(r.Read(), l.Stream.Str());
- UNIT_ASSERT_VALUES_EQUAL(DATA, r.Data());
- UNIT_ASSERT(TInstant::Now() - r.Time() < TDuration::Minutes(5));
- UNIT_ASSERT_C(l.Stream.Str().find("was successfully read") != TString::npos, l.Stream.Str());
-
- NFs::Remove(path);
- }
-
- Y_UNIT_TEST(Write_NoPermitions) {
- TLogger l;
-
- TDiskWriter w("/some_file", &l);
- UNIT_ASSERT(!w.Write(DATA));
- UNIT_ASSERT_C(l.Stream.Str().Contains("3: Failed to write '/some_file': ("), l.Stream.Str());
- UNIT_ASSERT_C(l.Stream.Str().Contains("denied"), l.Stream.Str());
- }
-
- Y_UNIT_TEST(race) {
- const TString path = "./tmp_file";
- const TString data = "ejufhsadkjfvbhsaoicnaofssdahfasdfhasdofdsaf";
- NFs::Remove(path);
-
- std::atomic<bool> fail = false;
- std::vector<std::thread> thrs;
- for (size_t idx = 0; idx < 16; ++idx) {
- thrs.push_back(std::thread([&fail, data, path]() {
- TDiskWriter w(path);
- for (size_t k = 0; k < 1000; ++k) {
- if (!w.Write(data)) {
- fail = true;
- }
- }
- }));
- }
- for (std::thread& t : thrs) {
- t.join();
- }
- thrs.clear();
- UNIT_ASSERT(fail);
- {
- TDiskWriter w(path);
- UNIT_ASSERT(w.Write(data)); // checks unlocked flock
- }
-
- fail = false;
-
- for (size_t idx = 0; idx < 4; ++idx) {
- thrs.push_back(std::thread([&fail, data, path]() {
- TLogger l;
- TDiskReader r(path, &l);
- for (size_t k = 0; k < 100; ++k) {
- if (!r.Read()) {
- Cerr << l.Stream.Str() << Flush;
- fail = true;
- return;
- }
- if (r.Data() != data) {
- Cerr << (TStringBuilder() << "'" << data << "' vs '" << r.Data() << "'" << Endl) << Flush;
- fail = true;
- return;
- }
- }
- }));
- }
- for (std::thread& t : thrs) {
- t.join();
- }
- thrs.clear();
- UNIT_ASSERT(!fail);
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/exponential_backoff_ut.cpp b/library/cpp/tvmauth/client/ut/exponential_backoff_ut.cpp
deleted file mode 100644
index 3dcbe6ad495..00000000000
--- a/library/cpp/tvmauth/client/ut/exponential_backoff_ut.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <library/cpp/tvmauth/client/misc/exponential_backoff.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-#include <thread>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(PasspUtilsExpBackoff) {
- Y_UNIT_TEST(common) {
- TExponentialBackoff b({TDuration::Seconds(1), TDuration::Seconds(60), 2, 0.01});
-
- UNIT_ASSERT_VALUES_EQUAL(TDuration::Seconds(1), b.GetCurrentValue());
-
- TDuration dur = b.GetCurrentValue();
- for (size_t idx = 0; idx < 6; ++idx) {
- TDuration newValue = b.Increase();
- UNIT_ASSERT_LT(dur, newValue);
- dur = newValue;
- }
-
- UNIT_ASSERT_LT(TDuration::Seconds(60) - TDuration::Seconds(3), dur);
- UNIT_ASSERT_LT(dur, TDuration::Seconds(60) + TDuration::Seconds(3));
- }
-
- Y_UNIT_TEST(sleep) {
- TExponentialBackoff b({TDuration::Seconds(60), TDuration::Seconds(600), 2, 0.01});
-
- const TInstant start = TInstant::Now();
-
- TAutoEvent started;
- std::thread t([&b, &started]() {
- started.Signal();
- b.Sleep();
- });
-
- started.WaitT(TDuration::Seconds(30));
- b.Interrupt();
- t.join();
- TDuration dur = TInstant::Now() - start;
-
- UNIT_ASSERT_LT(dur, TDuration::Seconds(60));
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/facade_ut.cpp b/library/cpp/tvmauth/client/ut/facade_ut.cpp
deleted file mode 100644
index 0244521ef44..00000000000
--- a/library/cpp/tvmauth/client/ut/facade_ut.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/facade.h>
-#include <library/cpp/tvmauth/client/mocked_updater.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-#include <util/generic/vector.h>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(ClientFacade) {
- static const TTvmId OK_CLIENT = 100500;
- static const TString SRV_TICKET_123 = "3:serv:CBAQ__________9_IgYIexCUkQY:GioCM49Ob6_f80y6FY0XBVN4hLXuMlFeyMvIMiDuQnZkbkLpRpQOuQo5YjWoBjM0Vf-XqOm8B7xtrvxSYHDD7Q4OatN2l-Iwg7i71lE3scUeD36x47st3nd0OThvtjrFx_D8mw_c0GT5KcniZlqq1SjhLyAk1b_zJsx8viRAhCU";
- static const TString SRV_TICKET_456 = "3:serv:CBAQ__________9_IgcIyAMQlJEG:VrnqRhpoiDnJeAQbySJluJ1moQ5Kemic99iWzOrHLGfuh7iTw_xMT7KewRAmZMUwDKzE6otj7V86Xsnxbv5xZl8746wbvNcyUXu-nGWmbByZjO7xpSIcY07sISqEhP9n9C_yMSvqDP7ho_PRIfpGCDMXxKlFZ_BhBLLp0kHEvw4";
- static const TString PROD_TICKET = "3:user:CAsQ__________9_Gg4KAgh7EHsg0oXYzAQoAA:N8PvrDNLh-5JywinxJntLeQGDEHBUxfzjuvB8-_BEUv1x9CALU7do8irDlDYVeVVDr4AIpR087YPZVzWPAqmnBuRJS0tJXekmDDvrivLnbRrzY4IUXZ_fImB0fJhTyVetKv6RD11bGqnAJeDpIukBwPTbJc_EMvKDt8V490CJFw";
- static const TString TEST_TICKET = "3:user:CA0Q__________9_Gg4KAgh7EHsg0oXYzAQoAQ:FSADps3wNGm92Vyb1E9IVq5M6ZygdGdt1vafWWEhfDDeCLoVA-sJesxMl2pGW4OxJ8J1r_MfpG3ZoBk8rLVMHUFrPa6HheTbeXFAWl8quEniauXvKQe4VyrpA1SPgtRoFqi5upSDIJzEAe1YRJjq1EClQ_slMt8R0kA_JjKUX54";
-
- TTvmClient GetClient(const NTvmApi::TClientSettings& s) {
- auto l = MakeIntrusive<TLogger>();
- TTvmClient f(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, f.GetStatus());
- Sleep(TDuration::MilliSeconds(300));
- TString logs = l->Stream.Str();
- UNIT_ASSERT_C(logs.find("was successfully read") != TString::npos, logs);
- UNIT_ASSERT_C(logs.find("was successfully fetched") == TString::npos, logs);
- return f;
- }
-
- Y_UNIT_TEST(Service) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(OK_CLIENT);
- s.EnableServiceTicketChecking();
- s.SetDiskCacheDir(GetCachePath());
- TTvmClient f = GetClient(s);
-
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(2524608000), f.GetUpdateTimeOfPublicKeys());
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), f.GetUpdateTimeOfServiceTickets());
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(2525126400), f.GetInvalidationTimeOfPublicKeys());
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), f.GetInvalidationTimeOfServiceTickets());
-
- UNIT_ASSERT(f.CheckServiceTicket(SRV_TICKET_123));
- UNIT_ASSERT_EXCEPTION(f.CheckUserTicket(PROD_TICKET), yexception);
- UNIT_ASSERT_EXCEPTION(f.CheckUserTicket(TEST_TICKET), yexception);
- }
-
- Y_UNIT_TEST(User) {
- NTvmApi::TClientSettings s;
- s.EnableUserTicketChecking(EBlackboxEnv::Prod);
- s.SetDiskCacheDir(GetCachePath());
-
- TTvmClient f = GetClient(s);
- UNIT_ASSERT_EXCEPTION(f.CheckServiceTicket(SRV_TICKET_123), yexception);
- UNIT_ASSERT(f.CheckUserTicket(PROD_TICKET));
- UNIT_ASSERT(!f.CheckUserTicket(TEST_TICKET));
- }
-
- Y_UNIT_TEST(Ctors) {
- NTvmApi::TClientSettings s;
- s.EnableUserTicketChecking(EBlackboxEnv::Prod);
- s.SetDiskCacheDir(GetCachePath());
-
- TTvmClient f = GetClient(s);
- f = GetClient(s);
-
- TVector<TTvmClient> v;
- v.push_back(std::move(f));
- v.front() = std::move(*v.begin());
- }
-
- Y_UNIT_TEST(Tickets) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(OK_CLIENT);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.SetDiskCacheDir(GetCachePath());
- TTvmClient f = GetClient(s);
-
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), f.GetUpdateTimeOfPublicKeys());
- UNIT_ASSERT_VALUES_EQUAL(TInstant::ParseIso8601("2050-01-01T00:00:00.000000Z"), f.GetUpdateTimeOfServiceTickets());
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), f.GetInvalidationTimeOfPublicKeys());
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(std::numeric_limits<size_t>::max()), f.GetInvalidationTimeOfServiceTickets());
-
- UNIT_ASSERT_VALUES_EQUAL("3:serv:CBAQ__________9_IgYIKhCUkQY:CX", f.GetServiceTicketFor("blackbox"));
- UNIT_ASSERT_VALUES_EQUAL("3:serv:CBAQ__________9_IgYIKhCUkQY:CX", f.GetServiceTicketFor(19));
- UNIT_ASSERT_EXCEPTION_CONTAINS(f.GetServiceTicketFor("blackbox2"),
- TBrokenTvmClientSettings,
- "Destination 'blackbox2' was not specified in settings. Check your settings (if you use Qloud/YP/tvmtool - check it's settings)");
- UNIT_ASSERT_EXCEPTION_CONTAINS(f.GetServiceTicketFor(20),
- TBrokenTvmClientSettings,
- "Destination '20' was not specified in settings. Check your settings (if you use Qloud/YP/tvmtool - check it's settings)");
- }
-
- Y_UNIT_TEST(Tool) {
- TPortManager pm;
- ui16 port = pm.GetPort(80);
- NMock::TMockServer server(port, []() { return new TTvmTool; });
-
- NTvmTool::TClientSettings s("push-client");
- s.SetPort(port);
- s.SetAuthToken(AUTH_TOKEN);
- auto l = MakeIntrusive<TLogger>();
- {
- TTvmClient f(s, l);
-
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(14380887840), f.GetUpdateTimeOfPublicKeys());
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(14380887840), f.GetUpdateTimeOfServiceTickets());
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(14381406240), f.GetInvalidationTimeOfPublicKeys());
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(std::numeric_limits<time_t>::max()), f.GetInvalidationTimeOfServiceTickets());
-
- UNIT_ASSERT_VALUES_EQUAL(SERVICE_TICKET_PC, f.GetServiceTicketFor("pass_likers"));
- UNIT_ASSERT_VALUES_EQUAL(SERVICE_TICKET_PC, f.GetServiceTicketFor(100502));
- UNIT_ASSERT_EXCEPTION_CONTAINS(f.GetServiceTicketFor("blackbox"),
- TBrokenTvmClientSettings,
- "Destination 'blackbox' was not specified in settings. Check your settings (if you use Qloud/YP/tvmtool - check it's settings)");
- UNIT_ASSERT_EXCEPTION_CONTAINS(f.GetServiceTicketFor(242),
- TBrokenTvmClientSettings,
- "Destination '242' was not specified in settings. Check your settings (if you use Qloud/YP/tvmtool - check it's settings)");
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100501, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:100502)]\n"
- << "7: Tickets fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- << "7: Public keys fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(CheckRoles) {
- { // roles not configured
- TTvmClient f(new TMockedUpdater(TMockedUpdater::TSettings{
- .SelfTvmId = OK_CLIENT,
- }));
-
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::Ok,
- f.CheckServiceTicket(SRV_TICKET_123).GetStatus());
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::Ok,
- f.CheckServiceTicket(SRV_TICKET_456).GetStatus());
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::Malformed,
- f.CheckServiceTicket("asdfg").GetStatus());
- }
-
- { // roles configured
- NRoles::TRolesPtr roles = std::make_shared<NRoles::TRoles>(
- NRoles::TRoles::TMeta{},
- NRoles::TRoles::TTvmConsumers{
- {123, std::make_shared<NRoles::TConsumerRoles>(
- THashMap<TString, NRoles::TEntitiesPtr>())},
- },
- NRoles::TRoles::TUserConsumers{},
- std::make_shared<TString>());
- TTvmClient f(new TMockedUpdater(TMockedUpdater::TSettings{
- .SelfTvmId = OK_CLIENT,
- .Roles = roles,
- }));
-
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::Ok,
- f.CheckServiceTicket(SRV_TICKET_123).GetStatus());
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::NoRoles,
- f.CheckServiceTicket(SRV_TICKET_456).GetStatus());
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::Malformed,
- f.CheckServiceTicket("asdfg").GetStatus());
- }
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/files/ok.cache b/library/cpp/tvmauth/client/ut/files/ok.cache
deleted file mode 100644
index 768d4953d15..00000000000
--- a/library/cpp/tvmauth/client/ut/files/ok.cache
+++ /dev/null
Binary files differ
diff --git a/library/cpp/tvmauth/client/ut/files/public_keys b/library/cpp/tvmauth/client/ut/files/public_keys
deleted file mode 100644
index fa683d18f3b..00000000000
--- a/library/cpp/tvmauth/client/ut/files/public_keys
+++ /dev/null
Binary files differ
diff --git a/library/cpp/tvmauth/client/ut/files/roles b/library/cpp/tvmauth/client/ut/files/roles
deleted file mode 100644
index 36864ae50a5..00000000000
--- a/library/cpp/tvmauth/client/ut/files/roles
+++ /dev/null
Binary files differ
diff --git a/library/cpp/tvmauth/client/ut/files/service_tickets b/library/cpp/tvmauth/client/ut/files/service_tickets
deleted file mode 100644
index 7a6985a34d8..00000000000
--- a/library/cpp/tvmauth/client/ut/files/service_tickets
+++ /dev/null
Binary files differ
diff --git a/library/cpp/tvmauth/client/ut/last_error_ut.cpp b/library/cpp/tvmauth/client/ut/last_error_ut.cpp
deleted file mode 100644
index 6751e78be7a..00000000000
--- a/library/cpp/tvmauth/client/ut/last_error_ut.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <library/cpp/tvmauth/client/misc/last_error.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(LastError) {
- Y_UNIT_TEST(common) {
- TLastError le;
-
- UNIT_ASSERT_VALUES_EQUAL("OK",
- le.GetLastError(true));
- UNIT_ASSERT_VALUES_EQUAL("Internal client error: failed to collect last useful error message, please report this message to [email protected]",
- le.GetLastError(false));
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(le.ThrowLastError(),
- TNonRetriableException,
- "Internal client error: failed to collect last useful error message");
-
- le.ProcessError(TLastError::EType::Retriable, TLastError::EScope::PublicKeys, "err_re#1");
- UNIT_ASSERT_VALUES_EQUAL("PublicKeys: err_re#1",
- le.GetLastError(false));
- le.ProcessError(TLastError::EType::Retriable, TLastError::EScope::PublicKeys, "err_re#2");
- UNIT_ASSERT_VALUES_EQUAL("PublicKeys: err_re#2",
- le.GetLastError(false));
- le.ProcessError(TLastError::EType::NonRetriable, TLastError::EScope::PublicKeys, "err_nonre#3");
- UNIT_ASSERT_VALUES_EQUAL("PublicKeys: err_nonre#3",
- le.GetLastError(false));
- le.ProcessError(TLastError::EType::NonRetriable, TLastError::EScope::PublicKeys, "err_nonre#4");
- UNIT_ASSERT_VALUES_EQUAL("PublicKeys: err_nonre#4",
- le.GetLastError(false));
- le.ProcessError(TLastError::EType::Retriable, TLastError::EScope::PublicKeys, "err_re#5");
- UNIT_ASSERT_VALUES_EQUAL("PublicKeys: err_nonre#4",
- le.GetLastError(false));
- UNIT_ASSERT_EXCEPTION_CONTAINS(le.ThrowLastError(),
- TNonRetriableException,
- "Failed to start TvmClient. Do not retry: PublicKeys: err_nonre#4");
-
- le.ProcessError(TLastError::EType::Retriable, TLastError::EScope::ServiceTickets, "err_re#6");
- UNIT_ASSERT_VALUES_EQUAL("PublicKeys: err_nonre#4",
- le.GetLastError(false));
- le.ProcessError(TLastError::EType::Retriable, TLastError::EScope::ServiceTickets, "err_re#7");
- UNIT_ASSERT_VALUES_EQUAL("PublicKeys: err_nonre#4",
- le.GetLastError(false));
- le.ProcessError(TLastError::EType::NonRetriable, TLastError::EScope::ServiceTickets, "err_nonre#8");
- UNIT_ASSERT_VALUES_EQUAL("ServiceTickets: err_nonre#8",
- le.GetLastError(false));
-
- le.ClearError(TLastError::EScope::ServiceTickets);
- UNIT_ASSERT_VALUES_EQUAL("PublicKeys: err_nonre#4",
- le.GetLastError(false));
- le.ClearError(TLastError::EScope::PublicKeys);
- UNIT_ASSERT_VALUES_EQUAL("Internal client error: failed to collect last useful error message, please report this message to [email protected]",
- le.GetLastError(false));
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/logger_ut.cpp b/library/cpp/tvmauth/client/ut/logger_ut.cpp
deleted file mode 100644
index 76236e8913b..00000000000
--- a/library/cpp/tvmauth/client/ut/logger_ut.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/logger.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(ClientLogger) {
- int i = 0;
-
- Y_UNIT_TEST(Debug) {
- TLogger l;
- l.Debug("qwerty");
- UNIT_ASSERT_VALUES_EQUAL("7: qwerty\n", l.Stream.Str());
- }
-
- Y_UNIT_TEST(Info) {
- TLogger l;
- l.Info("qwerty");
- UNIT_ASSERT_VALUES_EQUAL("6: qwerty\n", l.Stream.Str());
- }
-
- Y_UNIT_TEST(Warning) {
- TLogger l;
- l.Warning("qwerty");
- UNIT_ASSERT_VALUES_EQUAL("4: qwerty\n", l.Stream.Str());
- }
-
- Y_UNIT_TEST(Error) {
- TLogger l;
- l.Error("qwerty");
- UNIT_ASSERT_VALUES_EQUAL("3: qwerty\n", l.Stream.Str());
- }
-
-#ifdef _unix_
- Y_UNIT_TEST(Cerr_) {
- TCerrLogger l(5);
- l.Error("hit");
- l.Debug("miss");
- }
-#endif
-}
diff --git a/library/cpp/tvmauth/client/ut/roles/decoder_ut.cpp b/library/cpp/tvmauth/client/ut/roles/decoder_ut.cpp
deleted file mode 100644
index 0ee5fc7cb7c..00000000000
--- a/library/cpp/tvmauth/client/ut/roles/decoder_ut.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-#include <library/cpp/tvmauth/client/exception.h>
-#include <library/cpp/tvmauth/client/misc/roles/decoder.h>
-
-#include <library/cpp/tvmauth/unittest.h>
-#include <library/cpp/tvmauth/src/utils.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-using namespace NTvmAuth::NRoles;
-
-Y_UNIT_TEST_SUITE(Decoder) {
- const TString BROTLI = NUtils::Base64url2bin("GyMAAAR0Y6ku58ObclAQzDweUSUwbdqc5yOOKgI");
- const TString GZIP = NUtils::Base64url2bin("H4sIAAAAAAAA_yrOz01VKEstqkTGCpm5BflFJYl5JQpJOflJgAAAAP__MbeeiSQAAAA");
- const TString ZSTD = NUtils::Base64url2bin("KLUv_QBY9AAAwHNvbWUgdmVyeSBpbXBvcnRhbnQgYmxvYgEAc-4IAQAA");
-
- Y_UNIT_TEST(Decode) {
- // Errs
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDecoder::Decode(
- "1:brotli:10000:88839244E8C7C426B20729AF1A13AD792C5FA83C7F2FB6ADCFC60DA1B5EF9603",
- TString(BROTLI)),
- yexception,
- "Decoded blob has bad size: expected 10000, actual 36");
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDecoder::Decode(
- "1:brotli:36:88839244E8C7C426B20729AF1A13AD792C5FA83C7F2FB6ADCFC60DA1B5EF0000",
- TString(BROTLI)),
- yexception,
- "Decoded blob has bad sha256");
-
- // OK
- TString decoded;
- UNIT_ASSERT_NO_EXCEPTION(
- decoded = TDecoder::Decode("", "some veryveryveryvery important blob"));
- UNIT_ASSERT_VALUES_EQUAL(decoded, "some veryveryveryvery important blob");
-
- UNIT_ASSERT_NO_EXCEPTION(
- decoded = TDecoder::Decode(
- "1:brotli:36:88839244E8C7C426B20729AF1A13AD792C5FA83C7F2FB6ADCFC60DA1B5EF9603",
- TString(BROTLI)));
- UNIT_ASSERT_VALUES_EQUAL(decoded, "some veryveryveryvery important blob");
-
- UNIT_ASSERT_NO_EXCEPTION(
- decoded = TDecoder::Decode(
- "1:gzip:36:88839244E8C7C426B20729AF1A13AD792C5FA83C7F2FB6ADCFC60DA1B5EF9603",
- TString(GZIP)));
- UNIT_ASSERT_VALUES_EQUAL(decoded, "some veryveryveryvery important blob");
-
- UNIT_ASSERT_NO_EXCEPTION(
- decoded = TDecoder::Decode(
- "1:zstd:36:88839244E8C7C426B20729AF1A13AD792C5FA83C7F2FB6ADCFC60DA1B5EF9603",
- TString(ZSTD)));
- UNIT_ASSERT_VALUES_EQUAL(decoded, "some veryveryveryvery important blob");
- }
-
- Y_UNIT_TEST(UnknownCodecs) {
- for (const TStringBuf codec : {"lz", "lzma", "kek"}) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDecoder::DecodeImpl(codec, ""),
- yexception,
- TStringBuilder() << "unknown codec: '" << codec << "'");
- }
- }
-
- Y_UNIT_TEST(ParseCodec) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDecoder::ParseCodec("2:kek"),
- yexception,
- "unknown codec format version; known: 1; got: 2");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDecoder::ParseCodec("1:::"),
- yexception,
- "codec type is empty");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDecoder::ParseCodec("1:some_codec:asd:"),
- yexception,
- "decoded blob size is not number");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDecoder::ParseCodec("1:some_codec:789:qwe"),
- yexception,
- "sha256 of decoded blob has invalid length: expected 64, got 3");
-
- TDecoder::TCodecInfo info;
- UNIT_ASSERT_NO_EXCEPTION(
- info = TDecoder::ParseCodec("1:some_codec:789:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
-
- UNIT_ASSERT_VALUES_EQUAL("some_codec", info.Type);
- UNIT_ASSERT_VALUES_EQUAL(789, info.Size);
- UNIT_ASSERT_VALUES_EQUAL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- info.Sha256);
- }
-
- Y_UNIT_TEST(DecodeBrolti) {
- UNIT_ASSERT_EXCEPTION(
- TDecoder::DecodeBrolti(""),
- yexception);
-
- TString blob;
- UNIT_ASSERT_NO_EXCEPTION(
- blob = TDecoder::DecodeBrolti(
- TString(BROTLI)));
-
- UNIT_ASSERT_VALUES_EQUAL(
- "some veryveryveryvery important blob",
- blob);
- }
-
- Y_UNIT_TEST(DecodeGzip) {
- TString blob;
- UNIT_ASSERT_NO_EXCEPTION(blob = TDecoder::DecodeGzip(""));
- UNIT_ASSERT_VALUES_EQUAL("", blob);
-
- UNIT_ASSERT_NO_EXCEPTION(
- blob = TDecoder::DecodeGzip(
- TString(GZIP)));
-
- UNIT_ASSERT_VALUES_EQUAL(
- "some veryveryveryvery important blob",
- blob);
- }
-
- Y_UNIT_TEST(DecodeZstd) {
- TString blob;
- UNIT_ASSERT_NO_EXCEPTION(blob = TDecoder::DecodeZstd(""));
- UNIT_ASSERT_VALUES_EQUAL("", blob);
-
- UNIT_ASSERT_NO_EXCEPTION(
- blob = TDecoder::DecodeZstd(
- TString(ZSTD)));
-
- UNIT_ASSERT_VALUES_EQUAL(
- "some veryveryveryvery important blob",
- blob);
- }
-
- Y_UNIT_TEST(VerifySize) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDecoder::VerifySize("qwerty", 100),
- yexception,
- TStringBuilder() << "Decoded blob has bad size: expected 100, actual 6");
-
- UNIT_ASSERT_NO_EXCEPTION(TDecoder::VerifySize("qwert", 5));
- }
-
- Y_UNIT_TEST(VerifyChecksum) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TDecoder::VerifyChecksum("qwerty", "zzzz"),
- yexception,
- "Decoded blob has bad sha256: expected=zzzz,"
- " actual=65E84BE33532FB784C48129675F9EFF3A682B27168C0EA744B2CF58EE02337C5");
-
- UNIT_ASSERT_NO_EXCEPTION(
- TDecoder::VerifyChecksum("qwerty",
- "65E84BE33532FB784C48129675F9EFF3A682B27168C0EA744B2CF58EE02337C5"));
- UNIT_ASSERT_NO_EXCEPTION(
- TDecoder::VerifyChecksum("qwerty",
- "65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5"));
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/roles/entities_index_ut.cpp b/library/cpp/tvmauth/client/ut/roles/entities_index_ut.cpp
deleted file mode 100644
index 7e62a87b64f..00000000000
--- a/library/cpp/tvmauth/client/ut/roles/entities_index_ut.cpp
+++ /dev/null
@@ -1,358 +0,0 @@
-#include <library/cpp/tvmauth/client/ut/common.h>
-
-#include <library/cpp/tvmauth/client/misc/roles/entities_index.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-#include <array>
-
-using namespace NTvmAuth::NRoles;
-
-Y_UNIT_TEST_SUITE(RolesEntitiesIndex) {
- Y_UNIT_TEST(Stage) {
- TEntitiesIndex::TStage stage({
- "key#1",
- "key#2",
- "key#3",
- "key#4",
- });
-
- const std::vector<std::vector<TString>> results = {
- {"key#1"},
- {"key#2"},
- {"key#1", "key#2"},
- {"key#3"},
- {"key#1", "key#3"},
- {"key#2", "key#3"},
- {"key#1", "key#2", "key#3"},
- {"key#4"},
- {"key#1", "key#4"},
- {"key#2", "key#4"},
- {"key#1", "key#2", "key#4"},
- {"key#3", "key#4"},
- {"key#1", "key#3", "key#4"},
- {"key#2", "key#3", "key#4"},
- {"key#1", "key#2", "key#3", "key#4"},
- };
-
- std::vector<TString> keys;
- for (const std::vector<TString>& res : results) {
- UNIT_ASSERT(stage.GetNextKeySet(keys));
- UNIT_ASSERT_VALUES_EQUAL(keys, res);
- }
-
- UNIT_ASSERT_C(!stage.GetNextKeySet(keys), keys);
- }
-
- Y_UNIT_TEST(GetUniqueSortedKeys) {
- std::vector<TEntityPtr> entities;
-
- UNIT_ASSERT_VALUES_EQUAL(std::set<TString>(),
- TEntitiesIndex::GetUniqueSortedKeys(entities));
-
- entities = {
- std::make_shared<TEntity>(),
- };
- UNIT_ASSERT_VALUES_EQUAL(std::set<TString>(),
- TEntitiesIndex::GetUniqueSortedKeys(entities));
-
- entities = {
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#1"},
- }),
- };
- UNIT_ASSERT_VALUES_EQUAL(std::set<TString>({
- "key#1",
- }),
- TEntitiesIndex::GetUniqueSortedKeys(entities));
-
- entities = {
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#1"},
- }),
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#22"},
- }),
- };
- UNIT_ASSERT_VALUES_EQUAL(std::set<TString>({
- "key#1",
- "key#2",
- }),
- TEntitiesIndex::GetUniqueSortedKeys(entities));
- }
-
- Y_UNIT_TEST(MakeUnique) {
- const TEntityPtr entityA = std::make_shared<TEntity>(TEntity{{"key#1", "aaaa"}});
- const TEntityPtr entityA2 = std::make_shared<TEntity>(TEntity{{"key#1", "aaaa"}});
- const TEntityPtr entityB = std::make_shared<TEntity>(TEntity{{"key#1", "bbbb"}});
-
- TEntitiesIndex::TSubTree idx = {
- std::vector<TEntityPtr>{
- entityA,
- entityA,
- },
- TEntitiesIndex::TIdxByAttrs{
- {
- TKeyValue{"key#1", "value#11"},
- TEntitiesIndex::TSubTree{
- std::vector<TEntityPtr>{
- entityA,
- entityB,
- entityA,
- },
- TEntitiesIndex::TIdxByAttrs{
- {
- TKeyValue{"key#2", "value#21"},
- TEntitiesIndex::TSubTree{
- std::vector<TEntityPtr>{
- entityA,
- entityB,
- entityA,
- },
- TEntitiesIndex::TIdxByAttrs{},
- },
- },
- },
- },
- },
- {
- TKeyValue{"key#1", "value#12"},
- TEntitiesIndex::TSubTree{
- std::vector<TEntityPtr>{
- entityA,
- entityB,
- entityA2,
- },
- TEntitiesIndex::TIdxByAttrs{},
- },
- },
- },
- };
-
- TEntitiesIndex::MakeUnique(idx);
-
- UNIT_ASSERT_VALUES_EQUAL(idx.Entities.size(), 1);
-
- auto it = idx.SubTree.find(TKeyValue{"key#1", "value#12"});
- UNIT_ASSERT(it != idx.SubTree.end());
- UNIT_ASSERT_VALUES_EQUAL(it->second.Entities.size(), 2);
-
- it = idx.SubTree.find(TKeyValue{"key#1", "value#11"});
- UNIT_ASSERT(it != idx.SubTree.end());
- UNIT_ASSERT_VALUES_EQUAL(it->second.Entities.size(), 2);
-
- it = it->second.SubTree.find(TKeyValue{"key#2", "value#21"});
- UNIT_ASSERT(it != it->second.SubTree.end());
- UNIT_ASSERT_VALUES_EQUAL(it->second.Entities.size(), 2);
- }
-
- Y_UNIT_TEST(GetByAttrs) {
- const TEntitiesIndex index = CreateEntitiesIndex();
-
- UNIT_ASSERT_STRINGS_EQUAL(
- index.PrintDebugString(),
- R"(
-"key#1/value#11"
- "key#2/value#22"
- "key#3/value#33"
- "key#2/value#23"
- "key#3/value#33"
- "key#3/value#33"
-"key#1/value#13"
- "key#3/value#33"
-"key#2/value#22"
- "key#3/value#33"
-"key#2/value#23"
- "key#3/value#33"
-"key#3/value#33"
-)");
-
- struct TCase {
- TEntity AttrsToFind;
- std::vector<TEntity> Result;
- };
-
- std::vector<TCase> cases = {
- {
- TEntity{},
- std::vector<TEntity>{
- TEntity{
- {"key#1", "value#11"},
- },
- TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#22"},
- {"key#3", "value#33"},
- },
- TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#23"},
- {"key#3", "value#33"},
- },
- TEntity{
- {"key#1", "value#13"},
- {"key#3", "value#33"},
- },
- },
- },
- {
- TEntity{
- {"key#1", "value#11"},
- },
- std::vector<TEntity>{
- TEntity{
- {"key#1", "value#11"},
- },
- TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#22"},
- {"key#3", "value#33"},
- },
- TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#23"},
- {"key#3", "value#33"},
- },
- },
- },
- {
- TEntity{
- {"key#1", "value#13"},
- },
- std::vector<TEntity>{
- TEntity{
- {"key#1", "value#13"},
- {"key#3", "value#33"},
- },
- },
- },
- {
- TEntity{
- {"key#1", "value#14"},
- },
- std::vector<TEntity>{},
- },
- {
- TEntity{
- {"key#2", "value#22"},
- },
- std::vector<TEntity>{
- TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#22"},
- {"key#3", "value#33"},
- },
- },
- },
- {
- TEntity{
- {"key#3", "value#33"},
- },
- std::vector<TEntity>{
- TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#22"},
- {"key#3", "value#33"},
- },
- TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#23"},
- {"key#3", "value#33"},
- },
- TEntity{
- {"key#1", "value#13"},
- {"key#3", "value#33"},
- },
- },
- },
- };
-
- for (const TCase& c : cases) {
- std::vector<TEntityPtr> expected;
- for (const TEntity& e : c.Result) {
- expected.push_back(std::make_shared<TEntity>(e));
- }
-
- UNIT_ASSERT_VALUES_EQUAL_C(
- index.GetEntitiesWithAttrs(c.AttrsToFind.begin(), c.AttrsToFind.end()),
- expected,
- "'" << c.AttrsToFind << "'");
- }
- }
-
- Y_UNIT_TEST(Contains) {
- const TEntitiesIndex index = CreateEntitiesIndex();
-
- struct TCase {
- TEntity Exact;
- bool Result = false;
- };
-
- std::vector<TCase> cases = {
- {
- TEntity{},
- false,
- },
- {
- TEntity{
- {"key#1", "value#11"},
- },
- true,
- },
- {
- TEntity{
- {"key#1", "value#13"},
- },
- false,
- },
- {
- TEntity{
- {"key#1", "value#13"},
- {"key#3", "value#33"},
- },
- true,
- },
- };
-
- for (const TCase& c : cases) {
- UNIT_ASSERT_VALUES_EQUAL_C(
- index.ContainsExactEntity(c.Exact.begin(), c.Exact.end()),
- c.Result,
- "'" << c.Exact << "'");
- }
- }
-}
-
-template <>
-void Out<std::vector<TString>>(IOutputStream& o, const std::vector<TString>& s) {
- for (const auto& key : s) {
- o << key << ",";
- }
-}
-
-template <>
-void Out<std::set<TString>>(IOutputStream& o, const std::set<TString>& s) {
- for (const auto& key : s) {
- o << key << ",";
- }
-}
-
-template <>
-void Out<std::vector<TEntityPtr>>(IOutputStream& o, const std::vector<TEntityPtr>& v) {
- for (const TEntityPtr& p : v) {
- o << *p << Endl;
- }
-}
-
-template <>
-void Out<TEntityPtr>(IOutputStream& o, const TEntityPtr& v) {
- o << *v;
-}
-
-template <>
-void Out<TEntity>(IOutputStream& o, const TEntity& v) {
- for (const auto& [key, value] : v) {
- o << key << "->" << value << Endl;
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/roles/parser_ut.cpp b/library/cpp/tvmauth/client/ut/roles/parser_ut.cpp
deleted file mode 100644
index 4a2afac4837..00000000000
--- a/library/cpp/tvmauth/client/ut/roles/parser_ut.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-#include <library/cpp/tvmauth/client/misc/roles/parser.h>
-
-#include <library/cpp/tvmauth/unittest.h>
-
-#include <library/cpp/json/json_reader.h>
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-using namespace NTvmAuth::NRoles;
-
-Y_UNIT_TEST_SUITE(Parser) {
- static NJson::TJsonValue ToJsonValue(TStringBuf body) {
- NJson::TJsonValue doc;
- UNIT_ASSERT(NJson::ReadJsonTree(body, &doc));
- return doc;
- }
-
- Y_UNIT_TEST(GetEntity) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetEntity(ToJsonValue(R"({"scope": false})"),
- "cons",
- "read"),
- yexception,
- "entity is map (str->str), got value Boolean. consumer 'cons' with role 'read'");
-
- TEntityPtr en;
- UNIT_ASSERT_NO_EXCEPTION(
- en = TParser::GetEntity(ToJsonValue(R"({})"),
- "cons",
- "read"));
- UNIT_ASSERT_VALUES_EQUAL(en->size(), 0);
-
- UNIT_ASSERT_NO_EXCEPTION(
- en = TParser::GetEntity(ToJsonValue(R"({"key1": "val1", "key2": "val2"})"),
- "cons",
- "read"));
- UNIT_ASSERT_VALUES_EQUAL(en->size(), 2);
- }
-
- Y_UNIT_TEST(GetEntities) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetEntities(ToJsonValue(R"([{},[]])"),
- "cons",
- "read"),
- yexception,
- "role entity for role must be map: consumer 'cons' with role 'read' has Array");
-
- TEntitiesPtr en;
- UNIT_ASSERT_NO_EXCEPTION(
- en = TParser::GetEntities(ToJsonValue(R"([])"),
- "cons",
- "read"));
- UNIT_ASSERT(!en->Contains({}));
-
- UNIT_ASSERT_NO_EXCEPTION(
- en = TParser::GetEntities(ToJsonValue(R"([{}])"),
- "cons",
- "read"));
- UNIT_ASSERT(en->Contains({}));
- }
-
- Y_UNIT_TEST(GetConsumer) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetConsumer(ToJsonValue(R"({"role1": [],"role2": {}})"),
- "cons"),
- yexception,
- "entities for roles must be array: 'role2' is Map");
-
- TConsumerRolesPtr c;
- UNIT_ASSERT_NO_EXCEPTION(
- c = TParser::GetConsumer(ToJsonValue(R"({"role1": [],"role2": []})"),
- "cons"));
- UNIT_ASSERT_EQUAL(c->GetRoles().size(), 2);
- UNIT_ASSERT(c->HasRole("role1"));
- UNIT_ASSERT(c->HasRole("role2"));
- UNIT_ASSERT(!c->HasRole("role3"));
- }
-
- Y_UNIT_TEST(GetConsumers) {
- TRoles::TTvmConsumers cons;
- UNIT_ASSERT_NO_EXCEPTION(
- cons = TParser::GetConsumers<TTvmId>(ToJsonValue(R"({})"),
- "tvm"));
- UNIT_ASSERT_VALUES_EQUAL(0, cons.size());
-
- UNIT_ASSERT_NO_EXCEPTION(
- cons = TParser::GetConsumers<TTvmId>(ToJsonValue(R"({"tvm": {}})"),
- "tvm"));
- UNIT_ASSERT_VALUES_EQUAL(0, cons.size());
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetConsumers<TTvmId>(ToJsonValue(R"({"tvm": []})"),
- "tvm"),
- yexception,
- "'tvm' must be object");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetConsumers<TTvmId>(ToJsonValue(R"({"tvm": {"asd": []}})"),
- "tvm"),
- yexception,
- "roles for consumer must be map: 'asd' is Array");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetConsumers<TTvmId>(ToJsonValue(R"({"tvm": {"asd": {}}})"),
- "tvm"),
- yexception,
- "id must be valid positive number of proper size for tvm. got 'asd'");
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetConsumers<TTvmId>(ToJsonValue(R"({"tvm": {"1120000000001062": {}}})"),
- "tvm"),
- yexception,
- "id must be valid positive number of proper size for tvm. got '1120000000001062'");
- UNIT_ASSERT_NO_EXCEPTION(
- TParser::GetConsumers<TUid>(ToJsonValue(R"({"user": {"1120000000001062": {}}})"),
- "user"));
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetConsumers<TTvmId>(ToJsonValue(R"({"tvm": {"42": {}, "042": {}}})"),
- "tvm"),
- yexception,
- "consumer duplicate detected: '42' for tvm");
-
- UNIT_ASSERT_NO_EXCEPTION(
- cons = TParser::GetConsumers<TTvmId>(ToJsonValue(R"({"tvm": {"42": {}}})"),
- "tvm"));
- UNIT_ASSERT_VALUES_EQUAL(1, cons.size());
- }
-
- Y_UNIT_TEST(GetMeta) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetMeta(ToJsonValue(R"({})")),
- yexception,
- "Missing 'revision'");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetMeta(ToJsonValue(R"({"revision": null})")),
- yexception,
- "'revision' has unexpected type: Null");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetMeta(ToJsonValue(R"({"revision": 100500})")),
- yexception,
- "Missing 'born_date'");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TParser::GetMeta(ToJsonValue(R"({"revision": 100500, "born_date": false})")),
- yexception,
- "key 'born_date' must be uint");
-
- TRoles::TMeta meta;
- UNIT_ASSERT_NO_EXCEPTION(
- meta = TParser::GetMeta(ToJsonValue(R"({"revision": 100500, "born_date": 42})")));
- UNIT_ASSERT_VALUES_EQUAL("100500", meta.Revision);
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(42), meta.BornTime);
-
- UNIT_ASSERT_NO_EXCEPTION(
- meta = TParser::GetMeta(ToJsonValue(R"({"revision": "100501", "born_date": 42})")));
- UNIT_ASSERT_VALUES_EQUAL("100501", meta.Revision);
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(42), meta.BornTime);
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/roles/roles_ut.cpp b/library/cpp/tvmauth/client/ut/roles/roles_ut.cpp
deleted file mode 100644
index d485dd857a7..00000000000
--- a/library/cpp/tvmauth/client/ut/roles/roles_ut.cpp
+++ /dev/null
@@ -1,419 +0,0 @@
-#include <library/cpp/tvmauth/client/ut/common.h>
-
-#include <library/cpp/tvmauth/client/exception.h>
-#include <library/cpp/tvmauth/client/misc/roles/roles.h>
-
-#include <library/cpp/tvmauth/unittest.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-#include <array>
-
-using namespace NTvmAuth;
-using namespace NTvmAuth::NRoles;
-
-Y_UNIT_TEST_SUITE(Roles) {
- Y_UNIT_TEST(EntContains) {
- TEntities ent(CreateEntitiesIndex());
-
- UNIT_ASSERT(ent.Contains({{"key#1", "value#11"}}));
- UNIT_ASSERT(ent.Contains({
- {"key#1", "value#13"},
- {"key#3", "value#33"},
- }));
- UNIT_ASSERT(!ent.Contains({{"key#111", "value#11"}}));
- UNIT_ASSERT(!ent.Contains({
- {"key#111", "value#13"},
- {"key#3", "value#33"},
- }));
-
- // valid calls
- {
- std::array<const std::pair<TStringBuf, TString>, 1> arr = {{{"key#1", "value#11"}}};
- UNIT_ASSERT(ent.ContainsSortedUnique<TStringBuf>({arr.begin(), arr.end()}));
- }
- {
- std::array<const std::pair<TString, TStringBuf>, 2> arr = {{
- {"key#1", "value#13"},
- {"key#3", "value#33"},
- }};
- bool res = ent.ContainsSortedUnique<TString, TStringBuf>({arr.begin(), arr.end()});
- UNIT_ASSERT(res);
- }
- {
- std::array<const std::pair<TStringBuf, TStringBuf>, 1> arr = {{{"key#111", "value#11"}}};
- bool res = ent.ContainsSortedUnique<TStringBuf, TStringBuf>({arr.begin(), arr.end()});
- UNIT_ASSERT(!res);
- }
- {
- std::array<const std::pair<TString, TString>, 2> arr = {{
- {"key#111", "value#13"},
- {"key#3", "value#33"},
- }};
- UNIT_ASSERT(!ent.ContainsSortedUnique({arr.begin(), arr.end()}));
- }
-
- // invalid calls
- {
- std::array<const std::pair<TString, TString>, 2> arr = {{
- {"key#3", "value#33"},
- {"key#1", "value#13"},
- }};
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- ent.ContainsSortedUnique({arr.begin(), arr.end()}),
- TIllegalUsage,
- "attrs are not sorted: 'key#3' before 'key#1'");
- }
- {
- std::array<const std::pair<TString, TString>, 2> arr = {{
- {"key#1", "value#13"},
- {"key#1", "value#13"},
- }};
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- ent.ContainsSortedUnique({arr.begin(), arr.end()}),
- TIllegalUsage,
- "attrs are not unique: 'key#1'");
- }
- }
-
- Y_UNIT_TEST(EntWithAttrs) {
- TEntities ent(CreateEntitiesIndex());
-
- UNIT_ASSERT_VALUES_EQUAL(
- ent.GetEntitiesWithAttrs({{"key#1", "value#11"}}),
- std::vector<TEntityPtr>({
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#11"},
- }),
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#22"},
- {"key#3", "value#33"},
- }),
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#23"},
- {"key#3", "value#33"},
- }),
- }));
- UNIT_ASSERT_VALUES_EQUAL(
- ent.GetEntitiesWithAttrs({{"key#111", "value#11"}}),
- std::vector<TEntityPtr>());
-
- // valid calls
- {
- std::array<const std::pair<TStringBuf, TString>, 2> arr = {{
- {"key#1", "value#11"},
- {"key#3", "value#33"},
- }};
- auto vec = ent.GetEntitiesWithSortedUniqueAttrs<TStringBuf>({arr.begin(), arr.end()});
- UNIT_ASSERT_VALUES_EQUAL(
- vec,
- std::vector<TEntityPtr>({
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#22"},
- {"key#3", "value#33"},
- }),
- std::make_shared<TEntity>(TEntity{
- {"key#1", "value#11"},
- {"key#2", "value#23"},
- {"key#3", "value#33"},
- }),
- }));
- }
- {
- std::array<const std::pair<TString, TString>, 2> arr = {{
- {"key#111", "value#13"},
- {"key#3", "value#33"},
- }};
- UNIT_ASSERT_VALUES_EQUAL(
- ent.GetEntitiesWithSortedUniqueAttrs({arr.begin(), arr.end()}),
- std::vector<TEntityPtr>());
- }
-
- // invalid calls
- {
- std::array<const std::pair<TString, TString>, 2> arr = {{
- {"key#3", "value#33"},
- {"key#1", "value#13"},
- }};
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- ent.GetEntitiesWithSortedUniqueAttrs({arr.begin(), arr.end()}),
- TIllegalUsage,
- "attrs are not sorted: 'key#3' before 'key#1'");
- }
- {
- std::array<const std::pair<TString, TString>, 2> arr = {{
- {"key#1", "value#13"},
- {"key#1", "value#13"},
- }};
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- ent.GetEntitiesWithSortedUniqueAttrs({arr.begin(), arr.end()}),
- TIllegalUsage,
- "attrs are not unique: 'key#1'");
- }
- }
-
- Y_UNIT_TEST(Consumer) {
- TConsumerRoles c({
- {"read", std::make_shared<TEntities>(CreateEntitiesIndex())},
- {"write", std::make_shared<TEntities>(CreateEntitiesIndex())},
- });
-
- UNIT_ASSERT_EQUAL(c.GetRoles().size(), 2);
- UNIT_ASSERT(c.HasRole("read"));
- UNIT_ASSERT(c.HasRole("write"));
- UNIT_ASSERT(!c.HasRole("access"));
-
- UNIT_ASSERT_EQUAL(nullptr, c.GetEntitiesForRole("access"));
-
- TEntitiesPtr ent = c.GetEntitiesForRole("read");
- UNIT_ASSERT_UNEQUAL(nullptr, ent);
- UNIT_ASSERT(ent->Contains({{"key#1", "value#11"}}));
- UNIT_ASSERT(!ent->Contains({{"key#111", "value#11"}}));
-
- UNIT_ASSERT(c.CheckRoleForExactEntity("read", {{"key#1", "value#11"}}));
- UNIT_ASSERT(!c.CheckRoleForExactEntity("access", {{"key#1", "value#11"}}));
- UNIT_ASSERT(!c.CheckRoleForExactEntity("read", {{"key#111", "value#11"}}));
- UNIT_ASSERT(!c.CheckRoleForExactEntity("read", {}));
- }
-
- Y_UNIT_TEST(RolesService) {
- TRoles r(
- {},
- {
- {100500, std::make_shared<TConsumerRoles>(TEntitiesByRoles{
- {"write", std::make_shared<TEntities>(CreateEntitiesIndex())},
- })},
- },
- {},
- std::make_shared<TString>());
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- r.GetRolesForService(NUnittest::CreateServiceTicket(
- ETicketStatus::InvalidDst,
- 100500)),
- TIllegalUsage,
- "Service ticket must be valid, got: InvalidDst");
-
- TConsumerRolesPtr cons;
- UNIT_ASSERT_NO_EXCEPTION(
- cons = r.GetRolesForService(NUnittest::CreateServiceTicket(
- ETicketStatus::Ok,
- 100501)));
- UNIT_ASSERT_EQUAL(nullptr, cons);
-
- cons = r.GetRolesForService(NUnittest::CreateServiceTicket(
- ETicketStatus::Ok,
- 100500));
- UNIT_ASSERT_UNEQUAL(nullptr, cons);
- UNIT_ASSERT_EQUAL(cons->GetRoles().size(), 1);
- UNIT_ASSERT(!cons->HasRole("read"));
- UNIT_ASSERT(cons->HasRole("write"));
-
- ////shortcuts
- // no tvmid
- UNIT_ASSERT(!r.CheckServiceRole(
- NUnittest::CreateServiceTicket(
- ETicketStatus::Ok,
- 100501),
- "write"));
-
- // no role
- UNIT_ASSERT(!r.CheckServiceRole(
- NUnittest::CreateServiceTicket(
- ETicketStatus::Ok,
- 100500),
- "read"));
-
- // success
- UNIT_ASSERT(r.CheckServiceRole(
- NUnittest::CreateServiceTicket(
- ETicketStatus::Ok,
- 100500),
- "write"));
-
- // no tvmid
- UNIT_ASSERT(!r.CheckServiceRoleForExactEntity(
- NUnittest::CreateServiceTicket(
- ETicketStatus::Ok,
- 100501),
- "write",
- {{"key#1", "value#11"}}));
-
- // no role
- UNIT_ASSERT(!r.CheckServiceRoleForExactEntity(
- NUnittest::CreateServiceTicket(
- ETicketStatus::Ok,
- 100500),
- "read",
- {{"key#1", "value#11"}}));
-
- // no entity
- UNIT_ASSERT(!r.CheckServiceRoleForExactEntity(
- NUnittest::CreateServiceTicket(
- ETicketStatus::Ok,
- 100500),
- "write",
- {{"key#111", "value#11"}}));
-
- // success
- UNIT_ASSERT(r.CheckServiceRoleForExactEntity(
- NUnittest::CreateServiceTicket(
- ETicketStatus::Ok,
- 100500),
- "write",
- {{"key#1", "value#11"}}));
- }
-
- Y_UNIT_TEST(RolesUser) {
- TRoles r(
- {},
- {},
- {
- {789654, std::make_shared<TConsumerRoles>(TEntitiesByRoles{
- {"read", std::make_shared<TEntities>(CreateEntitiesIndex())},
- })},
- },
- std::make_shared<TString>("some roles"));
-
- UNIT_ASSERT_VALUES_EQUAL("some roles", r.GetRaw());
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- r.GetRolesForUser(NUnittest::CreateUserTicket(
- ETicketStatus::Malformed,
- 789654,
- {})),
- TIllegalUsage,
- "User ticket must be valid, got: Malformed");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- r.GetRolesForUser(NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789654,
- {}),
- 789123),
- TIllegalUsage,
- "User ticket must be from ProdYateam, got from Test");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- r.GetRolesForUser(NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789654,
- {},
- {},
- EBlackboxEnv::ProdYateam),
- 789123),
- TIllegalUsage,
- "selectedUid must be in user ticket but it's not: 789123");
-
- TConsumerRolesPtr cons;
- UNIT_ASSERT_NO_EXCEPTION(
- cons = r.GetRolesForUser(NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789123,
- {},
- {},
- EBlackboxEnv::ProdYateam)));
- UNIT_ASSERT_EQUAL(nullptr, cons);
-
- cons = r.GetRolesForUser(NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789654,
- {},
- {},
- EBlackboxEnv::ProdYateam));
- UNIT_ASSERT_UNEQUAL(nullptr, cons);
- UNIT_ASSERT_EQUAL(cons->GetRoles().size(), 1);
- UNIT_ASSERT(cons->HasRole("read"));
- UNIT_ASSERT(!cons->HasRole("write"));
-
- cons = r.GetRolesForUser(NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789123,
- {},
- {789654, 789741},
- EBlackboxEnv::ProdYateam),
- 789654);
- UNIT_ASSERT_UNEQUAL(nullptr, cons);
- UNIT_ASSERT_EQUAL(cons->GetRoles().size(), 1);
- UNIT_ASSERT(cons->HasRole("read"));
- UNIT_ASSERT(!cons->HasRole("write"));
-
- ////shortcuts
- // no uid
- UNIT_ASSERT(!r.CheckUserRole(
- NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789123,
- {},
- {},
- EBlackboxEnv::ProdYateam),
- "read"));
-
- // no role
- UNIT_ASSERT(!r.CheckUserRole(
- NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789654,
- {},
- {},
- EBlackboxEnv::ProdYateam),
- "wrire"));
-
- // success
- UNIT_ASSERT(r.CheckUserRole(
- NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789654,
- {},
- {},
- EBlackboxEnv::ProdYateam),
- "read"));
-
- // no uid
- UNIT_ASSERT(!r.CheckUserRoleForExactEntity(
- NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789123,
- {},
- {},
- EBlackboxEnv::ProdYateam),
- "read",
- {{"key#1", "value#11"}}));
-
- // no role
- UNIT_ASSERT(!r.CheckUserRoleForExactEntity(
- NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789654,
- {},
- {},
- EBlackboxEnv::ProdYateam),
- "wrire",
- {{"key#1", "value#11"}}));
-
- // no entity
- UNIT_ASSERT(!r.CheckUserRoleForExactEntity(
- NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789654,
- {},
- {},
- EBlackboxEnv::ProdYateam),
- "read",
- {{"key#111", "value#11"}}));
-
- // success
- UNIT_ASSERT(r.CheckUserRoleForExactEntity(
- NUnittest::CreateUserTicket(
- ETicketStatus::Ok,
- 789654,
- {},
- {},
- EBlackboxEnv::ProdYateam),
- "read",
- {{"key#1", "value#11"}}));
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/roles/tvmapi_roles_fetcher_ut.cpp b/library/cpp/tvmauth/client/ut/roles/tvmapi_roles_fetcher_ut.cpp
deleted file mode 100644
index 7eaf611e82a..00000000000
--- a/library/cpp/tvmauth/client/ut/roles/tvmapi_roles_fetcher_ut.cpp
+++ /dev/null
@@ -1,197 +0,0 @@
-#include <library/cpp/tvmauth/client/ut/common.h>
-
-#include <library/cpp/tvmauth/client/misc/disk_cache.h>
-#include <library/cpp/tvmauth/client/misc/api/roles_fetcher.h>
-
-#include <library/cpp/tvmauth/unittest.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-#include <util/stream/file.h>
-#include <util/system/fs.h>
-
-using namespace NTvmAuth;
-using namespace NTvmAuth::NTvmApi;
-
-Y_UNIT_TEST_SUITE(TvmApiRolesFetcher) {
- static const TString ROLES = R"({"revision": "100501", "born_date": 42})";
-
- static const TString CACHE_DIR = "./tmp/";
-
- static void CleanCache() {
- NFs::RemoveRecursive(CACHE_DIR);
- NFs::MakeDirectoryRecursive(CACHE_DIR);
- }
-
- Y_UNIT_TEST(ReadFromDisk) {
- CleanCache();
- auto logger = MakeIntrusive<TLogger>();
-
- TRolesFetcherSettings s;
- s.CacheDir = CACHE_DIR;
- s.SelfTvmId = 111111;
- s.IdmSystemSlug = "fem\tida";
- TRolesFetcher fetcher(s, logger);
-
- UNIT_ASSERT(!fetcher.AreRolesOk());
-
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), fetcher.ReadFromDisk());
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: File './tmp/roles' does not exist\n",
- logger->Stream.Str());
- logger->Stream.clear();
-
- const TInstant now = TInstant::Seconds(TInstant::Now().Seconds());
-
- TDiskWriter wr(CACHE_DIR + "roles");
- UNIT_ASSERT(wr.Write("kek", now));
- UNIT_ASSERT_NO_EXCEPTION(fetcher.ReadFromDisk());
- UNIT_ASSERT(!fetcher.AreRolesOk());
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/roles' was successfully read\n"
- << "4: Roles in disk cache are for another slug (kek). Self=fem\tida\n",
- logger->Stream.Str());
- logger->Stream.clear();
-
- UNIT_ASSERT(wr.Write(TRolesFetcher::PrepareDiskFormat(ROLES, "femida_test"), now));
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), fetcher.ReadFromDisk());
- UNIT_ASSERT(!fetcher.AreRolesOk());
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/roles' was successfully read\n"
- "4: Roles in disk cache are for another slug (femida_test). Self=fem\tida\n",
- logger->Stream.Str());
- logger->Stream.clear();
-
- UNIT_ASSERT(wr.Write(TRolesFetcher::PrepareDiskFormat(ROLES, "fem\tida"), now));
- UNIT_ASSERT_VALUES_EQUAL(now, fetcher.ReadFromDisk());
- UNIT_ASSERT(fetcher.AreRolesOk());
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/roles' was successfully read\n"
- "7: Succeed to read roles with revision 100501 from ./tmp/roles\n",
- logger->Stream.Str());
- logger->Stream.clear();
- }
-
- Y_UNIT_TEST(IsTimeToUpdate) {
- TRetrySettings settings;
- settings.RolesUpdatePeriod = TDuration::Minutes(123);
-
- UNIT_ASSERT(!TRolesFetcher::IsTimeToUpdate(settings, TDuration::Seconds(5)));
- UNIT_ASSERT(TRolesFetcher::IsTimeToUpdate(settings, TDuration::Hours(5)));
- }
-
- Y_UNIT_TEST(ShouldWarn) {
- TRetrySettings settings;
- settings.RolesWarnPeriod = TDuration::Minutes(123);
-
- UNIT_ASSERT(!TRolesFetcher::ShouldWarn(settings, TDuration::Seconds(5)));
- UNIT_ASSERT(TRolesFetcher::ShouldWarn(settings, TDuration::Hours(5)));
- }
-
- Y_UNIT_TEST(Update) {
- CleanCache();
- auto logger = MakeIntrusive<TLogger>();
-
- TRolesFetcherSettings s;
- s.CacheDir = CACHE_DIR;
- s.SelfTvmId = 111111;
- TRolesFetcher fetcher(s, logger);
-
- UNIT_ASSERT(!fetcher.AreRolesOk());
-
- NUtils::TFetchResult fetchResult;
- fetchResult.Code = 304;
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- fetcher.Update(NUtils::TFetchResult(fetchResult)),
- yexception,
- "tirole did not return any roles because current roles are actual, but there are no roles in memory");
- UNIT_ASSERT(!fetcher.AreRolesOk());
- UNIT_ASSERT(!NFs::Exists(CACHE_DIR + "roles"));
-
- fetchResult.Code = 206;
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- fetcher.Update(NUtils::TFetchResult(fetchResult)),
- yexception,
- "Unexpected code from tirole: 206.");
- UNIT_ASSERT(!fetcher.AreRolesOk());
- UNIT_ASSERT(!NFs::Exists(CACHE_DIR + "roles"));
-
- fetchResult.Code = 200;
- fetchResult.Response = "kek";
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- fetcher.Update(NUtils::TFetchResult(fetchResult)),
- yexception,
- "Invalid json. 'kek'");
- UNIT_ASSERT(!fetcher.AreRolesOk());
- UNIT_ASSERT(!NFs::Exists(CACHE_DIR + "roles"));
-
- fetchResult.Response = ROLES;
- UNIT_ASSERT_NO_EXCEPTION(fetcher.Update(NUtils::TFetchResult(fetchResult)));
- UNIT_ASSERT(fetcher.AreRolesOk());
- UNIT_ASSERT(NFs::Exists(CACHE_DIR + "roles"));
- {
- TFileInput f(CACHE_DIR + "roles");
- TString body = f.ReadAll();
- UNIT_ASSERT_C(body.Contains(ROLES), "got body: '" << body << "'");
- }
-
- fetchResult.Code = 304;
- fetchResult.Response.clear();
- UNIT_ASSERT_NO_EXCEPTION(fetcher.Update(NUtils::TFetchResult(fetchResult)));
- UNIT_ASSERT(fetcher.AreRolesOk());
- UNIT_ASSERT(NFs::Exists(CACHE_DIR + "roles"));
-
- fetchResult.Code = 200;
- fetchResult.Headers.AddHeader("X-Tirole-Compression", "kek");
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- fetcher.Update(NUtils::TFetchResult(fetchResult)),
- yexception,
- "unknown codec format version; known: 1; got: kek");
- }
-
- Y_UNIT_TEST(CreateTiroleRequest) {
- CleanCache();
- auto logger = MakeIntrusive<TLogger>();
-
- TRolesFetcherSettings s;
- s.CacheDir = CACHE_DIR;
- s.SelfTvmId = 111111;
- s.IdmSystemSlug = "some sys";
- TRolesFetcher fetcher(s, logger);
-
- TRolesFetcher::TRequest req = fetcher.CreateTiroleRequest("some_ticket");
- UNIT_ASSERT_VALUES_EQUAL(
- "/v1/get_actual_roles?system_slug=some+sys&_pid=&lib_version=client_",
- TStringBuf(req.Url).Chop(5));
- UNIT_ASSERT_VALUES_EQUAL(
- TKeepAliveHttpClient::THeaders({
- {"X-Ya-Service-Ticket", "some_ticket"},
- }),
- req.Headers);
-
- TDiskWriter wr(CACHE_DIR + "roles");
- UNIT_ASSERT(wr.Write(TRolesFetcher::PrepareDiskFormat(
- R"({"revision": "asd&qwe", "born_date": 42})",
- "some sys")));
- UNIT_ASSERT_NO_EXCEPTION(fetcher.ReadFromDisk());
-
- req = fetcher.CreateTiroleRequest("some_ticket");
- UNIT_ASSERT_VALUES_EQUAL(
- "/v1/get_actual_roles?system_slug=some+sys&_pid=&lib_version=client_",
- TStringBuf(req.Url).Chop(5));
- UNIT_ASSERT_VALUES_EQUAL(
- TKeepAliveHttpClient::THeaders({
- {"If-None-Match", R"("asd&qwe")"},
- {"X-Ya-Service-Ticket", "some_ticket"},
- }),
- req.Headers);
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/roles/tvmtool_roles_fetcher_ut.cpp b/library/cpp/tvmauth/client/ut/roles/tvmtool_roles_fetcher_ut.cpp
deleted file mode 100644
index 55db4950cea..00000000000
--- a/library/cpp/tvmauth/client/ut/roles/tvmtool_roles_fetcher_ut.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <library/cpp/tvmauth/client/ut/common.h>
-
-#include <library/cpp/tvmauth/client/misc/tool/roles_fetcher.h>
-
-#include <library/cpp/tvmauth/unittest.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-using namespace NTvmAuth::NTvmTool;
-
-Y_UNIT_TEST_SUITE(TvmToolRolesFetcher) {
- static const TString ROLES = R"({"revision": "100501", "born_date": 42})";
-
- Y_UNIT_TEST(IsTimeToUpdate) {
- TRolesFetcher rf(
- TRolesFetcherSettings{.UpdatePeriod = TDuration::Minutes(1)},
- new TLogger);
-
- UNIT_ASSERT(!rf.IsTimeToUpdate(TDuration::Seconds(3)));
- UNIT_ASSERT(!rf.IsTimeToUpdate(TDuration::Seconds(60)));
- UNIT_ASSERT(rf.IsTimeToUpdate(TDuration::Seconds(61)));
- UNIT_ASSERT(rf.IsTimeToUpdate(TDuration::Seconds(600)));
- }
-
- Y_UNIT_TEST(ShouldWarn) {
- TRolesFetcher rf(
- TRolesFetcherSettings{.WarnPeriod = TDuration::Minutes(20)},
- new TLogger);
-
- UNIT_ASSERT(!rf.ShouldWarn(TDuration::Minutes(3)));
- UNIT_ASSERT(!rf.ShouldWarn(TDuration::Minutes(20)));
- UNIT_ASSERT(rf.ShouldWarn(TDuration::Minutes(21)));
- UNIT_ASSERT(rf.ShouldWarn(TDuration::Minutes(600)));
- }
-
- Y_UNIT_TEST(Common) {
- auto logger = MakeIntrusive<TLogger>();
- TRolesFetcher rf(
- TRolesFetcherSettings{.SelfAlias = "some_alias"},
- logger);
- UNIT_ASSERT(!rf.AreRolesOk());
- UNIT_ASSERT(!rf.GetCurrentRoles());
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- rf.Update(NUtils::TFetchResult{.Code = HTTP_NOT_MODIFIED}),
- yexception,
- "tvmtool did not return any roles because current roles are actual, but there are no roles in memory - this should never happen");
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- rf.Update(NUtils::TFetchResult{.Code = HTTP_BAD_REQUEST, .Response = "kek"}),
- yexception,
- "Unexpected code from tvmtool: 400. kek");
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- rf.Update(NUtils::TFetchResult{.Code = HTTP_OK, .Response = "kek"}),
- yexception,
- "Invalid json. 'kek'");
-
- UNIT_ASSERT_NO_EXCEPTION(rf.Update(NUtils::TFetchResult{.Code = HTTP_OK, .Response = ROLES}));
- UNIT_ASSERT(rf.AreRolesOk());
- UNIT_ASSERT(rf.GetCurrentRoles());
- UNIT_ASSERT_VALUES_EQUAL("100501", rf.GetCurrentRoles()->GetMeta().Revision);
-
- UNIT_ASSERT_NO_EXCEPTION(rf.Update(NUtils::TFetchResult{.Code = HTTP_NOT_MODIFIED}));
- UNIT_ASSERT_VALUES_EQUAL("100501", rf.GetCurrentRoles()->GetMeta().Revision);
-
- UNIT_ASSERT_VALUES_EQUAL(
- "7: Succeed to update roles with revision 100501\n",
- logger->Stream.Str());
- }
-
- Y_UNIT_TEST(CreateRequest) {
- struct TTestFetcher: TRolesFetcher {
- using TRolesFetcher::CreateRequest;
- using TRolesFetcher::TRequest;
- using TRolesFetcher::TRolesFetcher;
- };
-
- TTestFetcher rf(
- TRolesFetcherSettings{.SelfAlias = "some_&alias"},
- new TLogger);
-
- TTestFetcher::TRequest request = rf.CreateRequest({{"some_header", "some_value"}});
- UNIT_ASSERT_VALUES_EQUAL(
- "/v2/roles?self=some_%26alias",
- request.Url);
- UNIT_ASSERT_VALUES_EQUAL(
- TKeepAliveHttpClient::THeaders({{"some_header", "some_value"}}),
- request.Headers);
-
- UNIT_ASSERT_NO_EXCEPTION(rf.Update(NUtils::TFetchResult{.Code = HTTP_OK, .Response = ROLES}));
-
- request = rf.CreateRequest({{"some_header", "some_value"}});
- UNIT_ASSERT_VALUES_EQUAL(
- "/v2/roles?self=some_%26alias",
- request.Url);
- UNIT_ASSERT_VALUES_EQUAL(
- TKeepAliveHttpClient::THeaders({
- {"some_header", "some_value"},
- {"If-None-Match", R"("100501")"},
- }),
- request.Headers);
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/settings_ut.cpp b/library/cpp/tvmauth/client/ut/settings_ut.cpp
deleted file mode 100644
index 76c9542442e..00000000000
--- a/library/cpp/tvmauth/client/ut/settings_ut.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/misc/api/settings.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(ClientSettings) {
-#if !defined(_win_)
- Y_UNIT_TEST(CheckValid) {
- struct TTestCase {
- TString Name;
- NTvmApi::TClientSettings Settings;
- TString Err;
- };
- std::vector<TTestCase> cases = {
- TTestCase{
- .Name = "default",
- .Settings = {},
- .Err = "Invalid settings: nothing to do",
- },
- TTestCase{
- .Name = "only secret",
- .Settings = {
- .Secret = TStringBuf("foobar"),
- },
- .Err = "Secret is present but destinations list is empty. It makes no sense",
- },
- TTestCase{
- .Name = "only dsts",
- .Settings = {
- .FetchServiceTicketsForDsts = {42},
- },
- .Err = "SelfTvmId cannot be 0 if fetching of Service Tickets required",
- },
- TTestCase{
- .Name = "dsts with selfTvmId",
- .Settings = {
- .SelfTvmId = 43,
- .FetchServiceTicketsForDsts = {42},
- },
- .Err = "Secret is required for fetching of Service Tickets",
- },
- TTestCase{
- .Name = "correct service tickets fetching",
- .Settings = {
- .SelfTvmId = 43,
- .Secret = TStringBuf("foobar"),
- .FetchServiceTicketsForDsts = {42},
- },
- .Err = "",
- },
- TTestCase{
- .Name = "only check srv flag",
- .Settings = {
- .CheckServiceTickets = true,
- },
- .Err = "SelfTvmId cannot be 0 if checking of Service Tickets required",
- },
- TTestCase{
- .Name = "tirole without disk cache",
- .Settings = {
- .SelfTvmId = 43,
- .Secret = TStringBuf("foobar"),
- .FetchRolesForIdmSystemSlug = "kek",
- },
- .Err = "Disk cache must be enabled to use roles: they can be heavy",
- },
- };
-
- for (const TTestCase& c : cases) {
- if (c.Err) {
- UNIT_ASSERT_EXCEPTION_CONTAINS_C(
- c.Settings.CheckValid(),
- TBrokenTvmClientSettings,
- c.Err,
- c.Name);
- } else {
- UNIT_ASSERT_NO_EXCEPTION_C(c.Settings.CheckValid(), c.Name);
- }
- }
-
- NTvmApi::TClientSettings s{.DiskCacheDir = "/impossible/dir"};
- UNIT_ASSERT_EXCEPTION(s.CheckValid(), TPermissionDenied);
- }
-
- Y_UNIT_TEST(CloneNormalized) {
- NTvmApi::TClientSettings original;
- original.FetchServiceTicketsForDsts = {43};
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(original.CloneNormalized(),
- TBrokenTvmClientSettings,
- "SelfTvmId cannot be 0 if fetching of Service Tickets required");
- original.SelfTvmId = 15;
- original.Secret = "bar";
- original.DiskCacheDir = "./";
-
- NTvmApi::TClientSettings::TDstVector expected = {43};
- UNIT_ASSERT_VALUES_EQUAL(expected, original.CloneNormalized().FetchServiceTicketsForDsts);
-
- original.FetchServiceTicketsForDstsWithAliases = {{"foo", 42}};
- expected = {42, 43};
- UNIT_ASSERT_VALUES_EQUAL(expected, original.CloneNormalized().FetchServiceTicketsForDsts);
-
- original.FetchRolesForIdmSystemSlug = "kek";
- expected = {42, 43, 2028120};
- UNIT_ASSERT_VALUES_EQUAL(expected, original.CloneNormalized().FetchServiceTicketsForDsts);
-
- original.FetchServiceTicketsForDsts.push_back(2028120);
- expected = {42, 43, 2028120};
- UNIT_ASSERT_VALUES_EQUAL(expected, original.CloneNormalized().FetchServiceTicketsForDsts);
- }
-
- Y_UNIT_TEST(NeedServiceTicketsFetching) {
- NTvmApi::TClientSettings s;
-
- UNIT_ASSERT(!s.NeedServiceTicketsFetching());
-
- s.FetchServiceTicketsForDsts = {42};
- UNIT_ASSERT(s.NeedServiceTicketsFetching());
- s.FetchServiceTicketsForDsts.clear();
-
- s.FetchServiceTicketsForDstsWithAliases = {{"foo", 42}};
- UNIT_ASSERT(s.NeedServiceTicketsFetching());
- s.FetchServiceTicketsForDstsWithAliases.clear();
-
- s.FetchRolesForIdmSystemSlug = "bar";
- UNIT_ASSERT(s.NeedServiceTicketsFetching());
- s.FetchRolesForIdmSystemSlug.clear();
- }
-
- Y_UNIT_TEST(permitions) {
- UNIT_ASSERT_EXCEPTION(NTvmApi::TClientSettings::CheckPermissions("/qwerty"), TPermissionDenied);
-
- const TString tmpDir = "./cache_dir";
-
- NFs::RemoveRecursive(tmpDir);
- NFs::MakeDirectory(tmpDir, NFs::FP_OWNER_WRITE | NFs::FP_GROUP_WRITE | NFs::FP_ALL_WRITE);
- UNIT_ASSERT_EXCEPTION(NTvmApi::TClientSettings::CheckPermissions(tmpDir), TPermissionDenied);
-
- NFs::RemoveRecursive(tmpDir);
- NFs::MakeDirectory(tmpDir, NFs::FP_OWNER_READ | NFs::FP_GROUP_READ | NFs::FP_ALL_READ);
- UNIT_ASSERT_EXCEPTION(NTvmApi::TClientSettings::CheckPermissions(tmpDir), TPermissionDenied);
-
- NFs::RemoveRecursive(tmpDir);
- NFs::MakeDirectory(tmpDir, NFs::FP_COMMON_FILE);
- UNIT_ASSERT_NO_EXCEPTION(NTvmApi::TClientSettings::CheckPermissions(tmpDir));
- }
-#endif
-
- Y_UNIT_TEST(Dst) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(NTvmApi::TClientSettings::TDst(0), yexception, "TvmId cannot be 0");
- UNIT_ASSERT_EXCEPTION_CONTAINS(NTvmApi::TClientSettings::TDstMap({{"blackbox", 0}}),
- TBrokenTvmClientSettings,
- "TvmId cannot be 0");
- }
-
- Y_UNIT_TEST(Fetching) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(125);
-
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- UNIT_ASSERT_NO_EXCEPTION(s.CheckValid());
-
- UNIT_ASSERT_VALUES_EQUAL(s.FetchServiceTicketsForDsts.size(), 1);
- UNIT_ASSERT_VALUES_EQUAL(s.FetchServiceTicketsForDsts[0], 19);
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/src_checker_ut.cpp b/library/cpp/tvmauth/client/ut/src_checker_ut.cpp
deleted file mode 100644
index bd1646d6b98..00000000000
--- a/library/cpp/tvmauth/client/ut/src_checker_ut.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/mocked_updater.h>
-#include <library/cpp/tvmauth/client/misc/src_checker.h>
-#include <library/cpp/tvmauth/client/misc/api/threaded_updater.h>
-
-#include <library/cpp/tvmauth/type.h>
-#include <library/cpp/tvmauth/unittest.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-using namespace NTvmAuth;
-
-Y_UNIT_TEST_SUITE(SrcChecker) {
- Y_UNIT_TEST(Ctor) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- TSrcChecker(new TMockedUpdater),
- TBrokenTvmClientSettings,
- "Need to use TClientSettings::EnableRolesFetching");
- }
-
- Y_UNIT_TEST(Check) {
- NRoles::TRolesPtr roles = std::make_shared<NRoles::TRoles>(
- NRoles::TRoles::TMeta{},
- NRoles::TRoles::TTvmConsumers{
- {12345, std::make_shared<NRoles::TConsumerRoles>(
- THashMap<TString, NRoles::TEntitiesPtr>())},
- },
- NRoles::TRoles::TUserConsumers{},
- std::make_shared<TString>());
- const TSrcChecker checker(new TMockedUpdater({.Roles = roles}));
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- checker.Check(NUnittest::CreateServiceTicket(ETicketStatus::Expired, 12345)),
- TIllegalUsage,
- "Service ticket must be valid");
-
- TCheckedServiceTicket ticket;
- UNIT_ASSERT_NO_EXCEPTION(
- ticket = checker.Check(NUnittest::CreateServiceTicket(ETicketStatus::Ok, 12345)));
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::Ok, ticket.GetStatus());
-
- UNIT_ASSERT_NO_EXCEPTION(
- ticket = checker.Check(NUnittest::CreateServiceTicket(ETicketStatus::Ok, 9999)));
- UNIT_ASSERT_VALUES_EQUAL(ETicketStatus::NoRoles, ticket.GetStatus());
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/tvmapi_updater_ut.cpp b/library/cpp/tvmauth/client/ut/tvmapi_updater_ut.cpp
deleted file mode 100644
index 4cf449711bc..00000000000
--- a/library/cpp/tvmauth/client/ut/tvmapi_updater_ut.cpp
+++ /dev/null
@@ -1,1272 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/mocked_updater.h>
-#include <library/cpp/tvmauth/client/misc/disk_cache.h>
-#include <library/cpp/tvmauth/client/misc/api/threaded_updater.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-#include <library/cpp/testing/unittest/tests_data.h>
-
-#include <util/stream/file.h>
-#include <util/string/subst.h>
-#include <util/system/fs.h>
-
-#include <regex>
-
-using namespace NTvmAuth;
-static const std::regex TIME_REGEX(R"(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d.\d{6}Z)");
-
-Y_UNIT_TEST_SUITE(ApiUpdater) {
- static const TString SRV_TICKET = "3:serv:CBAQ__________9_IgYIexCUkQY:GioCM49Ob6_f80y6FY0XBVN4hLXuMlFeyMvIMiDuQnZkbkLpRpQOuQo5YjWoBjM0Vf-XqOm8B7xtrvxSYHDD7Q4OatN2l-Iwg7i71lE3scUeD36x47st3nd0OThvtjrFx_D8mw_c0GT5KcniZlqq1SjhLyAk1b_zJsx8viRAhCU";
- static const TString TEST_TICKET = "3:user:CA0Q__________9_Gg4KAgh7EHsg0oXYzAQoAQ:FSADps3wNGm92Vyb1E9IVq5M6ZygdGdt1vafWWEhfDDeCLoVA-sJesxMl2pGW4OxJ8J1r_MfpG3ZoBk8rLVMHUFrPa6HheTbeXFAWl8quEniauXvKQe4VyrpA1SPgtRoFqi5upSDIJzEAe1YRJjq1EClQ_slMt8R0kA_JjKUX54";
- static const TString TVM_RESPONSE =
- R"({
- "19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"},
- "213" : { "ticket" : "service_ticket_2"},
- "234" : { "error" : "Dst is not found" },
- "185" : { "ticket" : "service_ticket_3"},
- "deprecated" : { "ticket" : "deprecated_ticket" }
- })";
-
- static const TString CACHE_DIR = "./tmp/";
-
- static void CleanCache() {
- NFs::RemoveRecursive(CACHE_DIR);
- NFs::MakeDirectoryRecursive(CACHE_DIR);
- }
-
- Y_UNIT_TEST(MockedUpdater) {
- TMockedUpdater m;
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, m.GetStatus());
- UNIT_ASSERT(m.GetCachedServiceContext()->Check(SRV_TICKET));
- UNIT_ASSERT(m.GetCachedUserContext()->Check(TEST_TICKET));
- }
-
- Y_UNIT_TEST(Updater) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
- s.SetDiskCacheDir(GetCachePath());
-
- auto l = MakeIntrusive<TLogger>();
- {
- auto u = NTvmApi::TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus());
- }
-
- UNIT_ASSERT_C(l->Stream.Str().find("was successfully read") != TString::npos, l->Stream.Str());
- UNIT_ASSERT_C(l->Stream.Str().find("were successfully fetched") == TString::npos, l->Stream.Str());
- }
-
- Y_UNIT_TEST(Updater_badConfig) {
- NTvmApi::TClientSettings s;
- UNIT_ASSERT_EXCEPTION(NTvmApi::TThreadedUpdater::Create(s, TDevNullLogger::IAmBrave()), yexception);
- s.SetSelfTvmId(100500);
- UNIT_ASSERT_EXCEPTION(NTvmApi::TThreadedUpdater::Create(s, TDevNullLogger::IAmBrave()), yexception);
- s.SetDiskCacheDir(GetCachePath());
- UNIT_ASSERT_EXCEPTION(NTvmApi::TThreadedUpdater::Create(s, TDevNullLogger::IAmBrave()), yexception);
- }
-
- class TOfflineUpdater: public NTvmApi::TThreadedUpdater {
- bool Enabled_;
- TString PublicKeys_;
-
- public:
- TOfflineUpdater(const NTvmApi::TClientSettings& settings,
- TIntrusivePtr<TLogger> l,
- bool enabled = false,
- TString keys = NUnittest::TVMKNIFE_PUBLIC_KEYS)
- : NTvmApi::TThreadedUpdater(settings, l)
- , Enabled_(enabled)
- , PublicKeys_(keys)
- {
- Init();
- StartWorker();
- }
-
- NUtils::TFetchResult FetchServiceTicketsFromHttp(const TString&) const override {
- if (!Enabled_) {
- throw yexception() << "alarm";
- }
- return {200, {}, "/2/ticket", TVM_RESPONSE, ""};
- }
-
- NUtils::TFetchResult FetchPublicKeysFromHttp() const override {
- if (!Enabled_) {
- throw yexception() << "alarm";
- }
- return {200, {}, "/2/keys", PublicKeys_, ""};
- }
- };
-
- Y_UNIT_TEST(StartWithoutCache) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}});
- s.EnableServiceTicketChecking();
-
- auto l = MakeIntrusive<TLogger>();
- UNIT_ASSERT_EXCEPTION_CONTAINS(TOfflineUpdater(s, l),
- TRetriableException,
- "Failed to start TvmClient. You can retry:");
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: Disk cache disabled. Please set disk cache directory in settings for best reliability\n"
- << "4: Failed to get ServiceTickets: alarm\n"
- << "4: Failed to get ServiceTickets: alarm\n"
- << "4: Failed to get ServiceTickets: alarm\n"
- << "4: Failed to update service tickets: alarm\n"
- << "3: Service tickets have not been refreshed for too long period\n",
- l->Stream.Str());
- }
-
- static void WriteFile(TString name, TStringBuf body, TInstant time) {
- NFs::Remove(CACHE_DIR + name);
- TFileOutput f(CACHE_DIR + name);
- f << TDiskWriter::PrepareData(time, body);
- }
-
- Y_UNIT_TEST(StartWithOldCache) {
- CleanCache();
- WriteFile("./public_keys",
- NUnittest::TVMKNIFE_PUBLIC_KEYS,
- TInstant::Now() - TDuration::Days(30)); // too old
- WriteFile("./service_tickets",
- R"({"19":{"ticket":"3:serv:CBAQACIGCJSRBhAL:Fi"}})"
- "\t100500",
- TInstant::Now()); // too old
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}});
- s.EnableServiceTicketChecking();
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater u(s, l, true);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
-
- UNIT_ASSERT_C(l->Stream.Str().find("Disk cache (public keys) is too old") != TString::npos, l->Stream.Str());
- UNIT_ASSERT_C(l->Stream.Str().find("Disk cache (service tickets) is too old") != TString::npos, l->Stream.Str());
- UNIT_ASSERT_C(l->Stream.Str().find("were successfully fetched") != TString::npos, l->Stream.Str());
- }
-
- Y_UNIT_TEST(StartWithMissingCache) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
- s.SetDiskCacheDir("../");
-
- auto l = MakeIntrusive<TLogger>();
- UNIT_ASSERT_EXCEPTION_CONTAINS(TOfflineUpdater(s, l),
- TRetriableException,
- "Failed to start TvmClient. You can retry: ");
-
- UNIT_ASSERT_C(l->Stream.Str().find("does not exist") != TString::npos, l->Stream.Str());
- UNIT_ASSERT_C(l->Stream.Str().find("were successfully fetched") == TString::npos, l->Stream.Str());
- }
-
- Y_UNIT_TEST(StartWithBadCache_Tickets) {
- CleanCache();
- WriteFile("./service_tickets",
- TVM_RESPONSE,
- TInstant::Now());
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater u(s, l, true);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "4: Failed to read service tickets from disk: YYYYYYYYYYYYYYY\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Response with service tickets for 2 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 2 destination(s)\n"
- << "6: Cache was updated with 2 service ticket(s): XXXXXXXXXXX\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"),
- std::regex(R"(Failed to read service tickets from disk: [^\n]+)"),
- "Failed to read service tickets from disk: YYYYYYYYYYYYYYY"));
- }
-
- Y_UNIT_TEST(StartWithBadCache_PublicKeys) {
- CleanCache();
- WriteFile("./public_keys",
- "ksjdafnlskdjzfgbhdl",
- TInstant::Now());
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- UNIT_ASSERT_EXCEPTION_CONTAINS(TOfflineUpdater(s, l),
- TRetriableException,
- "Failed to start TvmClient. You can retry:");
-
- UNIT_ASSERT_C(l->Stream.Str().find("4: Failed to read public keys from disk: Malformed TVM keys") != TString::npos, l->Stream.Str());
- }
-
- Y_UNIT_TEST(StartWithCacheForAnotherTvmId) {
- CleanCache();
- WriteFile("./service_tickets",
- TVM_RESPONSE + "\t" + "100499",
- TInstant::Now());
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater u(s, l, true);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "4: Disk cache is for another tvmId (100499). Self=100500\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Response with service tickets for 2 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 2 destination(s)\n"
- << "6: Cache was updated with 2 service ticket(s): XXXXXXXXXXX\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- }
-
- Y_UNIT_TEST(StartWithCacheForAnotherDsts) {
- CleanCache();
- TInstant now = TInstant::Now();
- WriteFile("./service_tickets",
- R"({"213" : { "ticket" : "3:serv:CBAQ__________9_IgYIlJEGEAs:T-"}})"
- "\t"
- "100500",
- now);
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater u(s, l, true);
- auto cache = u.GetCachedServiceTickets();
- UNIT_ASSERT(cache->TicketsById.contains(213));
- UNIT_ASSERT(cache->TicketsById.contains(19));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 1 service ticket(s) from disk\n"
- << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Response with service tickets for 1 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 1 destination(s)\n"
- << "6: Cache was partly updated with 1 service ticket(s). total: 2\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- l->Stream.Str());
- l->Stream.Clear();
-
- {
- TOfflineUpdater u(s, l, true);
- auto cache = u.GetCachedServiceTickets();
- UNIT_ASSERT(cache->TicketsById.contains(213));
- UNIT_ASSERT(cache->TicketsById.contains(19));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 2 service ticket(s) from disk\n"
- << "6: Cache was updated with 2 service ticket(s): XXXXXXXXXXX\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- }
-
- Y_UNIT_TEST(StartWithNotFreshCacheForAnotherDsts) {
- CleanCache();
- TInstant now = TInstant::Now();
- WriteFile("./service_tickets",
- R"({"213" : { "ticket" : "3:serv:CBAQ__________9_IgYIlJEGEAs:T-"}})"
- "\t"
- "100500",
- now - TDuration::Hours(2));
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater u(s, l, true);
- auto cache = u.GetCachedServiceTickets();
- UNIT_ASSERT(cache->TicketsById.contains(213));
- UNIT_ASSERT(cache->TicketsById.contains(19));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 1 service ticket(s) from disk\n"
- << "6: Cache was updated with 1 service ticket(s): XXXXXXXXXXX\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Response with service tickets for 2 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 2 destination(s)\n"
- << "6: Cache was updated with 2 service ticket(s): XXXXXXXXXXX\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- l->Stream.Clear();
-
- {
- TOfflineUpdater u(s, l, true);
- auto cache = u.GetCachedServiceTickets();
- UNIT_ASSERT(cache->TicketsById.contains(213));
- UNIT_ASSERT(cache->TicketsById.contains(19));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 2 service ticket(s) from disk\n"
- << "6: Cache was updated with 2 service ticket(s): XXXXXXXXXXX\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- }
-
- Y_UNIT_TEST(StartWithPartialDiskCache) {
- CleanCache();
- WriteFile("./public_keys",
- NUnittest::TVMKNIFE_PUBLIC_KEYS,
- TInstant::Now());
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}});
- s.EnableServiceTicketChecking();
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater u(s, l, true);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: File './tmp/service_tickets' does not exist\n"
- << "6: File './tmp/public_keys' was successfully read\n"
- << "6: Cache was updated with public keys: XXXXXXXXXXX\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Response with service tickets for 2 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 2 destination(s)\n"
- << "6: Cache was updated with 2 service ticket(s): XXXXXXXXXXX\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- }
-
- Y_UNIT_TEST(StartFromHttpAndRestartFromDisk) {
- CleanCache();
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.EnableServiceTicketChecking();
- s.EnableUserTicketChecking(EBlackboxEnv::Test);
- s.SetDiskCacheDir(CACHE_DIR);
-
- {
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater u(s, l, true);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: File './tmp/service_tickets' does not exist\n"
- << "7: File './tmp/public_keys' does not exist\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Response with service tickets for 1 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 1 destination(s)\n"
- << "6: Cache was updated with 1 service ticket(s): XXXXXXXXXXX\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Public keys were successfully fetched from https://tvm-api.yandex.net\n"
- << "6: Cache was updated with public keys: XXXXXXXXXXX\n"
- << "6: File './tmp/public_keys' was successfully written\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- }
-
- {
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater u(s, l, true);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 1 service ticket(s) from disk\n"
- << "6: Cache was updated with 1 service ticket(s): XXXXXXXXXXX\n"
- << "6: File './tmp/public_keys' was successfully read\n"
- << "6: Cache was updated with public keys: XXXXXXXXXXX\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- }
- }
-
- class TUnstableUpdater: public NTvmApi::TThreadedUpdater {
- mutable int V1_ = 0;
- mutable int V2_ = 0;
-
- public:
- TUnstableUpdater(const NTvmApi::TClientSettings& settings, TIntrusivePtr<TLogger> l)
- : NTvmApi::TThreadedUpdater(settings, l)
- {
- UNIT_ASSERT_NO_EXCEPTION_C(Init(), l->Stream.Str());
- ExpBackoff_.SetEnabled(false);
- StartWorker();
-
- UNIT_ASSERT_VALUES_EQUAL_C(TClientStatus::Ok, GetStatus(), l->Stream.Str());
-
- Sleep(TDuration::MicroSeconds(100));
- PublicKeysDurations_.Expiring = TDuration::MicroSeconds(100);
- UNIT_ASSERT_VALUES_EQUAL_C(TClientStatus(TClientStatus::Warning, "Internal client error: failed to collect last useful error message, please report this message to [email protected]"),
- GetStatus(),
- l->Stream.Str());
-
- PublicKeysDurations_.Invalid = TDuration::MicroSeconds(20);
- UNIT_ASSERT_VALUES_EQUAL_C(TClientStatus::Error, GetStatus(), l->Stream.Str());
-
- PublicKeysDurations_.Expiring = TDuration::Seconds(100);
- PublicKeysDurations_.Invalid = TDuration::Seconds(200);
- UNIT_ASSERT_VALUES_EQUAL_C(TClientStatus::Ok, GetStatus(), l->Stream.Str());
-
- ServiceTicketsDurations_.Expiring = TDuration::MicroSeconds(100);
- UNIT_ASSERT_VALUES_EQUAL_C(TClientStatus::Warning, GetStatus(), l->Stream.Str());
-
- ServiceTicketsDurations_.Invalid = TDuration::MicroSeconds(20);
- UNIT_ASSERT_VALUES_EQUAL_C(TClientStatus::Warning, GetStatus(), l->Stream.Str());
-
- const TInstant* inv = &GetCachedServiceTickets()->InvalidationTime;
- *const_cast<TInstant*>(inv) = TInstant::Now() + TDuration::Seconds(30);
- UNIT_ASSERT_VALUES_EQUAL_C(TClientStatus::Error, GetStatus(), l->Stream.Str());
- }
-
- NUtils::TFetchResult FetchServiceTicketsFromHttp(const TString&) const override {
- Y_ENSURE_EX(++V1_ > 1, yexception() << "++v1_ > 1:" << V1_);
- return {200, {}, "/2/ticket", TVM_RESPONSE, ""};
- }
-
- NUtils::TFetchResult FetchPublicKeysFromHttp() const override {
- Y_ENSURE_EX(++V2_ > 2, yexception() << "++v2_ > 2:" << V2_);
- return {200, {}, "/2/keys", NUnittest::TVMKNIFE_PUBLIC_KEYS, ""};
- }
- };
-
- Y_UNIT_TEST(StartFromUnstableHttp) {
- CleanCache();
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.EnableServiceTicketChecking();
- s.EnableUserTicketChecking(EBlackboxEnv::Test);
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TUnstableUpdater u(s, l);
- }
-
- UNIT_ASSERT_C(l->Stream.Str().Contains("++v1_ > 1"), l->Stream.Str());
- UNIT_ASSERT_C(l->Stream.Str().Contains("++v2_ > 2"), l->Stream.Str());
- UNIT_ASSERT_C(l->Stream.Str().Contains("7: Response with service tickets for 1 destination(s) was successfully fetched from https://tvm-api.yandex.net"), l->Stream.Str());
- UNIT_ASSERT_C(l->Stream.Str().Contains("7: Public keys were successfully fetched"), l->Stream.Str());
- }
-
- Y_UNIT_TEST(GetUpdateTimeOfServiceTickets) {
- CleanCache();
- TInstant ins = TInstant::Now();
- WriteFile("./service_tickets",
- TVM_RESPONSE + "\t" + "100500",
- ins);
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- TOfflineUpdater u(s, l, true);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), u.GetUpdateTimeOfPublicKeys());
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(ins.Seconds()), u.GetUpdateTimeOfServiceTickets());
- }
-
- class TSignalingUpdater: public NTvmApi::TThreadedUpdater {
- mutable int V_ = 0;
- TAutoEvent& Ev_;
- const TStringBuf PublicKeys_;
-
- public:
- TSignalingUpdater(const NTvmApi::TClientSettings& settings,
- TLoggerPtr l,
- TAutoEvent& ev,
- const TStringBuf keys = NUnittest::TVMKNIFE_PUBLIC_KEYS)
- : NTvmApi::TThreadedUpdater(settings, l)
- , Ev_(ev)
- , PublicKeys_(keys)
- {
- WorkerAwakingPeriod_ = TDuration::MilliSeconds(300);
- PublicKeysDurations_.RefreshPeriod = TDuration::MilliSeconds(700);
- Init();
- ExpBackoff_.SetEnabled(false);
- StartWorker();
- }
-
- NUtils::TFetchResult FetchPublicKeysFromHttp() const override {
- if (++V_ >= 2) {
- Ev_.Signal();
- }
- return {200, {}, "/2/keys", TString(PublicKeys_), ""};
- }
- };
-
- Y_UNIT_TEST(StartWorker) {
- class TSignalingUpdater: public NTvmApi::TThreadedUpdater {
- mutable int V_ = 0;
- TAutoEvent& Ev_;
-
- public:
- TSignalingUpdater(const NTvmApi::TClientSettings& settings, TLoggerPtr l, TAutoEvent& ev)
- : NTvmApi::TThreadedUpdater(settings, l)
- , Ev_(ev)
- {
- WorkerAwakingPeriod_ = TDuration::MilliSeconds(300);
- PublicKeysDurations_.RefreshPeriod = TDuration::MilliSeconds(700);
- Init();
- ExpBackoff_.SetEnabled(false);
- StartWorker();
- }
-
- void Worker() override {
- NTvmApi::TThreadedUpdater::Worker();
- Ev_.Signal();
- }
-
- NUtils::TFetchResult FetchPublicKeysFromHttp() const override {
- if (++V_ < 4) {
- return {500, {}, "/2/keys", "lol", ""};
- }
- return {200, {}, "/2/keys", NUnittest::TVMKNIFE_PUBLIC_KEYS, "CAEQChkAAAAAAAD4PyGamZmZmZm5PyhkMAE4B0BGSAI"};
- }
- };
-
- CleanCache();
- TInstant expiringPubKeys = TInstant::Now() - TDuration::Days(3);
- WriteFile("./public_keys", NUnittest::TVMKNIFE_PUBLIC_KEYS, expiringPubKeys);
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- TAutoEvent ev;
- {
- TSignalingUpdater u(s, l, ev);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus(TClientStatus::Warning, "PublicKeys: Path:/2/keys.Code=500: lol"),
- u.GetStatus());
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(expiringPubKeys.Seconds()), u.GetUpdateTimeOfPublicKeys());
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), u.GetUpdateTimeOfServiceTickets());
-
- UNIT_ASSERT(ev.WaitT(TDuration::Seconds(15)));
- Sleep(TDuration::MilliSeconds(500));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/public_keys' was successfully read\n"
- << "6: Cache was updated with public keys: XXXXXXXXXXX\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "4: Failed to get PublicKeys: Path:/2/keys.Code=500: lol\n"
- << "4: Failed to get PublicKeys: Path:/2/keys.Code=500: lol\n"
- << "4: Failed to get PublicKeys: Path:/2/keys.Code=500: lol\n"
- << "4: Failed to update public keys: Path:/2/keys.Code=500: lol\n"
- << "3: Public keys have not been refreshed for too long period\n"
- << "7: Thread-worker started\n"
- << "7: Retry settings were updated: exponential_backoff_min:0.000000s->1.000000s;exponential_backoff_max:60.000000s->10.000000s;exponential_backoff_factor:2->1.5;exponential_backoff_jitter:0.5->0.1;max_random_sleep_default:5.000000s->0.100000s;retries_on_start:3->1;worker_awaking_period:10.000000s->7.000000s;dsts_limit:300->70;\n"
- << "6: File './tmp/retry_settings' was successfully written\n"
- << "7: Public keys were successfully fetched from https://tvm-api.yandex.net\n"
- << "6: Cache was updated with public keys: XXXXXXXXXXX\n"
- << "6: File './tmp/public_keys' was successfully written\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- }
-
-#if defined(_unix_)
- Y_UNIT_TEST(StartFromCacheAndBadPublicKeysFromHttp) {
- CleanCache();
- TInstant now = TInstant::Now();
- WriteFile("public_keys", NUnittest::TVMKNIFE_PUBLIC_KEYS, now - TDuration::Days(3)); // expiring public keys
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TAutoEvent ev;
- TSignalingUpdater u(s, l, ev, "malformed keys");
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus(TClientStatus::Warning, "PublicKeys: Malformed TVM keys"),
- u.GetStatus());
-
- UNIT_ASSERT(ev.WaitT(TDuration::Seconds(15)));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Warning, u.GetStatus());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/public_keys' was successfully read\n"
- << "6: Cache was updated with public keys: " << TInstant::Seconds((now - TDuration::Days(3)).Seconds()) << "\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Public keys were successfully fetched from https://tvm-api.yandex.net\n"
- << "4: Failed to update public keys: Malformed TVM keys\n"
- << "3: Public keys have not been refreshed for too long period\n"
- << "7: Thread-worker started\n"
- << "7: Public keys were successfully fetched from https://tvm-api.yandex.net\n"
- << "4: Failed to update public keys: Malformed TVM keys\n"
- << "3: Public keys have not been refreshed for too long period\n"
- << "7: Thread-worker stopped\n",
- l->Stream.Str());
- }
-#endif
-
- Y_UNIT_TEST(StartWithBadPublicKeysFromHttp) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
-
- auto l = MakeIntrusive<TLogger>();
- TAutoEvent ev;
- UNIT_ASSERT_EXCEPTION_CONTAINS(TOfflineUpdater(s, l, true, "some public keys"),
- TRetriableException,
- "Failed to start TvmClient. You can retry:");
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: Disk cache disabled. Please set disk cache directory in settings for best reliability\n"
- << "7: Public keys were successfully fetched from https://tvm-api.yandex.net\n"
- << "4: Failed to update public keys: Malformed TVM keys\n"
- << "3: Public keys have not been refreshed for too long period\n",
- l->Stream.Str());
- }
-
- class TNotInitedUpdater: public NTvmApi::TThreadedUpdater {
- public:
- TNotInitedUpdater(const NTvmApi::TClientSettings& settings, TLoggerPtr l = TDevNullLogger::IAmBrave())
- : NTvmApi::TThreadedUpdater(settings, l)
- {
- this->ExpBackoff_.SetEnabled(false);
- }
-
- using NTvmApi::TThreadedUpdater::AppendToJsonArray;
- using NTvmApi::TThreadedUpdater::AreServicesTicketsOk;
- using NTvmApi::TThreadedUpdater::CreateJsonArray;
- using NTvmApi::TThreadedUpdater::FindMissingDsts;
- using NTvmApi::TThreadedUpdater::GetPublicKeysFromHttp;
- using NTvmApi::TThreadedUpdater::GetServiceTicketsFromHttp;
- using NTvmApi::TThreadedUpdater::Init;
- using NTvmApi::TThreadedUpdater::IsServiceContextOk;
- using NTvmApi::TThreadedUpdater::IsTimeToUpdatePublicKeys;
- using NTvmApi::TThreadedUpdater::IsTimeToUpdateServiceTickets;
- using NTvmApi::TThreadedUpdater::IsUserContextOk;
- using NTvmApi::TThreadedUpdater::ParseTicketsFromDisk;
- using NTvmApi::TThreadedUpdater::ParseTicketsFromResponse;
- using NTvmApi::TThreadedUpdater::PrepareRequestForServiceTickets;
- using NTvmApi::TThreadedUpdater::PrepareTicketsForDisk;
- using NTvmApi::TThreadedUpdater::SetServiceContext;
- using NTvmApi::TThreadedUpdater::SetServiceTickets;
- using NTvmApi::TThreadedUpdater::SetUserContext;
- using NTvmApi::TThreadedUpdater::THttpResult;
- using NTvmApi::TThreadedUpdater::TPairTicketsErrors;
- using TAsyncUpdaterBase::IsServiceTicketMapOk;
- };
-
- Y_UNIT_TEST(IsCacheComplete_Empty) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"blackbox2", 20}});
- s.EnableServiceTicketChecking();
- s.EnableUserTicketChecking(EBlackboxEnv::Test);
-
- TNotInitedUpdater u(s);
- UNIT_ASSERT(!u.AreServicesTicketsOk());
- }
-
- Y_UNIT_TEST(IsCacheComplete_Tickets) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"blackbox2", 20}});
-
- TNotInitedUpdater u(s);
- UNIT_ASSERT(!u.AreServicesTicketsOk());
-
- u.SetServiceTickets(MakeIntrusiveConst<TServiceTickets>(
- TServiceTickets::TMapIdStr({{1, "mega_ticket"}}),
- TServiceTickets::TMapIdStr({{2, "mega_error"}}),
- TServiceTickets::TMapAliasId()));
- UNIT_ASSERT(!u.AreServicesTicketsOk());
-
- u.SetServiceTickets(MakeIntrusiveConst<TServiceTickets>(
- TServiceTickets::TMapIdStr({
- {1, "mega_ticket"},
- {2, "mega_ticket2"},
- }),
- TServiceTickets::TMapIdStr({
- {3, "mega_error3"},
- }),
- TServiceTickets::TMapAliasId()));
- UNIT_ASSERT(u.AreServicesTicketsOk());
- }
-
- Y_UNIT_TEST(IsCacheComplete_Service) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
-
- TNotInitedUpdater u(s);
- UNIT_ASSERT(!u.IsServiceContextOk());
-
- u.SetServiceContext(MakeIntrusiveConst<TServiceContext>(
- TServiceContext::CheckingFactory(100500, NUnittest::TVMKNIFE_PUBLIC_KEYS)));
- UNIT_ASSERT(u.IsServiceContextOk());
- }
-
- Y_UNIT_TEST(IsCacheComplete_User) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableUserTicketChecking(EBlackboxEnv::Test);
-
- TNotInitedUpdater u(s);
- UNIT_ASSERT(!u.IsUserContextOk());
-
- u.SetUserContext(NUnittest::TVMKNIFE_PUBLIC_KEYS);
- UNIT_ASSERT(u.IsUserContextOk());
- }
-
- Y_UNIT_TEST(TicketsOnDisk) {
- TString res = R"({
- "19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"},
- "213" : { "ticket" : "service_ticket_2"},
- "234" : { "error" : "Dst is not found" },
- "185" : { "ticket" : "service_ticket_3"},
- "deprecated" : { "ticket" : "deprecated_ticket" }
- })";
- res.append("\t100500");
-
- UNIT_ASSERT_VALUES_EQUAL(res, TNotInitedUpdater::PrepareTicketsForDisk(TVM_RESPONSE, 100500));
-
- auto pair = TNotInitedUpdater::ParseTicketsFromDisk(res);
- UNIT_ASSERT_VALUES_EQUAL(pair.first, TVM_RESPONSE);
- UNIT_ASSERT_VALUES_EQUAL(pair.second, 100500);
-
- res.push_back('a');
- UNIT_ASSERT_EXCEPTION(TNotInitedUpdater::ParseTicketsFromDisk(res), yexception);
- }
-
- Y_UNIT_TEST(IsTimeToUpdatePublicKeys) {
- NTvmApi::TClientSettings s;
- s.EnableUserTicketChecking(EBlackboxEnv::Test);
-
- TNotInitedUpdater u(s);
-
- UNIT_ASSERT(!u.IsTimeToUpdatePublicKeys(TInstant::Now()));
- UNIT_ASSERT(!u.IsTimeToUpdatePublicKeys(TInstant::Now() - TDuration::Hours(23)));
- UNIT_ASSERT(u.IsTimeToUpdatePublicKeys(TInstant::Now() - TDuration::Days(1) - TDuration::MilliSeconds(1)));
- }
-
- Y_UNIT_TEST(IsTimeToUpdateServiceTickets) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"blackbox2", 20}});
-
- TNotInitedUpdater u(s);
-
- UNIT_ASSERT(!u.IsTimeToUpdateServiceTickets(TInstant::Now() - TDuration::Minutes(59)));
- UNIT_ASSERT(u.IsTimeToUpdateServiceTickets(TInstant::Now() - TDuration::Hours(1) - TDuration::MilliSeconds(1)));
- }
-
- Y_UNIT_TEST(StartWithIncompliteCache) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", NTvmApi::TClientSettings::TDstVector({19, 20}));
- s.EnableServiceTicketChecking();
- s.EnableUserTicketChecking(EBlackboxEnv::Test);
-
- auto l = MakeIntrusive<TLogger>();
- UNIT_ASSERT_EXCEPTION_CONTAINS(TOfflineUpdater(s, l, true),
- TNonRetriableException,
- "Failed to get ServiceTicket for 20: Missing tvm_id in response, should never happend: 20");
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: Disk cache disabled. Please set disk cache directory in settings for best reliability\n"
- << "7: Response with service tickets for 2 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 2 destination(s)\n"
- << "3: Failed to get service ticket for dst=20: Missing tvm_id in response, should never happend: 20\n"
- << "6: Cache was updated with 1 service ticket(s): XXXXXXXXXXX\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- }
-
- Y_UNIT_TEST(PrepareRequestForServiceTickets) {
- const TServiceContext ctx = TServiceContext::SigningFactory("AAAAAAAAAAAAAAAAAAAAAA");
-
- TString s = TNotInitedUpdater::PrepareRequestForServiceTickets(117,
- ctx,
- {19, 20},
- NUtils::TProcInfo{
- "__some_pid__",
- "__some_pname__",
- "kar",
- },
- 100700);
- SubstGlobal(s.resize(s.size() - 5), "deb_", "");
- UNIT_ASSERT_VALUES_EQUAL("grant_type=client_credentials&src=117&dst=19,20&ts=100700&sign=XTz2Obd6PII_BHxswzWPJTjju9SrKsN6hyu1VsyxBvU&get_retry_settings=yes&_pid=__some_pid__&_procces_name=__some_pname__&lib_version=client_kar",
- s);
-
- s = TNotInitedUpdater::PrepareRequestForServiceTickets(118,
- ctx,
- {19},
- NUtils::TProcInfo{
- "__some_pid__",
- {},
- "kva_",
- },
- 100900);
- SubstGlobal(s.resize(s.size() - 5), "deb_", "");
- UNIT_ASSERT_VALUES_EQUAL("grant_type=client_credentials&src=118&dst=19&ts=100900&sign=-trBo9AtBLjp2ihy6cFAdMAQ6S9afHj23rFzYQ32jkQ&get_retry_settings=yes&_pid=__some_pid__&lib_version=client_kva_",
- s);
- }
-
- Y_UNIT_TEST(ParseTicketsFromResponse) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
-
- auto l = MakeIntrusive<TLogger>();
- TNotInitedUpdater u(s, l);
-
- TNotInitedUpdater::TPairTicketsErrors t;
- UNIT_ASSERT_EXCEPTION_CONTAINS(u.ParseTicketsFromResponse("{", NTvmApi::TDstSet{19}, t),
- yexception,
- "Invalid json from tvm-api");
-
- t = {};
- u.ParseTicketsFromResponse(TVM_RESPONSE, NTvmApi::TDstSet{19}, t);
-
- TNotInitedUpdater::TPairTicketsErrors expected{{{19, "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}}, {}};
- UNIT_ASSERT_VALUES_EQUAL("6: Disk cache disabled. Please set disk cache directory in settings for best reliability\n",
- l->Stream.Str());
- UNIT_ASSERT_EQUAL(expected, t);
-
- t = {};
- u.ParseTicketsFromResponse(TVM_RESPONSE,
- NTvmApi::TDstSet{19, 213, 234, 235},
- t);
- expected = {{{19, "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"},
- {213, "service_ticket_2"}},
- {{234, "Dst is not found"},
- {235, "Missing tvm_id in response, should never happend: 235"}}};
- UNIT_ASSERT_EQUAL(expected, t);
- UNIT_ASSERT_VALUES_EQUAL("6: Disk cache disabled. Please set disk cache directory in settings for best reliability\n",
- l->Stream.Str());
-
- t = {};
- u.ParseTicketsFromResponse(
- R"([
- {"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"},"234" : { "error" : "Dst is not found" }},
- {"213" : { "ticket" : "service_ticket_2"},"185" : { "ticket" : "service_ticket_3"}},
- {"deprecated" : { "ticket" : "deprecated_ticket" }}
- ])",
- NTvmApi::TDstSet{19, 213, 234, 235},
- t);
- expected = {{{19, "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"},
- {213, "service_ticket_2"}},
- {{234, "Dst is not found"},
- {235, "Missing tvm_id in response, should never happend: 235"}}};
- UNIT_ASSERT_EQUAL(expected, t);
- UNIT_ASSERT_VALUES_EQUAL("6: Disk cache disabled. Please set disk cache directory in settings for best reliability\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(ParseTicketsFromResponseAsArray) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
-
- auto l = MakeIntrusive<TLogger>();
- TNotInitedUpdater u(s, l);
-
- TNotInitedUpdater::TPairTicketsErrors t;
- UNIT_ASSERT_EXCEPTION_CONTAINS(u.ParseTicketsFromResponse("[", NTvmApi::TDstSet{19}, t),
- yexception,
- "Invalid json from tvm-api");
-
- u.ParseTicketsFromResponse(R"([])", NTvmApi::TDstSet{19}, t);
- UNIT_ASSERT_VALUES_EQUAL("6: Disk cache disabled. Please set disk cache directory in settings for best reliability\n",
- l->Stream.Str());
- TNotInitedUpdater::TPairTicketsErrors expected = {
- {}, {{19, "Missing tvm_id in response, should never happend: 19"}}};
- UNIT_ASSERT_VALUES_EQUAL(expected, t);
- l->Stream.Clear();
-
- t = {};
- u.ParseTicketsFromResponse(
- R"([{},{"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}}, {"213" : { "ticket" : "service_ticket_2"}}])",
- NTvmApi::TDstSet{19},
- t);
- UNIT_ASSERT_VALUES_EQUAL("", l->Stream.Str());
- expected = {{{19, "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}}, {}};
- UNIT_ASSERT_EQUAL(expected, t);
-
- t = {};
- u.ParseTicketsFromResponse(
- R"([{
- "19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}
- },
- {
- "213" : { "ticket" : "service_ticket_2"},
- "234" : { "error" : "Dst is not found" }
- },
- {
- "185" : { "ticket" : "service_ticket_3"},
- "deprecated" : { "ticket" : "deprecated_ticket" }
- }
- ])",
- NTvmApi::TDstSet{19, 213, 234, 235},
- t);
- expected = {{{19, "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"},
- {213, "service_ticket_2"}},
- {{234, "Dst is not found"},
- {235, "Missing tvm_id in response, should never happend: 235"}}};
- UNIT_ASSERT_EQUAL(expected, t);
- UNIT_ASSERT_VALUES_EQUAL("", l->Stream.Str());
- }
-
- class TReplier: public TRequestReplier {
- public:
- HttpCodes Code = HTTP_OK;
-
- bool DoReply(const TReplyParams& params) override {
- TParsedHttpFull fl(params.Input.FirstLine());
-
- THttpResponse resp(Code);
- if (fl.Path == "/2/keys") {
- resp.SetContent(NUnittest::TVMKNIFE_PUBLIC_KEYS);
- } else if (fl.Path == "/2/ticket") {
- resp.SetContent(TVM_RESPONSE);
- } else {
- UNIT_ASSERT(false);
- }
- resp.OutTo(params.Output);
-
- return true;
- }
- };
-
- class TOnlineUpdater: public NTvmApi::TThreadedUpdater {
- public:
- TOnlineUpdater(const NTvmApi::TClientSettings& settings, TIntrusivePtr<TLogger> l)
- : NTvmApi::TThreadedUpdater(settings, l)
- {
- Init();
- ExpBackoff_.SetEnabled(false);
- StartWorker();
- }
- };
-
- Y_UNIT_TEST(MocServerOk) {
- TPortManager pm;
- ui16 tvmPort = pm.GetPort(80);
- NMock::TMockServer server(tvmPort, []() { return new TReplier; });
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.EnableServiceTicketChecking();
- s.EnableUserTicketChecking(EBlackboxEnv::Test);
- s.SetTvmHostPort("http://localhost", tvmPort);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOnlineUpdater u(s, l);
- UNIT_ASSERT_VALUES_EQUAL_C(TClientStatus::Ok, u.GetStatus(), l->Stream.Str());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: Disk cache disabled. Please set disk cache directory in settings for best reliability\n"
- << "7: Response with service tickets for 1 destination(s) was successfully fetched from http://localhost\n"
- << "7: Got responses with service tickets with 1 pages for 1 destination(s)\n"
- << "6: Cache was updated with 1 service ticket(s): XXXXXXXXXXX\n"
- << "7: Public keys were successfully fetched from http://localhost\n"
- << "6: Cache was updated with public keys: XXXXXXXXXXX\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- }
-
- Y_UNIT_TEST(MocServerBad) {
- TPortManager pm;
- ui16 tvmPort = pm.GetPort(80);
- NMock::TMockServer server(tvmPort,
- []() {
- auto p = new TReplier;
- p->Code = HTTP_BAD_REQUEST;
- return p;
- });
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.EnableServiceTicketChecking();
- s.EnableUserTicketChecking(EBlackboxEnv::Test);
- s.SetTvmHostPort("localhost", tvmPort);
-
- auto l = MakeIntrusive<TLogger>();
- UNIT_ASSERT_EXCEPTION_CONTAINS_C(TOnlineUpdater(s, l),
- TNonRetriableException,
- "Failed to start TvmClient. Do not retry: ServiceTickets: Path:/2/ticket.Code=400:",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(MocServerPaginated) {
- class TReplier: public TRequestReplier {
- public:
- TString Response;
- TReplier(TString response)
- : Response(response)
- {
- }
-
- bool DoReply(const TReplyParams& params) override {
- TParsedHttpFull fl(params.Input.FirstLine());
- if (fl.Path != "/2/ticket") {
- UNIT_ASSERT_C(false, fl.Path);
- }
-
- THttpResponse resp(HTTP_OK);
- resp.SetContent(Response);
- resp.OutTo(params.Output);
- return true;
- }
- };
-
- TPortManager pm;
- ui16 tvmPort = pm.GetPort(80);
- TVector<TString> responses = {
- R"({"15" : { "ticket" : "service_ticket_3" },"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})",
- R"({"222" : { "ticket" : "service_ticket_2"}, "239" : { "error" : "Dst is not found" }})",
- R"({"185" : { "ticket" : "service_ticket_3"}})",
- };
- NMock::TMockServer server(tvmPort, [&responses]() {
- if (responses.empty()) {
- return new TReplier("<NULL>");
- }
- TString r = responses.front();
- responses.erase(responses.begin());
- return new TReplier(r);
- });
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", NTvmApi::TClientSettings::TDstVector{19, 222, 239, 100500, 15});
- s.SetTvmHostPort("http://localhost", tvmPort);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TNotInitedUpdater u(s, l);
- TNotInitedUpdater::THttpResult result = u.GetServiceTicketsFromHttp(NTvmApi::TDstSet{19, 222, 239, 100500, 15}, 2);
- UNIT_ASSERT_VALUES_EQUAL(TSmallVec<TString>({
- R"({"15" : { "ticket" : "service_ticket_3" },"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})",
- R"({"222" : { "ticket" : "service_ticket_2"}, "239" : { "error" : "Dst is not found" }})",
- R"({"185" : { "ticket" : "service_ticket_3"}})",
- }),
- result.Responses);
- TNotInitedUpdater::TPairTicketsErrors expected{
- {
- {19, "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"},
- {222, "service_ticket_2"},
- {15, "service_ticket_3"},
- },
- {
- {239, "Dst is not found"},
- {100500, "Missing tvm_id in response, should never happend: 100500"},
- },
- };
- UNIT_ASSERT_VALUES_EQUAL(expected, result.TicketsWithErrors);
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: Disk cache disabled. Please set disk cache directory in settings for best reliability\n"
- << "7: Response with service tickets for 2 destination(s) was successfully fetched from http://localhost\n"
- << "7: Response with service tickets for 2 destination(s) was successfully fetched from http://localhost\n"
- << "7: Response with service tickets for 1 destination(s) was successfully fetched from http://localhost\n"
- << "7: Got responses with service tickets with 3 pages for 5 destination(s)\n"
- << "3: Failed to get service ticket for dst=100500: Missing tvm_id in response, should never happend: 100500\n"
- << "3: Failed to get service ticket for dst=239: Dst is not found\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(FindMissingDsts) {
- UNIT_ASSERT_VALUES_EQUAL(NTvmApi::TClientSettings::TDstVector({6, 9}),
- TNotInitedUpdater::FindMissingDsts({1, 2, 3, 4}, {1, 4, 6, 9}));
- UNIT_ASSERT_VALUES_EQUAL(NTvmApi::TClientSettings::TDstVector(),
- TNotInitedUpdater::FindMissingDsts({1, 2, 3, 4, 5, 6, 7, 8, 9}, {1, 4, 6, 9}));
- UNIT_ASSERT_VALUES_EQUAL(NTvmApi::TClientSettings::TDstVector({1, 4, 6, 9}),
- TNotInitedUpdater::FindMissingDsts(NTvmApi::TDstSet(), {1, 4, 6, 9}));
- UNIT_ASSERT_VALUES_EQUAL(NTvmApi::TClientSettings::TDstVector(1, 19),
- TNotInitedUpdater::FindMissingDsts({213}, {19, 213}));
-
- auto make = [](TVector<int> ids) {
- TServiceTickets::TMapIdStr m;
- for (auto i : ids) {
- m.insert({i, ""});
- }
- return MakeIntrusiveConst<TServiceTickets>(std::move(m), TServiceTickets::TMapIdStr{}, TServiceTickets::TMapAliasId{});
- };
-
- UNIT_ASSERT_VALUES_EQUAL(NTvmApi::TClientSettings::TDstVector({6, 9}),
- TNotInitedUpdater::FindMissingDsts(make({1, 2, 3, 4}), {1, 4, 6, 9}));
- UNIT_ASSERT_VALUES_EQUAL(NTvmApi::TClientSettings::TDstVector(),
- TNotInitedUpdater::FindMissingDsts(make({1, 2, 3, 4, 5, 6, 7, 8, 9}), {1, 4, 6, 9}));
- UNIT_ASSERT_VALUES_EQUAL(NTvmApi::TClientSettings::TDstVector({1, 4, 6, 9}),
- TNotInitedUpdater::FindMissingDsts(make({}), {1, 4, 6, 9}));
- UNIT_ASSERT_VALUES_EQUAL(NTvmApi::TClientSettings::TDstVector(1, 19),
- TNotInitedUpdater::FindMissingDsts(make({213}), {19, 213}));
- }
-
- Y_UNIT_TEST(CreateJsonArray) {
- UNIT_ASSERT_VALUES_EQUAL("[]", TNotInitedUpdater::CreateJsonArray({}));
- UNIT_ASSERT_VALUES_EQUAL("[sdlzkjvbsdljhfbsdajlhfbsakjdfb]",
- TNotInitedUpdater::CreateJsonArray({"sdlzkjvbsdljhfbsdajlhfbsakjdfb"}));
- UNIT_ASSERT_VALUES_EQUAL("[sdlzkjvbsdljhfbsdajlhfbsakjdfb,o92q83yh2uhq2eri23r]",
- TNotInitedUpdater::CreateJsonArray({"sdlzkjvbsdljhfbsdajlhfbsakjdfb",
- "o92q83yh2uhq2eri23r"}));
- }
-
- Y_UNIT_TEST(AppendArrayToJson) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(TNotInitedUpdater::AppendToJsonArray("", {}),
- yexception,
- "previous body required");
- UNIT_ASSERT_EXCEPTION_CONTAINS(TNotInitedUpdater::AppendToJsonArray("[kek", {}),
- yexception,
- "array is broken:");
-
- UNIT_ASSERT_VALUES_EQUAL("[kek]", TNotInitedUpdater::AppendToJsonArray("kek", {}));
-
- UNIT_ASSERT_VALUES_EQUAL(
- "[kek,sdlzkjvbsdljhfbsdajlhfbsakjdfb]",
- TNotInitedUpdater::AppendToJsonArray("kek",
- {"sdlzkjvbsdljhfbsdajlhfbsakjdfb"}));
- UNIT_ASSERT_VALUES_EQUAL(
- "[kek,sdlzkjvbsdljhfbsdajlhfbsakjdfb,o92q83yh2uhq2eri23r]",
- TNotInitedUpdater::AppendToJsonArray("kek",
- {"sdlzkjvbsdljhfbsdajlhfbsakjdfb", "o92q83yh2uhq2eri23r"}));
-
- UNIT_ASSERT_VALUES_EQUAL(
- "[kek,sdlzkjvbsdljhfbsdajlhfbsakjdfb]",
- TNotInitedUpdater::AppendToJsonArray("[kek]",
- {"sdlzkjvbsdljhfbsdajlhfbsakjdfb"}));
- UNIT_ASSERT_VALUES_EQUAL(
- "[kek,sdlzkjvbsdljhfbsdajlhfbsakjdfb,o92q83yh2uhq2eri23r]",
- TNotInitedUpdater::AppendToJsonArray("[kek]",
- {"sdlzkjvbsdljhfbsdajlhfbsakjdfb", "o92q83yh2uhq2eri23r"}));
- }
-
- Y_UNIT_TEST(UpdaterTimeouts) {
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketChecking();
- s.TvmHost = "localhost";
- s.TvmPort = GetRandomPort();
- const auto timeout = TDuration::MilliSeconds(10);
- s.TvmConnectTimeout = timeout;
- s.TvmSocketTimeout = timeout;
-
- {
- auto l = MakeIntrusive<TLogger>();
- auto startTs = ::Now();
- UNIT_ASSERT_EXCEPTION(NTvmApi::TThreadedUpdater::Create(s, l), yexception);
- UNIT_ASSERT_LT(::Now() - startTs, timeout * 2);
- }
- }
-}
-
-template <>
-void Out<TSmallVec<TString>>(IOutputStream& out, const TSmallVec<TString>& m) {
- for (const TString& s : m) {
- out << s << ";";
- }
-}
-
-template <>
-void Out<TServiceTickets::TMapIdStr>(
- IOutputStream& out,
- const TServiceTickets::TMapIdStr& m) {
- for (const auto& pair : m) {
- out << pair.first << " -> " << pair.second << ";";
- }
-}
-
-template <>
-void Out<NTestSuiteApiUpdater::TNotInitedUpdater::TPairTicketsErrors>(
- IOutputStream& out,
- const NTestSuiteApiUpdater::TNotInitedUpdater::TPairTicketsErrors& m) {
- out << m.Tickets << "\n";
- out << m.Errors << "\n";
-}
-
-template <>
-void Out<NTvmAuth::NTvmApi::TClientSettings::TDst>(IOutputStream& out, const NTvmAuth::NTvmApi::TClientSettings::TDst& m) {
- out << m.Id;
-}
diff --git a/library/cpp/tvmauth/client/ut/tvmtool_updater_ut.cpp b/library/cpp/tvmauth/client/ut/tvmtool_updater_ut.cpp
deleted file mode 100644
index 9435b46b38d..00000000000
--- a/library/cpp/tvmauth/client/ut/tvmtool_updater_ut.cpp
+++ /dev/null
@@ -1,756 +0,0 @@
-#include "common.h"
-
-#include <library/cpp/tvmauth/client/facade.h>
-#include <library/cpp/tvmauth/client/misc/tool/threaded_updater.h>
-
-#include <library/cpp/http/simple/http_client.h>
-#include <library/cpp/testing/unittest/registar.h>
-
-#include <util/system/env.h>
-
-using namespace NTvmAuth;
-using namespace NTvmAuth::NTvmTool;
-
-Y_UNIT_TEST_SUITE(ToolUpdater) {
- static const TString SRV_TICKET = "3:serv:CBAQ__________9_IgYIexCUkQY:GioCM49Ob6_f80y6FY0XBVN4hLXuMlFeyMvIMiDuQnZkbkLpRpQOuQo5YjWoBjM0Vf-XqOm8B7xtrvxSYHDD7Q4OatN2l-Iwg7i71lE3scUeD36x47st3nd0OThvtjrFx_D8mw_c0GT5KcniZlqq1SjhLyAk1b_zJsx8viRAhCU";
- static const TString SRV_TICKET_DST_100503 = "3:serv:CBAQ__________9_IggIwMQHEJeRBg:Kj7VApP6D91UJ8pKpeaE3vYaNTBBJcdYpJLbF9w2-Mb-75s_SmMKkPqqA2rMS358uFfoYpv9YZxq0tIaUj5HPQ1WaQ1yiVuPZ_oi3pJRdr006eRyihM8PUfl6m9ioCFftfOcAg9oN5BGeHTNhn7VWuj3yMg7feaMB0zAUpyaPG0";
- static const TString TEST_TICKET = "3:user:CA0Q__________9_Gg4KAgh7EHsg0oXYzAQoAQ:FSADps3wNGm92Vyb1E9IVq5M6ZygdGdt1vafWWEhfDDeCLoVA-sJesxMl2pGW4OxJ8J1r_MfpG3ZoBk8rLVMHUFrPa6HheTbeXFAWl8quEniauXvKQe4VyrpA1SPgtRoFqi5upSDIJzEAe1YRJjq1EClQ_slMt8R0kA_JjKUX54";
- static const TString PROD_YATEAM_TICKET = "3:user:CAwQ__________9_Gg4KAgh7EHsg0oXYzAQoAg:G2wloFRSi8--RLb2GDSro_sKXPF2JSdL5CVOuOHgUcRvLm-3OxIPn0NUqbJ9DWDmhPplOqEiblIbLK85My1VMJ2aG5SLbRNKEtwfmxLvkwNpl_gUEwWPJm9_8Khslfj71P3hccxtEEqM9bJSMwHueVAY-a9HSzFo-uMFMeSgQ-k";
-
- class TMetaInfoProxy: public TMetaInfo {
- public:
- using TMetaInfo::ApplySettings;
- using TMetaInfo::BbEnvFromString;
- using TMetaInfo::Config_;
- using TMetaInfo::Fetch;
- using TMetaInfo::ParseMetaString;
- using TMetaInfo::TMetaInfo;
- };
-
- Y_UNIT_TEST(Settings) {
- NTvmTool::TClientSettings s("foo");
- UNIT_ASSERT_EXCEPTION_CONTAINS(s.SetAuthToken("\n "),
- TBrokenTvmClientSettings,
- "Auth token cannot be empty");
- UNIT_ASSERT_EXCEPTION_CONTAINS(s.GetAuthToken(),
- TBrokenTvmClientSettings,
- "Auth token cannot be empty. Env 'TVMTOOL_LOCAL_AUTHTOKEN' and 'QLOUD_TVM_TOKEN' are empty.");
-
- UNIT_ASSERT_NO_EXCEPTION(s.SetAuthToken(AUTH_TOKEN + "\n"));
- UNIT_ASSERT_VALUES_EQUAL(AUTH_TOKEN, s.GetAuthToken());
-
- UNIT_ASSERT_VALUES_EQUAL("localhost", s.GetHostname());
- UNIT_ASSERT_EXCEPTION_CONTAINS(s.SetHostname(""),
- TBrokenTvmClientSettings,
- "Hostname cannot be empty");
-
- UNIT_ASSERT_NO_EXCEPTION(s.SetHostname("qwe"));
- UNIT_ASSERT_VALUES_EQUAL("qwe", s.GetHostname());
- }
-
- Y_UNIT_TEST(SettingsCtor) {
- UNIT_ASSERT_EXCEPTION_CONTAINS(NTvmTool::TClientSettings(""),
- TBrokenTvmClientSettings,
- "Alias for your TVM client cannot be empty");
- {
- NTvmTool::TClientSettings s("self");
- UNIT_ASSERT_EXCEPTION_CONTAINS(s.GetAuthToken(),
- TBrokenTvmClientSettings,
- "Auth token cannot be empty. "
- "Env 'TVMTOOL_LOCAL_AUTHTOKEN' and 'QLOUD_TVM_TOKEN' are empty.");
- }
-
- struct TEnvs {
- TEnvs(const std::map<TString, TString>& Env) {
- for (const auto& [key, value] : Env) {
- Prev[key] = GetEnv(key);
- SetEnv(key, value);
- }
- }
-
- ~TEnvs() {
- for (const auto& [key, value] : Prev) {
- SetEnv(key, value);
- }
- }
-
- std::map<TString, TString> Prev;
- };
-
- struct TCase {
- std::map<TString, TString> Env;
- TString AuthToken;
- ui16 Port = 0;
- };
-
- std::vector<TCase> cases = {
- {
- {
- {"TVMTOOL_LOCAL_AUTHTOKEN", "qwerty"},
- },
- "qwerty",
- 1,
- },
- {
- {
- {"TVMTOOL_LOCAL_AUTHTOKEN", "qwerty"},
- {"QLOUD_TVM_TOKEN", "zxcvbn"},
- },
- "qwerty",
- 1,
- },
- {
- {
- {"QLOUD_TVM_TOKEN", "zxcvbn"},
- },
- "zxcvbn",
- 1,
- },
- {
- {
- {"TVMTOOL_LOCAL_AUTHTOKEN", "qwerty"},
- {"DEPLOY_TVM_TOOL_URL", "32272"},
- },
- "qwerty",
- 1,
- },
- {
- {
- {"TVMTOOL_LOCAL_AUTHTOKEN", "qwerty"},
- {"DEPLOY_TVM_TOOL_URL", "localhost:32272"},
- },
- "qwerty",
- 32272,
- },
- {
- {
- {"TVMTOOL_LOCAL_AUTHTOKEN", "qwerty"},
- {"DEPLOY_TVM_TOOL_URL", "http://localhost:32272"},
- },
- "qwerty",
- 32272,
- },
- };
-
- for (const TCase& c : cases) {
- TEnvs envs(c.Env);
-
- NTvmTool::TClientSettings s("self");
- UNIT_ASSERT_VALUES_EQUAL(c.AuthToken, s.GetAuthToken());
- UNIT_ASSERT_VALUES_EQUAL(c.Port, s.GetPort());
- }
- }
-
- Y_UNIT_TEST(Meta_Fetch) {
- TPortManager pm;
- ui16 port = pm.GetPort(80);
- NMock::TMockServer server(port, []() { return new TTvmTool; });
- TKeepAliveHttpClient client("localhost", port);
-
- TMetaInfoProxy m(nullptr);
- NTvmTool::TClientSettings settings("me");
- settings.SetAuthToken(AUTH_TOKEN);
- m.ApplySettings(settings);
-
- UNIT_ASSERT_VALUES_EQUAL(META, m.Fetch(client));
-
- settings.SetAuthToken("qwerty");
- m.ApplySettings(settings);
- UNIT_ASSERT_EXCEPTION_CONTAINS(m.Fetch(client),
- TNonRetriableException,
- "Failed to fetch meta from tvmtool: localhost:");
-
- settings.SetAuthToken(AUTH_TOKEN);
- m.ApplySettings(settings);
- {
- TKeepAliveHttpClient client("localhost", 0);
- UNIT_ASSERT_EXCEPTION_CONTAINS(m.Fetch(client),
- TRetriableException,
- "Failed to fetch meta data from tvmtool: ");
- }
-
- server.SetGenerator([]() {
- auto p = new TTvmTool;
- p->Code = HTTP_NOT_FOUND;
- return p; });
- UNIT_ASSERT_EXCEPTION_CONTAINS(m.Fetch(client),
- TNonRetriableException,
- "Library does not support so old tvmtool. You need tvmtool>=1.1.0");
- server.SetGenerator([]() {
- auto p = new TTvmTool;
- p->Code = HTTP_INTERNAL_SERVER_ERROR;
- return p; });
- UNIT_ASSERT_EXCEPTION_CONTAINS(m.Fetch(client),
- TRetriableException,
- "Failed to fetch meta from tvmtool: localhost:");
- }
-
- Y_UNIT_TEST(Meta_ParseMetaString_me) {
- TMetaInfo::TConfigPtr c;
- UNIT_ASSERT(c = TMetaInfoProxy::ParseMetaString(META, "me"));
- UNIT_ASSERT_VALUES_EQUAL(100500, c->SelfTvmId);
- UNIT_ASSERT_EQUAL(EBlackboxEnv::ProdYateam, c->BbEnv);
- UNIT_ASSERT_VALUES_EQUAL("", c->IdmSlug);
- UNIT_ASSERT_EQUAL(TMetaInfo::TDstAliases({{"bbox", 242}, {"pass_likers", 11}}), c->DstAliases);
- }
-
- Y_UNIT_TEST(Meta_ParseMetaString_tenant_with_roles) {
- TMetaInfo::TConfigPtr c;
- UNIT_ASSERT(c = TMetaInfoProxy::ParseMetaString(META, "tenant_with_roles"));
- UNIT_ASSERT_VALUES_EQUAL(100500, c->SelfTvmId);
- UNIT_ASSERT_VALUES_EQUAL(EBlackboxEnv::ProdYateam, c->BbEnv);
- UNIT_ASSERT_VALUES_EQUAL("some_slug", c->IdmSlug);
- UNIT_ASSERT_VALUES_EQUAL(TMetaInfo::TDstAliases(), c->DstAliases);
- }
-
- Y_UNIT_TEST(Meta_ParseMetaString_pc) {
- TMetaInfo::TConfigPtr c;
- UNIT_ASSERT(c = TMetaInfoProxy::ParseMetaString(META, "push-client"));
- UNIT_ASSERT_VALUES_EQUAL(100501, c->SelfTvmId);
- UNIT_ASSERT_EQUAL(EBlackboxEnv::ProdYateam, c->BbEnv);
- UNIT_ASSERT_VALUES_EQUAL("", c->IdmSlug);
- UNIT_ASSERT_EQUAL(TMetaInfo::TDstAliases({{"pass_likers", 100502}}), c->DstAliases);
- }
-
- Y_UNIT_TEST(Meta_ParseMetaString_se) {
- TMetaInfo::TConfigPtr c;
- UNIT_ASSERT(c = TMetaInfoProxy::ParseMetaString(META, "something_else"));
- UNIT_ASSERT_VALUES_EQUAL(100503, c->SelfTvmId);
- UNIT_ASSERT_EQUAL(EBlackboxEnv::ProdYateam, c->BbEnv);
- UNIT_ASSERT_VALUES_EQUAL("", c->IdmSlug);
- UNIT_ASSERT(c->DstAliases.empty());
- }
-
- Y_UNIT_TEST(Meta_ParseMetaString_errors) {
- TMetaInfoProxy m(nullptr);
- UNIT_ASSERT(!m.ParseMetaString(META, "ololo"));
-
- TString meta = "}";
- UNIT_ASSERT_EXCEPTION_CONTAINS(m.ParseMetaString(meta, "qqq"), yexception, meta);
- meta = "{}";
- UNIT_ASSERT_EXCEPTION_CONTAINS(m.ParseMetaString(meta, "qqq"), yexception, meta);
- meta = R"({"tenants" : {}})";
- UNIT_ASSERT_EXCEPTION_CONTAINS(m.ParseMetaString(meta, "qqq"), yexception, meta);
- meta = R"({"tenants" : [{"self":{}}]})";
- UNIT_ASSERT_EXCEPTION_CONTAINS(m.ParseMetaString(meta, "qqq"), yexception, meta);
- }
-
- Y_UNIT_TEST(Meta_BbEnvFromString) {
- UNIT_ASSERT_VALUES_EQUAL(EBlackboxEnv::Prod, TMetaInfoProxy::BbEnvFromString("Prod", META));
- UNIT_ASSERT_VALUES_EQUAL(EBlackboxEnv::Test, TMetaInfoProxy::BbEnvFromString("Test", META));
- UNIT_ASSERT_VALUES_EQUAL(EBlackboxEnv::ProdYateam, TMetaInfoProxy::BbEnvFromString("ProdYaTeam", META));
- UNIT_ASSERT_VALUES_EQUAL(EBlackboxEnv::TestYateam, TMetaInfoProxy::BbEnvFromString("TestYaTeam", META));
- UNIT_ASSERT_VALUES_EQUAL(EBlackboxEnv::Stress, TMetaInfoProxy::BbEnvFromString("Stress", META));
- UNIT_ASSERT_EXCEPTION_CONTAINS(TMetaInfoProxy::BbEnvFromString("foo", META),
- yexception,
- "'bb_env'=='foo'");
- }
-
- Y_UNIT_TEST(Meta_ApplySettings) {
- NTvmTool::TClientSettings s("foo");
- s.SetAuthToken(AUTH_TOKEN);
-
- TMetaInfoProxy m(nullptr);
- m.ApplySettings(s);
-
- UNIT_ASSERT_VALUES_EQUAL(
- TKeepAliveHttpClient::THeaders({{"Authorization", AUTH_TOKEN}}),
- m.GetAuthHeader());
- }
-
- Y_UNIT_TEST(Meta_Init) {
- TPortManager pm;
- ui16 port = pm.GetPort(80);
- NMock::TMockServer server(port, []() { return new TTvmTool; });
- TKeepAliveHttpClient client("localhost", port);
-
- NTvmTool::TClientSettings s("me");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(port);
- auto l = MakeIntrusive<TLogger>();
- TMetaInfo m(l);
- UNIT_ASSERT_NO_EXCEPTION(m.Init(client, s));
- UNIT_ASSERT_VALUES_EQUAL(100500, m.GetConfig()->SelfTvmId);
- UNIT_ASSERT_EQUAL(EBlackboxEnv::ProdYateam, m.GetConfig()->BbEnv);
- UNIT_ASSERT_EQUAL(TMetaInfo::TDstAliases({{"bbox", 242}, {"pass_likers", 11}}), m.GetConfig()->DstAliases);
- UNIT_ASSERT_VALUES_EQUAL(TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]\n",
- l->Stream.Str());
- l->Stream.Clear();
- UNIT_ASSERT_VALUES_EQUAL(
- "/tvm/tickets?src=100500&dsts=11,242",
- TMetaInfo::GetRequestForTickets(*m.GetConfig()));
-
- server.SetGenerator([]() {
- auto p = new TTvmTool;
- p->Meta = R"({
- "bb_env" : "Prod",
- "tenants" : [{
- "self": {"alias" : "me", "client_id": 100500},
- "dsts" : [{"alias" : "pass_likers","client_id": 11}]
- }]
- })";
- return p; });
- UNIT_ASSERT(m.TryUpdateConfig(client));
- UNIT_ASSERT_VALUES_EQUAL(
- "6: Meta was updated. Old: (self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]). New: (self_tvm_id=100500, bb_env=Prod, idm_slug=<NULL>, dsts=[(pass_likers:11)])\n",
- l->Stream.Str());
- l->Stream.clear();
-
- s = NTvmTool::TClientSettings("foo");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(port);
- TMetaInfo m2(l);
- UNIT_ASSERT_EXCEPTION_CONTAINS(m2.Init(client, s), TNonRetriableException, "Alias 'foo' not found in meta info");
- UNIT_ASSERT_VALUES_EQUAL(TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n",
- l->Stream.Str());
- UNIT_ASSERT_EXCEPTION_CONTAINS(TMetaInfo::GetRequestForTickets({}),
- yexception,
- "DstAliases.empty()");
-
- server.SetGenerator([]() {
- auto p = new TTvmTool;
- p->Meta = "}";
- return p; });
- UNIT_ASSERT_EXCEPTION_CONTAINS(m.Init(client, s),
- TNonRetriableException,
- "Malformed json from tvmtool:");
- }
-
- class TNonInitedUpdater: public TThreadedUpdater {
- public:
- TNonInitedUpdater(const TString& host, ui16 port, TLoggerPtr logger)
- : TThreadedUpdater(host, port, TDuration::Seconds(5), TDuration::Seconds(30), logger)
- {
- }
-
- using TThreadedUpdater::ArePublicKeysOk;
- using TThreadedUpdater::AreServiceTicketsOk;
- using TThreadedUpdater::FetchPublicKeys;
- using TThreadedUpdater::FetchServiceTickets;
- using TThreadedUpdater::GetBirthTimeFromResponse;
- using TThreadedUpdater::Init;
- using TThreadedUpdater::IsTimeToUpdatePublicKeys;
- using TThreadedUpdater::IsTimeToUpdateServiceTickets;
- using TThreadedUpdater::LastVisitForConfig_;
- using TThreadedUpdater::MetaInfo_;
- using TThreadedUpdater::ParseFetchTicketsResponse;
- using TThreadedUpdater::SetBbEnv;
- using TThreadedUpdater::SetServiceContext;
- using TThreadedUpdater::SetServiceTickets;
- using TThreadedUpdater::SetUpdateTimeOfPublicKeys;
- using TThreadedUpdater::SetUpdateTimeOfServiceTickets;
- using TThreadedUpdater::SetUserContext;
- using TThreadedUpdater::TPairTicketsErrors;
- using TThreadedUpdater::UpdateKeys;
- using TThreadedUpdater::UpdateServiceTickets;
- };
-
- Y_UNIT_TEST(GetBirthTimeFromResponse) {
- THttpHeaders h;
- UNIT_ASSERT_EXCEPTION_CONTAINS(TNonInitedUpdater::GetBirthTimeFromResponse(h, "ololo"),
- yexception,
- "Failed to fetch bithtime of ololo from tvmtool");
-
- h.AddHeader(THttpInputHeader("X-Ya-Tvmtool-Data-Birthtime: qwe"));
- UNIT_ASSERT_EXCEPTION_CONTAINS(TNonInitedUpdater::GetBirthTimeFromResponse(h, "ololo"),
- yexception,
- "Bithtime of ololo from tvmtool must be unixtime. Got: qwe");
-
- h.AddOrReplaceHeader(THttpInputHeader("X-Ya-Tvmtool-Data-Birthtime: 123"));
- UNIT_ASSERT_VALUES_EQUAL(TInstant::Seconds(123), TNonInitedUpdater::GetBirthTimeFromResponse(h, "ololo"));
- }
-
- Y_UNIT_TEST(Fetch) {
- TPortManager pm;
- ui16 port = pm.GetPort(80);
- NMock::TMockServer server(port, []() { return new TTvmTool; });
- TKeepAliveHttpClient client("localhost", port);
-
- auto l = MakeIntrusive<TLogger>();
- TNonInitedUpdater u("localhost", port, l);
- NTvmTool::TClientSettings s("me");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(port);
- u.MetaInfo_.Init(client, s);
- auto p = u.FetchPublicKeys();
- UNIT_ASSERT_STRINGS_EQUAL(NUnittest::TVMKNIFE_PUBLIC_KEYS, p.first);
- UNIT_ASSERT_VALUES_EQUAL(BIRTHTIME, p.second);
-
- auto p2 = u.FetchServiceTickets(*u.MetaInfo_.GetConfig());
- UNIT_ASSERT_STRINGS_EQUAL(TICKETS_ME, p2.first);
- UNIT_ASSERT_VALUES_EQUAL(BIRTHTIME, p2.second);
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(ParseFetchTicketsResponse) {
- auto l = MakeIntrusive<TLogger>();
- TNonInitedUpdater u("", 0, l);
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(u.ParseFetchTicketsResponse("}", {}),
- yexception,
- "Invalid json from tvmtool: }");
-
- auto t = u.ParseFetchTicketsResponse(TICKETS_ME, {{"pass_likers", 11}, {"se", 2}});
- auto expected = TNonInitedUpdater::TPairTicketsErrors{
- {{11, "3:serv:CBAQ__________9_IgYIlJEGEAs:T-apeMNWFc_vHPQ3iLaZv9NjG-hf5-i23O4AhRu1M68ryN3FU5qvyqTSSiPbtJdFP6EE41QQBzEs59dHn9DRkqQNwwKf1is00Oewwj2XKO0uHukuzd9XxZnro7MfjPswsjWufxX28rmJtlfSXwAtyKt8TI5yKJnMeBPQ0m5R3k8"}},
- {
- {2, "Missing tvm_id in response, should never happend: se"},
- },
- };
- UNIT_ASSERT_VALUES_EQUAL(expected, t);
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "3: Failed to get ServiceTicket for se (2): Missing tvm_id in response, should never happend: se\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(Update) {
- TPortManager pm;
- ui16 port = pm.GetPort(80);
- NMock::TMockServer server(port, []() { return new TTvmTool; });
- TKeepAliveHttpClient client("localhost", port);
-
- auto l = MakeIntrusive<TLogger>();
- TNonInitedUpdater u("localhost", port, l);
- NTvmTool::TClientSettings s("me");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(port);
- u.MetaInfo_.Init(client, s);
-
- using TTickets = TServiceTickets::TMapAliasStr;
- UNIT_ASSERT(!u.GetCachedServiceTickets());
- UNIT_ASSERT_VALUES_EQUAL(BIRTHTIME, u.UpdateServiceTickets(*u.MetaInfo_.GetConfig()));
- UNIT_ASSERT(u.GetCachedServiceTickets());
- UNIT_ASSERT_VALUES_EQUAL(TInstant(), u.GetUpdateTimeOfServiceTickets());
- UNIT_ASSERT_EQUAL(
- TTickets({
- {"bbox", "3:serv:CBAQ__________9_IgcIlJEGEPIB:N7luw0_rVmBosTTI130jwDbQd0-cMmqJeEl0ma4ZlIo_mHXjBzpOuMQ3A9YagbmOBOt8TZ_gzGvVSegWZkEeB24gM22acw0w-RcHaQKrzSOA5Zq8WLNIC8QUa4_WGTlAsb7R7eC4KTAGgouIquNAgMBdTuGOuZHnMLvZyLnOMKc"},
- {"pass_likers", "3:serv:CBAQ__________9_IgYIlJEGEAs:T-apeMNWFc_vHPQ3iLaZv9NjG-hf5-i23O4AhRu1M68ryN3FU5qvyqTSSiPbtJdFP6EE41QQBzEs59dHn9DRkqQNwwKf1is00Oewwj2XKO0uHukuzd9XxZnro7MfjPswsjWufxX28rmJtlfSXwAtyKt8TI5yKJnMeBPQ0m5R3k8"},
- }),
- u.GetCachedServiceTickets()->TicketsByAlias);
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]\n",
- l->Stream.Str());
- l->Stream.Clear();
-
- UNIT_ASSERT(!u.GetCachedServiceContext());
- UNIT_ASSERT(!u.GetCachedUserContext());
- UNIT_ASSERT_VALUES_EQUAL(BIRTHTIME, u.UpdateKeys(*u.MetaInfo_.GetConfig()));
- UNIT_ASSERT(u.GetCachedServiceContext());
- UNIT_ASSERT(!u.GetCachedUserContext());
- u.SetBbEnv(EBlackboxEnv::Test);
- UNIT_ASSERT(u.GetCachedUserContext());
- UNIT_ASSERT_VALUES_EQUAL("", l->Stream.Str());
- l->Stream.Clear();
-
- {
- TAsyncUpdaterPtr u = TThreadedUpdater::Create(s, l);
- UNIT_ASSERT(u->GetCachedServiceTickets());
- UNIT_ASSERT(u->GetCachedServiceContext());
- UNIT_ASSERT(u->GetCachedUserContext());
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus());
-
- NTvmAuth::TTvmClient c(u);
- UNIT_ASSERT(c.CheckServiceTicket(SRV_TICKET));
- UNIT_ASSERT(!c.CheckServiceTicket(SRV_TICKET_DST_100503));
- UNIT_ASSERT(c.CheckUserTicket(PROD_YATEAM_TICKET));
- UNIT_ASSERT_VALUES_EQUAL("3:serv:CBAQ__________9_IgYIlJEGEAs:T-apeMNWFc_vHPQ3iLaZv9NjG-hf5-i23O4AhRu1M68ryN3FU5qvyqTSSiPbtJdFP6EE41QQBzEs59dHn9DRkqQNwwKf1is00Oewwj2XKO0uHukuzd9XxZnro7MfjPswsjWufxX28rmJtlfSXwAtyKt8TI5yKJnMeBPQ0m5R3k8", c.GetServiceTicketFor("pass_likers"));
- }
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]\n"
- << "7: Tickets fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- << "7: Public keys fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- l->Stream.Str());
- l->Stream.Clear();
-
- {
- NTvmTool::TClientSettings s("something_else");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(port);
-
- TAsyncUpdaterPtr u = TThreadedUpdater::Create(s, l);
- UNIT_ASSERT(!u->GetCachedServiceTickets());
- UNIT_ASSERT(u->GetCachedServiceContext());
- UNIT_ASSERT(u->GetCachedUserContext());
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus());
-
- NTvmAuth::TTvmClient c(u);
- UNIT_ASSERT(!c.CheckServiceTicket(SRV_TICKET));
- UNIT_ASSERT(c.CheckServiceTicket(SRV_TICKET_DST_100503));
- UNIT_ASSERT(c.CheckUserTicket(PROD_YATEAM_TICKET));
- UNIT_ASSERT_EXCEPTION_CONTAINS(c.GetServiceTicketFor("pass_likers"),
- TBrokenTvmClientSettings,
- "Need to enable ServiceTickets fetching");
- }
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100503, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[]\n"
- << "7: Public keys fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- l->Stream.Str());
- l->Stream.Clear();
- }
-
- Y_UNIT_TEST(IsOk) {
- TNonInitedUpdater u("", 0, TDevNullLogger::IAmBrave());
- using TTickets = TServiceTickets::TMapIdStr;
-
- UNIT_ASSERT(u.AreServiceTicketsOk(0));
- UNIT_ASSERT(!u.AreServiceTicketsOk(2));
- u.SetServiceTickets(MakeIntrusiveConst<TServiceTickets>(TTickets(),
- TTickets(),
- TServiceTickets::TMapAliasId()));
- UNIT_ASSERT(u.AreServiceTicketsOk(0));
- UNIT_ASSERT(!u.AreServiceTicketsOk(2));
- u.SetServiceTickets(MakeIntrusiveConst<TServiceTickets>(
- TTickets({
- {1, "mega_ticket"},
- {2, "mega_ticket2"},
- }),
- TTickets({
- {3, "mega_error3"},
- }),
- TServiceTickets::TMapAliasId()));
- UNIT_ASSERT(u.AreServiceTicketsOk(0));
- UNIT_ASSERT(!u.AreServiceTicketsOk(2));
-
- u.SetServiceTickets(MakeIntrusiveConst<TServiceTickets>(
- TTickets({
- {1, "mega_ticket"},
- {2, "mega_ticket2"},
- }),
- TTickets({
- {3, "mega_error3"},
- }),
- TServiceTickets::TMapAliasId({
- {"mega_ticket", 1},
- {"mega_ticket2", 2},
- {"mega_ticket3", 3},
- })));
- UNIT_ASSERT(u.AreServiceTicketsOk(2));
-
- UNIT_ASSERT(!u.ArePublicKeysOk());
- u.SetServiceContext(MakeIntrusiveConst<TServiceContext>(
- TServiceContext::CheckingFactory(12, NUnittest::TVMKNIFE_PUBLIC_KEYS)));
- UNIT_ASSERT(!u.ArePublicKeysOk());
- u.SetUserContext(NUnittest::TVMKNIFE_PUBLIC_KEYS);
- UNIT_ASSERT(!u.ArePublicKeysOk());
- u.SetBbEnv(EBlackboxEnv::Test);
- UNIT_ASSERT(u.ArePublicKeysOk());
- }
-
- Y_UNIT_TEST(IsTimeToUpdate) {
- TNonInitedUpdater u("", 0, TDevNullLogger::IAmBrave());
-
- UNIT_ASSERT(!u.IsTimeToUpdatePublicKeys(TInstant::Now() - TDuration::Seconds(597)));
- UNIT_ASSERT(u.IsTimeToUpdatePublicKeys(TInstant::Now() - TDuration::Seconds(603)));
-
- TMetaInfo::TConfig cfg;
- UNIT_ASSERT(!u.IsTimeToUpdateServiceTickets(cfg, TInstant::Now() - TDuration::Seconds(597)));
- UNIT_ASSERT(!u.IsTimeToUpdateServiceTickets(cfg, TInstant::Now() - TDuration::Seconds(603)));
-
- cfg.DstAliases = {{"q", 1}};
- UNIT_ASSERT(!u.IsTimeToUpdateServiceTickets(cfg, TInstant::Now() - TDuration::Seconds(597)));
- UNIT_ASSERT(u.IsTimeToUpdateServiceTickets(cfg, TInstant::Now() - TDuration::Seconds(603)));
- }
-
- Y_UNIT_TEST(InitWithOldData) {
- TPortManager pm;
- ui16 port = pm.GetPort(80);
- NMock::TMockServer server(port,
- []() {
- auto p = new TTvmTool;
- p->Birthtime = TInstant::Seconds(123);
- return p;
- });
-
- NTvmTool::TClientSettings s("me");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(port);
-
- auto l = MakeIntrusive<TLogger>();
- UNIT_ASSERT_EXCEPTION_CONTAINS(TThreadedUpdater::Create(s, l),
- TRetriableException,
- "Failed to start TvmClient. You can retry: ");
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100500, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:11)(bbox:242)]\n"
- << "4: Error while fetching of tickets: Service tickets are too old: 1970-01-01T00:02:03.000000Z\n"
- << "3: Service tickets have not been refreshed for too long period\n"
- << "4: Error while fetching of public keys: Public keys are too old: 1970-01-01T00:02:03.000000Z\n"
- << "3: Public keys have not been refreshed for too long period\n"
- << "4: Error while fetching of tickets: Service tickets are too old: 1970-01-01T00:02:03.000000Z\n"
- << "3: Service tickets have not been refreshed for too long period\n"
- << "4: Error while fetching of public keys: Public keys are too old: 1970-01-01T00:02:03.000000Z\n"
- << "3: Public keys have not been refreshed for too long period\n"
- << "4: Error while fetching of tickets: Service tickets are too old: 1970-01-01T00:02:03.000000Z\n"
- << "3: Service tickets have not been refreshed for too long period\n"
- << "4: Error while fetching of public keys: Public keys are too old: 1970-01-01T00:02:03.000000Z\n"
- << "3: Public keys have not been refreshed for too long period\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(InitWithOldData_onlyKeys) {
- TPortManager pm;
- ui16 port = pm.GetPort(80);
- NMock::TMockServer server(port,
- []() {
- auto p = new TTvmTool;
- p->Birthtime = TInstant::Seconds(123);
- return p;
- });
-
- NTvmTool::TClientSettings s("something_else");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(port);
-
- {
- s.OverrideBlackboxEnv(EBlackboxEnv::Stress);
- auto l = MakeIntrusive<TLogger>();
- UNIT_ASSERT_EXCEPTION_CONTAINS(TThreadedUpdater::Create(s, l),
- TBrokenTvmClientSettings,
- "Overriding of BlackboxEnv is illegal: ProdYateam -> Stress");
- }
-
- s.OverrideBlackboxEnv(EBlackboxEnv::Prod);
- auto l = MakeIntrusive<TLogger>();
- UNIT_ASSERT_EXCEPTION_CONTAINS(TThreadedUpdater::Create(s, l),
- TRetriableException,
- "Failed to start TvmClient. You can retry: ");
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100503, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[]\n"
- << "6: Meta: override blackbox env: ProdYateam->Prod\n"
- << "4: Error while fetching of public keys: Public keys are too old: 1970-01-01T00:02:03.000000Z\n"
- << "3: Public keys have not been refreshed for too long period\n"
- << "4: Error while fetching of public keys: Public keys are too old: 1970-01-01T00:02:03.000000Z\n"
- << "3: Public keys have not been refreshed for too long period\n"
- << "4: Error while fetching of public keys: Public keys are too old: 1970-01-01T00:02:03.000000Z\n"
- << "3: Public keys have not been refreshed for too long period\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(Init) {
- TPortManager pm;
- ui16 port = pm.GetPort(80);
- NMock::TMockServer server(port, []() { return new TTvmTool; });
-
- NTvmTool::TClientSettings s("push-client");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(port);
- s.SetHostname("localhost");
-
- auto l = MakeIntrusive<TLogger>();
- {
- TAsyncUpdaterPtr u = TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus());
- }
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100501, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_likers:100502)]\n"
- << "7: Tickets fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- << "7: Public keys fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(InitWithoutTvmtool) {
- NTvmTool::TClientSettings s("me");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(0);
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(TThreadedUpdater::Create(s, TDevNullLogger::IAmBrave()),
- TNonRetriableException,
- "can not connect to ");
- }
-
- Y_UNIT_TEST(GetStatus) {
- TNonInitedUpdater u("", 0, TDevNullLogger::IAmBrave());
- TMetaInfoProxy m(nullptr);
- m.Config_ = std::make_shared<TMetaInfo::TConfig>();
- u.MetaInfo_ = m;
- u.LastVisitForConfig_ = TInstant::Now();
-
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Error, u.GetStatus());
- u.SetUpdateTimeOfPublicKeys(TInstant::Now() - TDuration::Days(3));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Warning, u.GetStatus());
- u.SetUpdateTimeOfPublicKeys(TInstant::Now() - TDuration::Hours(3));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
-
- u.SetServiceTickets(new TServiceTickets({}, {}, {}));
-
- TMetaInfo::TConfig cfg;
- cfg.DstAliases = {{"q", 1}, {"q2", 2}};
- m.Config_ = std::make_shared<TMetaInfo::TConfig>(cfg);
- u.MetaInfo_ = m;
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Error, u.GetStatus());
- u.SetUpdateTimeOfServiceTickets(TInstant::Now() - TDuration::Hours(3));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Error, u.GetStatus());
-
- u.SetServiceTickets(MakeIntrusiveConst<TServiceTickets>(
- TServiceTickets::TMapIdStr({{1, "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}, {2, "t"}}),
- TServiceTickets::TMapIdStr({{3, "mega_error"}, {4, "error2"}}),
- TServiceTickets::TMapAliasId({
- {"some_alias#1", 1},
- {"some_alias#2", 2},
- })));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Warning, u.GetStatus());
-
- const TInstant* inv = &u.GetCachedServiceTickets()->InvalidationTime;
- *const_cast<TInstant*>(inv) = TInstant::Now() + TDuration::Hours(3);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Warning, u.GetStatus());
-
- u.SetUpdateTimeOfServiceTickets(TInstant::Now() - TDuration::Minutes(3));
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u.GetStatus());
-
- u.LastVisitForConfig_ = TInstant::Now() - TDuration::Minutes(1);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Warning, u.GetStatus());
- }
-
- Y_UNIT_TEST(multiNamesForDst) {
- TPortManager pm;
- ui16 port = pm.GetPort(80);
- NMock::TMockServer server(port, []() { return new TTvmTool; });
-
- NTvmTool::TClientSettings s("multi_names_for_dst");
- s.SetAuthToken(AUTH_TOKEN);
- s.SetPort(port);
- s.SetHostname("localhost");
-
- auto l = MakeIntrusive<TLogger>();
- {
- TAsyncUpdaterPtr u = TThreadedUpdater::Create(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, u->GetStatus());
- }
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "7: Meta info fetched from localhost:" << port << "\n"
- << "6: Meta: self_tvm_id=100599, bb_env=ProdYateam, idm_slug=<NULL>, dsts=[(pass_haters:100502)(pass_likers:100502)]\n"
- << "7: Tickets fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- << "7: Public keys fetched from tvmtool: 2425-09-17T11:04:00.000000Z\n"
- << "7: Thread-worker started\n"
- << "7: Thread-worker stopped\n",
- l->Stream.Str());
- }
-}
diff --git a/library/cpp/tvmauth/client/ut/utils_ut.cpp b/library/cpp/tvmauth/client/ut/utils_ut.cpp
deleted file mode 100644
index e780fb27791..00000000000
--- a/library/cpp/tvmauth/client/ut/utils_ut.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-#include <library/cpp/tvmauth/client/misc/utils.h>
-
-#include <library/cpp/testing/unittest/registar.h>
-
-Y_UNIT_TEST_SUITE(UtilsTest) {
- using namespace NTvmAuth;
-
- Y_UNIT_TEST(ParseDstMap) {
- using TMap = NTvmAuth::NTvmApi::TClientSettings::TDstMap;
- UNIT_ASSERT_EQUAL(TMap(), NUtils::ParseDstMap(""));
- UNIT_ASSERT_EXCEPTION(NUtils::ParseDstMap(";"), TFromStringException);
- UNIT_ASSERT_EXCEPTION(NUtils::ParseDstMap(":"), TFromStringException);
- UNIT_ASSERT_EXCEPTION(NUtils::ParseDstMap("3;"), TFromStringException);
- UNIT_ASSERT_EXCEPTION(NUtils::ParseDstMap("3:foo;"), TFromStringException);
-
- UNIT_ASSERT_EQUAL(TMap({
- {"foo", 3},
- }),
- NUtils::ParseDstMap("foo:3"));
- UNIT_ASSERT_EQUAL(TMap({
- {"foo", 3},
- {"bar", 17},
- }),
- NUtils::ParseDstMap("foo:3;bar:17;"));
- }
-
- Y_UNIT_TEST(ParseDstVector) {
- using TVector = NTvmAuth::NTvmApi::TClientSettings::TDstVector;
- UNIT_ASSERT_EQUAL(TVector(), NUtils::ParseDstVector(""));
- UNIT_ASSERT_EXCEPTION_CONTAINS(NUtils::ParseDstVector(";"),
- yexception,
- "Cannot parse empty string as number");
- UNIT_ASSERT_EXCEPTION_CONTAINS(NUtils::ParseDstVector(":"),
- yexception,
- "Unexpected symbol");
- UNIT_ASSERT_EXCEPTION_CONTAINS(NUtils::ParseDstVector("3:foo;"),
- yexception,
- "Unexpected symbol");
- UNIT_ASSERT_EXCEPTION_CONTAINS(NUtils::ParseDstVector("foo:3;"),
- yexception,
- "Unexpected symbol");
-
- UNIT_ASSERT_EQUAL(TVector(1, 3),
- NUtils::ParseDstVector("3"));
- UNIT_ASSERT_EQUAL(TVector({3, 17}),
- NUtils::ParseDstVector("3;17;"));
- }
-
- Y_UNIT_TEST(ToHex) {
- UNIT_ASSERT_VALUES_EQUAL("", NUtils::ToHex(""));
- UNIT_ASSERT_VALUES_EQUAL("61", NUtils::ToHex("a"));
- UNIT_ASSERT_VALUES_EQUAL(
- "6C6B787A6E7620736C6A6876627761656220",
- NUtils::ToHex("lkxznv sljhvbwaeb "));
- }
-
- Y_UNIT_TEST(CheckBbEnvOverriding) {
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::Prod, EBlackboxEnv::Prod));
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::Prod, EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::Prod, EBlackboxEnv::Test));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::Prod, EBlackboxEnv::TestYateam));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::Prod, EBlackboxEnv::Stress));
-
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::ProdYateam, EBlackboxEnv::Prod));
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::ProdYateam, EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::ProdYateam, EBlackboxEnv::Test));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::ProdYateam, EBlackboxEnv::TestYateam));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::ProdYateam, EBlackboxEnv::Stress));
-
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::Test, EBlackboxEnv::Prod));
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::Test, EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::Test, EBlackboxEnv::Test));
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::Test, EBlackboxEnv::TestYateam));
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::Test, EBlackboxEnv::Stress));
-
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::TestYateam, EBlackboxEnv::Prod));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::TestYateam, EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::TestYateam, EBlackboxEnv::Test));
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::TestYateam, EBlackboxEnv::TestYateam));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::TestYateam, EBlackboxEnv::Stress));
-
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::Stress, EBlackboxEnv::Prod));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::Stress, EBlackboxEnv::ProdYateam));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::Stress, EBlackboxEnv::Test));
- UNIT_ASSERT(!NUtils::CheckBbEnvOverriding(EBlackboxEnv::Stress, EBlackboxEnv::TestYateam));
- UNIT_ASSERT(NUtils::CheckBbEnvOverriding(EBlackboxEnv::Stress, EBlackboxEnv::Stress));
- }
-}