@@ -24,7 +24,7 @@ import qualified Data.ByteString.Lazy as BL
24import qualified Data.HashMap.Strict as HM
24import qualified Data.HashMap.Strict as HM
25import Data.Int (Int)
25import Data.Int (Int)
26import qualified Data.Map as M
26import qualified Data.Map as M
27−import Data.Maybe (fromJust, isJust)
27+import Data.Maybe (fromJust, isJust, isNothing, listToMaybe)
28import Data.Monoid
28import Data.Monoid
29import Data.Text (Text, unpack)
29import Data.Text (Text, unpack)
30import qualified Data.Vector as V
30import qualified Data.Vector as V
@@ -40,6 +40,7 @@ import Docker.Client
41-- opts = defaultClientOpts
41-- opts = defaultClientOpts
42testImageName = "docker-hs/test"
42testImageName = "docker-hs/test"
43+imageToDeleteFullName = "hello-world:latest"
44toStrict1 = B.concat . BL.toChunks
45toStrict1 = B.concat . BL.toChunks
@@ -73,13 +74,27 @@ testFindImage =
74 imageFullName = testImageName <> ":latest"
75 imageFullName = testImageName <> ":latest"
77+testDeleteImage :: IO ()
78+testDeleteImage = runDocker $ do
79+ (Just img) <- findTestImage
80+ result <- deleteImage defaultImageDeleteOpts (imageId img)
81+ lift $ assert $ isRight result
82+ maybeTestImageAfter <- findTestImage
83+ lift $ assert $ isNothing maybeTestImageAfter
87+ images <- listImages defaultListOpts >>= fromRight
89+ $ filter (elem imageToDeleteFullName . imageRepoTags) images
76testListContainers :: IO ()
91testListContainers :: IO ()
77testListContainers =
92testListContainers =
78 runDocker $
93 runDocker $
79 do containerId <- createContainer (defaultCreateOpts (testImageName <> ":latest")) Nothing
94 do containerId <- createContainer (defaultCreateOpts (testImageName <> ":latest")) Nothing
80 c <- fromRight containerId
95 c <- fromRight containerId
81 res <- listContainers $ ListOpts { all=True }
96 res <- listContainers $ ListOpts { all=True }
82− deleteContainer (DeleteOpts True True) c
97+ deleteContainer (ContainerDeleteOpts True True) c
83 lift $ assert $ isRight res
98 lift $ assert $ isRight res
85testBuildFromDockerfile :: IO ()
100testBuildFromDockerfile :: IO ()
@@ -110,7 +125,7 @@ testRunAndReadLogHelper networkingConfig =
110 lift $ assertBool ("starting the container, unexpected status: " ++ show status1) $ isRightUnit status1
125 lift $ assertBool ("starting the container, unexpected status: " ++ show status1) $ isRightUnit status1
111 logs <- getContainerLogs defaultLogOpts c >>= fromRight
126 logs <- getContainerLogs defaultLogOpts c >>= fromRight
112 lift $ assert $ (C.pack "123") `C.isInfixOf` (toStrict1 logs)
127 lift $ assert $ (C.pack "123") `C.isInfixOf` (toStrict1 logs)
113− status3 <- deleteContainer (DeleteOpts True True) c
128+ status3 <- deleteContainer (ContainerDeleteOpts True True) c
114 lift $ assertBool ("deleting container, unexpected status: " ++ show status3) $ isRightUnit status3
129 lift $ assertBool ("deleting container, unexpected status: " ++ show status3) $ isRightUnit status3
115 mapM_ removeNetwork createdNetworks
130 mapM_ removeNetwork createdNetworks
@@ -228,6 +243,7 @@ integrationTests =
228 [ testCase "Get docker version" testDockerVersion
243 [ testCase "Get docker version" testDockerVersion
229 , testCase "Build image from Dockerfile" testBuildFromDockerfile
244 , testCase "Build image from Dockerfile" testBuildFromDockerfile
230 , testCase "Find image by name" testFindImage
245 , testCase "Find image by name" testFindImage
246+ , testCase "Delete image" testDeleteImage
231 , testCase "List containers" testListContainers
247 , testCase "List containers" testListContainers
232 , testCase "Run a dummy container and read its log" testRunAndReadLog
248 , testCase "Run a dummy container and read its log" testRunAndReadLog
233 , testCase "Run a dummy container with networking and read its log" testRunAndReadLogWithNetworking
249 , testCase "Run a dummy container with networking and read its log" testRunAndReadLogWithNetworking
@@ -249,7 +265,11 @@ jsonTests =
251setup :: IO ()
267setup :: IO ()
270+ [ "docker pull " ++ unpack imageToDeleteFullName
252−setup = system ("docker build -t " ++ unpack testImageName ++ " tests") >> return ()
271+ , "docker build -t " ++ unpack testImageName ++ " tests"
254isLeft = not . isRight
274isLeft = not . isRight