Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve read table test coverage: ut to read one row from table by StreamReadTable call #12118

Merged
merged 1 commit into from
Nov 29, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 41 additions & 14 deletions ydb/services/ydb/ydb_table_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1787,7 +1787,13 @@ R"___(<main>: Error: Transaction not found: , code: 2015
UseSnapshot,
};

void TestReadTableMultiShard(EReadTableMultiShardMode mode, bool wholeTable) {
enum class EReadTableRangeMode {
OneRow,
TwoRows,
WholeTable
};

void TestReadTableMultiShard(EReadTableMultiShardMode mode, EReadTableRangeMode rangeMode) {
TKikimrWithGrpcAndRootSchema server;
ui16 grpc = server.GetPort();

Expand Down Expand Up @@ -1833,15 +1839,23 @@ R"___(<main>: Error: Transaction not found: , code: 2015
.EndTuple();

TValueBuilder valueTo;
valueTo.BeginTuple()
.AddElement()
.OptionalUint32(1000000000u)
.AddElement()
.OptionalUint64(2000000000u)
.EndTuple();

if (rangeMode == EReadTableRangeMode::OneRow) {
valueTo.BeginTuple()
.AddElement()
.OptionalUint32(1u)
.EndTuple();
} else {
valueTo.BeginTuple()
.AddElement()
.OptionalUint32(1000000000u)
.AddElement()
.OptionalUint64(2000000000u)
.EndTuple();
}

TReadTableSettings readTableSettings =
wholeTable ? TReadTableSettings().Ordered() :
rangeMode == EReadTableRangeMode::WholeTable ? TReadTableSettings().Ordered() :
TReadTableSettings()
.Ordered()
.From(TKeyBound::Inclusive(valueFrom.Build()))
Expand All @@ -1865,7 +1879,7 @@ R"___(<main>: Error: Transaction not found: , code: 2015
TVector<TRows> expected;
expected.push_back({1u, 1u, "One"});
expected.push_back({1000000000u, 2u, "Two"});
if (wholeTable) {
if (rangeMode == EReadTableRangeMode::WholeTable) {
expected.push_back({4294967295u, 4u, "Last"});
}
int row = 0;
Expand Down Expand Up @@ -1895,26 +1909,39 @@ R"___(<main>: Error: Transaction not found: , code: 2015
UNIT_ASSERT_VALUES_EQUAL(val, exp.Value);
}
}
UNIT_ASSERT_VALUES_EQUAL(row, wholeTable ? 3 : 2);
switch (rangeMode) {
case EReadTableRangeMode::OneRow:
UNIT_ASSERT_VALUES_EQUAL(row, 1);
break;
case EReadTableRangeMode::TwoRows:
UNIT_ASSERT_VALUES_EQUAL(row, 2);
break;
case EReadTableRangeMode::WholeTable:
UNIT_ASSERT_VALUES_EQUAL(row, 3);
}

// Attempt to call ReadNext on finished iterator causes ContractViolation
UNIT_ASSERT_EXCEPTION(it.ReadNext().GetValueSync().EOS(), NYdb::TContractViolation);
}

Y_UNIT_TEST(TestReadTableMultiShard) {
TestReadTableMultiShard(EReadTableMultiShardMode::Normal, false);
TestReadTableMultiShard(EReadTableMultiShardMode::Normal, EReadTableRangeMode::TwoRows);
}

Y_UNIT_TEST(TestReadTableMultiShardUseSnapshot) {
TestReadTableMultiShard(EReadTableMultiShardMode::UseSnapshot, false);
TestReadTableMultiShard(EReadTableMultiShardMode::UseSnapshot, EReadTableRangeMode::TwoRows);
}

Y_UNIT_TEST(TestReadTableMultiShardWholeTable) {
TestReadTableMultiShard(EReadTableMultiShardMode::Normal, true);
TestReadTableMultiShard(EReadTableMultiShardMode::Normal, EReadTableRangeMode::WholeTable);
}

Y_UNIT_TEST(TestReadTableMultiShardWholeTableUseSnapshot) {
TestReadTableMultiShard(EReadTableMultiShardMode::UseSnapshot, true);
TestReadTableMultiShard(EReadTableMultiShardMode::UseSnapshot, EReadTableRangeMode::WholeTable);
}

Y_UNIT_TEST(TestReadTableMultiShardOneRow) {
TestReadTableMultiShard(EReadTableMultiShardMode::Normal, EReadTableRangeMode::OneRow);
}

void TestReadTableMultiShardWithDescribe(bool rowLimit) {
Expand Down