Browse code

Add tests for rmi

Add integration test for removing by image id with tag and digest reference to the same repository.
Add integration test to ensure only tag to other repository remains after deleting tag with accompanying digest reference.

Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
(cherry picked from commit 5cff374b140b4a836b7082d009bcfe9a6e96f1af)

Derek McGowan authored on 2016/06/18 01:18:27
Showing 1 changed files
... ...
@@ -380,9 +380,14 @@ func (s *DockerRegistrySuite) TestDeleteImageByIDOnlyPulledByDigest(c *check.C)
380 380
 	dockerCmd(c, "pull", imageReference)
381 381
 	// just in case...
382 382
 
383
+	dockerCmd(c, "tag", imageReference, repoName+":sometag")
384
+
383 385
 	imageID := inspectField(c, imageReference, "Id")
384 386
 
385 387
 	dockerCmd(c, "rmi", imageID)
388
+
389
+	_, err = inspectFieldWithError(imageID, "Id")
390
+	c.Assert(err, checker.NotNil, check.Commentf("image should have been deleted"))
386 391
 }
387 392
 
388 393
 func (s *DockerRegistrySuite) TestDeleteImageWithDigestAndTag(c *check.C) {
... ...
@@ -412,6 +417,40 @@ func (s *DockerRegistrySuite) TestDeleteImageWithDigestAndTag(c *check.C) {
412 412
 	c.Assert(err, checker.NotNil, check.Commentf("image should have been deleted"))
413 413
 }
414 414
 
415
+func (s *DockerRegistrySuite) TestDeleteImageWithDigestAndMultiRepoTag(c *check.C) {
416
+	pushDigest, err := setupImage(c)
417
+	c.Assert(err, checker.IsNil, check.Commentf("error setting up image"))
418
+
419
+	repo2 := fmt.Sprintf("%s/%s", repoName, "repo2")
420
+
421
+	// pull from the registry using the <name>@<digest> reference
422
+	imageReference := fmt.Sprintf("%s@%s", repoName, pushDigest)
423
+	dockerCmd(c, "pull", imageReference)
424
+
425
+	imageID := inspectField(c, imageReference, "Id")
426
+
427
+	repoTag := repoName + ":sometag"
428
+	repoTag2 := repo2 + ":othertag"
429
+	dockerCmd(c, "tag", imageReference, repoTag)
430
+	dockerCmd(c, "tag", imageReference, repoTag2)
431
+
432
+	dockerCmd(c, "rmi", repoTag)
433
+
434
+	// rmi should have deleted repoTag and image reference, but left repoTag2
435
+	inspectField(c, repoTag2, "Id")
436
+	_, err = inspectFieldWithError(imageReference, "Id")
437
+	c.Assert(err, checker.NotNil, check.Commentf("image digest reference should have been removed"))
438
+
439
+	_, err = inspectFieldWithError(repoTag, "Id")
440
+	c.Assert(err, checker.NotNil, check.Commentf("image tag reference should have been removed"))
441
+
442
+	dockerCmd(c, "rmi", repoTag2)
443
+
444
+	// rmi should have deleted the tag, the digest reference, and the image itself
445
+	_, err = inspectFieldWithError(imageID, "Id")
446
+	c.Assert(err, checker.NotNil, check.Commentf("image should have been deleted"))
447
+}
448
+
415 449
 // TestPullFailsWithAlteredManifest tests that a `docker pull` fails when
416 450
 // we have modified a manifest blob and its digest cannot be verified.
417 451
 // This is the schema2 version of the test.