summaryrefslogtreecommitdiff
path: root/openstackclient/tests
diff options
context:
space:
mode:
authorDean Troyer <dtroyer@gmail.com>2017-09-14 11:06:51 -0500
committerDean Troyer <dtroyer@gmail.com>2017-09-14 11:16:11 -0500
commit5309bf5f873aba4e994c9011a893987c40d56eda (patch)
tree9e1bf90f6bb27cc6e0a5f9b4ef81ef8431d21599 /openstackclient/tests
parent5e5239d5eb635470b0c3bc63c4a6263808c41c9b (diff)
parentf63bb180036c0f2d096eefaaaf2fbdd60a427343 (diff)
downloadpython-openstackclient-5309bf5f873aba4e994c9011a893987c40d56eda.tar.gz
Merge remote-tracking branch 'origin/master' into f4-merge-branch
Change-Id: Ie6c321e67aa9338334e4649879e60847a5d1eb56
Diffstat (limited to 'openstackclient/tests')
-rw-r--r--openstackclient/tests/functional/base.py2
-rw-r--r--openstackclient/tests/functional/compute/v2/test_keypair.py4
-rw-r--r--openstackclient/tests/functional/identity/v3/test_service_provider.py3
-rw-r--r--openstackclient/tests/functional/network/v2/test_network_qos_policy.py80
-rw-r--r--openstackclient/tests/functional/network/v2/test_network_qos_rule.py339
-rw-r--r--openstackclient/tests/functional/network/v2/test_network_qos_rule_type.py7
-rw-r--r--openstackclient/tests/functional/network/v2/test_network_rbac.py85
-rw-r--r--openstackclient/tests/functional/network/v2/test_network_segment.py144
-rw-r--r--openstackclient/tests/functional/network/v2/test_network_service_provider.py9
-rw-r--r--openstackclient/tests/functional/network/v2/test_security_group.py70
-rw-r--r--openstackclient/tests/functional/network/v2/test_security_group_rule.py88
-rw-r--r--openstackclient/tests/functional/volume/v1/common.py27
-rw-r--r--openstackclient/tests/unit/api/test_compute_v2.py4
-rw-r--r--openstackclient/tests/unit/common/test_logs.py1
-rw-r--r--openstackclient/tests/unit/common/test_quota.py2
-rw-r--r--openstackclient/tests/unit/compute/v2/fakes.py3
-rw-r--r--openstackclient/tests/unit/compute/v2/test_keypair.py4
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py2
-rw-r--r--openstackclient/tests/unit/compute/v2/test_usage.py1
-rw-r--r--openstackclient/tests/unit/fakes.py2
-rw-r--r--openstackclient/tests/unit/identity/v2_0/fakes.py2
-rw-r--r--openstackclient/tests/unit/identity/v2_0/test_role_assignment.py2
-rw-r--r--openstackclient/tests/unit/identity/v3/fakes.py26
-rw-r--r--openstackclient/tests/unit/identity/v3/test_identity_provider.py1
-rw-r--r--openstackclient/tests/unit/identity/v3/test_implied_role.py181
-rw-r--r--openstackclient/tests/unit/identity/v3/test_mappings.py2
-rw-r--r--openstackclient/tests/unit/identity/v3/test_role.py2
-rw-r--r--openstackclient/tests/unit/identity/v3/test_role_assignment.py1
-rw-r--r--openstackclient/tests/unit/identity/v3/test_trust.py2
-rw-r--r--openstackclient/tests/unit/identity/v3/test_user.py2
-rw-r--r--openstackclient/tests/unit/image/v1/fakes.py3
-rw-r--r--openstackclient/tests/unit/image/v1/test_image.py2
-rw-r--r--openstackclient/tests/unit/image/v2/fakes.py2
-rw-r--r--openstackclient/tests/unit/image/v2/test_image.py2
-rw-r--r--openstackclient/tests/unit/integ/cli/test_shell.py2
-rw-r--r--openstackclient/tests/unit/network/test_common.py3
-rw-r--r--openstackclient/tests/unit/network/v2/fakes.py3
-rw-r--r--openstackclient/tests/unit/network/v2/test_network.py4
-rw-r--r--openstackclient/tests/unit/network/v2/test_port.py2
-rw-r--r--openstackclient/tests/unit/network/v2/test_subnet_pool.py1
-rw-r--r--openstackclient/tests/unit/object/v1/test_container.py1
-rw-r--r--openstackclient/tests/unit/object/v1/test_object.py1
-rw-r--r--openstackclient/tests/unit/test_shell.py2
-rw-r--r--openstackclient/tests/unit/utils.py3
-rw-r--r--openstackclient/tests/unit/volume/v1/fakes.py3
-rw-r--r--openstackclient/tests/unit/volume/v1/test_qos_specs.py1
-rw-r--r--openstackclient/tests/unit/volume/v1/test_volume.py1
-rw-r--r--openstackclient/tests/unit/volume/v2/fakes.py2
-rw-r--r--openstackclient/tests/unit/volume/v2/test_qos_specs.py1
-rw-r--r--openstackclient/tests/unit/volume/v2/test_snapshot.py1
-rw-r--r--openstackclient/tests/unit/volume/v2/test_volume.py1
51 files changed, 664 insertions, 475 deletions
diff --git a/openstackclient/tests/functional/base.py b/openstackclient/tests/functional/base.py
index 4c88b13e..90bbc24d 100644
--- a/openstackclient/tests/functional/base.py
+++ b/openstackclient/tests/functional/base.py
@@ -14,10 +14,10 @@ import os
import re
import shlex
import subprocess
-import testtools
from tempest.lib.cli import output_parser
from tempest.lib import exceptions
+import testtools
COMMON_DIR = os.path.dirname(os.path.abspath(__file__))
diff --git a/openstackclient/tests/functional/compute/v2/test_keypair.py b/openstackclient/tests/functional/compute/v2/test_keypair.py
index 1e1a03d6..9a88e66f 100644
--- a/openstackclient/tests/functional/compute/v2/test_keypair.py
+++ b/openstackclient/tests/functional/compute/v2/test_keypair.py
@@ -13,11 +13,11 @@
import json
import tempfile
-from openstackclient.tests.functional import base
-
from tempest.lib.common.utils import data_utils
from tempest.lib import exceptions
+from openstackclient.tests.functional import base
+
class KeypairBase(base.TestCase):
"""Methods for functional tests."""
diff --git a/openstackclient/tests/functional/identity/v3/test_service_provider.py b/openstackclient/tests/functional/identity/v3/test_service_provider.py
index e072bc93..32b7a463 100644
--- a/openstackclient/tests/functional/identity/v3/test_service_provider.py
+++ b/openstackclient/tests/functional/identity/v3/test_service_provider.py
@@ -10,9 +10,10 @@
# License for the specific language governing permissions and limitations
# under the License.
-from openstackclient.tests.functional.identity.v3 import common
from tempest.lib.common.utils import data_utils
+from openstackclient.tests.functional.identity.v3 import common
+
class ServiceProviderTests(common.IdentityTests):
# Introduce functional test cases for command 'Service Provider'
diff --git a/openstackclient/tests/functional/network/v2/test_network_qos_policy.py b/openstackclient/tests/functional/network/v2/test_network_qos_policy.py
index 53c15ecf..27c1b6aa 100644
--- a/openstackclient/tests/functional/network/v2/test_network_qos_policy.py
+++ b/openstackclient/tests/functional/network/v2/test_network_qos_policy.py
@@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
import uuid
from openstackclient.tests.functional.network.v2 import common
@@ -20,34 +21,6 @@ from openstackclient.tests.functional.network.v2 import common
class NetworkQosPolicyTests(common.NetworkTests):
"""Functional tests for QoS policy"""
- HEADERS = ['Name']
- FIELDS = ['name']
-
- @classmethod
- def setUpClass(cls):
- common.NetworkTests.setUpClass()
- if cls.haz_network:
- cls.NAME = uuid.uuid4().hex
-
- opts = cls.get_opts(cls.FIELDS)
- raw_output = cls.openstack(
- 'network qos policy create ' +
- cls.NAME +
- opts
- )
- cls.assertOutput(cls.NAME + "\n", raw_output)
-
- @classmethod
- def tearDownClass(cls):
- try:
- if cls.haz_network:
- raw_output = cls.openstack(
- 'network qos policy delete ' +
- cls.NAME
- )
- cls.assertOutput('', raw_output)
- finally:
- super(NetworkQosPolicyTests, cls).tearDownClass()
def setUp(self):
super(NetworkQosPolicyTests, self).setUp()
@@ -55,33 +28,46 @@ class NetworkQosPolicyTests(common.NetworkTests):
if not self.haz_network:
self.skipTest("No Network service present")
+ self.NAME = uuid.uuid4().hex
+ cmd_output = json.loads(self.openstack(
+ 'network qos policy create -f json ' +
+ self.NAME
+ ))
+ self.addCleanup(self.openstack,
+ 'network qos policy delete ' + self.NAME)
+ self.assertEqual(self.NAME, cmd_output['name'])
+
+ def test_qos_rule_create_delete(self):
+ # This is to check the output of qos policy delete
+ policy_name = uuid.uuid4().hex
+ self.openstack('network qos policy create -f json ' + policy_name)
+ raw_output = self.openstack(
+ 'network qos policy delete ' + policy_name)
+ self.assertEqual('', raw_output)
+
def test_qos_policy_list(self):
- opts = self.get_opts(self.HEADERS)
- raw_output = self.openstack('network qos policy list' + opts)
- self.assertIn(self.NAME, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos policy list -f json'))
+ self.assertIn(self.NAME, [p['Name'] for p in cmd_output])
def test_qos_policy_show(self):
- opts = self.get_opts(self.FIELDS)
- raw_output = self.openstack('network qos policy show ' + self.NAME +
- opts)
- self.assertEqual(self.NAME + "\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos policy show -f json ' + self.NAME))
+ self.assertEqual(self.NAME, cmd_output['name'])
def test_qos_policy_set(self):
self.openstack('network qos policy set --share ' + self.NAME)
- opts = self.get_opts(['shared'])
- raw_output = self.openstack('network qos policy show ' + self.NAME +
- opts)
- self.assertEqual("True\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos policy show -f json ' + self.NAME))
+ self.assertTrue(cmd_output['shared'])
def test_qos_policy_default(self):
self.openstack('network qos policy set --default ' + self.NAME)
- opts = self.get_opts(['is_default'])
- raw_output = self.openstack('network qos policy show ' + self.NAME +
- opts)
- self.assertEqual("True\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos policy show -f json ' + self.NAME))
+ self.assertTrue(cmd_output['is_default'])
self.openstack('network qos policy set --no-default ' + self.NAME)
- opts = self.get_opts(['is_default'])
- raw_output = self.openstack('network qos policy show ' + self.NAME +
- opts)
- self.assertEqual("False\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos policy show -f json ' + self.NAME))
+ self.assertFalse(cmd_output['is_default'])
diff --git a/openstackclient/tests/functional/network/v2/test_network_qos_rule.py b/openstackclient/tests/functional/network/v2/test_network_qos_rule.py
index 8b34422f..770abe94 100644
--- a/openstackclient/tests/functional/network/v2/test_network_qos_rule.py
+++ b/openstackclient/tests/functional/network/v2/test_network_qos_rule.py
@@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
import uuid
from openstackclient.tests.functional.network.v2 import common
@@ -20,51 +21,6 @@ from openstackclient.tests.functional.network.v2 import common
class NetworkQosRuleTestsMinimumBandwidth(common.NetworkTests):
"""Functional tests for QoS minimum bandwidth rule"""
- RULE_ID = None
- MIN_KBPS = 2800
- MIN_KBPS_MODIFIED = 7500
- DIRECTION = '--egress'
- HEADERS = ['ID']
- FIELDS = ['id']
- TYPE = 'minimum-bandwidth'
-
- @classmethod
- def setUpClass(cls):
- common.NetworkTests.setUpClass()
- if cls.haz_network:
- cls.QOS_POLICY_NAME = 'qos_policy_' + uuid.uuid4().hex
-
- opts = cls.get_opts(cls.FIELDS)
- cls.openstack(
- 'network qos policy create ' +
- cls.QOS_POLICY_NAME
- )
- cls.RULE_ID = cls.openstack(
- 'network qos rule create ' +
- '--type ' + cls.TYPE + ' ' +
- '--min-kbps ' + str(cls.MIN_KBPS) + ' ' +
- cls.DIRECTION + ' ' +
- cls.QOS_POLICY_NAME +
- opts
- )
- cls.assertsOutputNotNone(cls.RULE_ID)
-
- @classmethod
- def tearDownClass(cls):
- try:
- if cls.haz_network:
- raw_output = cls.openstack(
- 'network qos rule delete ' +
- cls.QOS_POLICY_NAME + ' ' +
- cls.RULE_ID
- )
- cls.openstack(
- 'network qos policy delete ' +
- cls.QOS_POLICY_NAME
- )
- cls.assertOutput('', raw_output)
- finally:
- super(NetworkQosRuleTestsMinimumBandwidth, cls).tearDownClass()
def setUp(self):
super(NetworkQosRuleTestsMinimumBandwidth, self).setUp()
@@ -72,72 +28,67 @@ class NetworkQosRuleTestsMinimumBandwidth(common.NetworkTests):
if not self.haz_network:
self.skipTest("No Network service present")
+ self.QOS_POLICY_NAME = 'qos_policy_' + uuid.uuid4().hex
+
+ self.openstack(
+ 'network qos policy create ' +
+ self.QOS_POLICY_NAME
+ )
+ self.addCleanup(self.openstack,
+ 'network qos policy delete ' + self.QOS_POLICY_NAME)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule create -f json ' +
+ '--type minimum-bandwidth ' +
+ '--min-kbps 2800 ' +
+ '--egress ' +
+ self.QOS_POLICY_NAME
+ ))
+ self.RULE_ID = cmd_output['id']
+ self.addCleanup(self.openstack,
+ 'network qos rule delete ' +
+ self.QOS_POLICY_NAME + ' ' +
+ self.RULE_ID)
+ self.assertTrue(self.RULE_ID)
+
+ def test_qos_rule_create_delete(self):
+ # This is to check the output of qos rule delete
+ policy_name = uuid.uuid4().hex
+ self.openstack('network qos policy create -f json ' + policy_name)
+ self.addCleanup(self.openstack,
+ 'network qos policy delete ' + policy_name)
+ rule = json.loads(self.openstack(
+ 'network qos rule create -f json ' +
+ '--type minimum-bandwidth ' +
+ '--min-kbps 2800 ' +
+ '--egress ' + policy_name
+ ))
+ raw_output = self.openstack(
+ 'network qos rule delete ' +
+ policy_name + ' ' + rule['id'])
+ self.assertEqual('', raw_output)
+
def test_qos_rule_list(self):
- opts = self.get_opts(self.HEADERS)
- raw_output = self.openstack('network qos rule list '
- + self.QOS_POLICY_NAME + opts)
- self.assertIn(self.RULE_ID, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule list -f json ' + self.QOS_POLICY_NAME))
+ self.assertIn(self.RULE_ID, [rule['ID'] for rule in cmd_output])
def test_qos_rule_show(self):
- opts = self.get_opts(self.FIELDS)
- raw_output = self.openstack('network qos rule show ' +
- self.QOS_POLICY_NAME + ' ' + self.RULE_ID +
- opts)
- self.assertEqual(self.RULE_ID, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule show -f json ' +
+ self.QOS_POLICY_NAME + ' ' + self.RULE_ID))
+ self.assertEqual(self.RULE_ID, cmd_output['id'])
def test_qos_rule_set(self):
- self.openstack('network qos rule set --min-kbps ' +
- str(self.MIN_KBPS_MODIFIED) + ' ' +
+ self.openstack('network qos rule set --min-kbps 7500 ' +
self.QOS_POLICY_NAME + ' ' + self.RULE_ID)
- opts = self.get_opts(['min_kbps'])
- raw_output = self.openstack('network qos rule show ' +
- self.QOS_POLICY_NAME + ' ' + self.RULE_ID +
- opts)
- self.assertEqual(str(self.MIN_KBPS_MODIFIED) + "\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule show -f json ' +
+ self.QOS_POLICY_NAME + ' ' + self.RULE_ID))
+ self.assertEqual(7500, cmd_output['min_kbps'])
class NetworkQosRuleTestsDSCPMarking(common.NetworkTests):
"""Functional tests for QoS DSCP marking rule"""
- RULE_ID = None
- QOS_POLICY_NAME = 'qos_policy_' + uuid.uuid4().hex
- DSCP_MARK = 8
- DSCP_MARK_MODIFIED = 32
- HEADERS = ['ID']
- FIELDS = ['id']
- TYPE = 'dscp-marking'
-
- @classmethod
- def setUpClass(cls):
- common.NetworkTests.setUpClass()
- if cls.haz_network:
- opts = cls.get_opts(cls.FIELDS)
- cls.openstack(
- 'network qos policy create ' +
- cls.QOS_POLICY_NAME
- )
- cls.RULE_ID = cls.openstack(
- 'network qos rule create ' +
- '--type ' + cls.TYPE + ' ' +
- '--dscp-mark ' + str(cls.DSCP_MARK) + ' ' +
- cls.QOS_POLICY_NAME +
- opts
- )
- cls.assertsOutputNotNone(cls.RULE_ID)
-
- @classmethod
- def tearDownClass(cls):
- try:
- if cls.haz_network:
- raw_output = cls.openstack(
- 'network qos rule delete ' +
- cls.QOS_POLICY_NAME + ' ' +
- cls.RULE_ID
- )
- cls.openstack(
- 'network qos policy delete ' + cls.QOS_POLICY_NAME)
- cls.assertOutput('', raw_output)
- finally:
- super(NetworkQosRuleTestsDSCPMarking, cls).tearDownClass()
def setUp(self):
super(NetworkQosRuleTestsDSCPMarking, self).setUp()
@@ -145,78 +96,63 @@ class NetworkQosRuleTestsDSCPMarking(common.NetworkTests):
if not self.haz_network:
self.skipTest("No Network service present")
+ self.QOS_POLICY_NAME = 'qos_policy_' + uuid.uuid4().hex
+ self.openstack(
+ 'network qos policy create ' +
+ self.QOS_POLICY_NAME
+ )
+ self.addCleanup(self.openstack,
+ 'network qos policy delete ' + self.QOS_POLICY_NAME)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule create -f json ' +
+ '--type dscp-marking ' +
+ '--dscp-mark 8 ' +
+ self.QOS_POLICY_NAME
+ ))
+ self.RULE_ID = cmd_output['id']
+ self.addCleanup(self.openstack,
+ 'network qos rule delete ' +
+ self.QOS_POLICY_NAME + ' ' + self.RULE_ID)
+ self.assertTrue(self.RULE_ID)
+
+ def test_qos_rule_create_delete(self):
+ # This is to check the output of qos rule delete
+ policy_name = uuid.uuid4().hex
+ self.openstack('network qos policy create -f json ' + policy_name)
+ self.addCleanup(self.openstack,
+ 'network qos policy delete ' + policy_name)
+ rule = json.loads(self.openstack(
+ 'network qos rule create -f json ' +
+ '--type dscp-marking ' +
+ '--dscp-mark 8 ' + policy_name
+ ))
+ raw_output = self.openstack(
+ 'network qos rule delete ' +
+ policy_name + ' ' + rule['id'])
+ self.assertEqual('', raw_output)
+
def test_qos_rule_list(self):
- opts = self.get_opts(self.HEADERS)
- raw_output = self.openstack('network qos rule list '
- + self.QOS_POLICY_NAME + opts)
- self.assertIn(self.RULE_ID, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule list -f json ' + self.QOS_POLICY_NAME))
+ self.assertIn(self.RULE_ID, [rule['ID'] for rule in cmd_output])
def test_qos_rule_show(self):
- opts = self.get_opts(self.FIELDS)
- raw_output = self.openstack('network qos rule show ' +
- self.QOS_POLICY_NAME + ' ' + self.RULE_ID +
- opts)
- self.assertEqual(self.RULE_ID, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule show -f json ' +
+ self.QOS_POLICY_NAME + ' ' + self.RULE_ID))
+ self.assertEqual(self.RULE_ID, cmd_output['id'])
def test_qos_rule_set(self):
- self.openstack('network qos rule set --dscp-mark ' +
- str(self.DSCP_MARK_MODIFIED) + ' ' +
+ self.openstack('network qos rule set --dscp-mark 32 ' +
self.QOS_POLICY_NAME + ' ' + self.RULE_ID)
- opts = self.get_opts(['dscp_mark'])
- raw_output = self.openstack('network qos rule show ' +
- self.QOS_POLICY_NAME + ' ' + self.RULE_ID +
- opts)
- self.assertEqual(str(self.DSCP_MARK_MODIFIED) + "\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule show -f json ' +
+ self.QOS_POLICY_NAME + ' ' + self.RULE_ID))
+ self.assertEqual(32, cmd_output['dscp_mark'])
class NetworkQosRuleTestsBandwidthLimit(common.NetworkTests):
"""Functional tests for QoS bandwidth limit rule"""
- RULE_ID = None
- QOS_POLICY_NAME = 'qos_policy_' + uuid.uuid4().hex
- MAX_KBPS = 10000
- MAX_KBPS_MODIFIED = 15000
- MAX_BURST_KBITS = 1400
- MAX_BURST_KBITS_MODIFIED = 1800
- RULE_DIRECTION = 'egress'
- RULE_DIRECTION_MODIFIED = 'ingress'
- HEADERS = ['ID']
- FIELDS = ['id']
- TYPE = 'bandwidth-limit'
-
- @classmethod
- def setUpClass(cls):
- common.NetworkTests.setUpClass()
- if cls.haz_network:
- opts = cls.get_opts(cls.FIELDS)
- cls.openstack(
- 'network qos policy create ' +
- cls.QOS_POLICY_NAME
- )
- cls.RULE_ID = cls.openstack(
- 'network qos rule create ' +
- '--type ' + cls.TYPE + ' ' +
- '--max-kbps ' + str(cls.MAX_KBPS) + ' ' +
- '--max-burst-kbits ' + str(cls.MAX_BURST_KBITS) + ' ' +
- '--' + cls.RULE_DIRECTION + ' ' +
- cls.QOS_POLICY_NAME +
- opts
- )
- cls.assertsOutputNotNone(cls.RULE_ID)
-
- @classmethod
- def tearDownClass(cls):
- try:
- if cls.haz_network:
- raw_output = cls.openstack(
- 'network qos rule delete ' +
- cls.QOS_POLICY_NAME + ' ' +
- cls.RULE_ID
- )
- cls.openstack(
- 'network qos policy delete ' + cls.QOS_POLICY_NAME)
- cls.assertOutput('', raw_output)
- finally:
- super(NetworkQosRuleTestsBandwidthLimit, cls).tearDownClass()
def setUp(self):
super(NetworkQosRuleTestsBandwidthLimit, self).setUp()
@@ -224,30 +160,65 @@ class NetworkQosRuleTestsBandwidthLimit(common.NetworkTests):
if not self.haz_network:
self.skipTest("No Network service present")
+ self.QOS_POLICY_NAME = 'qos_policy_' + uuid.uuid4().hex
+ self.openstack(
+ 'network qos policy create ' +
+ self.QOS_POLICY_NAME
+ )
+ self.addCleanup(self.openstack,
+ 'network qos policy delete ' + self.QOS_POLICY_NAME)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule create -f json ' +
+ '--type bandwidth-limit ' +
+ '--max-kbps 10000 ' +
+ '--max-burst-kbits 1400 ' +
+ '--egress ' +
+ self.QOS_POLICY_NAME
+ ))
+ self.RULE_ID = cmd_output['id']
+ self.addCleanup(self.openstack,
+ 'network qos rule delete ' +
+ self.QOS_POLICY_NAME + ' ' + self.RULE_ID)
+ self.assertTrue(self.RULE_ID)
+
+ def test_qos_rule_create_delete(self):
+ # This is to check the output of qos rule delete
+ policy_name = uuid.uuid4().hex
+ self.openstack('network qos policy create -f json ' + policy_name)
+ self.addCleanup(self.openstack,
+ 'network qos policy delete ' + policy_name)
+ rule = json.loads(self.openstack(
+ 'network qos rule create -f json ' +
+ '--type bandwidth-limit ' +
+ '--max-kbps 10000 ' +
+ '--max-burst-kbits 1400 ' +
+ '--egress ' + policy_name
+ ))
+ raw_output = self.openstack(
+ 'network qos rule delete ' +
+ policy_name + ' ' + rule['id'])
+ self.assertEqual('', raw_output)
+
def test_qos_rule_list(self):
- opts = self.get_opts(self.HEADERS)
- raw_output = self.openstack('network qos rule list '
- + self.QOS_POLICY_NAME + opts)
- self.assertIn(self.RULE_ID, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule list -f json '
+ + self.QOS_POLICY_NAME))
+ self.assertIn(self.RULE_ID, [rule['ID'] for rule in cmd_output])
def test_qos_rule_show(self):
- opts = self.get_opts(self.FIELDS)
- raw_output = self.openstack('network qos rule show ' +
- self.QOS_POLICY_NAME + ' ' + self.RULE_ID +
- opts)
- self.assertEqual(self.RULE_ID, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule show -f json ' +
+ self.QOS_POLICY_NAME + ' ' + self.RULE_ID))
+ self.assertEqual(self.RULE_ID, cmd_output['id'])
def test_qos_rule_set(self):
- self.openstack('network qos rule set --max-kbps ' +
- str(self.MAX_KBPS_MODIFIED) + ' --max-burst-kbits ' +
- str(self.MAX_BURST_KBITS_MODIFIED) + ' ' +
- '--' + self.RULE_DIRECTION_MODIFIED + ' ' +
+ self.openstack('network qos rule set --max-kbps 15000 ' +
+ '--max-burst-kbits 1800 ' +
+ '--ingress ' +
self.QOS_POLICY_NAME + ' ' + self.RULE_ID)
- opts = self.get_opts(['direction', 'max_burst_kbps', 'max_kbps'])
- raw_output = self.openstack('network qos rule show ' +
- self.QOS_POLICY_NAME + ' ' + self.RULE_ID +
- opts)
- expected = (str(self.RULE_DIRECTION_MODIFIED) + "\n" +
- str(self.MAX_BURST_KBITS_MODIFIED) + "\n" +
- str(self.MAX_KBPS_MODIFIED) + "\n")
- self.assertEqual(expected, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule show -f json ' +
+ self.QOS_POLICY_NAME + ' ' + self.RULE_ID))
+ self.assertEqual(15000, cmd_output['max_kbps'])
+ self.assertEqual(1800, cmd_output['max_burst_kbps'])
+ self.assertEqual('ingress', cmd_output['direction'])
diff --git a/openstackclient/tests/functional/network/v2/test_network_qos_rule_type.py b/openstackclient/tests/functional/network/v2/test_network_qos_rule_type.py
index d7612936..a6ee3e10 100644
--- a/openstackclient/tests/functional/network/v2/test_network_qos_rule_type.py
+++ b/openstackclient/tests/functional/network/v2/test_network_qos_rule_type.py
@@ -13,6 +13,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
+
from openstackclient.tests.functional.network.v2 import common
@@ -29,6 +31,7 @@ class NetworkQosRuleTypeTests(common.NetworkTests):
self.skipTest("No Network service present")
def test_qos_rule_type_list(self):
- raw_output = self.openstack('network qos rule type list')
+ cmd_output = json.loads(self.openstack(
+ 'network qos rule type list -f json'))
for rule_type in self.AVAILABLE_RULE_TYPES:
- self.assertIn(rule_type, raw_output)
+ self.assertIn(rule_type, [x['Type'] for x in cmd_output])
diff --git a/openstackclient/tests/functional/network/v2/test_network_rbac.py b/openstackclient/tests/functional/network/v2/test_network_rbac.py
index 2206761f..3bbe4f27 100644
--- a/openstackclient/tests/functional/network/v2/test_network_rbac.py
+++ b/openstackclient/tests/functional/network/v2/test_network_rbac.py
@@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
import uuid
from openstackclient.tests.functional.network.v2 import common
@@ -22,69 +23,51 @@ class NetworkRBACTests(common.NetworkTests):
HEADERS = ['ID']
FIELDS = ['id']
- @classmethod
- def setUpClass(cls):
- common.NetworkTests.setUpClass()
- if cls.haz_network:
- cls.NET_NAME = uuid.uuid4().hex
- cls.PROJECT_NAME = uuid.uuid4().hex
-
- opts = cls.get_opts(cls.FIELDS)
- raw_output = cls.openstack(
- 'network create ' + cls.NET_NAME + opts
- )
- cls.OBJECT_ID = raw_output.strip('\n')
- opts = cls.get_opts(['id', 'object_id'])
- raw_output = cls.openstack(
- 'network rbac create ' +
- cls.OBJECT_ID +
- ' --action access_as_shared' +
- ' --target-project admin' +
- ' --type network' + opts
- )
- cls.ID, object_id, rol = tuple(raw_output.split('\n'))
- cls.assertOutput(cls.OBJECT_ID, object_id)
-
- @classmethod
- def tearDownClass(cls):
- try:
- if cls.haz_network:
- raw_output_rbac = cls.openstack(
- 'network rbac delete ' + cls.ID
- )
- raw_output_network = cls.openstack(
- 'network delete ' + cls.OBJECT_ID
- )
- cls.assertOutput('', raw_output_rbac)
- cls.assertOutput('', raw_output_network)
- finally:
- super(NetworkRBACTests, cls).tearDownClass()
-
def setUp(self):
super(NetworkRBACTests, self).setUp()
# Nothing in this class works with Nova Network
if not self.haz_network:
self.skipTest("No Network service present")
+ self.NET_NAME = uuid.uuid4().hex
+ self.PROJECT_NAME = uuid.uuid4().hex
+
+ cmd_output = json.loads(self.openstack(
+ 'network create -f json ' + self.NET_NAME
+ ))
+ self.addCleanup(self.openstack,
+ 'network delete ' + cmd_output['id'])
+ self.OBJECT_ID = cmd_output['id']
+
+ cmd_output = json.loads(self.openstack(
+ 'network rbac create -f json ' +
+ self.OBJECT_ID +
+ ' --action access_as_shared' +
+ ' --target-project admin' +
+ ' --type network'
+ ))
+ self.addCleanup(self.openstack,
+ 'network rbac delete ' + cmd_output['id'])
+ self.ID = cmd_output['id']
+ self.assertEqual(self.OBJECT_ID, cmd_output['object_id'])
+
def test_network_rbac_list(self):
- opts = self.get_opts(self.HEADERS)
- raw_output = self.openstack('network rbac list' + opts)
- self.assertIn(self.ID, raw_output)
+ cmd_output = json.loads(self.openstack('network rbac list -f json'))
+ self.assertIn(self.ID, [rbac['ID'] for rbac in cmd_output])
def test_network_rbac_show(self):
- opts = self.get_opts(self.FIELDS)
- raw_output = self.openstack('network rbac show ' + self.ID + opts)
- self.assertEqual(self.ID + "\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network rbac show -f json ' + self.ID))
+ self.assertEqual(self.ID, cmd_output['id'])
def test_network_rbac_set(self):
- opts = self.get_opts(self.FIELDS)
- project_id = self.openstack(
- 'project create ' + self.PROJECT_NAME + opts)
+ project_id = json.loads(self.openstack(
+ 'project create -f json ' + self.PROJECT_NAME))['id']
self.openstack('network rbac set ' + self.ID +
' --target-project ' + self.PROJECT_NAME)
- opts = self.get_opts(['target_project_id'])
- raw_output_rbac = self.openstack('network rbac show ' + self.ID + opts)
+ cmd_output_rbac = json.loads(self.openstack(
+ 'network rbac show -f json ' + self.ID))
+ self.assertEqual(project_id, cmd_output_rbac['target_project_id'])
raw_output_project = self.openstack(
'project delete ' + self.PROJECT_NAME)
- self.assertEqual(project_id, raw_output_rbac)
- self.assertOutput('', raw_output_project)
+ self.assertEqual('', raw_output_project)
diff --git a/openstackclient/tests/functional/network/v2/test_network_segment.py b/openstackclient/tests/functional/network/v2/test_network_segment.py
index e1dbc7a0..8940273f 100644
--- a/openstackclient/tests/functional/network/v2/test_network_segment.py
+++ b/openstackclient/tests/functional/network/v2/test_network_segment.py
@@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
import uuid
from openstackclient.tests.functional.network.v2 import common
@@ -18,64 +19,117 @@ from openstackclient.tests.functional.network.v2 import common
class NetworkSegmentTests(common.NetworkTests):
"""Functional tests for network segment"""
+ @classmethod
+ def setUpClass(cls):
+ common.NetworkTests.setUpClass()
+ if cls.haz_network:
+ cls.NETWORK_NAME = uuid.uuid4().hex
+ cls.PHYSICAL_NETWORK_NAME = uuid.uuid4().hex
+
+ # Create a network for the all subnet tests
+ cmd_output = json.loads(cls.openstack(
+ 'network create -f json ' +
+ cls.NETWORK_NAME
+ ))
+ # Get network_id for assertEqual
+ cls.NETWORK_ID = cmd_output["id"]
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ if cls.haz_network:
+ raw_output = cls.openstack(
+ 'network delete ' +
+ cls.NETWORK_NAME
+ )
+ cls.assertOutput('', raw_output)
+ finally:
+ super(NetworkSegmentTests, cls).tearDownClass()
+
def setUp(self):
super(NetworkSegmentTests, self).setUp()
# Nothing in this class works with Nova Network
if not self.haz_network:
self.skipTest("No Network service present")
- self.NETWORK_NAME = uuid.uuid4().hex
- self.PHYSICAL_NETWORK_NAME = uuid.uuid4().hex
-
- # Create a network for the segment
- opts = self.get_opts(['id'])
- raw_output = self.openstack(
- 'network create ' + self.NETWORK_NAME + opts
- )
- self.addCleanup(self.openstack,
- 'network delete ' + self.NETWORK_NAME)
- self.NETWORK_ID = raw_output.strip('\n')
-
- # Get the segment for the network.
- opts = self.get_opts(['ID', 'Network'])
- raw_output = self.openstack(
- 'network segment list '
- '--network ' + self.NETWORK_NAME + ' ' +
- opts
+ def test_network_segment_create_delete(self):
+ name = uuid.uuid4().hex
+ json_output = json.loads(self.openstack(
+ ' network segment create -f json ' +
+ '--network ' + self.NETWORK_ID + ' ' +
+ '--network-type geneve ' +
+ '--segment 2055 ' +
+ name
+ ))
+ self.assertEqual(
+ name,
+ json_output["name"],
)
- raw_output_row = raw_output.split('\n')[0]
- self.NETWORK_SEGMENT_ID = raw_output_row.split(' ')[0]
- def test_network_segment_create_delete(self):
- opts = self.get_opts(['id'])
raw_output = self.openstack(
- ' network segment create --network ' + self.NETWORK_ID +
- ' --network-type geneve ' +
- ' --segment 2055 test_segment ' + opts
+ 'network segment delete ' + name,
)
- network_segment_id = raw_output.strip('\n')
- raw_output = self.openstack('network segment delete ' +
- network_segment_id)
self.assertOutput('', raw_output)
def test_network_segment_list(self):
- opts = self.get_opts(['ID'])
- raw_output = self.openstack('network segment list' + opts)
- self.assertIn(self.NETWORK_SEGMENT_ID, raw_output)
+ name = uuid.uuid4().hex
+ json_output = json.loads(self.openstack(
+ ' network segment create -f json ' +
+ '--network ' + self.NETWORK_ID + ' ' +
+ '--network-type geneve ' +
+ '--segment 2055 ' +
+ name
+ ))
+ network_segment_id = json_output.get('id')
+ network_segment_name = json_output.get('name')
+ self.addCleanup(
+ self.openstack,
+ 'network segment delete ' + network_segment_id
+ )
+ self.assertEqual(
+ name,
+ json_output["name"],
+ )
+
+ json_output = json.loads(self.openstack(
+ 'network segment list -f json'
+ ))
+ item_map = {
+ item.get('ID'): item.get('Name') for item in json_output
+ }
+ self.assertIn(network_segment_id, item_map.keys())
+ self.assertIn(network_segment_name, item_map.values())
+
+ def test_network_segment_set_show(self):
+ name = uuid.uuid4().hex
+ json_output = json.loads(self.openstack(
+ ' network segment create -f json ' +
+ '--network ' + self.NETWORK_ID + ' ' +
+ '--network-type geneve ' +
+ '--segment 2055 ' +
+ name
+ ))
+ self.addCleanup(
+ self.openstack,
+ 'network segment delete ' + name
+ )
+ self.assertIsNone(
+ json_output["description"],
+ )
- def test_network_segment_set(self):
new_description = 'new_description'
- raw_output = self.openstack('network segment set ' +
- '--description ' + new_description +
- ' ' + self.NETWORK_SEGMENT_ID)
- self.assertOutput('', raw_output)
- opts = self.get_opts(['description'])
- raw_output = self.openstack('network segment show ' +
- self.NETWORK_SEGMENT_ID + opts)
- self.assertEqual(new_description + "\n", raw_output)
+ cmd_output = self.openstack(
+ 'network segment set ' +
+ '--description ' + new_description + ' ' +
+ name
+ )
+ self.assertOutput('', cmd_output)
- def test_network_segment_show(self):
- opts = self.get_opts(['network_id'])
- raw_output = self.openstack('network segment show ' +
- self.NETWORK_SEGMENT_ID + opts)
- self.assertEqual(self.NETWORK_ID + "\n", raw_output)
+ json_output = json.loads(self.openstack(
+ 'network segment show -f json ' +
+ name
+ ))
+ self.assertEqual(
+ new_description,
+ json_output["description"],
+ )
diff --git a/openstackclient/tests/functional/network/v2/test_network_service_provider.py b/openstackclient/tests/functional/network/v2/test_network_service_provider.py
index 8ed44dd9..999b7eb7 100644
--- a/openstackclient/tests/functional/network/v2/test_network_service_provider.py
+++ b/openstackclient/tests/functional/network/v2/test_network_service_provider.py
@@ -13,14 +13,14 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
+
from openstackclient.tests.functional.network.v2 import common
class TestNetworkServiceProvider(common.NetworkTests):
"""Functional tests for network service provider"""
- SERVICE_TYPE = 'L3_ROUTER_NAT'
-
def setUp(self):
super(TestNetworkServiceProvider, self).setUp()
# Nothing in this class works with Nova Network
@@ -28,5 +28,6 @@ class TestNetworkServiceProvider(common.NetworkTests):
self.skipTest("No Network service present")
def test_network_service_provider_list(self):
- raw_output = self.openstack('network service provider list')
- self.assertIn(self.SERVICE_TYPE, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'network service provider list -f json'))
+ self.assertIn('L3_ROUTER_NAT', [x['Service Type'] for x in cmd_output])
diff --git a/openstackclient/tests/functional/network/v2/test_security_group.py b/openstackclient/tests/functional/network/v2/test_security_group.py
index b601c913..8ae24b72 100644
--- a/openstackclient/tests/functional/network/v2/test_security_group.py
+++ b/openstackclient/tests/functional/network/v2/test_security_group.py
@@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
import uuid
from openstackclient.tests.functional.network.v2 import common
@@ -17,44 +18,6 @@ from openstackclient.tests.functional.network.v2 import common
class SecurityGroupTests(common.NetworkTests):
"""Functional tests for security group"""
- HEADERS = ['Name']
- FIELDS = ['name']
-
- @classmethod
- def setUpClass(cls):
- common.NetworkTests.setUpClass()
- if cls.haz_network:
- cls.NAME = uuid.uuid4().hex
- cls.OTHER_NAME = uuid.uuid4().hex
-
- opts = cls.get_opts(cls.FIELDS)
- raw_output = cls.openstack(
- 'security group create ' +
- cls.NAME +
- opts
- )
- expected = cls.NAME + '\n'
- cls.assertOutput(expected, raw_output)
-
- @classmethod
- def tearDownClass(cls):
- try:
- if cls.haz_network:
- # Rename test
- raw_output = cls.openstack(
- 'security group set --name ' +
- cls.OTHER_NAME + ' ' +
- cls.NAME
- )
- cls.assertOutput('', raw_output)
- # Delete test
- raw_output = cls.openstack(
- 'security group delete ' +
- cls.OTHER_NAME
- )
- cls.assertOutput('', raw_output)
- finally:
- super(SecurityGroupTests, cls).tearDownClass()
def setUp(self):
super(SecurityGroupTests, self).setUp()
@@ -62,22 +25,33 @@ class SecurityGroupTests(common.NetworkTests):
if not self.haz_network:
self.skipTest("No Network service present")
+ self.NAME = uuid.uuid4().hex
+ self.OTHER_NAME = uuid.uuid4().hex
+ cmd_output = json.loads(self.openstack(
+ 'security group create -f json ' +
+ self.NAME
+ ))
+ self.addCleanup(self.openstack,
+ 'security group delete ' + cmd_output['id'])
+ self.assertEqual(self.NAME, cmd_output['name'])
+
def test_security_group_list(self):
- opts = self.get_opts(self.HEADERS)
- raw_output = self.openstack('security group list' + opts)
- self.assertIn(self.NAME, raw_output)
+ cmd_output = json.loads(self.openstack('security group list -f json'))
+ self.assertIn(self.NAME, [sg['Name'] for sg in cmd_output])
def test_security_group_set(self):
+ other_name = uuid.uuid4().hex
raw_output = self.openstack(
- 'security group set --description NSA ' + self.NAME
+ 'security group set --description NSA --name ' +
+ other_name + ' ' + self.NAME
)
self.assertEqual('', raw_output)
- opts = self.get_opts(['description'])
- raw_output = self.openstack('security group show ' + self.NAME + opts)
- self.assertEqual("NSA\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'security group show -f json ' + other_name))
+ self.assertEqual('NSA', cmd_output['description'])
def test_security_group_show(self):
- opts = self.get_opts(self.FIELDS)
- raw_output = self.openstack('security group show ' + self.NAME + opts)
- self.assertEqual(self.NAME + "\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'security group show -f json ' + self.NAME))
+ self.assertEqual(self.NAME, cmd_output['name'])
diff --git a/openstackclient/tests/functional/network/v2/test_security_group_rule.py b/openstackclient/tests/functional/network/v2/test_security_group_rule.py
index 40951a01..fe78bf47 100644
--- a/openstackclient/tests/functional/network/v2/test_security_group_rule.py
+++ b/openstackclient/tests/functional/network/v2/test_security_group_rule.py
@@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
import uuid
from openstackclient.tests.functional.network.v2 import common
@@ -17,54 +18,6 @@ from openstackclient.tests.functional.network.v2 import common
class SecurityGroupRuleTests(common.NetworkTests):
"""Functional tests for security group rule"""
- SECURITY_GROUP_RULE_ID = None
- NAME_FIELD = ['name']
- ID_FIELD = ['id']
- ID_HEADER = ['ID']
-
- @classmethod
- def setUpClass(cls):
- common.NetworkTests.setUpClass()
- if cls.haz_network:
- cls.SECURITY_GROUP_NAME = uuid.uuid4().hex
-
- # Create the security group to hold the rule
- opts = cls.get_opts(cls.NAME_FIELD)
- raw_output = cls.openstack(
- 'security group create ' +
- cls.SECURITY_GROUP_NAME +
- opts
- )
- expected = cls.SECURITY_GROUP_NAME + '\n'
- cls.assertOutput(expected, raw_output)
-
- # Create the security group rule.
- opts = cls.get_opts(cls.ID_FIELD)
- raw_output = cls.openstack(
- 'security group rule create ' +
- cls.SECURITY_GROUP_NAME + ' ' +
- '--protocol tcp --dst-port 80:80 ' +
- '--ingress --ethertype IPv4 ' +
- opts
- )
- cls.SECURITY_GROUP_RULE_ID = raw_output.strip('\n')
-
- @classmethod
- def tearDownClass(cls):
- try:
- if cls.haz_network:
- raw_output = cls.openstack(
- 'security group rule delete ' +
- cls.SECURITY_GROUP_RULE_ID
- )
- cls.assertOutput('', raw_output)
- raw_output = cls.openstack(
- 'security group delete ' +
- cls.SECURITY_GROUP_NAME
- )
- cls.assertOutput('', raw_output)
- finally:
- super(SecurityGroupRuleTests, cls).tearDownClass()
def setUp(self):
super(SecurityGroupRuleTests, self).setUp()
@@ -72,16 +25,35 @@ class SecurityGroupRuleTests(common.NetworkTests):
if not self.haz_network:
self.skipTest("No Network service present")
+ self.SECURITY_GROUP_NAME = uuid.uuid4().hex
+
+ # Create the security group to hold the rule
+ cmd_output = json.loads(self.openstack(
+ 'security group create -f json ' +
+ self.SECURITY_GROUP_NAME
+ ))
+ self.addCleanup(self.openstack,
+ 'security group delete ' + self.SECURITY_GROUP_NAME)
+ self.assertEqual(self.SECURITY_GROUP_NAME, cmd_output['name'])
+
+ # Create the security group rule.
+ cmd_output = json.loads(self.openstack(
+ 'security group rule create -f json ' +
+ self.SECURITY_GROUP_NAME + ' ' +
+ '--protocol tcp --dst-port 80:80 ' +
+ '--ingress --ethertype IPv4 '
+ ))
+ self.addCleanup(self.openstack,
+ 'security group rule delete ' + cmd_output['id'])
+ self.SECURITY_GROUP_RULE_ID = cmd_output['id']
+
def test_security_group_rule_list(self):
- opts = self.get_opts(self.ID_HEADER)
- raw_output = self.openstack('security group rule list ' +
- self.SECURITY_GROUP_NAME +
- opts)
- self.assertIn(self.SECURITY_GROUP_RULE_ID, raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'security group rule list -f json ' + self.SECURITY_GROUP_NAME))
+ self.assertIn(self.SECURITY_GROUP_RULE_ID,
+ [rule['ID'] for rule in cmd_output])
def test_security_group_rule_show(self):
- opts = self.get_opts(self.ID_FIELD)
- raw_output = self.openstack('security group rule show ' +
- self.SECURITY_GROUP_RULE_ID +
- opts)
- self.assertEqual(self.SECURITY_GROUP_RULE_ID + "\n", raw_output)
+ cmd_output = json.loads(self.openstack(
+ 'security group rule show -f json ' + self.SECURITY_GROUP_RULE_ID))
+ self.assertEqual(self.SECURITY_GROUP_RULE_ID, cmd_output['id'])
diff --git a/openstackclient/tests/functional/volume/v1/common.py b/openstackclient/tests/functional/volume/v1/common.py
index 4978cea3..bb3c674e 100644
--- a/openstackclient/tests/functional/volume/v1/common.py
+++ b/openstackclient/tests/functional/volume/v1/common.py
@@ -12,14 +12,35 @@
import fixtures
-from openstackclient.tests.functional.volume import base
+from openstackclient.tests.functional import base
+from openstackclient.tests.functional.volume import base as volume_base
-class BaseVolumeTests(base.BaseVolumeTests):
- """Base class for Volume functional tests. """
+class BaseVolumeTests(volume_base.BaseVolumeTests):
+ """Base class for Volume functional tests"""
+
+ @classmethod
+ def setUpClass(cls):
+ super(BaseVolumeTests, cls).setUpClass()
+ # TODO(dtroyer): This needs to be updated to specifically check for
+ # Volume v1 rather than just 'volume', but for now
+ # that is enough until we get proper version negotiation
+ cls.haz_volume_v1 = base.is_service_enabled('volume')
def setUp(self):
super(BaseVolumeTests, self).setUp()
+
+ # This class requires Volume v1
+ # if not self.haz_volume_v1:
+ # self.skipTest("No Volume v1 service present")
+
+ # TODO(dtroyer): We really want the above to work but right now
+ # (12Sep2017) DevStack still creates a 'volume'
+ # service type even though there is no service behind
+ # it. Until that is fixed we need to just skip the
+ # volume v1 functional tests in master.
+ self.skipTest("No Volume v1 service present")
+
ver_fixture = fixtures.EnvironmentVariable(
'OS_VOLUME_API_VERSION', '1'
)
diff --git a/openstackclient/tests/unit/api/test_compute_v2.py b/openstackclient/tests/unit/api/test_compute_v2.py
index f10fb6cf..4f3b8031 100644
--- a/openstackclient/tests/unit/api/test_compute_v2.py
+++ b/openstackclient/tests/unit/api/test_compute_v2.py
@@ -13,12 +13,12 @@
"""Compute v2 API Library Tests"""
+from keystoneauth1 import session
+from osc_lib import exceptions as osc_lib_exceptions
from requests_mock.contrib import fixture
-from keystoneclient import session
from openstackclient.api import compute_v2 as compute
from openstackclient.tests.unit import utils
-from osc_lib import exceptions as osc_lib_exceptions
FAKE_PROJECT = 'xyzpdq'
diff --git a/openstackclient/tests/unit/common/test_logs.py b/openstackclient/tests/unit/common/test_logs.py
index 4842c8d4..b1e4d612 100644
--- a/openstackclient/tests/unit/common/test_logs.py
+++ b/openstackclient/tests/unit/common/test_logs.py
@@ -15,6 +15,7 @@
# or Jun 2017.
import logging
+
import mock
from openstackclient.common import logs
diff --git a/openstackclient/tests/unit/common/test_quota.py b/openstackclient/tests/unit/common/test_quota.py
index 482653f4..1a3da31d 100644
--- a/openstackclient/tests/unit/common/test_quota.py
+++ b/openstackclient/tests/unit/common/test_quota.py
@@ -11,8 +11,8 @@
# under the License.
import copy
-import mock
+import mock
from osc_lib import exceptions
from openstackclient.common import quota
diff --git a/openstackclient/tests/unit/compute/v2/fakes.py b/openstackclient/tests/unit/compute/v2/fakes.py
index d5fc9fa9..0fae19af 100644
--- a/openstackclient/tests/unit/compute/v2/fakes.py
+++ b/openstackclient/tests/unit/compute/v2/fakes.py
@@ -14,9 +14,10 @@
#
import copy
-import mock
import uuid
+import mock
+
from openstackclient.api import compute_v2
from openstackclient.tests.unit import fakes
from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
diff --git a/openstackclient/tests/unit/compute/v2/test_keypair.py b/openstackclient/tests/unit/compute/v2/test_keypair.py
index d6f5ecf4..0e5fb143 100644
--- a/openstackclient/tests/unit/compute/v2/test_keypair.py
+++ b/openstackclient/tests/unit/compute/v2/test_keypair.py
@@ -13,10 +13,10 @@
# under the License.
#
-import mock
-from mock import call
import uuid
+import mock
+from mock import call
from osc_lib import exceptions
from osc_lib import utils
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 5b0d28a1..a1225c30 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -15,9 +15,9 @@
import argparse
import collections
import getpass
+
import mock
from mock import call
-
from osc_lib import exceptions
from osc_lib import utils as common_utils
from oslo_utils import timeutils
diff --git a/openstackclient/tests/unit/compute/v2/test_usage.py b/openstackclient/tests/unit/compute/v2/test_usage.py
index a383e903..a7aa1374 100644
--- a/openstackclient/tests/unit/compute/v2/test_usage.py
+++ b/openstackclient/tests/unit/compute/v2/test_usage.py
@@ -12,6 +12,7 @@
#
import datetime
+
import mock
from openstackclient.compute.v2 import usage
diff --git a/openstackclient/tests/unit/fakes.py b/openstackclient/tests/unit/fakes.py
index 999694b7..65c76b3e 100644
--- a/openstackclient/tests/unit/fakes.py
+++ b/openstackclient/tests/unit/fakes.py
@@ -14,10 +14,10 @@
#
import json
-import mock
import sys
from keystoneauth1 import fixture
+import mock
import requests
import six
diff --git a/openstackclient/tests/unit/identity/v2_0/fakes.py b/openstackclient/tests/unit/identity/v2_0/fakes.py
index 3d25cadf..5db94222 100644
--- a/openstackclient/tests/unit/identity/v2_0/fakes.py
+++ b/openstackclient/tests/unit/identity/v2_0/fakes.py
@@ -14,11 +14,11 @@
#
import copy
-import mock
import uuid
from keystoneauth1 import access
from keystoneauth1 import fixture
+import mock
from openstackclient.tests.unit import fakes
from openstackclient.tests.unit import utils
diff --git a/openstackclient/tests/unit/identity/v2_0/test_role_assignment.py b/openstackclient/tests/unit/identity/v2_0/test_role_assignment.py
index 87643f12..733fda6c 100644
--- a/openstackclient/tests/unit/identity/v2_0/test_role_assignment.py
+++ b/openstackclient/tests/unit/identity/v2_0/test_role_assignment.py
@@ -12,8 +12,8 @@
#
import copy
-import mock
+import mock
from osc_lib import exceptions
from openstackclient.identity.v2_0 import role_assignment
diff --git a/openstackclient/tests/unit/identity/v3/fakes.py b/openstackclient/tests/unit/identity/v3/fakes.py
index 5502cd5c..4f4135ec 100644
--- a/openstackclient/tests/unit/identity/v3/fakes.py
+++ b/openstackclient/tests/unit/identity/v3/fakes.py
@@ -14,11 +14,11 @@
#
import copy
-import mock
import uuid
from keystoneauth1 import access
from keystoneauth1 import fixture
+import mock
from osc_lib.cli import format_columns
from openstackclient.tests.unit import fakes
@@ -185,6 +185,8 @@ ROLE_2 = {
'links': base_url + 'roles/' + 'r2',
}
+ROLES = [ROLE, ROLE_2]
+
service_id = 's-123'
service_name = 'Texaco'
service_type = 'gas'
@@ -969,3 +971,25 @@ class FakeRoleAssignment(object):
info=copy.deepcopy(role_assignment_info), loaded=True)
return role_assignment
+
+
+class FakeImpliedRoleResponse(object):
+ """Fake one or more role assignment."""
+ def __init__(self, prior_role, implied_roles):
+ self.prior_role = prior_role
+ self.implies = [role for role in implied_roles]
+
+ @staticmethod
+ def create_list():
+ """Create a fake implied role list response.
+
+ :return:
+ A list of FakeImpliedRoleResponse objects
+ """
+
+ # set default attributes.
+ implied_roles = [
+ FakeImpliedRoleResponse(ROLES[0], [ROLES[1]])
+ ]
+
+ return implied_roles
diff --git a/openstackclient/tests/unit/identity/v3/test_identity_provider.py b/openstackclient/tests/unit/identity/v3/test_identity_provider.py
index c3d3a83d..0163c6c8 100644
--- a/openstackclient/tests/unit/identity/v3/test_identity_provider.py
+++ b/openstackclient/tests/unit/identity/v3/test_identity_provider.py
@@ -13,6 +13,7 @@
# under the License.
import copy
+
import mock
from openstackclient.identity.v3 import identity_provider
diff --git a/openstackclient/tests/unit/identity/v3/test_implied_role.py b/openstackclient/tests/unit/identity/v3/test_implied_role.py
new file mode 100644
index 00000000..08273f73
--- /dev/null
+++ b/openstackclient/tests/unit/identity/v3/test_implied_role.py
@@ -0,0 +1,181 @@
+# Copyright 2013 Nebula Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import copy
+
+from openstackclient.identity.v3 import implied_role
+from openstackclient.tests.unit import fakes
+from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
+
+
+class TestRole(identity_fakes.TestIdentityv3):
+
+ def setUp(self):
+ super(TestRole, self).setUp()
+
+ # Get a shortcut to the UserManager Mock
+ self.users_mock = self.app.client_manager.identity.users
+ self.users_mock.reset_mock()
+
+ # Get a shortcut to the UserManager Mock
+ self.groups_mock = self.app.client_manager.identity.groups
+ self.groups_mock.reset_mock()
+
+ # Get a shortcut to the DomainManager Mock
+ self.domains_mock = self.app.client_manager.identity.domains
+ self.domains_mock.reset_mock()
+
+ # Get a shortcut to the ProjectManager Mock
+ self.projects_mock = self.app.client_manager.identity.projects
+ self.projects_mock.reset_mock()
+
+ # Get a shortcut to the RoleManager Mock
+ self.roles_mock = self.app.client_manager.identity.roles
+ self.roles_mock.reset_mock()
+
+ def _is_inheritance_testcase(self):
+ return False
+
+
+class TestImpliedRoleCreate(TestRole):
+
+ def setUp(self):
+ super(TestImpliedRoleCreate, self).setUp()
+
+ self.roles_mock.list.return_value = [
+ fakes.FakeResource(
+ None,
+ copy.deepcopy(identity_fakes.ROLES[0]),
+ loaded=True,
+ ),
+ fakes.FakeResource(
+ None,
+ copy.deepcopy(identity_fakes.ROLES[1]),
+ loaded=True,
+ ),
+ ]
+
+ self.roles_mock.create_implied.return_value = fakes.FakeResource(
+ None,
+ {'prior_role': copy.deepcopy(identity_fakes.ROLES[0]),
+ 'implied': copy.deepcopy(identity_fakes.ROLES[1]), },
+ loaded=True,
+ )
+
+ self.cmd = implied_role.CreateImpliedRole(self.app, None)
+
+ def test_implied_role_create(self):
+
+ arglist = [
+ identity_fakes.ROLES[0]['id'],
+ '--implied-role', identity_fakes.ROLES[1]['id'],
+ ]
+ verifylist = [
+ ('role', identity_fakes.ROLES[0]['id']),
+ ('implied_role', identity_fakes.ROLES[1]['id']),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # RoleManager.create_implied(prior, implied)
+ self.roles_mock.create_implied.assert_called_with(
+ identity_fakes.ROLES[0]['id'],
+ identity_fakes.ROLES[1]['id']
+ )
+
+ collist = ('implied', 'prior_role')
+ self.assertEqual(collist, columns)
+ datalist = (
+ identity_fakes.ROLES[1]['id'],
+ identity_fakes.ROLES[0]['id']
+ )
+ self.assertEqual(datalist, data)
+
+
+class TestImpliedRoleDelete(TestRole):
+
+ def setUp(self):
+ super(TestImpliedRoleDelete, self).setUp()
+
+ self.roles_mock.list.return_value = [
+ fakes.FakeResource(
+ None,
+ copy.deepcopy(identity_fakes.ROLES[0]),
+ loaded=True,
+ ),
+ fakes.FakeResource(
+ None,
+ copy.deepcopy(identity_fakes.ROLES[1]),
+ loaded=True,
+ ),
+ ]
+
+ self.roles_mock.delete_implied.return_value = fakes.FakeResource(
+ None,
+ {'prior-role': copy.deepcopy(identity_fakes.ROLES[0]),
+ 'implied': copy.deepcopy(identity_fakes.ROLES[1]), },
+ loaded=True,
+ )
+
+ self.cmd = implied_role.DeleteImpliedRole(self.app, None)
+
+ def test_implied_role_delete(self):
+ arglist = [
+ identity_fakes.ROLES[0]['id'],
+ '--implied-role', identity_fakes.ROLES[1]['id'],
+ ]
+ verifylist = [
+ ('role', identity_fakes.ROLES[0]['id']),
+ ('implied_role', identity_fakes.ROLES[1]['id']),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.cmd.take_action(parsed_args)
+
+ self.roles_mock.delete_implied.assert_called_with(
+ identity_fakes.ROLES[0]['id'],
+ identity_fakes.ROLES[1]['id']
+ )
+
+
+class TestImpliedRoleList(TestRole):
+
+ def setUp(self):
+ super(TestImpliedRoleList, self).setUp()
+
+ self.roles_mock.list_inference_roles.return_value = (
+ identity_fakes.FakeImpliedRoleResponse.create_list())
+
+ self.cmd = implied_role.ListImpliedRole(self.app, None)
+
+ def test_implied_role_list(self):
+ arglist = []
+ verifylist = []
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+ self.roles_mock.list_inference_roles.assert_called_with()
+
+ collist = ['Prior Role ID', 'Prior Role Name',
+ 'Implied Role ID', 'Implied Role Name']
+ self.assertEqual(collist, columns)
+ datalist = [
+ (identity_fakes.ROLES[0]['id'], identity_fakes.ROLES[0]['name'],
+ identity_fakes.ROLES[1]['id'], identity_fakes.ROLES[1]['name'])
+ ]
+ x = [d for d in data]
+ self.assertEqual(datalist, x)
diff --git a/openstackclient/tests/unit/identity/v3/test_mappings.py b/openstackclient/tests/unit/identity/v3/test_mappings.py
index 93fe1196..1d8e77d9 100644
--- a/openstackclient/tests/unit/identity/v3/test_mappings.py
+++ b/openstackclient/tests/unit/identity/v3/test_mappings.py
@@ -13,8 +13,8 @@
# under the License.
import copy
-import mock
+import mock
from osc_lib import exceptions
from openstackclient.identity.v3 import mapping
diff --git a/openstackclient/tests/unit/identity/v3/test_role.py b/openstackclient/tests/unit/identity/v3/test_role.py
index 39dbd244..281d530c 100644
--- a/openstackclient/tests/unit/identity/v3/test_role.py
+++ b/openstackclient/tests/unit/identity/v3/test_role.py
@@ -14,8 +14,8 @@
#
import copy
-import mock
+import mock
from osc_lib import exceptions
from osc_lib import utils
diff --git a/openstackclient/tests/unit/identity/v3/test_role_assignment.py b/openstackclient/tests/unit/identity/v3/test_role_assignment.py
index 32fbb7f1..835837e6 100644
--- a/openstackclient/tests/unit/identity/v3/test_role_assignment.py
+++ b/openstackclient/tests/unit/identity/v3/test_role_assignment.py
@@ -12,6 +12,7 @@
#
import copy
+
import mock
from openstackclient.identity.v3 import role_assignment
diff --git a/openstackclient/tests/unit/identity/v3/test_trust.py b/openstackclient/tests/unit/identity/v3/test_trust.py
index 614aab54..1355b908 100644
--- a/openstackclient/tests/unit/identity/v3/test_trust.py
+++ b/openstackclient/tests/unit/identity/v3/test_trust.py
@@ -12,8 +12,8 @@
#
import copy
-import mock
+import mock
from osc_lib import exceptions
from osc_lib import utils
diff --git a/openstackclient/tests/unit/identity/v3/test_user.py b/openstackclient/tests/unit/identity/v3/test_user.py
index 96f50766..920ee950 100644
--- a/openstackclient/tests/unit/identity/v3/test_user.py
+++ b/openstackclient/tests/unit/identity/v3/test_user.py
@@ -14,8 +14,8 @@
#
import contextlib
-import mock
+import mock
from osc_lib import exceptions
from osc_lib import utils
diff --git a/openstackclient/tests/unit/image/v1/fakes.py b/openstackclient/tests/unit/image/v1/fakes.py
index 4b6d278c..80306257 100644
--- a/openstackclient/tests/unit/image/v1/fakes.py
+++ b/openstackclient/tests/unit/image/v1/fakes.py
@@ -14,9 +14,10 @@
#
import copy
-import mock
import uuid
+import mock
+
from openstackclient.tests.unit import fakes
from openstackclient.tests.unit import utils
from openstackclient.tests.unit.volume.v1 import fakes as volume_fakes
diff --git a/openstackclient/tests/unit/image/v1/test_image.py b/openstackclient/tests/unit/image/v1/test_image.py
index ec1b4a77..336feaba 100644
--- a/openstackclient/tests/unit/image/v1/test_image.py
+++ b/openstackclient/tests/unit/image/v1/test_image.py
@@ -14,8 +14,8 @@
#
import copy
-import mock
+import mock
from osc_lib.cli import format_columns
from osc_lib import exceptions
diff --git a/openstackclient/tests/unit/image/v2/fakes.py b/openstackclient/tests/unit/image/v2/fakes.py
index 6c0d45fe..6721c820 100644
--- a/openstackclient/tests/unit/image/v2/fakes.py
+++ b/openstackclient/tests/unit/image/v2/fakes.py
@@ -14,11 +14,11 @@
#
import copy
-import mock
import random
import uuid
from glanceclient.v2 import schemas
+import mock
from osc_lib.cli import format_columns
import warlock
diff --git a/openstackclient/tests/unit/image/v2/test_image.py b/openstackclient/tests/unit/image/v2/test_image.py
index e8c4c7fa..9fb4468a 100644
--- a/openstackclient/tests/unit/image/v2/test_image.py
+++ b/openstackclient/tests/unit/image/v2/test_image.py
@@ -14,9 +14,9 @@
#
import copy
-import mock
from glanceclient.v2 import schemas
+import mock
from osc_lib.cli import format_columns
from osc_lib import exceptions
import warlock
diff --git a/openstackclient/tests/unit/integ/cli/test_shell.py b/openstackclient/tests/unit/integ/cli/test_shell.py
index 4e91f637..78663fbc 100644
--- a/openstackclient/tests/unit/integ/cli/test_shell.py
+++ b/openstackclient/tests/unit/integ/cli/test_shell.py
@@ -11,8 +11,8 @@
# under the License.
import copy
-import mock
+import mock
from osc_lib.tests import utils as osc_lib_utils
from openstackclient import shell
diff --git a/openstackclient/tests/unit/network/test_common.py b/openstackclient/tests/unit/network/test_common.py
index 4b9a754b..d4d3a277 100644
--- a/openstackclient/tests/unit/network/test_common.py
+++ b/openstackclient/tests/unit/network/test_common.py
@@ -12,9 +12,10 @@
#
import argparse
-import mock
+import mock
import openstack
+
from openstackclient.common import exceptions
from openstackclient.network import common
from openstackclient.tests.unit import utils
diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py
index eadab584..bdc1c1fb 100644
--- a/openstackclient/tests/unit/network/v2/fakes.py
+++ b/openstackclient/tests/unit/network/v2/fakes.py
@@ -13,11 +13,12 @@
import argparse
import copy
-import mock
from random import choice
from random import randint
import uuid
+import mock
+
from openstackclient.tests.unit import fakes
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes_v3
from openstackclient.tests.unit import utils
diff --git a/openstackclient/tests/unit/network/v2/test_network.py b/openstackclient/tests/unit/network/v2/test_network.py
index 84d0d95c..a9472a77 100644
--- a/openstackclient/tests/unit/network/v2/test_network.py
+++ b/openstackclient/tests/unit/network/v2/test_network.py
@@ -11,10 +11,10 @@
# under the License.
#
-import mock
-from mock import call
import random
+import mock
+from mock import call
from osc_lib.cli import format_columns
from osc_lib import exceptions
diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py
index 021ddd5e..1f901fef 100644
--- a/openstackclient/tests/unit/network/v2/test_port.py
+++ b/openstackclient/tests/unit/network/v2/test_port.py
@@ -12,8 +12,8 @@
#
import argparse
-import mock
+import mock
from mock import call
from osc_lib.cli import format_columns
from osc_lib import exceptions
diff --git a/openstackclient/tests/unit/network/v2/test_subnet_pool.py b/openstackclient/tests/unit/network/v2/test_subnet_pool.py
index 71ab2c76..4973076a 100644
--- a/openstackclient/tests/unit/network/v2/test_subnet_pool.py
+++ b/openstackclient/tests/unit/network/v2/test_subnet_pool.py
@@ -12,6 +12,7 @@
#
import argparse
+
import mock
from mock import call
diff --git a/openstackclient/tests/unit/object/v1/test_container.py b/openstackclient/tests/unit/object/v1/test_container.py
index 37b8c705..39e2d80f 100644
--- a/openstackclient/tests/unit/object/v1/test_container.py
+++ b/openstackclient/tests/unit/object/v1/test_container.py
@@ -14,6 +14,7 @@
#
import copy
+
import mock
from openstackclient.api import object_store_v1 as object_store
diff --git a/openstackclient/tests/unit/object/v1/test_object.py b/openstackclient/tests/unit/object/v1/test_object.py
index c0ac204d..b6299373 100644
--- a/openstackclient/tests/unit/object/v1/test_object.py
+++ b/openstackclient/tests/unit/object/v1/test_object.py
@@ -14,6 +14,7 @@
#
import copy
+
import mock
from openstackclient.api import object_store_v1 as object_store
diff --git a/openstackclient/tests/unit/test_shell.py b/openstackclient/tests/unit/test_shell.py
index b9fac684..dff37f10 100644
--- a/openstackclient/tests/unit/test_shell.py
+++ b/openstackclient/tests/unit/test_shell.py
@@ -13,10 +13,10 @@
# under the License.
#
-import mock
import os
import sys
+import mock
from osc_lib.tests import utils as osc_lib_test_utils
from oslo_utils import importutils
import wrapt
diff --git a/openstackclient/tests/unit/utils.py b/openstackclient/tests/unit/utils.py
index 2cbc4ea6..c15d8bbf 100644
--- a/openstackclient/tests/unit/utils.py
+++ b/openstackclient/tests/unit/utils.py
@@ -14,8 +14,9 @@
# under the License.
#
-import fixtures
import os
+
+import fixtures
import testtools
from cliff import columns as cliff_columns
diff --git a/openstackclient/tests/unit/volume/v1/fakes.py b/openstackclient/tests/unit/volume/v1/fakes.py
index fff5181d..de9c724f 100644
--- a/openstackclient/tests/unit/volume/v1/fakes.py
+++ b/openstackclient/tests/unit/volume/v1/fakes.py
@@ -14,10 +14,11 @@
#
import copy
-import mock
import random
import uuid
+import mock
+
from openstackclient.tests.unit import fakes
from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
from openstackclient.tests.unit import utils
diff --git a/openstackclient/tests/unit/volume/v1/test_qos_specs.py b/openstackclient/tests/unit/volume/v1/test_qos_specs.py
index ba293d15..11dc8084 100644
--- a/openstackclient/tests/unit/volume/v1/test_qos_specs.py
+++ b/openstackclient/tests/unit/volume/v1/test_qos_specs.py
@@ -14,6 +14,7 @@
#
import copy
+
import mock
from mock import call
diff --git a/openstackclient/tests/unit/volume/v1/test_volume.py b/openstackclient/tests/unit/volume/v1/test_volume.py
index 07e0229d..c4154555 100644
--- a/openstackclient/tests/unit/volume/v1/test_volume.py
+++ b/openstackclient/tests/unit/volume/v1/test_volume.py
@@ -14,6 +14,7 @@
#
import argparse
+
import mock
from mock import call
diff --git a/openstackclient/tests/unit/volume/v2/fakes.py b/openstackclient/tests/unit/volume/v2/fakes.py
index 27d636ee..d114c2df 100644
--- a/openstackclient/tests/unit/volume/v2/fakes.py
+++ b/openstackclient/tests/unit/volume/v2/fakes.py
@@ -13,10 +13,10 @@
#
import copy
-import mock
import random
import uuid
+import mock
from osc_lib.cli import format_columns
from openstackclient.tests.unit import fakes
diff --git a/openstackclient/tests/unit/volume/v2/test_qos_specs.py b/openstackclient/tests/unit/volume/v2/test_qos_specs.py
index 7eb85781..454747f5 100644
--- a/openstackclient/tests/unit/volume/v2/test_qos_specs.py
+++ b/openstackclient/tests/unit/volume/v2/test_qos_specs.py
@@ -14,6 +14,7 @@
#
import copy
+
import mock
from mock import call
diff --git a/openstackclient/tests/unit/volume/v2/test_snapshot.py b/openstackclient/tests/unit/volume/v2/test_snapshot.py
index 3a50e6c2..d577c957 100644
--- a/openstackclient/tests/unit/volume/v2/test_snapshot.py
+++ b/openstackclient/tests/unit/volume/v2/test_snapshot.py
@@ -13,6 +13,7 @@
#
import argparse
+
import mock
from mock import call
diff --git a/openstackclient/tests/unit/volume/v2/test_volume.py b/openstackclient/tests/unit/volume/v2/test_volume.py
index a8960930..9222a624 100644
--- a/openstackclient/tests/unit/volume/v2/test_volume.py
+++ b/openstackclient/tests/unit/volume/v2/test_volume.py
@@ -13,6 +13,7 @@
#
import argparse
+
import mock
from mock import call