github.com/AliyunContainerService/cli@v0.0.0-20181009023821-814ced4b30d0/cli/command/orchestrator_test.go (about)

     1  package command
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"testing"
     7  
     8  	cliconfig "github.com/docker/cli/cli/config"
     9  	"github.com/docker/cli/cli/flags"
    10  	"gotest.tools/assert"
    11  	is "gotest.tools/assert/cmp"
    12  	"gotest.tools/env"
    13  	"gotest.tools/fs"
    14  )
    15  
    16  func TestOrchestratorSwitch(t *testing.T) {
    17  	defaultVersion := "v0.00"
    18  
    19  	var testcases = []struct {
    20  		doc                  string
    21  		configfile           string
    22  		envOrchestrator      string
    23  		flagOrchestrator     string
    24  		expectedOrchestrator string
    25  		expectedKubernetes   bool
    26  		expectedSwarm        bool
    27  	}{
    28  		{
    29  			doc: "default",
    30  			configfile: `{
    31  			}`,
    32  			expectedOrchestrator: "swarm",
    33  			expectedKubernetes:   false,
    34  			expectedSwarm:        true,
    35  		},
    36  		{
    37  			doc: "kubernetesConfigFile",
    38  			configfile: `{
    39  				"stackOrchestrator": "kubernetes"
    40  			}`,
    41  			expectedOrchestrator: "kubernetes",
    42  			expectedKubernetes:   true,
    43  			expectedSwarm:        false,
    44  		},
    45  		{
    46  			doc: "kubernetesEnv",
    47  			configfile: `{
    48  			}`,
    49  			envOrchestrator:      "kubernetes",
    50  			expectedOrchestrator: "kubernetes",
    51  			expectedKubernetes:   true,
    52  			expectedSwarm:        false,
    53  		},
    54  		{
    55  			doc: "kubernetesFlag",
    56  			configfile: `{
    57  			}`,
    58  			flagOrchestrator:     "kubernetes",
    59  			expectedOrchestrator: "kubernetes",
    60  			expectedKubernetes:   true,
    61  			expectedSwarm:        false,
    62  		},
    63  		{
    64  			doc: "allOrchestratorFlag",
    65  			configfile: `{
    66  			}`,
    67  			flagOrchestrator:     "all",
    68  			expectedOrchestrator: "all",
    69  			expectedKubernetes:   true,
    70  			expectedSwarm:        true,
    71  		},
    72  		{
    73  			doc: "envOverridesConfigFile",
    74  			configfile: `{
    75  				"stackOrchestrator": "kubernetes"
    76  			}`,
    77  			envOrchestrator:      "swarm",
    78  			expectedOrchestrator: "swarm",
    79  			expectedKubernetes:   false,
    80  			expectedSwarm:        true,
    81  		},
    82  		{
    83  			doc: "flagOverridesEnv",
    84  			configfile: `{
    85  			}`,
    86  			envOrchestrator:      "kubernetes",
    87  			flagOrchestrator:     "swarm",
    88  			expectedOrchestrator: "swarm",
    89  			expectedKubernetes:   false,
    90  			expectedSwarm:        true,
    91  		},
    92  	}
    93  
    94  	for _, testcase := range testcases {
    95  		t.Run(testcase.doc, func(t *testing.T) {
    96  			dir := fs.NewDir(t, testcase.doc, fs.WithFile("config.json", testcase.configfile))
    97  			defer dir.Remove()
    98  			apiclient := &fakeClient{
    99  				version: defaultVersion,
   100  			}
   101  			if testcase.envOrchestrator != "" {
   102  				defer env.Patch(t, "DOCKER_STACK_ORCHESTRATOR", testcase.envOrchestrator)()
   103  			}
   104  
   105  			cli := &DockerCli{client: apiclient, err: os.Stderr}
   106  			cliconfig.SetDir(dir.Path())
   107  			options := flags.NewClientOptions()
   108  			err := cli.Initialize(options)
   109  			assert.NilError(t, err)
   110  
   111  			orchestrator, err := GetStackOrchestrator(testcase.flagOrchestrator, cli.ConfigFile().StackOrchestrator, ioutil.Discard)
   112  			assert.NilError(t, err)
   113  			assert.Check(t, is.Equal(testcase.expectedKubernetes, orchestrator.HasKubernetes()))
   114  			assert.Check(t, is.Equal(testcase.expectedSwarm, orchestrator.HasSwarm()))
   115  			assert.Check(t, is.Equal(testcase.expectedOrchestrator, string(orchestrator)))
   116  		})
   117  	}
   118  }