Skip to content

Commit 3c96145

Browse files
committed
Add tests
1 parent 220122b commit 3c96145

File tree

1 file changed

+149
-2
lines changed

1 file changed

+149
-2
lines changed

ydb/core/tx/schemeshard/ut_base/ut_base.cpp

Lines changed: 149 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9216,7 +9216,16 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
92169216
"PartitionCount: 40 ");
92179217
env.TestWaitNotification(runtime, txId);
92189218
TestDescribeResult(DescribePath(runtime, "/MyRoot/Solomon"),
9219-
{NLs::Finished, NLs::PathsInsideDomain(1), NLs::ShardsInsideDomain(40)});
9219+
{NLs::Finished, NLs::PathsInsideDomain(1), NLs::ShardsInsideDomain(40),
9220+
[](const NKikimrScheme::TEvDescribeSchemeResult& result){
9221+
const auto& desc = result.GetPathDescription().GetSolomonDescription();
9222+
const auto& boundChannels = desc.GetBoundChannels();
9223+
UNIT_ASSERT_VALUES_EQUAL(boundChannels.size(), 4);
9224+
UNIT_ASSERT_VALUES_EQUAL(boundChannels[0].GetStoragePoolName(), "pool-1");
9225+
UNIT_ASSERT_VALUES_EQUAL(boundChannels[1].GetStoragePoolName(), "pool-1");
9226+
UNIT_ASSERT_VALUES_EQUAL(boundChannels[2].GetStoragePoolName(), "pool-1");
9227+
UNIT_ASSERT_VALUES_EQUAL(boundChannels[3].GetStoragePoolName(), "pool-1");
9228+
}});
92209229

92219230
// Already exists
92229231
TestCreateSolomon(runtime, ++txId, "/MyRoot", "Name: \"Solomon\" "
@@ -9317,7 +9326,16 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
93179326
env.TestWaitNotification(runtime, txId);
93189327

93199328
TestDescribeResult(DescribePath(runtime, "/MyRoot/Solomon"),
9320-
{NLs::Finished, NLs::PathsInsideDomain(1), NLs::ShardsInsideDomain(4)});
9329+
{NLs::Finished, NLs::PathsInsideDomain(1), NLs::ShardsInsideDomain(4),
9330+
[](const NKikimrScheme::TEvDescribeSchemeResult& result){
9331+
const auto& desc = result.GetPathDescription().GetSolomonDescription();
9332+
const auto& boundChannels = desc.GetBoundChannels();
9333+
UNIT_ASSERT_VALUES_EQUAL(boundChannels.size(), 4);
9334+
UNIT_ASSERT_VALUES_EQUAL(boundChannels[0].GetStoragePoolName(), "pool-1");
9335+
UNIT_ASSERT_VALUES_EQUAL(boundChannels[1].GetStoragePoolName(), "pool-1");
9336+
UNIT_ASSERT_VALUES_EQUAL(boundChannels[2].GetStoragePoolName(), "pool-1");
9337+
UNIT_ASSERT_VALUES_EQUAL(boundChannels[3].GetStoragePoolName(), "pool-1");
9338+
}});
93219339

93229340
TestDropSolomon(runtime, ++txId, "/MyRoot", "Solomon");
93239341
env.TestWaitNotification(runtime, txId);
@@ -9430,6 +9448,135 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
94309448
UpdateChannelsBindingSolomon(true);
94319449
}
94329450

