packages feed

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]