From 3b2863e369ef472042a054e11d189b6fbc34bb42 Mon Sep 17 00:00:00 2001
From: Dean Troyer <dtroyer@gmail.com>
Date: Thu, 22 Aug 2019 11:05:05 -0500
Subject: [PATCH] Fix functional.base.TestCase.openstack() to optionally omit
 --os-auth-type

Change the functional test TestCase.openstack() method to add a
way to not include the --os-auth-type option in order to test the
default auth-type logic.

Change-Id: I0f1ca2f7517a41278afaad5aaf4e98accb16bea2
Signed-off-by: Dean Troyer <dtroyer@gmail.com>
---
 openstackclient/tests/functional/base.py | 28 ++++++++++++++++++------
 1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/openstackclient/tests/functional/base.py b/openstackclient/tests/functional/base.py
index c34ca39332..08e9390e3e 100644
--- a/openstackclient/tests/functional/base.py
+++ b/openstackclient/tests/functional/base.py
@@ -44,18 +44,32 @@ class TestCase(testtools.TestCase):
 
     @classmethod
     def openstack(cls, cmd, cloud=ADMIN_CLOUD, fail_ok=False):
-        """Executes openstackclient command for the given action."""
-        if cloud is not None:
-            return execute(
-                'openstack --os-cloud={cloud} '.format(cloud=cloud) + cmd,
-                fail_ok=fail_ok
-            )
-        else:
+        """Executes openstackclient command for the given action
+
+        NOTE(dtroyer): There is a subtle distinction between pasing
+        cloud=None and cloud='': for compatibility reasons passing
+        cloud=None continues to include the option '--os-auth-type none'
+        in the command while passing cloud='' omits the '--os-auth-type'
+         option completely to let the default handlers be invoked.
+        """
+        if cloud is None:
             # Execute command with no auth
             return execute(
                 'openstack --os-auth-type none ' + cmd,
                 fail_ok=fail_ok
             )
+        elif cloud == '':
+            # Execute command with no auth options at all
+            return execute(
+                'openstack ' + cmd,
+                fail_ok=fail_ok
+            )
+        else:
+            # Execure command with an explicit cloud specified
+            return execute(
+                'openstack --os-cloud=' + cloud + ' ' + cmd,
+                fail_ok=fail_ok
+            )
 
     @classmethod
     def is_service_enabled(cls, service):