|
@@ -72,9 +72,9 @@ void InitLdapSettingsWithInvalidFilter(NKikimrProto::TLdapAuthentication* ldapSe
|
|
|
ldapSettings->SetSearchFilter("&(uid=$username)()");
|
|
|
}
|
|
|
|
|
|
-void InitLdapSettingsWithUnavaliableHost(NKikimrProto::TLdapAuthentication* ldapSettings, ui16 ldapPort, TTempFileHandle& certificateFile) {
|
|
|
+void InitLdapSettingsWithUnavailableHost(NKikimrProto::TLdapAuthentication* ldapSettings, ui16 ldapPort, TTempFileHandle& certificateFile) {
|
|
|
InitLdapSettings(ldapSettings, ldapPort, certificateFile);
|
|
|
- ldapSettings->SetHost("unavaliablehost");
|
|
|
+ ldapSettings->SetHost("unavailablehost");
|
|
|
}
|
|
|
|
|
|
void InitLdapSettingsWithCustomGroupAttribute(NKikimrProto::TLdapAuthentication* ldapSettings, ui16 ldapPort, TTempFileHandle& certificateFile) {
|
|
@@ -710,8 +710,8 @@ Y_UNIT_TEST_SUITE(TTicketParserTest) {
|
|
|
ldapServer.Stop();
|
|
|
}
|
|
|
|
|
|
- Y_UNIT_TEST(LdapServerIsUnavaliable) {
|
|
|
- TLdapKikimrServer server(InitLdapSettingsWithUnavaliableHost);
|
|
|
+ Y_UNIT_TEST(LdapServerIsUnavailable) {
|
|
|
+ TLdapKikimrServer server(InitLdapSettingsWithUnavailableHost);
|
|
|
|
|
|
LdapMock::TLdapMockResponses responses;
|
|
|
LdapMock::TLdapSimpleServer ldapServer(server.GetLdapPort(), responses);
|
|
@@ -731,39 +731,14 @@ Y_UNIT_TEST_SUITE(TTicketParserTest) {
|
|
|
TString login = "ldapuser";
|
|
|
TString password = "ldapUserPassword";
|
|
|
|
|
|
- TLdapKikimrServer server(InitLdapSettings);
|
|
|
- auto responses = TCorrectLdapResponse::GetResponses(login);
|
|
|
- LdapMock::TLdapSimpleServer ldapServer(server.GetLdapPort(), responses);
|
|
|
-
|
|
|
- auto loginResponse = GetLoginResponse(server, login, password);
|
|
|
- TTestActorRuntime* runtime = server.GetRuntime();
|
|
|
- TActorId sender = runtime->AllocateEdgeActor();
|
|
|
- runtime->Send(new IEventHandle(MakeTicketParserID(), sender, new TEvTicketParser::TEvAuthorizeTicket(loginResponse.Token)), 0);
|
|
|
- TAutoPtr<IEventHandle> handle;
|
|
|
- TEvTicketParser::TEvAuthorizeTicketResult* ticketParserResult = runtime->GrabEdgeEvent<TEvTicketParser::TEvAuthorizeTicketResult>(handle);
|
|
|
-
|
|
|
- UNIT_ASSERT_C(ticketParserResult->Error.empty(), ticketParserResult->Error);
|
|
|
- UNIT_ASSERT(ticketParserResult->Token != nullptr);
|
|
|
- const TString ldapDomain = "@ldap";
|
|
|
- UNIT_ASSERT_VALUES_EQUAL(ticketParserResult->Token->GetUserSID(), login + ldapDomain);
|
|
|
- const auto& fetchedGroups = ticketParserResult->Token->GetGroupSIDs();
|
|
|
- THashSet<TString> groups(fetchedGroups.begin(), fetchedGroups.end());
|
|
|
|
|
|
- THashSet<TString> expectedGroups;
|
|
|
- std::transform(TCorrectLdapResponse::Groups.begin(), TCorrectLdapResponse::Groups.end(), std::inserter(expectedGroups, expectedGroups.end()), [&ldapDomain](TString& group) {
|
|
|
- return group.append(ldapDomain);
|
|
|
- });
|
|
|
- expectedGroups.insert("all-users@well-known");
|
|
|
-
|
|
|
- UNIT_ASSERT_VALUES_EQUAL(fetchedGroups.size(), expectedGroups.size());
|
|
|
- for (const auto& expectedGroup : expectedGroups) {
|
|
|
- UNIT_ASSERT_C(groups.contains(expectedGroup), "Can not find " + expectedGroup);
|
|
|
- }
|
|
|
+ auto responses = TCorrectLdapResponse::GetResponses(login);
|
|
|
+ LdapMock::TLdapMockResponses updatedResponses = responses;
|
|
|
|
|
|
std::vector<TString> newLdapGroups {
|
|
|
"ou=groups,dc=search,dc=yandex,dc=net",
|
|
|
"cn=people,ou=groups,dc=search,dc=yandex,dc=net",
|
|
|
- "cn=desiners,ou=groups,dc=search,dc=yandex,dc=net"
|
|
|
+ "cn=designers,ou=groups,dc=search,dc=yandex,dc=net"
|
|
|
};
|
|
|
std::vector<LdapMock::TSearchEntry> newFetchGroupsSearchResponseEntries {
|
|
|
{
|
|
@@ -774,6 +749,7 @@ Y_UNIT_TEST_SUITE(TTicketParserTest) {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ const TString ldapDomain = "@ldap";
|
|
|
THashSet<TString> newExpectedGroups;
|
|
|
std::transform(newLdapGroups.begin(), newLdapGroups.end(), std::inserter(newExpectedGroups, newExpectedGroups.end()), [&ldapDomain](TString& group) {
|
|
|
return group.append(ldapDomain);
|
|
@@ -785,9 +761,37 @@ Y_UNIT_TEST_SUITE(TTicketParserTest) {
|
|
|
.ResponseDone = {.Status = LdapMock::EStatus::SUCCESS}
|
|
|
};
|
|
|
|
|
|
- auto& searchresponse = responses.SearchResponses.front();
|
|
|
- searchresponse.second = newFetchGroupsSearchResponseInfo;
|
|
|
- ldapServer.SetSearchReasponse(searchresponse);
|
|
|
+ auto& searchResponse = updatedResponses.SearchResponses.front();
|
|
|
+ searchResponse.second = newFetchGroupsSearchResponseInfo;
|
|
|
+
|
|
|
+ TLdapKikimrServer server(InitLdapSettings);
|
|
|
+ LdapMock::TLdapSimpleServer ldapServer(server.GetLdapPort(), {responses, updatedResponses});
|
|
|
+
|
|
|
+ auto loginResponse = GetLoginResponse(server, login, password);
|
|
|
+ TTestActorRuntime* runtime = server.GetRuntime();
|
|
|
+ TActorId sender = runtime->AllocateEdgeActor();
|
|
|
+ runtime->Send(new IEventHandle(MakeTicketParserID(), sender, new TEvTicketParser::TEvAuthorizeTicket(loginResponse.Token)), 0);
|
|
|
+ TAutoPtr<IEventHandle> handle;
|
|
|
+ TEvTicketParser::TEvAuthorizeTicketResult* ticketParserResult = runtime->GrabEdgeEvent<TEvTicketParser::TEvAuthorizeTicketResult>(handle);
|
|
|
+
|
|
|
+ UNIT_ASSERT_C(ticketParserResult->Error.empty(), ticketParserResult->Error);
|
|
|
+ UNIT_ASSERT(ticketParserResult->Token != nullptr);
|
|
|
+ UNIT_ASSERT_VALUES_EQUAL(ticketParserResult->Token->GetUserSID(), login + ldapDomain);
|
|
|
+ const auto& fetchedGroups = ticketParserResult->Token->GetGroupSIDs();
|
|
|
+ THashSet<TString> groups(fetchedGroups.begin(), fetchedGroups.end());
|
|
|
+
|
|
|
+ THashSet<TString> expectedGroups;
|
|
|
+ std::transform(TCorrectLdapResponse::Groups.begin(), TCorrectLdapResponse::Groups.end(), std::inserter(expectedGroups, expectedGroups.end()), [&ldapDomain](TString& group) {
|
|
|
+ return group.append(ldapDomain);
|
|
|
+ });
|
|
|
+ expectedGroups.insert("all-users@well-known");
|
|
|
+
|
|
|
+ UNIT_ASSERT_VALUES_EQUAL(fetchedGroups.size(), expectedGroups.size());
|
|
|
+ for (const auto& expectedGroup : expectedGroups) {
|
|
|
+ UNIT_ASSERT_C(groups.contains(expectedGroup), "Can not find " + expectedGroup);
|
|
|
+ }
|
|
|
+
|
|
|
+ ldapServer.UpdateResponses();
|
|
|
Sleep(TDuration::Seconds(10));
|
|
|
|
|
|
runtime->Send(new IEventHandle(MakeTicketParserID(), sender, new TEvTicketParser::TEvAuthorizeTicket(loginResponse.Token)), 0);
|
|
@@ -812,8 +816,15 @@ Y_UNIT_TEST_SUITE(TTicketParserTest) {
|
|
|
|
|
|
TLdapKikimrServer server(InitLdapSettings);
|
|
|
auto responses = TCorrectLdapResponse::GetResponses(login);
|
|
|
- LdapMock::TLdapSimpleServer ldapServer(server.GetLdapPort(), responses);
|
|
|
+ LdapMock::TLdapMockResponses updatedResponses = responses;
|
|
|
+ LdapMock::TSearchResponseInfo newFetchGroupsSearchResponseInfo {
|
|
|
+ .ResponseEntries = {}, // User has been removed. Return empty entries list
|
|
|
+ .ResponseDone = {.Status = LdapMock::EStatus::SUCCESS}
|
|
|
+ };
|
|
|
|
|
|
+ auto& searchResponse = updatedResponses.SearchResponses.front();
|
|
|
+ searchResponse.second = newFetchGroupsSearchResponseInfo;
|
|
|
+ LdapMock::TLdapSimpleServer ldapServer(server.GetLdapPort(), {responses, updatedResponses});
|
|
|
|
|
|
auto loginResponse = GetLoginResponse(server, login, password);
|
|
|
TTestActorRuntime* runtime = server.GetRuntime();
|
|
@@ -840,14 +851,7 @@ Y_UNIT_TEST_SUITE(TTicketParserTest) {
|
|
|
UNIT_ASSERT_C(groups.contains(expectedGroup), "Can not find " + expectedGroup);
|
|
|
}
|
|
|
|
|
|
- LdapMock::TSearchResponseInfo newFetchGroupsSearchResponseInfo {
|
|
|
- .ResponseEntries = {}, // User has been removed. Return empty entries list
|
|
|
- .ResponseDone = {.Status = LdapMock::EStatus::SUCCESS}
|
|
|
- };
|
|
|
-
|
|
|
- auto& searchresponse = responses.SearchResponses.front();
|
|
|
- searchresponse.second = newFetchGroupsSearchResponseInfo;
|
|
|
- ldapServer.SetSearchReasponse(searchresponse);
|
|
|
+ ldapServer.UpdateResponses();
|
|
|
Sleep(TDuration::Seconds(10));
|
|
|
|
|
|
runtime->Send(new IEventHandle(MakeTicketParserID(), sender, new TEvTicketParser::TEvAuthorizeTicket(loginResponse.Token)), 0);
|