@@ -24,7 +24,7 @@ import qualified Data.ByteString.Lazy as BL
2424import qualified Data.HashMap.Strict as HM
2525import Data.Int (Int)
2626import qualified Data.Map as M
27−import Data.Maybe (fromJust, isJust)
27+import Data.Maybe (fromJust, isJust, isNothing, listToMaybe)
2828import Data.Monoid
2929import Data.Text (Text, unpack)
3030import qualified Data.Vector as V
@@ -40,6 +40,7 @@ import Docker.Client
4040
4141-- opts = defaultClientOpts
4242testImageName = "docker-hs/test"
43+imageToDeleteFullName = "hello-world:latest"
4344
4445toStrict1 = B.concat . BL.toChunks
4546
@@ -73,13 +74,27 @@ testFindImage =
7374 where
7475 imageFullName = testImageName <> ":latest"
7576
77+testDeleteImage :: IO ()
78+testDeleteImage = runDocker $ do
79+ img <- fmap fromJust findTestImage
80+ result <- deleteImage defaultImageDeleteOpts (imageId img)
81+ lift $ assert $ isRight result
82+ maybeTestImageAfter <- findTestImage
83+ lift $ assert $ isNothing maybeTestImageAfter
84+ where
85+ findTestImage =
86+ do
87+ images <- listImages defaultListOpts >>= fromRight
88+ return $ listToMaybe
89+ $ filter (elem imageToDeleteFullName . imageRepoTags) images
90+
7691testListContainers :: IO ()
7792testListContainers =
7893 runDocker $
7994 do containerId <- createContainer (defaultCreateOpts (testImageName <> ":latest")) Nothing
8095 c <- fromRight containerId
8196 res <- listContainers $ ListOpts { all=True }
82− deleteContainer (DeleteOpts True True) c
97+ deleteContainer (ContainerDeleteOpts True True) c
8398 lift $ assert $ isRight res
8499
85100testBuildFromDockerfile :: IO ()
@@ -110,7 +125,7 @@ testRunAndReadLogHelper networkingConfig =
110125 lift $ assertBool ("starting the container, unexpected status: " ++ show status1) $ isRightUnit status1
111126 logs <- getContainerLogs defaultLogOpts c >>= fromRight
112127 lift $ assert $ (C.pack "123") `C.isInfixOf` (toStrict1 logs)
113− status3 <- deleteContainer (DeleteOpts True True) c
128+ status3 <- deleteContainer (ContainerDeleteOpts True True) c
114129 lift $ assertBool ("deleting container, unexpected status: " ++ show status3) $ isRightUnit status3
115130 mapM_ removeNetwork createdNetworks
116131 where
@@ -228,6 +243,7 @@ integrationTests =
228243 [ testCase "Get docker version" testDockerVersion
229244 , testCase "Build image from Dockerfile" testBuildFromDockerfile
230245 , testCase "Find image by name" testFindImage
246+ , testCase "Delete image" testDeleteImage
231247 , testCase "List containers" testListContainers
232248 , testCase "Run a dummy container and read its log" testRunAndReadLog
233249 , testCase "Run a dummy container with networking and read its log" testRunAndReadLogWithNetworking
@@ -249,7 +265,11 @@ jsonTests =
249265 ]
250266
251267setup :: IO ()
252−setup = system ("docker build -t " ++ unpack testImageName ++ " tests") >> return ()
268+setup =
269+ mapM_ system
270+ [ "docker pull " ++ unpack imageToDeleteFullName
271+ , "docker build -t " ++ unpack testImageName ++ " tests"
272+ ]
253273
254274isLeft = not . isRight
255275