github.com/itscaro/cli@v0.0.0-20190705081621-c9db0fe93829/cli/command/orchestrator_test.go (about)

     1  package command
     2  
     3  import (
     4  	"io/ioutil"
     5  	"testing"
     6  
     7  	"gotest.tools/assert"
     8  	is "gotest.tools/assert/cmp"
     9  	"gotest.tools/env"
    10  )
    11  
    12  func TestOrchestratorSwitch(t *testing.T) {
    13  	var testcases = []struct {
    14  		doc                  string
    15  		globalOrchestrator   string
    16  		envOrchestrator      string
    17  		flagOrchestrator     string
    18  		contextOrchestrator  string
    19  		expectedOrchestrator string
    20  		expectedKubernetes   bool
    21  		expectedSwarm        bool
    22  	}{
    23  		{
    24  			doc:                  "default",
    25  			expectedOrchestrator: "swarm",
    26  			expectedKubernetes:   false,
    27  			expectedSwarm:        true,
    28  		},
    29  		{
    30  			doc:                  "kubernetesConfigFile",
    31  			globalOrchestrator:   "kubernetes",
    32  			expectedOrchestrator: "kubernetes",
    33  			expectedKubernetes:   true,
    34  			expectedSwarm:        false,
    35  		},
    36  		{
    37  			doc:                  "kubernetesEnv",
    38  			envOrchestrator:      "kubernetes",
    39  			expectedOrchestrator: "kubernetes",
    40  			expectedKubernetes:   true,
    41  			expectedSwarm:        false,
    42  		},
    43  		{
    44  			doc:                  "kubernetesFlag",
    45  			flagOrchestrator:     "kubernetes",
    46  			expectedOrchestrator: "kubernetes",
    47  			expectedKubernetes:   true,
    48  			expectedSwarm:        false,
    49  		},
    50  		{
    51  			doc:                  "allOrchestratorFlag",
    52  			flagOrchestrator:     "all",
    53  			expectedOrchestrator: "all",
    54  			expectedKubernetes:   true,
    55  			expectedSwarm:        true,
    56  		},
    57  		{
    58  			doc:                  "kubernetesContext",
    59  			contextOrchestrator:  "kubernetes",
    60  			expectedOrchestrator: "kubernetes",
    61  			expectedKubernetes:   true,
    62  		},
    63  		{
    64  			doc:                  "contextOverridesConfigFile",
    65  			globalOrchestrator:   "kubernetes",
    66  			contextOrchestrator:  "swarm",
    67  			expectedOrchestrator: "swarm",
    68  			expectedKubernetes:   false,
    69  			expectedSwarm:        true,
    70  		},
    71  		{
    72  			doc:                  "envOverridesConfigFile",
    73  			globalOrchestrator:   "kubernetes",
    74  			envOrchestrator:      "swarm",
    75  			expectedOrchestrator: "swarm",
    76  			expectedKubernetes:   false,
    77  			expectedSwarm:        true,
    78  		},
    79  		{
    80  			doc:                  "flagOverridesEnv",
    81  			envOrchestrator:      "kubernetes",
    82  			flagOrchestrator:     "swarm",
    83  			expectedOrchestrator: "swarm",
    84  			expectedKubernetes:   false,
    85  			expectedSwarm:        true,
    86  		},
    87  	}
    88  
    89  	for _, testcase := range testcases {
    90  		t.Run(testcase.doc, func(t *testing.T) {
    91  			if testcase.envOrchestrator != "" {
    92  				defer env.Patch(t, "DOCKER_STACK_ORCHESTRATOR", testcase.envOrchestrator)()
    93  			}
    94  			orchestrator, err := GetStackOrchestrator(testcase.flagOrchestrator, testcase.contextOrchestrator, testcase.globalOrchestrator, ioutil.Discard)
    95  			assert.NilError(t, err)
    96  			assert.Check(t, is.Equal(testcase.expectedKubernetes, orchestrator.HasKubernetes()))
    97  			assert.Check(t, is.Equal(testcase.expectedSwarm, orchestrator.HasSwarm()))
    98  			assert.Check(t, is.Equal(testcase.expectedOrchestrator, string(orchestrator)))
    99  		})
   100  	}
   101  }