Beef up address scope functional tests
We need to get more thorough in our functional testing, so start by adding tests for all create and set options, check return values. This also removes most of the setupClass() and teardownClass() methods as they held common state that was subject to race conditions when running tests in parallel. Change-Id: Ib337f9e9d16b4183bb319b58cbe943045f365ff2
This commit is contained in:
parent
17a249c5dd
commit
241e0ec1cd
@ -10,6 +10,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import re
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from openstackclient.tests.functional import base
|
from openstackclient.tests.functional import base
|
||||||
@ -17,33 +18,138 @@ from openstackclient.tests.functional import base
|
|||||||
|
|
||||||
class AddressScopeTests(base.TestCase):
|
class AddressScopeTests(base.TestCase):
|
||||||
"""Functional tests for address scope. """
|
"""Functional tests for address scope. """
|
||||||
NAME = uuid.uuid4().hex
|
|
||||||
HEADERS = ['Name']
|
# NOTE(dtroyer): Do not normalize the setup and teardown of the resource
|
||||||
FIELDS = ['name']
|
# creation and deletion. Little is gained when each test
|
||||||
|
# has its own needs and there are collisions when running
|
||||||
|
# tests in parallel.
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
opts = cls.get_opts(cls.FIELDS)
|
# Set up some regex for matching below
|
||||||
raw_output = cls.openstack('address scope create ' + cls.NAME + opts)
|
cls.re_name = re.compile("name\s+\|\s+([^|]+?)\s+\|")
|
||||||
cls.assertOutput(cls.NAME + "\n", raw_output)
|
cls.re_ip_version = re.compile("ip_version\s+\|\s+(\S+)")
|
||||||
|
cls.re_shared = re.compile("shared\s+\|\s+(\S+)")
|
||||||
|
|
||||||
@classmethod
|
def test_address_scope_delete(self):
|
||||||
def tearDownClass(cls):
|
"""Test create, delete multiple"""
|
||||||
raw_output = cls.openstack('address scope delete ' + cls.NAME)
|
name1 = uuid.uuid4().hex
|
||||||
cls.assertOutput('', raw_output)
|
raw_output = self.openstack(
|
||||||
|
'address scope create ' + name1,
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
name1,
|
||||||
|
re.search(self.re_name, raw_output).group(1),
|
||||||
|
)
|
||||||
|
# Check the default values
|
||||||
|
self.assertEqual(
|
||||||
|
'False',
|
||||||
|
re.search(self.re_shared, raw_output).group(1),
|
||||||
|
)
|
||||||
|
|
||||||
|
name2 = uuid.uuid4().hex
|
||||||
|
raw_output = self.openstack(
|
||||||
|
'address scope create ' + name2,
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
name2,
|
||||||
|
re.search(self.re_name, raw_output).group(1),
|
||||||
|
)
|
||||||
|
|
||||||
|
raw_output = self.openstack(
|
||||||
|
'address scope delete ' + name1 + ' ' + name2,
|
||||||
|
)
|
||||||
|
self.assertOutput('', raw_output)
|
||||||
|
|
||||||
def test_address_scope_list(self):
|
def test_address_scope_list(self):
|
||||||
opts = self.get_opts(self.HEADERS)
|
"""Test create defaults, list filters, delete"""
|
||||||
raw_output = self.openstack('address scope list' + opts)
|
name1 = uuid.uuid4().hex
|
||||||
self.assertIn(self.NAME, raw_output)
|
raw_output = self.openstack(
|
||||||
|
'address scope create --ip-version 4 --share ' + name1,
|
||||||
|
)
|
||||||
|
self.addCleanup(self.openstack, 'address scope delete ' + name1)
|
||||||
|
self.assertEqual(
|
||||||
|
'4',
|
||||||
|
re.search(self.re_ip_version, raw_output).group(1),
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'True',
|
||||||
|
re.search(self.re_shared, raw_output).group(1),
|
||||||
|
)
|
||||||
|
|
||||||
def test_address_scope_show(self):
|
name2 = uuid.uuid4().hex
|
||||||
opts = self.get_opts(self.FIELDS)
|
raw_output = self.openstack(
|
||||||
raw_output = self.openstack('address scope show ' + self.NAME + opts)
|
'address scope create --ip-version 6 --no-share ' + name2,
|
||||||
self.assertEqual(self.NAME + "\n", raw_output)
|
)
|
||||||
|
self.addCleanup(self.openstack, 'address scope delete ' + name2)
|
||||||
|
self.assertEqual(
|
||||||
|
'6',
|
||||||
|
re.search(self.re_ip_version, raw_output).group(1),
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'False',
|
||||||
|
re.search(self.re_shared, raw_output).group(1),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Test list
|
||||||
|
raw_output = self.openstack('address scope list')
|
||||||
|
self.assertIsNotNone(re.search(name1 + "\s+\|\s+4", raw_output))
|
||||||
|
self.assertIsNotNone(re.search(name2 + "\s+\|\s+6", raw_output))
|
||||||
|
|
||||||
|
# Test list --share
|
||||||
|
# TODO(dtroyer): returns 'HttpException: Bad Request'
|
||||||
|
# raw_output = self.openstack('address scope list --share')
|
||||||
|
# self.assertIsNotNone(re.search(name1 + "\s+\|\s+4", raw_output))
|
||||||
|
# self.assertIsNotNone(re.search(name2 + "\s+\|\s+6", raw_output))
|
||||||
|
|
||||||
|
# Test list --no-share
|
||||||
|
# TODO(dtroyer): returns 'HttpException: Bad Request'
|
||||||
|
# raw_output = self.openstack('address scope list --no-share')
|
||||||
|
# self.assertIsNotNone(re.search(name1 + "\s+\|\s+4", raw_output))
|
||||||
|
# self.assertIsNotNone(re.search(name2 + "\s+\|\s+6", raw_output))
|
||||||
|
|
||||||
def test_address_scope_set(self):
|
def test_address_scope_set(self):
|
||||||
self.openstack('address scope set --share ' + self.NAME)
|
"""Tests create options, set, show, delete"""
|
||||||
opts = self.get_opts(['shared'])
|
name = uuid.uuid4().hex
|
||||||
raw_output = self.openstack('address scope show ' + self.NAME + opts)
|
newname = name + "_"
|
||||||
self.assertEqual("True\n", raw_output)
|
raw_output = self.openstack(
|
||||||
|
'address scope create ' +
|
||||||
|
'--ip-version 4 ' +
|
||||||
|
'--no-share ' +
|
||||||
|
name,
|
||||||
|
)
|
||||||
|
self.addCleanup(self.openstack, 'address scope delete ' + newname)
|
||||||
|
self.assertEqual(
|
||||||
|
name,
|
||||||
|
re.search(self.re_name, raw_output).group(1),
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'4',
|
||||||
|
re.search(self.re_ip_version, raw_output).group(1),
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'False',
|
||||||
|
re.search(self.re_shared, raw_output).group(1),
|
||||||
|
)
|
||||||
|
|
||||||
|
raw_output = self.openstack(
|
||||||
|
'address scope set ' +
|
||||||
|
'--name ' + newname +
|
||||||
|
' --share ' +
|
||||||
|
name,
|
||||||
|
)
|
||||||
|
self.assertOutput('', raw_output)
|
||||||
|
|
||||||
|
raw_output = self.openstack('address scope show ' + newname)
|
||||||
|
self.assertEqual(
|
||||||
|
newname,
|
||||||
|
re.search(self.re_name, raw_output).group(1),
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'4',
|
||||||
|
re.search(self.re_ip_version, raw_output).group(1),
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
'True',
|
||||||
|
re.search(self.re_shared, raw_output).group(1),
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user