aboutsummaryrefslogblamecommitdiffstats
path: root/library/cpp/tvmauth/client/ut/facade_ut.cpp
blob: d3d33e8b81f19de6d65fe6b2998f2081ff01e553 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11



                                                       
                                                  



                                 
                                 















                                                                                                                                                                                                                                                                    
                          














                                                                                                      
                       








                                                                                 
                        










                                                        
                          






























































































                                                                                                                                                                             
#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()); 
        } 
    } 
}