cabal-cache-1.0.6.0: test/HaskellWorks/CabalCache/IntegrationSpec.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}
module HaskellWorks.CabalCache.IntegrationSpec
( spec
) where
import Control.Monad (forM_)
import System.FilePath ((</>))
import Test.Hspec (Spec, describe, it)
import qualified Data.List as L
import qualified Data.Time.Clock as DT
import qualified Data.Time.Format as DT
import qualified HaskellWorks.Hspec.Hedgehog as H
import qualified Hedgehog as H
import qualified Hedgehog.Extras.Test.Base as H
import qualified System.Directory as IO
import qualified System.Environment as IO
import qualified System.FilePath.Glob as IO
import qualified Test.Base as H
{- HLINT ignore "Redundant do" -}
{- HLINT ignore "Reduce duplication" -}
{- HLINT ignore "Redundant bracket" -}
spec :: Spec
spec = describe "HaskellWorks.CabalCache.IntegrationSpec" do
it "local" $ H.require . H.withTests 1 $ H.integration $ H.runFinallies . H.workspace "local" $ \tempAbsBasePath' -> do
cwd <- H.noteIO $ IO.getCurrentDirectory
let archivePath = tempAbsBasePath' </> "archive"
let storePath = tempAbsBasePath' </> "store"
let buildPath = cwd </> "dist-newstyle"
H.execCabalCache_
[ "sync-to-archive"
, "--archive-uri"
, archivePath
, "--build-path"
, buildPath
]
H.execCabalCache_
[ "sync-from-archive"
, "--archive-uri"
, archivePath
, "--store-path"
, tempAbsBasePath' </> "store"
, "--build-path"
, buildPath
]
archivedPackages <- H.noteShowIO $ IO.globDir1 (IO.compile "**/*.tar.gz") archivePath
restoredPackages <- H.noteShowIO $ IO.globDir1 (IO.compile "**/cabal-hash.txt") storePath
H.assert $ L.length archivedPackages > 20 -- At least some packages should have been archived
H.assert $ L.length restoredPackages > 20 -- At least some packages should have been archived
it "remote" $ H.require . H.withTests 1 $ H.integration $ H.runFinallies . H.workspace "local" $ \tempAbsBasePath' -> do
cwd <- H.noteIO $ IO.getCurrentDirectory
mBinaryCacheUri <- H.noteShowIO $ IO.lookupEnv "BINARY_CACHE_URI"
forM_ mBinaryCacheUri \binaryCacheUri -> do
now <- H.evalIO DT.getCurrentTime
let formattedNow = DT.formatTime DT.defaultTimeLocale "%Y-%m-%dT%H:%M:%S" now
let storePath = tempAbsBasePath' </> "store"
let buildPath = cwd </> "dist-newstyle"
let archiveUri = binaryCacheUri <> "/" <> "cabal-cache-test" <> "/" <> formattedNow
H.execCabalCache_
[ "sync-to-archive"
, "--archive-uri"
, archiveUri
, "--build-path"
, buildPath
]
H.execCabalCache_
[ "sync-from-archive"
, "--archive-uri"
, archiveUri
, "--store-path"
, tempAbsBasePath' </> "store"
, "--build-path"
, buildPath
]
restoredPackages <- H.noteShowIO $ IO.globDir1 (IO.compile "**/cabal-hash.txt") storePath
H.assert $ L.length restoredPackages > 20 -- At least some packages should have been archived