github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/manifest/annotate_test.go (about) 1 package manifest 2 3 import ( 4 "io" 5 "testing" 6 7 "github.com/docker/cli/cli/manifest/store" 8 "github.com/docker/cli/internal/test" 9 "gotest.tools/v3/assert" 10 is "gotest.tools/v3/assert/cmp" 11 "gotest.tools/v3/golden" 12 ) 13 14 func TestManifestAnnotateError(t *testing.T) { 15 testCases := []struct { 16 args []string 17 expectedError string 18 }{ 19 { 20 args: []string{"too-few-arguments"}, 21 expectedError: "requires exactly 2 arguments", 22 }, 23 { 24 args: []string{"th!si'sa/fa!ke/li$t/name", "example.com/alpine:3.0"}, 25 expectedError: "error parsing name for manifest list", 26 }, 27 { 28 args: []string{"example.com/list:v1", "th!si'sa/fa!ke/im@ge/nam32"}, 29 expectedError: "error parsing name for manifest", 30 }, 31 } 32 33 for _, tc := range testCases { 34 cli := test.NewFakeCli(nil) 35 cmd := newAnnotateCommand(cli) 36 cmd.SetArgs(tc.args) 37 cmd.SetOut(io.Discard) 38 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 39 } 40 } 41 42 func TestManifestAnnotate(t *testing.T) { 43 manifestStore := store.NewStore(t.TempDir()) 44 45 cli := test.NewFakeCli(nil) 46 cli.SetManifestStore(manifestStore) 47 namedRef := ref(t, "alpine:3.0") 48 imageManifest := fullImageManifest(t, namedRef) 49 err := manifestStore.Save(ref(t, "list:v1"), namedRef, imageManifest) 50 assert.NilError(t, err) 51 52 cmd := newAnnotateCommand(cli) 53 cmd.SetArgs([]string{"example.com/list:v1", "example.com/fake:0.0"}) 54 cmd.SetOut(io.Discard) 55 expectedError := "manifest for image example.com/fake:0.0 does not exist" 56 assert.ErrorContains(t, cmd.Execute(), expectedError) 57 58 cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.0"}) 59 cmd.Flags().Set("os", "freebsd") 60 cmd.Flags().Set("arch", "fake") 61 cmd.Flags().Set("os-version", "1") 62 cmd.Flags().Set("os-features", "feature1") 63 cmd.Flags().Set("variant", "v7") 64 expectedError = "manifest entry for image has unsupported os/arch combination" 65 assert.ErrorContains(t, cmd.Execute(), expectedError) 66 67 cmd.Flags().Set("arch", "arm") 68 assert.NilError(t, cmd.Execute()) 69 70 cmd = newInspectCommand(cli) 71 err = cmd.Flags().Set("verbose", "true") 72 assert.NilError(t, err) 73 cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.0"}) 74 assert.NilError(t, cmd.Execute()) 75 actual := cli.OutBuffer() 76 expected := golden.Get(t, "inspect-annotate.golden") 77 assert.Check(t, is.Equal(string(expected), actual.String())) 78 }