9451+
void UpdateChannelsBindingSolomonStorageConfig() {
9452+
TTestBasicRuntime runtime;
9453+
TTestEnv env(runtime, TTestEnvOptions().AllowUpdateChannelsBindingOfSolomonPartitions(true));
9454+
ui64 txId = 100;
9455+
9456+
auto check = [&](const TString& path, ui64 shards, const THashMap<TString, ui32>& expectedChannels) {
9457+
NKikimrSchemeOp::TDescribeOptions opts;
9458+
opts.SetReturnChannelsBinding(true);
9459+
9460+
auto makeChannels = [](const auto& boundsChannels) {
9461+
THashMap<TString, ui32> channels;
9462+
for (const auto& channel : boundsChannels) {
9463+
channels[channel.GetStoragePoolName()]++;
9464+
}
9465+
return channels;
9466+
};
9467+
9468+
TestDescribeResult(DescribePath(runtime, path, opts), {
9469+
NLs::Finished,
9470+
NLs::ShardsInsideDomain(shards),
9471+
[&expectedChannels, &makeChannels, &shards] (const NKikimrScheme::TEvDescribeSchemeResult& record) {
9472+
const auto& desc = record.GetPathDescription().GetSolomonDescription();
9473+
9474+
UNIT_ASSERT_VALUES_EQUAL(shards, desc.PartitionsSize());
9475+
9476+
for (size_t i = 0; i < desc.PartitionsSize(); ++i) {
9477+
const auto& partition = desc.GetPartitions(i);
9478+
9479+
THashMap<TString, ui32> channels = makeChannels(partition.GetBoundChannels());
9480+
UNIT_ASSERT_VALUES_EQUAL(expectedChannels.size(), channels.size());
9481+
9482+
for (const auto& [name, count] : expectedChannels) {
9483+
UNIT_ASSERT_C(channels.contains(name), "Cannot find channel: " << name);
9484+
UNIT_ASSERT_VALUES_EQUAL(channels.at(name), count);
9485+
}
9486+
}
9487+
9488+
THashMap<TString, ui32> volumeChannels = makeChannels(desc.GetBoundChannels());
9489+
UNIT_ASSERT_VALUES_EQUAL(expectedChannels.size(), volumeChannels.size());
9490+
9491+
for (const auto& [name, count] : expectedChannels) {
9492+
UNIT_ASSERT_C(volumeChannels.contains(name), "Cannot find channel: " << name);
9493+
UNIT_ASSERT_VALUES_EQUAL(volumeChannels.at(name), count);
9494+
}
9495+
}
9496+
});
9497+
};
9498+
9499+
TestCreateSolomon(runtime, ++txId, "/MyRoot", R"(
9500+
Name: "Solomon"
9501+
PartitionCount: 1
9502+
StorageConfig {
9503+
Channel {
9504+
PreferredPoolKind: "pool-kind-1"
9505+
}
9506+
Channel {
9507+
PreferredPoolKind: "pool-kind-1"
9508+
}
9509+
Channel {
9510+
PreferredPoolKind: "pool-kind-1"
9511+
}
9512+
}
9513+
)");
9514+
9515+
env.TestWaitNotification(runtime, txId);
9516+
check("/MyRoot/Solomon", 1, {{{"pool-1", 3}}});
9517+
// case 1: empty alter
9518+
TestAlterSolomon(runtime, ++txId, "/MyRoot", R"(
9519+
Name: "Solomon"
9520+
StorageConfig {
9521+
Channel {
9522+
PreferredPoolKind: "pool-kind-2"
9523+
}
9524+
Channel {
9525+
PreferredPoolKind: "pool-kind-2"
9526+
}
9527+
Channel {
9528+
PreferredPoolKind: "pool-kind-2"
9529+
}
9530+
}
9531+
)", {NKikimrScheme::StatusInvalidParameter});
9532+
9533+
// case 2: add partition, with update channels binding
9534+
TestAlterSolomon(runtime, ++txId, "/MyRoot", R"(
9535+
Name: "Solomon"
9536+
PartitionCount: 2
9537+
UpdateChannelsBinding: true
9538+
StorageConfig {
9539+
Channel {
9540+
PreferredPoolKind: "pool-kind-2"
9541+
}
9542+
Channel {
9543+
PreferredPoolKind: "pool-kind-2"
9544+
}
9545+
Channel {
9546+
PreferredPoolKind: "pool-kind-2"
9547+
}
9548+
}
9549+
)");
9550+
9551+
env.TestWaitNotification(runtime, txId);
9552+
check("/MyRoot/Solomon", 2, {{"pool-2", 3}});
9553+
9554+
// case 4: add partition & update channels binding
9555+
TestAlterSolomon(runtime, ++txId, "/MyRoot", R"(
9556+
Name: "Solomon"
9557+
PartitionCount: 3
9558+
UpdateChannelsBinding: true
9559+
StorageConfig {
9560+
Channel {
9561+
PreferredPoolKind: "pool-kind-1"
9562+
}
9563+
Channel {
9564+
PreferredPoolKind: "pool-kind-1"
9565+
}
9566+
Channel {
9567+
PreferredPoolKind: "pool-kind-1"
9568+
}
9569+
}
9570+
)");
9571+
9572+
env.TestWaitNotification(runtime, txId);
9573+
check("/MyRoot/Solomon", 3, {{"pool-1", 3}});
9574+
}
9575+
9576+
Y_UNIT_TEST(UpdateChannelsBindingSolomonStorageConfig) {
9577+
UpdateChannelsBindingSolomonStorageConfig();
9578+
}
9579+
94339580
Y_UNIT_TEST(RejectAlterSolomon) { //+
94349581
TTestBasicRuntime runtime;
94359582
TTestEnv env(runtime);

0 commit comments

Comments
 (0)