summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--requirements.txt2
-rw-r--r--tempest_lib/services/identity/v3/token_client.py8
-rw-r--r--tempest_lib/services/network/networks_client.py9
-rw-r--r--tempest_lib/services/network/ports_client.py9
-rw-r--r--tempest_lib/services/network/subnets_client.py9
-rw-r--r--tempest_lib/tests/cli/test_execute.py6
-rw-r--r--tempest_lib/tests/services/identity/v3/test_token_client.py38
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(