github.com/xeptore/docker-cli@v20.10.14+incompatible/cli/command/service/rollback_test.go (about)

     1  package service
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/docker/cli/internal/test"
    11  	"github.com/docker/docker/api/types"
    12  	"github.com/docker/docker/api/types/swarm"
    13  	"gotest.tools/v3/assert"
    14  	is "gotest.tools/v3/assert/cmp"
    15  )
    16  
    17  func TestRollback(t *testing.T) {
    18  	testCases := []struct {
    19  		name                 string
    20  		args                 []string
    21  		serviceUpdateFunc    func(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options types.ServiceUpdateOptions) (types.ServiceUpdateResponse, error)
    22  		expectedDockerCliErr string
    23  	}{
    24  		{
    25  			name: "rollback-service",
    26  			args: []string{"service-id"},
    27  		},
    28  		{
    29  			name: "rollback-service-with-warnings",
    30  			args: []string{"service-id"},
    31  			serviceUpdateFunc: func(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options types.ServiceUpdateOptions) (types.ServiceUpdateResponse, error) {
    32  				response := types.ServiceUpdateResponse{}
    33  
    34  				response.Warnings = []string{
    35  					"- warning 1",
    36  					"- warning 2",
    37  				}
    38  
    39  				return response, nil
    40  			},
    41  			expectedDockerCliErr: "- warning 1\n- warning 2",
    42  		},
    43  	}
    44  
    45  	for _, tc := range testCases {
    46  		cli := test.NewFakeCli(&fakeClient{
    47  			serviceUpdateFunc: tc.serviceUpdateFunc,
    48  		})
    49  		cmd := newRollbackCommand(cli)
    50  		cmd.SetArgs(tc.args)
    51  		cmd.Flags().Set("quiet", "true")
    52  		cmd.SetOut(ioutil.Discard)
    53  		assert.NilError(t, cmd.Execute())
    54  		assert.Check(t, is.Equal(strings.TrimSpace(cli.ErrBuffer().String()), tc.expectedDockerCliErr))
    55  	}
    56  }
    57  
    58  func TestRollbackWithErrors(t *testing.T) {
    59  	testCases := []struct {
    60  		name                      string
    61  		args                      []string
    62  		serviceInspectWithRawFunc func(ctx context.Context, serviceID string, options types.ServiceInspectOptions) (swarm.Service, []byte, error)
    63  		serviceUpdateFunc         func(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options types.ServiceUpdateOptions) (types.ServiceUpdateResponse, error)
    64  		expectedError             string
    65  	}{
    66  		{
    67  			name:          "not-enough-args",
    68  			expectedError: "requires exactly 1 argument",
    69  		},
    70  		{
    71  			name:          "too-many-args",
    72  			args:          []string{"service-id-1", "service-id-2"},
    73  			expectedError: "requires exactly 1 argument",
    74  		},
    75  		{
    76  			name: "service-does-not-exists",
    77  			args: []string{"service-id"},
    78  			serviceInspectWithRawFunc: func(ctx context.Context, serviceID string, options types.ServiceInspectOptions) (swarm.Service, []byte, error) {
    79  				return swarm.Service{}, []byte{}, fmt.Errorf("no such services: %s", serviceID)
    80  			},
    81  			expectedError: "no such services: service-id",
    82  		},
    83  		{
    84  			name: "service-update-failed",
    85  			args: []string{"service-id"},
    86  			serviceUpdateFunc: func(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options types.ServiceUpdateOptions) (types.ServiceUpdateResponse, error) {
    87  				return types.ServiceUpdateResponse{}, fmt.Errorf("no such services: %s", serviceID)
    88  			},
    89  			expectedError: "no such services: service-id",
    90  		},
    91  	}
    92  
    93  	for _, tc := range testCases {
    94  		cmd := newRollbackCommand(
    95  			test.NewFakeCli(&fakeClient{
    96  				serviceInspectWithRawFunc: tc.serviceInspectWithRawFunc,
    97  				serviceUpdateFunc:         tc.serviceUpdateFunc,
    98  			}))
    99  		cmd.SetArgs(tc.args)
   100  		cmd.Flags().Set("quiet", "true")
   101  		cmd.SetOut(ioutil.Discard)
   102  		assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
   103  	}
   104  }