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  }