11module Test.Database.LSMTree.Internal.BloomFilter (tests ) where
22
33import Control.DeepSeq (deepseq )
4- import Control.Exception (displayException )
4+ import Control.Exception (Exception ( .. ), displayException )
55import Control.Monad (void )
66import qualified Control.Monad.IOSim as IOSim
77import Data.Bits ((.&.) )
88import qualified Data.ByteString as BS
99import qualified Data.ByteString.Builder as BS.Builder
1010import qualified Data.ByteString.Builder.Extra as BS.Builder
1111import qualified Data.ByteString.Lazy as LBS
12+ import qualified Data.List as List
1213import qualified Data.Set as Set
1314import qualified Data.Vector as V
1415import qualified Data.Vector.Primitive as VP
@@ -26,6 +27,8 @@ import Test.Tasty.QuickCheck hiding ((.&.))
2627import Data.BloomFilter.Blocked (Salt )
2728import qualified Data.BloomFilter.Blocked as Bloom
2829import Database.LSMTree.Internal.BloomFilter
30+ import Database.LSMTree.Internal.CRC32C (FileCorruptedError (.. ),
31+ FileFormat (.. ))
2932import Database.LSMTree.Internal.Paths (SessionSalt (.. ))
3033import Database.LSMTree.Internal.Serialise (SerialisedKey ,
3134 serialiseKey )
@@ -69,9 +72,18 @@ limitBits b = b .&. 0xffffff
6972prop_total_deserialisation :: BS. ByteString -> Property
7073prop_total_deserialisation bs =
7174 case bloomFilterFromBS bs of
72- Left err -> label (displayException err) $ property True
75+ Left err ->
76+ label (mkLabel err) $ property True
7377 Right bf -> label " parsed successfully" $ property $
7478 bf `deepseq` True
79+ where
80+ mkLabel err = case err of
81+ IOSim. FailureException e
82+ | Just (ErrFileFormatInvalid fsep FormatBloomFilterFile msg) <- fromException e
83+ , let msg' = " Expected salt does not match actual salt"
84+ , msg' `List.isPrefixOf` msg
85+ -> displayException $ ErrFileFormatInvalid fsep FormatBloomFilterFile msg'
86+ _ -> displayException err
7587
7688-- | Write the bytestring to a file in the mock file system and then use
7789-- 'bloomFilterFromFile'.
@@ -85,7 +97,7 @@ bloomFilterFromBS bs =
8597 void $ FS. hPutAllStrict hfs h bs
8698 -- deserialise from file
8799 FS. withFile hfs file FS. ReadMode $ \ h ->
88- bloomFilterFromFile hfs h
100+ bloomFilterFromFile hfs testSalt h
89101
90102-- Length is in bits. A large length would require significant amount of
91103-- memory, so we make it 'Small'.
0 commit comments