fairly complete tests for git-annex import

This commit is contained in:
Joey Hess 2015-06-03 14:39:47 -04:00
parent ac91641f6e
commit 764c9edc58

60
Test.hs
View file

@ -18,6 +18,7 @@ import Test.Tasty.Ingredients.Rerun
import Options.Applicative hiding (command) import Options.Applicative hiding (command)
import qualified Data.Map as M import qualified Data.Map as M
import qualified Text.JSON import qualified Text.JSON
import Data.Either
import Common import Common
@ -71,6 +72,7 @@ import qualified Utility.Scheduled
import qualified Utility.HumanTime import qualified Utility.HumanTime
import qualified Utility.ThreadScheduler import qualified Utility.ThreadScheduler
import qualified Utility.Base64 import qualified Utility.Base64
import qualified Utility.Tmp
import qualified Command.Uninit import qualified Command.Uninit
import qualified CmdLine.GitAnnex as GitAnnex import qualified CmdLine.GitAnnex as GitAnnex
#ifndef mingw32_HOST_OS #ifndef mingw32_HOST_OS
@ -179,6 +181,7 @@ unitTests :: String -> TestTree
unitTests note = testGroup ("Unit Tests " ++ note) unitTests note = testGroup ("Unit Tests " ++ note)
[ testCase "add sha1dup" test_add_sha1dup [ testCase "add sha1dup" test_add_sha1dup
, testCase "add extras" test_add_extras , testCase "add extras" test_add_extras
, testCase "import" test_import
, testCase "reinject" test_reinject , testCase "reinject" test_reinject
, testCase "unannex (no copy)" test_unannex_nocopy , testCase "unannex (no copy)" test_unannex_nocopy
, testCase "unannex (with copy)" test_unannex_withcopy , testCase "unannex (with copy)" test_unannex_withcopy
@ -280,6 +283,52 @@ test_add_extras = intmpclonerepo $ do
annexed_present wormannexedfile annexed_present wormannexedfile
checkbackend wormannexedfile backendWORM checkbackend wormannexedfile backendWORM
test_import :: Assertion
test_import = intmpclonerepo $ Utility.Tmp.withTmpDir "importtest" $ \importdir -> do
(toimport1, importf1, imported1) <- mktoimport importdir "import1"
git_annex "import" [toimport1] @? "import failed"
annexed_present imported1
checkdoesnotexist importf1
(toimport2, importf2, imported2) <- mktoimport importdir "import2"
git_annex "import" [toimport2] @? "import of duplicate failed"
annexed_present imported2
checkdoesnotexist importf2
(toimport3, importf3, imported3) <- mktoimport importdir "import3"
git_annex "import" ["--skip-duplicates", toimport3]
@? "import of duplicate with --skip-duplicates failed"
checkdoesnotexist imported3
checkexists importf3
git_annex "import" ["--clean-duplicates", toimport3]
@? "import of duplicate with --clean-duplicates failed"
checkdoesnotexist imported3
checkdoesnotexist importf3
(toimport4, importf4, imported4) <- mktoimport importdir "import4"
git_annex "import" ["--deduplicate", toimport4] @? "import --deduplicate failed"
checkdoesnotexist imported4
checkdoesnotexist importf4
(toimport5, importf5, imported5) <- mktoimport importdir "import5"
git_annex "import" ["--duplicate", toimport5] @? "import --duplicate failed"
annexed_present imported5
checkexists importf5
git_annex "drop" ["--force", imported1, imported2, imported5] @? "drop failed"
annexed_notpresent imported2
(toimportdup, importfdup, importeddup) <- mktoimport importdir "importdup"
git_annex "import" ["--clean-duplicates", toimportdup]
@? "import of missing duplicate with --clean-duplicates failed"
checkdoesnotexist importeddup
checkexists importfdup
where
mktoimport importdir subdir = do
createDirectory (importdir </> subdir)
let importf = subdir </> "f"
writeFile (importdir </> importf) (content importf)
return (importdir </> subdir, importdir </> importf, importf)
test_reinject :: Assertion test_reinject :: Assertion
test_reinject = intmpclonerepoInDirect $ do test_reinject = intmpclonerepoInDirect $ do
git_annex "drop" ["--force", sha1annexedfile] @? "drop failed" git_annex "drop" ["--force", sha1annexedfile] @? "drop failed"
@ -1542,6 +1591,16 @@ checkregularfile f = do
isRegularFile s @? f ++ " is not a normal file" isRegularFile s @? f ++ " is not a normal file"
return () return ()
checkdoesnotexist :: FilePath -> Assertion
checkdoesnotexist f =
(isLeft <$> Utility.Exception.tryIO (getSymbolicLinkStatus f))
@? f ++ " exists unexpectedly"
checkexists :: FilePath -> Assertion
checkexists f =
(isRight <$> Utility.Exception.tryIO (getSymbolicLinkStatus f))
@? f ++ " does not exist"
checkcontent :: FilePath -> Assertion checkcontent :: FilePath -> Assertion
checkcontent f = do checkcontent f = do
c <- Utility.Exception.catchDefaultIO "could not read file" $ readFile f c <- Utility.Exception.catchDefaultIO "could not read file" $ readFile f
@ -1693,6 +1752,7 @@ content f
| f == sha1annexedfile ="sha1 annexed file content" | f == sha1annexedfile ="sha1 annexed file content"
| f == sha1annexedfiledup = content sha1annexedfile | f == sha1annexedfiledup = content sha1annexedfile
| f == wormannexedfile = "worm annexed file content" | f == wormannexedfile = "worm annexed file content"
| "import" `isPrefixOf` f = "imported content"
| otherwise = "unknown file " ++ f | otherwise = "unknown file " ++ f
changecontent :: FilePath -> IO () changecontent :: FilePath -> IO ()