libasterix-0.11.0: test/TestRawDatablock.hs
module TestRawDatablock (tests) where
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import Data.ByteString.Builder as BSB
import Data.Either
import Data.Maybe
import Data.Word
import Test.Tasty
import Test.Tasty.HUnit
import Asterix.Base
import Asterix.BitString
allowCategory :: Word8 -> RawDatablock -> Bool
allowCategory n db = rawDatablockCategory db == n
rawDatablockFilter :: (RawDatablock -> Bool) -> ByteString -> Builder
rawDatablockFilter predicate s = case parseRawDatablocks s of
Left _err -> BSB.byteString s
Right lst -> mconcat (unparseRawDatablock <$> filter predicate lst)
reverseDatablocks :: ByteString -> Builder
reverseDatablocks s = case parseRawDatablocks s of
Left _err -> BSB.byteString s
Right lst -> mconcat (unparseRawDatablock <$> reverse lst)
-- e.g.: received from the network
samples :: [String]
samples =
[ "01000401" -- cat1
, "01000401" -- cat1
, "02000402" -- cat2
]
datagramIn :: ByteString
datagramIn = fromJust $ unhexlify $ mconcat samples
tests :: TestTree
tests = testGroup "RawDatablock"
[ testCase "correct parsing" $ assertEqual "sample"
True (isRight $ parseRawDatablocks datagramIn)
, testCase "incorrect parsing" $ assertEqual "sample"
True (isLeft $ parseRawDatablocks $ BS.tail datagramIn)
, testCase "filter 1" $ checkFilter 1 cat1
, testCase "filter 2" $ checkFilter 2 cat2
, testCase "reverse" $ assertEqual "sample"
(fromJust $ unhexlify $ mconcat $ reverse samples)
(builderToByteStringSlow $ reverseDatablocks datagramIn)
]
where
cat1 = take 2 samples
cat2 = take 1 $ drop 2 samples
checkFilter n expected = assertEqual (show n)
(mconcat expected)
(hexlify $ builderToByteStringSlow $ rawDatablockFilter (allowCategory n)
datagramIn)