Skip to content

Commit a34545d

Browse files
authored
Merge pull request #493 from IntersectMBO/jdral/roundtrip-snapshot-metadata-file
Roundtrip test for writing/reading snapshot metadata to/from files
2 parents d2d60a2 + 106cf79 commit a34545d

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
@@ -374,6 +374,7 @@ test-suite lsm-tree-test
374374
Test.Database.LSMTree.Internal.Serialise
375375
Test.Database.LSMTree.Internal.Serialise.Class
376376
Test.Database.LSMTree.Internal.Snapshot.Codec
377+
Test.Database.LSMTree.Internal.Snapshot.FS
377378
Test.Database.LSMTree.Internal.Vector
378379
Test.Database.LSMTree.Internal.Vector.Growing
379380
Test.Database.LSMTree.Model.Table

test/Main.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import qualified Test.Database.LSMTree.Internal.RunReaders
2929
import qualified Test.Database.LSMTree.Internal.Serialise
3030
import qualified Test.Database.LSMTree.Internal.Serialise.Class
3131
import qualified Test.Database.LSMTree.Internal.Snapshot.Codec
32+
import qualified Test.Database.LSMTree.Internal.Snapshot.FS
3233
import qualified Test.Database.LSMTree.Internal.Vector
3334
import qualified Test.Database.LSMTree.Internal.Vector.Growing
3435
import qualified Test.Database.LSMTree.Model.Table
@@ -66,6 +67,7 @@ main = do
6667
, Test.Database.LSMTree.Internal.Serialise.tests
6768
, Test.Database.LSMTree.Internal.Serialise.Class.tests
6869
, Test.Database.LSMTree.Internal.Snapshot.Codec.tests
70+
, Test.Database.LSMTree.Internal.Snapshot.FS.tests
6971
, Test.Database.LSMTree.Internal.Vector.tests
7072
, Test.Database.LSMTree.Internal.Vector.Growing.tests
7173
, 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)