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 }