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
@@ -25,6 +26,8 @@ import Test.Tasty.QuickCheck hiding ((.&.))
2526
2627import qualified Data.BloomFilter.Blocked as Bloom
2728import Database.LSMTree.Internal.BloomFilter
29+ import Database.LSMTree.Internal.CRC32C (FileCorruptedError (.. ),
30+ FileFormat (.. ))
2831import Database.LSMTree.Internal.Serialise (SerialisedKey ,
2932 serialiseKey )
3033
@@ -64,9 +67,18 @@ limitBits b = b .&. 0xffffff
6467prop_total_deserialisation :: BS. ByteString -> Property
6568prop_total_deserialisation bs =
6669 case bloomFilterFromBS bs of
67- Left err -> label (displayException err) $ property True
70+ Left err ->
71+ label (mkLabel err) $ property True
6872 Right bf -> label " parsed successfully" $ property $
6973 bf `deepseq` True
74+ where
75+ mkLabel err = case err of
76+ IOSim. FailureException e
77+ | Just (ErrFileFormatInvalid fsep FormatBloomFilterFile msg) <- fromException e
78+ , let msg' = " Expected salt does not match actual salt"
79+ , msg' `List.isPrefixOf` msg
80+ -> displayException $ ErrFileFormatInvalid fsep FormatBloomFilterFile msg'
81+ _ -> displayException err
7082
7183-- | Write the bytestring to a file in the mock file system and then use
7284-- 'bloomFilterFromFile'.
@@ -80,7 +92,7 @@ bloomFilterFromBS bs =
8092 void $ FS. hPutAllStrict hfs h bs
8193 -- deserialise from file
8294 FS. withFile hfs file FS. ReadMode $ \ h ->
83- bloomFilterFromFile hfs h
95+ bloomFilterFromFile hfs testSalt h
8496
8597-- Length is in bits. A large length would require significant amount of
8698-- memory, so we make it 'Small'.
0 commit comments