Skip to content

Commit 106cf79

Browse files
committed
Roundtrip test for writing/reading snapshot metadata to/from files
1 parent 645248e commit 106cf79

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

lsm-tree.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ test-suite lsm-tree-test
379379
Test.Database.LSMTree.Internal.Serialise
380380
Test.Database.LSMTree.Internal.Serialise.Class
381381
Test.Database.LSMTree.Internal.Snapshot.Codec
382+
Test.Database.LSMTree.Internal.Snapshot.FS
382383
Test.Database.LSMTree.Internal.Vector
383384
Test.Database.LSMTree.Internal.Vector.Growing
384385
Test.Database.LSMTree.Model.Table

test/Main.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import qualified Test.Database.LSMTree.Internal.RunReaders
3030
import qualified Test.Database.LSMTree.Internal.Serialise
3131
import qualified Test.Database.LSMTree.Internal.Serialise.Class
3232
import qualified Test.Database.LSMTree.Internal.Snapshot.Codec
33+
import qualified Test.Database.LSMTree.Internal.Snapshot.FS
3334
import qualified Test.Database.LSMTree.Internal.Vector
3435
import qualified Test.Database.LSMTree.Internal.Vector.Growing
3536
import qualified Test.Database.LSMTree.Model.Table
@@ -68,6 +69,7 @@ main = do
6869
, Test.Database.LSMTree.Internal.Serialise.tests
6970
, Test.Database.LSMTree.Internal.Serialise.Class.tests
7071
, Test.Database.LSMTree.Internal.Snapshot.Codec.tests
72+
, Test.Database.LSMTree.Internal.Snapshot.FS.tests
7173
, Test.Database.LSMTree.Internal.Vector.tests
7274
, Test.Database.LSMTree.Internal.Vector.Growing.tests
7375
, Test.Database.LSMTree.Model.Table.tests
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{-# OPTIONS_GHC -Wno-orphans #-}
2+
3+
-- | Tests for snapshots and their interaction with the file system
4+
--
5+
-- TODO: add fault injection tests using fs-sim
6+
module Test.Database.LSMTree.Internal.Snapshot.FS (tests) where
7+
8+
import Database.LSMTree.Internal.Snapshot
9+
import Database.LSMTree.Internal.Snapshot.Codec
10+
import qualified System.FS.API as FS
11+
import Test.Database.LSMTree.Internal.Snapshot.Codec ()
12+
import Test.Tasty
13+
import Test.Tasty.QuickCheck
14+
import Test.Util.FS
15+
16+
tests :: TestTree
17+
tests = testGroup "Test.Database.LSMTree.Internal.Snapshot.FS" [
18+
testProperty "prop_fsRoundtripSnapshotMetaData"
19+
prop_fsRoundtripSnapshotMetaData
20+
]
21+
22+
-- | @readFileSnapshotMetaData . writeFileSnapshotMetaData = id@
23+
prop_fsRoundtripSnapshotMetaData :: SnapshotMetaData -> Property
24+
prop_fsRoundtripSnapshotMetaData metaData =
25+
ioProperty $
26+
withTempIOHasFS "temp" $ \hfs -> do
27+
writeFileSnapshotMetaData hfs contentPath checksumPath metaData
28+
eMetaData' <- readFileSnapshotMetaData hfs contentPath checksumPath
29+
pure $ case eMetaData' of
30+
Left e -> counterexample (show e) False
31+
Right metaData' -> metaData === metaData'
32+
where
33+
contentPath = FS.mkFsPath ["content"]
34+
checksumPath = FS.mkFsPath ["checksum"]

0 commit comments

Comments
 (0)