Skip to content

Commit

Permalink
Login helper refactoring (ydb-platform#12083)
Browse files Browse the repository at this point in the history
  • Loading branch information
azevaykin authored Nov 28, 2024
1 parent 7827174 commit 9f93101
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 27 deletions.
40 changes: 36 additions & 4 deletions ydb/core/tx/schemeshard/ut_helpers/helpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1949,16 +1949,48 @@ namespace NSchemeShardUT_Private {
return TPathId(record.GetSchemeShardId(), record.GetSubDomainPathId());
}

TEvSchemeShard::TEvModifySchemeTransaction* CreateAlterLoginCreateUser(ui64 txId, const TString& user, const TString& password) {
auto evTx = new TEvSchemeShard::TEvModifySchemeTransaction(txId, TTestTxConfig::SchemeShard);
auto transaction = evTx->Record.AddTransaction();
void CreateAlterLoginCreateUser(TTestActorRuntime& runtime, ui64 txId, const TString& database, const TString& user, const TString& password, const TVector<TExpectedResult>& expectedResults) {
auto modifyTx = std::make_unique<TEvSchemeShard::TEvModifySchemeTransaction>(txId, TTestTxConfig::SchemeShard);
auto transaction = modifyTx->Record.AddTransaction();
transaction->SetWorkingDir(database);
transaction->SetOperationType(NKikimrSchemeOp::EOperationType::ESchemeOpAlterLogin);

auto createUser = transaction->MutableAlterLogin()->MutableCreateUser();
createUser->SetUser(user);
createUser->SetPassword(password);
return evTx;

AsyncSend(runtime, TTestTxConfig::SchemeShard, modifyTx.release());
TestModificationResults(runtime, txId, expectedResults);
}

void AlterLoginAddGroupMembership(TTestActorRuntime& runtime, ui64 txId, const TString& database, const TString& member, const TString& group, const TVector<TExpectedResult>& expectedResults) {
auto modifyTx = std::make_unique<TEvSchemeShard::TEvModifySchemeTransaction>(txId, TTestTxConfig::SchemeShard);
auto transaction = modifyTx->Record.AddTransaction();
transaction->SetWorkingDir(database);
transaction->SetOperationType(NKikimrSchemeOp::EOperationType::ESchemeOpAlterLogin);

auto addGroupMembership = transaction->MutableAlterLogin()->MutableAddGroupMembership();
addGroupMembership->SetMember(member);
addGroupMembership->SetGroup(group);

AsyncSend(runtime, TTestTxConfig::SchemeShard, modifyTx.release());
TestModificationResults(runtime, txId, expectedResults);
}

void AlterLoginRemoveGroupMembership(TTestActorRuntime& runtime, ui64 txId, const TString& database, const TString& member, const TString& group, const TVector<TExpectedResult>& expectedResults) {
auto modifyTx = std::make_unique<TEvSchemeShard::TEvModifySchemeTransaction>(txId, TTestTxConfig::SchemeShard);
auto transaction = modifyTx->Record.AddTransaction();
transaction->SetWorkingDir(database);
transaction->SetOperationType(NKikimrSchemeOp::EOperationType::ESchemeOpAlterLogin);

auto removeGroupMembership = transaction->MutableAlterLogin()->MutableRemoveGroupMembership();
removeGroupMembership->SetMember(member);
removeGroupMembership->SetGroup(group);

AsyncSend(runtime, TTestTxConfig::SchemeShard, modifyTx.release());
TestModificationResults(runtime, txId, expectedResults);
}

NKikimrScheme::TEvLoginResult Login(TTestActorRuntime& runtime, const TString& user, const TString& password) {
TActorId sender = runtime.AllocateEdgeActor();
auto evLogin = new TEvSchemeShard::TEvLogin();
Expand Down
17 changes: 14 additions & 3 deletions ydb/core/tx/schemeshard/ut_helpers/helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -515,9 +515,20 @@ namespace NSchemeShardUT_Private {
TTestActorRuntime& runtime, ui64 schemeShard, ui64 tabletId,
NKikimrScheme::TEvFindTabletSubDomainPathIdResult::EStatus expected = NKikimrScheme::TEvFindTabletSubDomainPathIdResult::SUCCESS);

// Login
TEvTx* CreateAlterLoginCreateUser(ui64 txId, const TString& user, const TString& password);
NKikimrScheme::TEvLoginResult Login(TTestActorRuntime& runtime, const TString& user, const TString& password);
void CreateAlterLoginCreateUser(TTestActorRuntime& runtime, ui64 txId, const TString& database,
const TString& user, const TString& password,
const TVector<TExpectedResult>& expectedResults = {{NKikimrScheme::StatusSuccess}});

void AlterLoginAddGroupMembership(TTestActorRuntime& runtime, ui64 txId, const TString& database,
const TString& member, const TString& group,
const TVector<TExpectedResult>& expectedResults = {{NKikimrScheme::StatusSuccess}});

void AlterLoginRemoveGroupMembership(TTestActorRuntime& runtime, ui64 txId, const TString& database,
const TString& member, const TString& group,
const TVector<TExpectedResult>& expectedResults = {{NKikimrScheme::StatusSuccess}});

NKikimrScheme::TEvLoginResult Login(TTestActorRuntime& runtime,
const TString& user, const TString& password);

// Mimics data query to a single table with multiple partitions
class TFakeDataReq {
Expand Down
25 changes: 5 additions & 20 deletions ydb/core/tx/schemeshard/ut_login/ut_login.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,28 +14,13 @@ using namespace NKikimr;
using namespace NSchemeShard;
using namespace NSchemeShardUT_Private;

namespace NSchemeShardUT_Private {

// convert into generic test helper?
void TestCreateAlterLoginCreateUser(TTestActorRuntime& runtime, ui64 txId, const TString& database, const TString& user, const TString& password, const TVector<TExpectedResult>& expectedResults) {
std::unique_ptr<TEvSchemeShard::TEvModifySchemeTransaction> modifyTx(CreateAlterLoginCreateUser(txId, user, password));
//TODO: move setting of TModifyScheme.WorkingDir into CreateAlterLoginCreateUser()
//NOTE: TModifyScheme.Name isn't set, intentionally
modifyTx->Record.MutableTransaction(0)->SetWorkingDir(database);
AsyncSend(runtime, TTestTxConfig::SchemeShard, modifyTx.release());
// AlterLoginCreateUser is synchronous in nature, result is returned immediately
TestModificationResults(runtime, txId, expectedResults);
}

} // namespace NSchemeShardUT_Private

Y_UNIT_TEST_SUITE(TSchemeShardLoginTest) {

Y_UNIT_TEST(BasicLogin) {
TTestBasicRuntime runtime;
TTestEnv env(runtime);
ui64 txId = 100;
TestCreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1", {{NKikimrScheme::StatusSuccess}});
CreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1");
auto resultLogin = Login(runtime, "user1", "password1");
UNIT_ASSERT_VALUES_EQUAL(resultLogin.error(), "");
auto describe = DescribePath(runtime, TTestTxConfig::SchemeShard, "/MyRoot");
Expand All @@ -56,7 +41,7 @@ Y_UNIT_TEST_SUITE(TSchemeShardLoginTest) {
TTestEnv env(runtime);
runtime.GetAppData().AuthConfig.SetEnableLoginAuthentication(false);
ui64 txId = 100;
TestCreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1", {{NKikimrScheme::StatusPreconditionFailed}});
CreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1", {{NKikimrScheme::StatusPreconditionFailed}});
auto resultLogin = Login(runtime, "user1", "password1");
UNIT_ASSERT_VALUES_EQUAL(resultLogin.error(), "Login authentication is disabled");
UNIT_ASSERT_VALUES_EQUAL(resultLogin.token(), "");
Expand Down Expand Up @@ -128,7 +113,7 @@ Y_UNIT_TEST_SUITE(TWebLoginService) {

ui64 txId = 100;

TestCreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1", {{NKikimrScheme::StatusSuccess}});
CreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1");
UNIT_ASSERT_VALUES_EQUAL(lines.size(), 2); // +user creation

// test body
Expand Down Expand Up @@ -171,7 +156,7 @@ Y_UNIT_TEST_SUITE(TWebLoginService) {

ui64 txId = 100;

TestCreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1", {{NKikimrScheme::StatusSuccess}});
CreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1");
UNIT_ASSERT_VALUES_EQUAL(lines.size(), 2); // +user creation

// test body
Expand Down Expand Up @@ -606,7 +591,7 @@ Y_UNIT_TEST_SUITE(TWebLoginService) {

ui64 txId = 100;

TestCreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1", {{NKikimrScheme::StatusSuccess}});
CreateAlterLoginCreateUser(runtime, ++txId, "/MyRoot", "user1", "password1");
UNIT_ASSERT_VALUES_EQUAL(lines.size(), 2); // +user creation

// test body
Expand Down

0 comments on commit 9f93101

Please sign in to comment.