Skip to content

Commit ebdb387

Browse files
authored
Add basic test for PDisk on file with encryption (#10315)
1 parent 3f2be3e commit ebdb387

12 files changed

+212
-175
lines changed

ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_ut.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -139,19 +139,6 @@ class TCompletionWorkerWithCounter : public NPDisk::TCompletionAction {
139139
TDuration WorkTime;
140140
};
141141

142-
TString CreateFile(const char *baseDir, ui32 dataSize) {
143-
TString databaseDirectory = MakeDatabasePath(baseDir);
144-
MakeDirIfNotExist(databaseDirectory.c_str());
145-
TString path = MakePDiskPath(baseDir);
146-
{
147-
TFile file(path.c_str(), OpenAlways | RdWr | Seq | Direct);
148-
file.Resize(dataSize);
149-
file.Close();
150-
}
151-
UNIT_ASSERT_EQUAL_C(NFs::Exists(path), true, "File " << path << " does not exist.");
152-
return path;
153-
}
154-
155142
void WaitForValue(TAtomic *counter, TDuration maxDuration, TAtomicBase expectedValue) {
156143
TInstant finishTime = TInstant::Now() + maxDuration;
157144
while (TInstant::Now() < finishTime) {

ydb/core/blobstorage/pdisk/blobstorage_pdisk_restore_ut.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace NKikimr {
1313
Y_UNIT_TEST_SUITE(TYardTestRestore) {
1414

1515
YARD_UNIT_TEST(TestRestore15) {
16-
TTestContext tc(false, true);
16+
TTestContext tc(true);
1717
ui32 chunkSize = MIN_CHUNK_SIZE;
1818
Run<TTestWriteChunksAndLog>(&tc, 1, chunkSize, false);
1919
// TODO(kruall): fix the test and remove the line below

ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
8585
}
8686

8787
Y_UNIT_TEST(TestPDiskActorPDiskStopStart) {
88-
TActorTestContext testCtx({ false });
88+
TActorTestContext testCtx{{}};
8989

9090
const TVDiskID vDiskID(0, 1, 0, 0, 0);
9191
testCtx.TestResponse<NPDisk::TEvYardInitResult>(
@@ -114,7 +114,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
114114
}
115115

116116
Y_UNIT_TEST(TestPDiskOwnerRecreation) {
117-
TActorTestContext testCtx({ false });
117+
TActorTestContext testCtx{{}};
118118

119119
const TVDiskID vDiskID(0, 1, 0, 0, 0);
120120
for (ui32 i = 2; i < 2000; ++i) {
@@ -129,7 +129,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
129129
}
130130

131131
Y_UNIT_TEST(TestPDiskOwnerRecreationWithStableOwner) {
132-
TActorTestContext testCtx({ false });
132+
TActorTestContext testCtx{{}};
133133

134134
// Create "stable" owner, who will be alive during all test
135135
ui32 i = 2;
@@ -151,7 +151,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
151151
}
152152

153153
Y_UNIT_TEST(TestPDiskManyOwnersInitiation) {
154-
TActorTestContext testCtx({ false });
154+
TActorTestContext testCtx{{}};
155155

156156
TVector<TVDiskIDOwnerRound> goodIds;
157157
ui64 badIdsCount = 0;
@@ -184,22 +184,43 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
184184
}
185185
}
186186

187+
188+
// the test is supposed to be fast enough to be used with a lot of different configuration parameters
189+
void BasicTest(TActorTestContext& testCtx, TVDiskMock& mock) {
190+
for (ui32 restarts = 0; restarts < 2; restarts++) {
191+
mock.InitFull();
192+
const int logsSent = 100;
193+
for (int i = 0; i < logsSent; ++i) {
194+
mock.SendEvLogSync();
195+
mock.ReserveChunk();
196+
mock.CommitReservedChunks();
197+
}
198+
199+
mock.Init(); // asserts owned chunks
200+
UNIT_ASSERT(mock.ReadLog() == mock.OwnedLogRecords());
201+
202+
mock.DeleteCommitedChunks();
203+
mock.CutLogAllButOne();
204+
mock.Init(); // asserts log is cut and no chunks owned
205+
testCtx.RestartPDiskSync();
206+
}
207+
}
208+
187209
Y_UNIT_TEST(TestVDiskMock) {
188-
TActorTestContext testCtx({ false });
210+
TActorTestContext testCtx{{}};
189211
TVDiskMock mock(&testCtx);
212+
BasicTest(testCtx, mock);
213+
}
190214

191-
mock.InitFull();
192-
const int logsSent = 100;
193-
for (int i = 0; i < logsSent; ++i) {
194-
mock.SendEvLogSync();
195-
}
215+
Y_UNIT_TEST(TestRealFile) {
216+
TActorTestContext testCtx({ .UseSectorMap = false });
217+
TVDiskMock mock(&testCtx);
196218

197-
mock.Init();
198-
UNIT_ASSERT(mock.ReadLog() == mock.OwnedLogRecords());
219+
BasicTest(testCtx, mock);
199220
}
200221

201222
Y_UNIT_TEST(TestLogWriteReadWithRestarts) {
202-
TActorTestContext testCtx({ false });
223+
TActorTestContext testCtx{{}};
203224

204225
TVDiskMock vdisk(&testCtx);
205226
vdisk.InitFull();
@@ -345,7 +366,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
345366
}
346367

347368
Y_UNIT_TEST(TestFakeErrorPDiskManyLogWrite) {
348-
TActorTestContext testCtx({ false });
369+
TActorTestContext testCtx{{}};
349370
testCtx.TestCtx.SectorMap->IoErrorEveryNthRequests = 1000;
350371

351372
const TVDiskID vDiskID(0, 1, 0, 0, 0);
@@ -370,7 +391,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
370391
}
371392

372393
Y_UNIT_TEST(TestFakeErrorPDiskLogRead) {
373-
TActorTestContext testCtx({ false });
394+
TActorTestContext testCtx{{}};
374395

375396
TVDiskMock vdisk(&testCtx);
376397
vdisk.InitFull();
@@ -398,7 +419,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
398419
}
399420

400421
Y_UNIT_TEST(TestFakeErrorPDiskSysLogRead) {
401-
TActorTestContext testCtx({ false });
422+
TActorTestContext testCtx{{}};
402423

403424
TVDiskMock vdisk(&testCtx);
404425
vdisk.InitFull();
@@ -416,7 +437,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
416437
}
417438

418439
Y_UNIT_TEST(TestFakeErrorPDiskManyChunkRead) {
419-
TActorTestContext testCtx({ false });
440+
TActorTestContext testCtx{{}};
420441
testCtx.TestCtx.SectorMap->ReadIoErrorEveryNthRequests = 100;
421442

422443
TVDiskMock vdisk(&testCtx);
@@ -455,7 +476,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
455476
}
456477

457478
Y_UNIT_TEST(TestFakeErrorPDiskManyChunkWrite) {
458-
TActorTestContext testCtx({ false });
479+
TActorTestContext testCtx{{}};
459480
testCtx.TestCtx.SectorMap->IoErrorEveryNthRequests = 1000;
460481

461482
const TVDiskID vDiskID(0, 1, 0, 0, 0);
@@ -492,7 +513,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
492513
}
493514

494515
Y_UNIT_TEST(TestSIGSEGVInTUndelivered) {
495-
TActorTestContext testCtx({ false });
516+
TActorTestContext testCtx{{}};
496517
const TVDiskID vDiskID(0, 1, 0, 0, 0);
497518
const auto evInitRes = testCtx.TestResponse<NPDisk::TEvYardInitResult>(
498519
new NPDisk::TEvYardInit(2, vDiskID, testCtx.TestCtx.PDiskGuid),
@@ -510,7 +531,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
510531
}
511532

512533
Y_UNIT_TEST(PDiskRestart) {
513-
TActorTestContext testCtx({ false });
534+
TActorTestContext testCtx{{}};
514535
TVDiskMock vdisk(&testCtx);
515536
vdisk.InitFull();
516537
vdisk.SendEvLogSync();
@@ -522,7 +543,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
522543
}
523544

524545
Y_UNIT_TEST(PDiskRestartManyLogWrites) {
525-
TActorTestContext testCtx({ false });
546+
TActorTestContext testCtx{{}};
526547

527548
const TVDiskID vDiskID(0, 1, 0, 0, 0);
528549
const auto evInitRes = testCtx.TestResponse<NPDisk::TEvYardInitResult>(
@@ -557,7 +578,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
557578
}
558579

559580
Y_UNIT_TEST(CommitDeleteChunks) {
560-
TActorTestContext testCtx({ false });
581+
TActorTestContext testCtx{{}};
561582
TVDiskMock intensiveVDisk(&testCtx);
562583
intensiveVDisk.InitFull();
563584
intensiveVDisk.ReserveChunk();
@@ -681,7 +702,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
681702
Y_UNIT_TEST(SpaceColor) {
682703
return; // Enable test after KIKIMR-12880
683704

684-
TActorTestContext testCtx({ false });
705+
TActorTestContext testCtx{{}};
685706
TVDiskMock vdisk(&testCtx);
686707

687708
using TColor = NKikimrBlobStorage::TPDiskSpaceColor;
@@ -717,7 +738,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
717738
}
718739

719740
Y_UNIT_TEST(DeviceHaltTooLong) {
720-
TActorTestContext testCtx({ false });
741+
TActorTestContext testCtx{{}};
721742
testCtx.TestCtx.SectorMap->ImitateRandomWait = {TDuration::Seconds(1), TDuration::Seconds(2)};
722743

723744
TVDiskMock mock(&testCtx);
@@ -733,7 +754,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
733754
}
734755

735756
Y_UNIT_TEST(TestPDiskOnDifferentKeys) {
736-
TActorTestContext testCtx({ false });
757+
TActorTestContext testCtx{{}};
737758

738759
int round = 2;
739760
const TVDiskID vDiskID(0, 1, 0, 0, 0);
@@ -759,7 +780,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
759780
Y_UNIT_TEST(ChangePDiskKey) {
760781
const TString data = PrepareData(4096);
761782

762-
TActorTestContext testCtx({ false });
783+
TActorTestContext testCtx{{}};
763784

764785
TVDiskMock mock(&testCtx);
765786
mock.InitFull();
@@ -813,7 +834,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
813834
Y_UNIT_TEST(WrongPDiskKey) {
814835
const TString data = PrepareData(4096);
815836

816-
TActorTestContext testCtx({ false });
837+
TActorTestContext testCtx{{}};
817838

818839
TVDiskMock mock(&testCtx);
819840
mock.InitFull();
@@ -845,7 +866,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
845866
}
846867

847868
Y_UNIT_TEST(RecreateWithInvalidPDiskKey) {
848-
TActorTestContext testCtx({ false });
869+
TActorTestContext testCtx{{}};
849870
int round = 2;
850871
const TVDiskID vDiskID(0, 1, 0, 0, 0);
851872

@@ -913,7 +934,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
913934
}
914935

915936
Y_UNIT_TEST(TestChunkWriteCrossOwner) {
916-
TActorTestContext testCtx({ false });
937+
TActorTestContext testCtx{{}};
917938

918939
TVDiskMock vdisk1(&testCtx);
919940
TVDiskMock vdisk2(&testCtx);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#include "blobstorage_pdisk_ut_context.h"
2+
#include "blobstorage_pdisk_ut_helpers.h"
3+
4+
namespace NKikimr {
5+
6+
TTestContext::TTestContext(bool useSectorMap, EDiskMode diskMode, ui64 diskSize) {
7+
8+
if (useSectorMap) {
9+
SectorMap = new NPDisk::TSectorMap(diskSize, diskMode);
10+
} else {
11+
TempDir.Reset(new TTempDir);
12+
Path = CreateFile(GetDir(), diskSize);
13+
Cerr << "Path# " << Path << Endl;
14+
}
15+
}
16+
17+
} // namespace NKikimr

ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_context.h

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,15 @@ namespace NKikimr {
1111
class TTestContext {
1212
public:
1313
ui64 PDiskGuid = 0;
14-
const char* Dir = nullptr;
1514
TIntrusivePtr<NPDisk::TSectorMap> SectorMap;
1615
THolder<TTempDir> TempDir;
16+
TString Path;
1717

1818
using EDiskMode = NPDisk::NSectorMap::EDiskMode;
19-
TTestContext(bool makeTempDir, bool useSectorMap, EDiskMode diskMode = EDiskMode::DM_NONE, ui64 sectorMapSize = 0) {
20-
if (makeTempDir) {
21-
TempDir.Reset(new TTempDir);
22-
Dir = TempDir->Name().c_str();
23-
}
24-
if (useSectorMap) {
25-
SectorMap = new NPDisk::TSectorMap(sectorMapSize, diskMode);
26-
}
19+
TTestContext(bool useSectorMap, EDiskMode diskMode = EDiskMode::DM_NONE, ui64 diskSize = 0);
20+
21+
const char *GetDir() {
22+
return TempDir ? TempDir->Name().c_str() : nullptr;
2723
}
2824

2925
bool IsFormatedDiskExpected() {
@@ -32,8 +28,8 @@ class TTestContext {
3228
return true;
3329
}
3430
}
35-
if (Dir) {
36-
return NFs::Exists(Dir);
31+
if (TempDir) {
32+
return NFs::Exists(TempDir->Name());
3733
}
3834
return false;
3935
}

ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_env.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ void RecreateOwner(TActorTestContext& testCtx, TVDiskIDOwnerRound& vdisk) {
1414
}
1515

1616
void TestChunkWriteReleaseRun() {
17-
TActorTestContext testCtx({ false });
17+
TActorTestContext testCtx{{}};
1818

1919
const TVDiskID vDiskID(0, 1, 0, 0, 0);
2020
const auto evInitRes = testCtx.TestResponse<NPDisk::TEvYardInitResult>(

ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_env.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ struct TActorTestContext {
1919
using EDiskMode = NPDisk::NSectorMap::EDiskMode;
2020
public:
2121
struct TSettings {
22-
bool IsBad;
22+
bool IsBad = false;
2323
bool UsePDiskMock = false;
2424
ui64 DiskSize = 0;
2525
EDiskMode DiskMode = EDiskMode::DM_NONE;
2626
ui32 ChunkSize = 128 * (1 << 20);
2727
bool SmallDisk = false;
2828
bool SuppressCompatibilityCheck = false;
29+
bool UseSectorMap = true;
2930
};
3031

3132
private:
@@ -41,17 +42,16 @@ struct TActorTestContext {
4142
TSettings Settings;
4243

4344
TIntrusivePtr<TPDiskConfig> DefaultPDiskConfig(bool isBad) {
44-
TString path;
4545
EntropyPool().Read(&TestCtx.PDiskGuid, sizeof(TestCtx.PDiskGuid));
4646
ui64 formatGuid = TestCtx.PDiskGuid + static_cast<ui64>(isBad);
4747
if (Settings.DiskSize) {
48-
FormatPDiskForTest(path, formatGuid, Settings.ChunkSize, Settings.DiskSize, false, TestCtx.SectorMap, Settings.SmallDisk);
48+
FormatPDiskForTest(TestCtx.Path, formatGuid, Settings.ChunkSize, Settings.DiskSize, false, TestCtx.SectorMap, Settings.SmallDisk);
4949
} else {
50-
FormatPDiskForTest(path, formatGuid, Settings.ChunkSize, false, TestCtx.SectorMap, Settings.SmallDisk);
50+
FormatPDiskForTest(TestCtx.Path, formatGuid, Settings.ChunkSize, false, TestCtx.SectorMap, Settings.SmallDisk);
5151
}
5252

5353
ui64 pDiskCategory = 0;
54-
TIntrusivePtr<TPDiskConfig> pDiskConfig = new TPDiskConfig(path, TestCtx.PDiskGuid, 1, pDiskCategory);
54+
TIntrusivePtr<TPDiskConfig> pDiskConfig = new TPDiskConfig(TestCtx.Path, TestCtx.PDiskGuid, 1, pDiskCategory);
5555
pDiskConfig->GetDriveDataSwitch = NKikimrBlobStorage::TPDiskConfig::DoNotTouch;
5656
pDiskConfig->WriteCacheSwitch = NKikimrBlobStorage::TPDiskConfig::DoNotTouch;
5757
pDiskConfig->ChunkSize = Settings.ChunkSize;
@@ -64,7 +64,7 @@ struct TActorTestContext {
6464

6565
TActorTestContext(TSettings settings)
6666
: Runtime(new TTestActorRuntime(1, true))
67-
, TestCtx(false, true, settings.DiskMode, settings.DiskSize)
67+
, TestCtx(settings.UseSectorMap, settings.DiskMode, settings.DiskSize)
6868
, Settings(settings)
6969
{
7070
auto appData = MakeHolder<TAppData>(0, 0, 0, 0, TMap<TString, ui32>(), nullptr, nullptr, nullptr, nullptr);
@@ -78,7 +78,7 @@ struct TActorTestContext {
7878
Runtime->SetLogPriority(NKikimrServices::BS_PDISK_TEST, NLog::PRI_DEBUG);
7979
Sender = Runtime->AllocateEdgeActor();
8080

81-
TIntrusivePtr<TPDiskConfig> cfg = DefaultPDiskConfig(Settings.IsBad);
81+
auto cfg = DefaultPDiskConfig(Settings.IsBad);
8282
UpdateConfigRecreatePDisk(cfg);
8383
}
8484

@@ -130,7 +130,7 @@ struct TActorTestContext {
130130
}
131131
return PDisk;
132132
}
133-
133+
134134
void GracefulPDiskRestart(bool waitForRestart = true) {
135135
ui32 pdiskId = GetPDisk()->PCtx->PDiskId;
136136

0 commit comments

Comments
 (0)