aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/zenremotestore/projectstore/remoteprojectstore.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/zenremotestore/projectstore/remoteprojectstore.cpp b/src/zenremotestore/projectstore/remoteprojectstore.cpp
index 6bce132c3..8ba2397ff 100644
--- a/src/zenremotestore/projectstore/remoteprojectstore.cpp
+++ b/src/zenremotestore/projectstore/remoteprojectstore.cpp
@@ -7285,6 +7285,43 @@ TEST_CASE("buildcontainer.context_progress_reporting")
CHECK(!Ctx.ProgressMessages.empty());
}
+TEST_CASE("getblocksfromoplog.filtered")
+{
+ // GetBlocksFromOplog(ContainerObject, IncludeBlockHashes) returns only the requested blocks.
+ using namespace projectstore_testutils;
+
+ ScopedTemporaryDirectory TempDir;
+ ScopedTemporaryDirectory ExportDir;
+
+ GcManager Gc;
+ CidStore CidStore(Gc);
+ std::unique_ptr<ProjectStore> ProjectStoreDummy;
+ Ref<ProjectStore::Project> Project = MakeTestProject(CidStore, Gc, TempDir.Path(), ProjectStoreDummy);
+
+ TestWorkerPools Pools;
+ WorkerThreadPool& NetworkPool = Pools.NetworkPool;
+ WorkerThreadPool& WorkerPool = Pools.WorkerPool;
+
+ std::shared_ptr<RemoteProjectStore> RemoteStore = SetupExportStore(CidStore, *Project, NetworkPool, WorkerPool, ExportDir.Path());
+
+ RemoteProjectStore::LoadContainerResult ContainerResult = RemoteStore->LoadContainer();
+ REQUIRE(ContainerResult.ErrorCode == 0);
+
+ std::vector<IoHash> AllBlockHashes = GetBlockHashesFromOplog(ContainerResult.ContainerObject);
+ REQUIRE(!AllBlockHashes.empty());
+
+ // Filter to the first block only.
+ std::vector<IoHash> Subset = {AllBlockHashes[0]};
+ std::vector<ThinChunkBlockDescription> Filtered = GetBlocksFromOplog(ContainerResult.ContainerObject, Subset);
+ CHECK(Filtered.size() == 1);
+ CHECK(Filtered[0].BlockHash == AllBlockHashes[0]);
+ CHECK(!Filtered[0].ChunkRawHashes.empty());
+
+ // Empty include set returns empty result (exercises the no-match branch).
+ std::vector<ThinChunkBlockDescription> Empty = GetBlocksFromOplog(ContainerResult.ContainerObject, std::span<const IoHash>{});
+ CHECK(Empty.empty());
+}
+
// ---------------------------------------------------------------------------
// SaveOplog-focused tests
// ---------------------------------------------------------------------------