aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/tvmauth/client/ut/facade_ut.cpp
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/tvmauth/client/ut/facade_ut.cpp
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/tvmauth/client/ut/facade_ut.cpp')
-rw-r--r--library/cpp/tvmauth/client/ut/facade_ut.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/library/cpp/tvmauth/client/ut/facade_ut.cpp b/library/cpp/tvmauth/client/ut/facade_ut.cpp
new file mode 100644
index 0000000000..62e8e6c731
--- /dev/null
+++ b/library/cpp/tvmauth/client/ut/facade_ut.cpp
@@ -0,0 +1,167 @@
+#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, 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());
+ }
+ }
+}