-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request moby#36841 from yongtang/02222018-tag-test
Migrate image tag tests from integration-cli to api tests
- Loading branch information
Showing
2 changed files
with
139 additions
and
139 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
package image // import "github.com/docker/docker/integration/image" | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/docker/docker/integration/internal/request" | ||
"github.com/docker/docker/internal/testutil" | ||
"github.com/gotestyourself/gotestyourself/assert" | ||
is "github.com/gotestyourself/gotestyourself/assert/cmp" | ||
) | ||
|
||
// tagging a named image in a new unprefixed repo should work | ||
func TestTagUnprefixedRepoByNameOrName(t *testing.T) { | ||
defer setupTest(t)() | ||
client := request.NewAPIClient(t) | ||
ctx := context.Background() | ||
|
||
// By name | ||
err := client.ImageTag(ctx, "busybox:latest", "testfoobarbaz") | ||
assert.NilError(t, err) | ||
|
||
// By ID | ||
insp, _, err := client.ImageInspectWithRaw(ctx, "busybox") | ||
assert.NilError(t, err) | ||
err = client.ImageTag(ctx, insp.ID, "testfoobarbaz") | ||
assert.NilError(t, err) | ||
} | ||
|
||
// ensure we don't allow the use of invalid repository names or tags; these tag operations should fail | ||
// TODO (yongtang): Migrate to unit tests | ||
func TestTagInvalidReference(t *testing.T) { | ||
defer setupTest(t)() | ||
client := request.NewAPIClient(t) | ||
ctx := context.Background() | ||
|
||
invalidRepos := []string{"fo$z$", "Foo@3cc", "Foo$3", "Foo*3", "Fo^3", "Foo!3", "F)xcz(", "fo%asd", "FOO/bar"} | ||
|
||
for _, repo := range invalidRepos { | ||
err := client.ImageTag(ctx, "busybox", repo) | ||
testutil.ErrorContains(t, err, "not a valid repository/tag") | ||
} | ||
|
||
longTag := testutil.GenerateRandomAlphaOnlyString(121) | ||
|
||
invalidTags := []string{"repo:fo$z$", "repo:Foo@3cc", "repo:Foo$3", "repo:Foo*3", "repo:Fo^3", "repo:Foo!3", "repo:%goodbye", "repo:#hashtagit", "repo:F)xcz(", "repo:-foo", "repo:..", longTag} | ||
|
||
for _, repotag := range invalidTags { | ||
err := client.ImageTag(ctx, "busybox", repotag) | ||
testutil.ErrorContains(t, err, "not a valid repository/tag") | ||
} | ||
|
||
// test repository name begin with '-' | ||
err := client.ImageTag(ctx, "busybox:latest", "-busybox:test") | ||
testutil.ErrorContains(t, err, "Error parsing reference") | ||
|
||
// test namespace name begin with '-' | ||
err = client.ImageTag(ctx, "busybox:latest", "-test/busybox:test") | ||
testutil.ErrorContains(t, err, "Error parsing reference") | ||
|
||
// test index name begin with '-' | ||
err = client.ImageTag(ctx, "busybox:latest", "-index:5000/busybox:test") | ||
testutil.ErrorContains(t, err, "Error parsing reference") | ||
|
||
// test setting tag fails | ||
err = client.ImageTag(ctx, "busybox:latest", "sha256:sometag") | ||
testutil.ErrorContains(t, err, "refusing to create an ambiguous tag using digest algorithm as name") | ||
} | ||
|
||
// ensure we allow the use of valid tags | ||
func TestTagValidPrefixedRepo(t *testing.T) { | ||
defer setupTest(t)() | ||
client := request.NewAPIClient(t) | ||
ctx := context.Background() | ||
|
||
validRepos := []string{"fooo/bar", "fooaa/test", "foooo:t", "HOSTNAME.DOMAIN.COM:443/foo/bar"} | ||
|
||
for _, repo := range validRepos { | ||
err := client.ImageTag(ctx, "busybox", repo) | ||
assert.NilError(t, err) | ||
} | ||
} | ||
|
||
// tag an image with an existed tag name without -f option should work | ||
func TestTagExistedNameWithoutForce(t *testing.T) { | ||
defer setupTest(t)() | ||
client := request.NewAPIClient(t) | ||
ctx := context.Background() | ||
|
||
err := client.ImageTag(ctx, "busybox:latest", "busybox:test") | ||
assert.NilError(t, err) | ||
} | ||
|
||
// ensure tagging using official names works | ||
// ensure all tags result in the same name | ||
func TestTagOfficialNames(t *testing.T) { | ||
defer setupTest(t)() | ||
client := request.NewAPIClient(t) | ||
ctx := context.Background() | ||
|
||
names := []string{ | ||
"docker.io/busybox", | ||
"index.docker.io/busybox", | ||
"library/busybox", | ||
"docker.io/library/busybox", | ||
"index.docker.io/library/busybox", | ||
} | ||
|
||
for _, name := range names { | ||
err := client.ImageTag(ctx, "busybox", name+":latest") | ||
assert.NilError(t, err) | ||
|
||
// ensure we don't have multiple tag names. | ||
insp, _, err := client.ImageInspectWithRaw(ctx, "busybox") | ||
assert.NilError(t, err) | ||
assert.Assert(t, !is.Contains(insp.RepoTags, name)().Success()) | ||
} | ||
|
||
for _, name := range names { | ||
err := client.ImageTag(ctx, name+":latest", "fooo/bar:latest") | ||
assert.NilError(t, err) | ||
} | ||
} | ||
|
||
// ensure tags can not match digests | ||
func TestTagMatchesDigest(t *testing.T) { | ||
defer setupTest(t)() | ||
client := request.NewAPIClient(t) | ||
ctx := context.Background() | ||
|
||
digest := "busybox@sha256:abcdef76720241213f5303bda7704ec4c2ef75613173910a56fb1b6e20251507" | ||
// test setting tag fails | ||
err := client.ImageTag(ctx, "busybox:latest", digest) | ||
testutil.ErrorContains(t, err, "refusing to create a tag with a digest reference") | ||
// check that no new image matches the digest | ||
_, _, err = client.ImageInspectWithRaw(ctx, digest) | ||
testutil.ErrorContains(t, err, fmt.Sprintf("No such image: %s", digest)) | ||
} |