github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/manifest/push_test.go (about) 1 package manifest 2 3 import ( 4 "context" 5 "io" 6 "testing" 7 8 "github.com/distribution/reference" 9 "github.com/docker/cli/cli/manifest/store" 10 manifesttypes "github.com/docker/cli/cli/manifest/types" 11 "github.com/docker/cli/internal/test" 12 "github.com/pkg/errors" 13 "gotest.tools/v3/assert" 14 ) 15 16 func newFakeRegistryClient() *fakeRegistryClient { 17 return &fakeRegistryClient{ 18 getManifestFunc: func(_ context.Context, _ reference.Named) (manifesttypes.ImageManifest, error) { 19 return manifesttypes.ImageManifest{}, errors.New("") 20 }, 21 getManifestListFunc: func(_ context.Context, _ reference.Named) ([]manifesttypes.ImageManifest, error) { 22 return nil, errors.Errorf("") 23 }, 24 } 25 } 26 27 func TestManifestPushErrors(t *testing.T) { 28 testCases := []struct { 29 args []string 30 expectedError string 31 }{ 32 { 33 args: []string{"one-arg", "extra-arg"}, 34 expectedError: "requires exactly 1 argument", 35 }, 36 { 37 args: []string{"th!si'sa/fa!ke/li$t/-name"}, 38 expectedError: "invalid reference format", 39 }, 40 } 41 42 for _, tc := range testCases { 43 cli := test.NewFakeCli(nil) 44 cmd := newPushListCommand(cli) 45 cmd.SetArgs(tc.args) 46 cmd.SetOut(io.Discard) 47 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 48 } 49 } 50 51 func TestManifestPush(t *testing.T) { 52 manifestStore := store.NewStore(t.TempDir()) 53 54 registry := newFakeRegistryClient() 55 56 cli := test.NewFakeCli(nil) 57 cli.SetManifestStore(manifestStore) 58 cli.SetRegistryClient(registry) 59 60 namedRef := ref(t, "alpine:3.0") 61 imageManifest := fullImageManifest(t, namedRef) 62 err := manifestStore.Save(ref(t, "list:v1"), namedRef, imageManifest) 63 assert.NilError(t, err) 64 65 cmd := newPushListCommand(cli) 66 cmd.SetArgs([]string{"example.com/list:v1"}) 67 err = cmd.Execute() 68 assert.NilError(t, err) 69 }