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