tar-0.7.0.0: test/Codec/Archive/Tar/Tests.hs
{-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
-- |
-- Module : Codec.Archive.Tar.Tests
-- Copyright : (c) 2007 Bjorn Bringert,
-- 2008 Andrea Vezzosi,
-- 2008-2012 Duncan Coutts
-- License : BSD3
--
-- Maintainer : duncan@community.haskell.org
-- Portability : portable
--
-----------------------------------------------------------------------------
module Codec.Archive.Tar.Tests (
prop_write_read_ustar,
prop_write_read_gnu,
prop_write_read_v7,
prop_large_filesize,
) where
import Codec.Archive.Tar
import Codec.Archive.Tar.Types
import Codec.Archive.Tar.Types.Tests
import qualified Data.ByteString.Lazy as BL
import Prelude hiding (read)
import Test.Tasty.QuickCheck
prop_write_read_ustar :: [Entry] -> Property
prop_write_read_ustar entries =
foldr Next Done entries' === read (write entries')
where
entries' = filter ((== UstarFormat) . entryFormat) entries
prop_write_read_gnu :: [Entry] -> Property
prop_write_read_gnu entries =
foldr Next Done entries' === read (write entries')
where
entries' = filter ((== GnuFormat) . entryFormat) entries
prop_write_read_v7 :: [Entry] -> Property
prop_write_read_v7 entries =
foldr Next Done entries' === read (write entries')
where
entries' = map limitToV7FormatCompat $ filter ((== V7Format) . entryFormat) entries
prop_large_filesize :: Word -> Property
prop_large_filesize n = case toTarPath False "Large.file" of
Left{} -> property False
Right fn -> case read tar of
Next entry' _ -> case entryContent entry' of
NormalFile _ sz' -> sz === sz'
_ -> property False
_ -> property False
where
sz = fromIntegral $ n * 1024 * 1024 * 128
entry = simpleEntry fn (NormalFile (BL.replicate sz 42) sz)
-- Trim the tail so it does not blow up RAM
tar = BL.take 2048 $ write [entry]