diff options
-rw-r--r-- | requirements.txt | 2 | ||||
-rw-r--r-- | tempest_lib/services/identity/v3/token_client.py | 8 | ||||
-rw-r--r-- | tempest_lib/services/network/networks_client.py | 9 | ||||
-rw-r--r-- | tempest_lib/services/network/ports_client.py | 9 | ||||
-rw-r--r-- | tempest_lib/services/network/subnets_client.py | 9 | ||||
-rw-r--r-- | tempest_lib/tests/cli/test_execute.py | 6 | ||||
-rw-r--r-- | tempest_lib/tests/services/identity/v3/test_token_client.py | 38 |
7 files changed, 76 insertions, 5 deletions
diff --git a/requirements.txt b/requirements.txt index 040f51d..7287588 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ fixtures>=1.3.1 # Apache-2.0/BSD iso8601>=0.1.9 # MIT jsonschema!=2.5.0,<3.0.0,>=2.0.0 # MIT httplib2>=0.7.5 # MIT -paramiko>=1.13.0 # LGPL +paramiko>=1.16.0 # LGPL six>=1.9.0 # MIT oslo.log>=1.14.0 # Apache-2.0 os-testr>=0.4.1 # Apache-2.0 diff --git a/tempest_lib/services/identity/v3/token_client.py b/tempest_lib/services/identity/v3/token_client.py index c030bba..868b4f7 100644 --- a/tempest_lib/services/identity/v3/token_client.py +++ b/tempest_lib/services/identity/v3/token_client.py @@ -105,10 +105,10 @@ class V3TokenClient(rest_client.RestClient): elif project_name: _project['name'] = project_name - if project_domain_id is not None: - _project['domain'] = {'id': project_domain_id} - elif project_domain_name is not None: - _project['domain'] = {'name': project_domain_name} + if project_domain_id is not None: + _project['domain'] = {'id': project_domain_id} + elif project_domain_name is not None: + _project['domain'] = {'name': project_domain_name} creds['auth']['scope'] = dict(project=_project) elif domain_id: diff --git a/tempest_lib/services/network/networks_client.py b/tempest_lib/services/network/networks_client.py index 71699db..541cdab 100644 --- a/tempest_lib/services/network/networks_client.py +++ b/tempest_lib/services/network/networks_client.py @@ -36,3 +36,12 @@ class NetworksClient(base.BaseNetworkClient): def list_networks(self, **filters): uri = '/networks' return self.list_resources(uri, **filters) + + def create_bulk_networks(self, **kwargs): + """Create multiple networks in a single request. + + Available params: see http://developer.openstack.org/ + api-ref-networking-v2.html#bulkCreateNetwork + """ + uri = '/networks' + return self.create_resource(uri, kwargs) diff --git a/tempest_lib/services/network/ports_client.py b/tempest_lib/services/network/ports_client.py index 92bf07b..9afbb9c 100644 --- a/tempest_lib/services/network/ports_client.py +++ b/tempest_lib/services/network/ports_client.py @@ -36,3 +36,12 @@ class PortsClient(base.BaseNetworkClient): def list_ports(self, **filters): uri = '/ports' return self.list_resources(uri, **filters) + + def create_bulk_ports(self, **kwargs): + """Create multiple ports in a single request. + + Available params: see http://developer.openstack.org/ + api-ref-networking-v2.html#bulkCreatePorts + """ + uri = '/ports' + return self.create_resource(uri, kwargs) diff --git a/tempest_lib/services/network/subnets_client.py b/tempest_lib/services/network/subnets_client.py index f824d48..4b50047 100644 --- a/tempest_lib/services/network/subnets_client.py +++ b/tempest_lib/services/network/subnets_client.py @@ -36,3 +36,12 @@ class SubnetsClient(base.BaseNetworkClient): def list_subnets(self, **filters): uri = '/subnets' return self.list_resources(uri, **filters) + + def create_bulk_subnets(self, **kwargs): + """Create multiple subnets in a single request. + + Available params: see http://developer.openstack.org/ + api-ref-networking-v2.html#bulkCreateSubnet + """ + uri = '/subnets' + return self.create_resource(uri, kwargs) diff --git a/tempest_lib/tests/cli/test_execute.py b/tempest_lib/tests/cli/test_execute.py index b56d614..c86f190 100644 --- a/tempest_lib/tests/cli/test_execute.py +++ b/tempest_lib/tests/cli/test_execute.py @@ -13,6 +13,7 @@ from tempest_lib.cli import base as cli_base +from tempest_lib import exceptions from tempest_lib.tests import base @@ -29,3 +30,8 @@ class TestExecute(base.TestCase): fail_ok=True) self.assertIsInstance(result, str) self.assertIn("--foobar", result) + + def test_execute_failure_raise_exception(self): + self.assertRaises(exceptions.CommandFailed, cli_base.execute, + "/bin/ls", action="tempest_lib", flags="--foobar", + merge_stderr=True) diff --git a/tempest_lib/tests/services/identity/v3/test_token_client.py b/tempest_lib/tests/services/identity/v3/test_token_client.py index 44cc8e2..b3a8b28 100644 --- a/tempest_lib/tests/services/identity/v3/test_token_client.py +++ b/tempest_lib/tests/services/identity/v3/test_token_client.py @@ -57,6 +57,44 @@ class TestTokenClientV2(base.TestCase): post_mock.mock.assert_called_once_with('fake_url/auth/tokens', body=req_dict) + def test_auth_with_project_id_and_domain_id(self): + token_client_v3 = token_client.V3TokenClient('fake_url') + post_mock = self.useFixture(mockpatch.PatchObject( + token_client_v3, 'post', return_value=self.fake_201_http.request( + 'fake_url', body={'access': {'token': 'fake_token'}}))) + resp = token_client_v3.auth( + username='fake_user', password='fake_pass', + project_id='fcac2a055a294e4c82d0a9c21c620eb4', + user_domain_id='14f4a9a99973404d8c20ba1d2af163ff', + project_domain_id='291f63ae9ac54ee292ca09e5f72d9676') + self.assertIsInstance(resp, rest_client.ResponseBody) + req_dict = json.dumps({ + 'auth': { + 'identity': { + 'methods': ['password'], + 'password': { + 'user': { + 'name': 'fake_user', + 'password': 'fake_pass', + 'domain': { + 'id': '14f4a9a99973404d8c20ba1d2af163ff' + } + } + } + }, + 'scope': { + 'project': { + 'id': 'fcac2a055a294e4c82d0a9c21c620eb4', + 'domain': { + 'id': '291f63ae9ac54ee292ca09e5f72d9676' + } + } + } + } + }, sort_keys=True) + post_mock.mock.assert_called_once_with('fake_url/auth/tokens', + body=req_dict) + def test_auth_with_tenant(self): token_client_v2 = token_client.V3TokenClient('fake_url') post_mock = self.useFixture(mockpatch.PatchObject( |