Add os-client-config cli tests
Add tests for --os-cloud handling and precedence between CLI, env vars and clouds.yaml. Change-Id: I91d96f483d395f19ffcf74ec0187718ba01a1c41
This commit is contained in:
parent
28f65e6650
commit
90705f191e
@ -13,6 +13,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import copy
|
||||||
import mock
|
import mock
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@ -36,7 +37,6 @@ DEFAULT_TOKEN = "token"
|
|||||||
DEFAULT_SERVICE_URL = "http://127.0.0.1:8771/v3.0/"
|
DEFAULT_SERVICE_URL = "http://127.0.0.1:8771/v3.0/"
|
||||||
DEFAULT_AUTH_PLUGIN = "v2password"
|
DEFAULT_AUTH_PLUGIN = "v2password"
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_COMPUTE_API_VERSION = "2"
|
DEFAULT_COMPUTE_API_VERSION = "2"
|
||||||
DEFAULT_IDENTITY_API_VERSION = "2"
|
DEFAULT_IDENTITY_API_VERSION = "2"
|
||||||
DEFAULT_IMAGE_API_VERSION = "2"
|
DEFAULT_IMAGE_API_VERSION = "2"
|
||||||
@ -49,6 +49,46 @@ LIB_IMAGE_API_VERSION = "1"
|
|||||||
LIB_VOLUME_API_VERSION = "1"
|
LIB_VOLUME_API_VERSION = "1"
|
||||||
LIB_NETWORK_API_VERSION = "2"
|
LIB_NETWORK_API_VERSION = "2"
|
||||||
|
|
||||||
|
CLOUD_1 = {
|
||||||
|
'clouds': {
|
||||||
|
'scc': {
|
||||||
|
'auth': {
|
||||||
|
'auth_url': DEFAULT_AUTH_URL,
|
||||||
|
'project_name': DEFAULT_PROJECT_NAME,
|
||||||
|
'username': 'zaphod',
|
||||||
|
},
|
||||||
|
'region_name': 'occ-cloud',
|
||||||
|
'donut': 'glazed',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CLOUD_2 = {
|
||||||
|
'clouds': {
|
||||||
|
'megacloud': {
|
||||||
|
'cloud': 'megadodo',
|
||||||
|
'auth': {
|
||||||
|
'project_name': 'heart-o-gold',
|
||||||
|
'username': 'zaphod',
|
||||||
|
},
|
||||||
|
'region_name': 'occ-cloud',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PUBLIC_1 = {
|
||||||
|
'public-clouds': {
|
||||||
|
'megadodo': {
|
||||||
|
'auth': {
|
||||||
|
'auth_url': DEFAULT_AUTH_URL,
|
||||||
|
'project_name': DEFAULT_PROJECT_NAME,
|
||||||
|
},
|
||||||
|
'region_name': 'occ-public',
|
||||||
|
'donut': 'cake',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def make_shell():
|
def make_shell():
|
||||||
"""Create a new command shell and mock out some bits."""
|
"""Create a new command shell and mock out some bits."""
|
||||||
@ -516,3 +556,217 @@ class TestShellCli(TestShell):
|
|||||||
"network_api_version": LIB_NETWORK_API_VERSION
|
"network_api_version": LIB_NETWORK_API_VERSION
|
||||||
}
|
}
|
||||||
self._assert_cli(flag, kwargs)
|
self._assert_cli(flag, kwargs)
|
||||||
|
|
||||||
|
@mock.patch("os_client_config.config.OpenStackConfig._load_config_file")
|
||||||
|
def test_shell_args_cloud_no_vendor(self, config_mock):
|
||||||
|
config_mock.return_value = copy.deepcopy(CLOUD_1)
|
||||||
|
_shell = make_shell()
|
||||||
|
|
||||||
|
fake_execute(
|
||||||
|
_shell,
|
||||||
|
"--os-cloud scc list user",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'scc',
|
||||||
|
_shell.cloud.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from clouds.yaml
|
||||||
|
self.assertEqual(
|
||||||
|
DEFAULT_AUTH_URL,
|
||||||
|
_shell.cloud.config['auth']['auth_url'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
DEFAULT_PROJECT_NAME,
|
||||||
|
_shell.cloud.config['auth']['project_name'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'zaphod',
|
||||||
|
_shell.cloud.config['auth']['username'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'occ-cloud',
|
||||||
|
_shell.cloud.config['region_name'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'glazed',
|
||||||
|
_shell.cloud.config['donut'],
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file")
|
||||||
|
@mock.patch("os_client_config.config.OpenStackConfig._load_config_file")
|
||||||
|
def test_shell_args_cloud_public(self, config_mock, public_mock):
|
||||||
|
config_mock.return_value = copy.deepcopy(CLOUD_2)
|
||||||
|
public_mock.return_value = copy.deepcopy(PUBLIC_1)
|
||||||
|
_shell = make_shell()
|
||||||
|
|
||||||
|
fake_execute(
|
||||||
|
_shell,
|
||||||
|
"--os-cloud megacloud list user",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'megacloud',
|
||||||
|
_shell.cloud.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from clouds-public.yaml
|
||||||
|
self.assertEqual(
|
||||||
|
DEFAULT_AUTH_URL,
|
||||||
|
_shell.cloud.config['auth']['auth_url'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'cake',
|
||||||
|
_shell.cloud.config['donut'],
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from clouds.yaml
|
||||||
|
self.assertEqual(
|
||||||
|
'heart-o-gold',
|
||||||
|
_shell.cloud.config['auth']['project_name'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'zaphod',
|
||||||
|
_shell.cloud.config['auth']['username'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'occ-cloud',
|
||||||
|
_shell.cloud.config['region_name'],
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file")
|
||||||
|
@mock.patch("os_client_config.config.OpenStackConfig._load_config_file")
|
||||||
|
def test_shell_args_precedence(self, config_mock, vendor_mock):
|
||||||
|
config_mock.return_value = copy.deepcopy(CLOUD_2)
|
||||||
|
vendor_mock.return_value = copy.deepcopy(PUBLIC_1)
|
||||||
|
_shell = make_shell()
|
||||||
|
|
||||||
|
# Test command option overriding config file value
|
||||||
|
fake_execute(
|
||||||
|
_shell,
|
||||||
|
"--os-cloud megacloud --os-region-name krikkit list user",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'megacloud',
|
||||||
|
_shell.cloud.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from clouds-public.yaml
|
||||||
|
self.assertEqual(
|
||||||
|
DEFAULT_AUTH_URL,
|
||||||
|
_shell.cloud.config['auth']['auth_url'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'cake',
|
||||||
|
_shell.cloud.config['donut'],
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from clouds.yaml
|
||||||
|
self.assertEqual(
|
||||||
|
'heart-o-gold',
|
||||||
|
_shell.cloud.config['auth']['project_name'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'zaphod',
|
||||||
|
_shell.cloud.config['auth']['username'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'krikkit',
|
||||||
|
_shell.cloud.config['region_name'],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestShellCliEnv(TestShell):
|
||||||
|
def setUp(self):
|
||||||
|
super(TestShellCliEnv, self).setUp()
|
||||||
|
env = {
|
||||||
|
'OS_REGION_NAME': 'occ-env',
|
||||||
|
}
|
||||||
|
self.orig_env, os.environ = os.environ, env.copy()
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
super(TestShellCliEnv, self).tearDown()
|
||||||
|
os.environ = self.orig_env
|
||||||
|
|
||||||
|
@mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file")
|
||||||
|
@mock.patch("os_client_config.config.OpenStackConfig._load_config_file")
|
||||||
|
def test_shell_args_precedence_1(self, config_mock, vendor_mock):
|
||||||
|
config_mock.return_value = copy.deepcopy(CLOUD_2)
|
||||||
|
vendor_mock.return_value = copy.deepcopy(PUBLIC_1)
|
||||||
|
_shell = make_shell()
|
||||||
|
|
||||||
|
# Test env var
|
||||||
|
fake_execute(
|
||||||
|
_shell,
|
||||||
|
"--os-cloud megacloud list user",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'megacloud',
|
||||||
|
_shell.cloud.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from clouds-public.yaml
|
||||||
|
self.assertEqual(
|
||||||
|
DEFAULT_AUTH_URL,
|
||||||
|
_shell.cloud.config['auth']['auth_url'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'cake',
|
||||||
|
_shell.cloud.config['donut'],
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from clouds.yaml
|
||||||
|
self.assertEqual(
|
||||||
|
'heart-o-gold',
|
||||||
|
_shell.cloud.config['auth']['project_name'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'zaphod',
|
||||||
|
_shell.cloud.config['auth']['username'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'occ-env',
|
||||||
|
_shell.cloud.config['region_name'],
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file")
|
||||||
|
@mock.patch("os_client_config.config.OpenStackConfig._load_config_file")
|
||||||
|
def test_shell_args_precedence_2(self, config_mock, vendor_mock):
|
||||||
|
config_mock.return_value = copy.deepcopy(CLOUD_2)
|
||||||
|
vendor_mock.return_value = copy.deepcopy(PUBLIC_1)
|
||||||
|
_shell = make_shell()
|
||||||
|
|
||||||
|
# Test command option overriding config file value
|
||||||
|
fake_execute(
|
||||||
|
_shell,
|
||||||
|
"--os-cloud megacloud --os-region-name krikkit list user",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'megacloud',
|
||||||
|
_shell.cloud.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from clouds-public.yaml
|
||||||
|
self.assertEqual(
|
||||||
|
DEFAULT_AUTH_URL,
|
||||||
|
_shell.cloud.config['auth']['auth_url'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'cake',
|
||||||
|
_shell.cloud.config['donut'],
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from clouds.yaml
|
||||||
|
self.assertEqual(
|
||||||
|
'heart-o-gold',
|
||||||
|
_shell.cloud.config['auth']['project_name'],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'zaphod',
|
||||||
|
_shell.cloud.config['auth']['username'],
|
||||||
|
)
|
||||||
|
|
||||||
|
# These come from the command line
|
||||||
|
self.assertEqual(
|
||||||
|
'krikkit',
|
||||||
|
_shell.cloud.config['region_name'],
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user