From 0ebf5968d935d1fce38ae912fca80b609e2f55c1 Mon Sep 17 00:00:00 2001 From: "torlando-agent[bot]" <281092095+torlando-agent[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 08:17:38 +0000 Subject: [PATCH] test: cover post-commit tile cleanup recovery --- tests/native/test_map_tile_store.cpp | 12 +++++++++++- tests/native/test_map_tile_store.py | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/native/test_map_tile_store.cpp b/tests/native/test_map_tile_store.cpp index d6432ac5..da98a09a 100644 --- a/tests/native/test_map_tile_store.cpp +++ b/tests/native/test_map_tile_store.cpp @@ -235,8 +235,18 @@ void testMalformedEvictionManifestFailsClosed() { beginTest(); FakeStorage fs; fs.add("/pyxis-map/tiles/.evict.txn",std::vector(21U,0U)); MapTileStore s(fs,config()); CHECK(s.initialize()==TileStoreResult::INDEX_MISMATCH); } +void testPostCommitCleanupResidueKeepsWholeNewGeneration() { beginTest(); FakeStorage fs; + const TileKey a={1U,0U,0U}, b={1U,1U,0U}, c={1U,0U,1U}; + fs.add("/pyxis-map/tiles/1/0/0.png.evict",png()); + fs.add("/pyxis-map/tiles/1/1/0.png.evict",png()); + fs.add("/pyxis-map/tiles/1/0/1.png",png(80U)); + MapTileStore s(fs,config(3U,80U,80U)); CHECK(s.initialize()==TileStoreResult::OK); + CHECK(s.entryCount()==1U); CHECK(s.totalBytes()==80U); drain(s,c,80U); + std::uint32_t size=0U; CHECK(s.beginGet(a,size)==TileStoreResult::MISS); CHECK(s.beginGet(b,size)==TileStoreResult::MISS); + CHECK(fs.find("/pyxis-map/tiles/1/0/0.png.evict")<0); CHECK(fs.find("/pyxis-map/tiles/1/1/0.png.evict")<0); +} void testDeterministicStress() { beginTest(); FakeStorage fs; MapTileStore s(fs,config(3U,120U,80U)); CHECK(s.initialize()==TileStoreResult::OK); CHECK(put(s,TileKey{2U,0U,0U},png())==TileStoreResult::OK); std::uint32_t size=0U; for(std::uint32_t i=0U;i<100000U;++i) { const TileKey k={2U,i&3U,(i>>2)&3U}; TileStoreResult r=s.beginGet(k,size); CHECK(r==TileStoreResult::OK||r==TileStoreResult::MISS); if(r==TileStoreResult::OK)s.endGet(); } } } -int main() { testKeyAndCanonicalPath(); testMissHitAndRemoval(); testMalformedPngs(); testShortWriteAbortsTemp(); testExactQuotaAndLruEviction(); testDuplicateAtomicReplacement(); testInterruptedFilesRecover(); testLiveWinsRecovery(); testCorruptLiveRecoversValidBackup(); testCorruptLiveWithoutBackupIsRemoved(); testStaleTempRemovalFailureAbortsPut(); testRecoveryRejectsMalformedAndExhaustion(); testRecoveryQuotaFailsClosed(); testRenameFailureRestoresDuplicate(); testPromotionFailureDoesNotEvictVictims(); testEvictionPreflightFailurePreservesAllVictims(); testEvictionStageFailureRollsBackAllVictims(); testEvictionPowerCutsRestoreWholeOldGeneration(); testDuplicateEvictionPowerCutsRestoreOldCandidateAndVictim(); testMalformedEvictionManifestFailsClosed(); testDeterministicStress(); std::cout<<"map tile store: "< None: env["UBSAN_OPTIONS"] = "halt_on_error=1:print_stacktrace=1" ran = subprocess.run([str(binary)], capture_output=True, text=True, timeout=60, env=env) assert ran.returncode == 0, ran.stdout + ran.stderr - assert ran.stdout == "map tile store: 21 tests passed\n" + assert ran.stdout == "map tile store: 22 tests passed\n"