@@ -170,6 +170,110 @@ func TestExperimentalCLI(t *testing.T) {
170170 }
171171}
172172
173+ func TestOrchestratorSwitch (t * testing.T ) {
174+ defaultVersion := "v0.00"
175+
176+ var testcases = []struct {
177+ doc string
178+ configfile string
179+ envOrchestrator string
180+ flagOrchestrator string
181+ expectedOrchestrator string
182+ expectedKubernetes bool
183+ }{
184+ {
185+ doc : "default" ,
186+ configfile : `{
187+ "experimental": "enabled"
188+ }` ,
189+ expectedOrchestrator : "swarm" ,
190+ expectedKubernetes : false ,
191+ },
192+ {
193+ doc : "kubernetesIsExperimental" ,
194+ configfile : `{
195+ "experimental": "disabled",
196+ "orchestrator": "kubernetes"
197+ }` ,
198+ envOrchestrator : "kubernetes" ,
199+ flagOrchestrator : "kubernetes" ,
200+ expectedOrchestrator : "swarm" ,
201+ expectedKubernetes : false ,
202+ },
203+ {
204+ doc : "kubernetesConfigFile" ,
205+ configfile : `{
206+ "experimental": "enabled",
207+ "orchestrator": "kubernetes"
208+ }` ,
209+ expectedOrchestrator : "kubernetes" ,
210+ expectedKubernetes : true ,
211+ },
212+ {
213+ doc : "kubernetesEnv" ,
214+ configfile : `{
215+ "experimental": "enabled"
216+ }` ,
217+ envOrchestrator : "kubernetes" ,
218+ expectedOrchestrator : "kubernetes" ,
219+ expectedKubernetes : true ,
220+ },
221+ {
222+ doc : "kubernetesFlag" ,
223+ configfile : `{
224+ "experimental": "enabled"
225+ }` ,
226+ flagOrchestrator : "kubernetes" ,
227+ expectedOrchestrator : "kubernetes" ,
228+ expectedKubernetes : true ,
229+ },
230+ {
231+ doc : "envOverridesConfigFile" ,
232+ configfile : `{
233+ "experimental": "enabled",
234+ "orchestrator": "kubernetes"
235+ }` ,
236+ envOrchestrator : "swarm" ,
237+ expectedOrchestrator : "swarm" ,
238+ expectedKubernetes : false ,
239+ },
240+ {
241+ doc : "flagOverridesEnv" ,
242+ configfile : `{
243+ "experimental": "enabled"
244+ }` ,
245+ envOrchestrator : "kubernetes" ,
246+ flagOrchestrator : "swarm" ,
247+ expectedOrchestrator : "swarm" ,
248+ expectedKubernetes : false ,
249+ },
250+ }
251+
252+ for _ , testcase := range testcases {
253+ t .Run (testcase .doc , func (t * testing.T ) {
254+ dir := fs .NewDir (t , testcase .doc , fs .WithFile ("config.json" , testcase .configfile ))
255+ defer dir .Remove ()
256+ apiclient := & fakeClient {
257+ version : defaultVersion ,
258+ }
259+ if testcase .envOrchestrator != "" {
260+ defer patchEnvVariable (t , "DOCKER_ORCHESTRATOR" , testcase .envOrchestrator )()
261+ }
262+
263+ cli := & DockerCli {client : apiclient , err : os .Stderr }
264+ cliconfig .SetDir (dir .Path ())
265+ options := flags .NewClientOptions ()
266+ if testcase .flagOrchestrator != "" {
267+ options .Common .Orchestrator = testcase .flagOrchestrator
268+ }
269+ err := cli .Initialize (options )
270+ assert .NoError (t , err )
271+ assert .Equal (t , testcase .expectedKubernetes , cli .ClientInfo ().HasKubernetes ())
272+ assert .Equal (t , testcase .expectedOrchestrator , string (cli .ClientInfo ().Orchestrator ))
273+ })
274+ }
275+ }
276+
173277func TestGetClientWithPassword (t * testing.T ) {
174278 expected := "password"
175279
0 commit comments