Skip to content

Commit 241e0ec

Browse files
author
Dean Troyer
committed
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
1 parent 17a249c commit 241e0ec

1 file changed

Lines changed: 127 additions & 21 deletions

File tree

openstackclient/tests/functional/network/v2/test_address_scope.py

Lines changed: 127 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,40 +10,146 @@
1010
# License for the specific language governing permissions and limitations
1111
# under the License.
1212

13+
import re
1314
import uuid
1415

1516
from openstackclient.tests.functional import base
1617

1718

1819
class AddressScopeTests(base.TestCase):
1920
"""Functional tests for address scope. """
20-
NAME = uuid.uuid4().hex
21-
HEADERS = ['Name']
22-
FIELDS = ['name']
21+
22+
# NOTE(dtroyer): Do not normalize the setup and teardown of the resource
23+
# creation and deletion. Little is gained when each test
24+
# has its own needs and there are collisions when running
25+
# tests in parallel.
2326

2427
@classmethod
2528
def setUpClass(cls):
26-
opts = cls.get_opts(cls.FIELDS)
27-
raw_output = cls.openstack('address scope create ' + cls.NAME + opts)
28-
cls.assertOutput(cls.NAME + "\n", raw_output)
29+
# Set up some regex for matching below
30+
cls.re_name = re.compile("name\s+\|\s+([^|]+?)\s+\|")
31+
cls.re_ip_version = re.compile("ip_version\s+\|\s+(\S+)")
32+
cls.re_shared = re.compile("shared\s+\|\s+(\S+)")
2933

30-
@classmethod
31-
def tearDownClass(cls):
32-
raw_output = cls.openstack('address scope delete ' + cls.NAME)
33-
cls.assertOutput('', raw_output)
34+
def test_address_scope_delete(self):
35+
"""Test create, delete multiple"""
36+
name1 = uuid.uuid4().hex
37+
raw_output = self.openstack(
38+
'address scope create ' + name1,
39+
)
40+
self.assertEqual(
41+
name1,
42+
re.search(self.re_name, raw_output).group(1),
43+
)
44+
# Check the default values
45+
self.assertEqual(
46+
'False',
47+
re.search(self.re_shared, raw_output).group(1),
48+
)
49+
50+
name2 = uuid.uuid4().hex
51+
raw_output = self.openstack(
52+
'address scope create ' + name2,
53+
)
54+
self.assertEqual(
55+
name2,
56+
re.search(self.re_name, raw_output).group(1),
57+
)
58+
59+
raw_output = self.openstack(
60+
'address scope delete ' + name1 + ' ' + name2,
61+
)
62+
self.assertOutput('', raw_output)
3463

3564
def test_address_scope_list(self):
36-
opts = self.get_opts(self.HEADERS)
37-
raw_output = self.openstack('address scope list' + opts)
38-
self.assertIn(self.NAME, raw_output)
65+
"""Test create defaults, list filters, delete"""
66+
name1 = uuid.uuid4().hex
67+
raw_output = self.openstack(
68+
'address scope create --ip-version 4 --share ' + name1,
69+
)
70+
self.addCleanup(self.openstack, 'address scope delete ' + name1)
71+
self.assertEqual(
72+
'4',
73+
re.search(self.re_ip_version, raw_output).group(1),
74+
)
75+
self.assertEqual(
76+
'True',
77+
re.search(self.re_shared, raw_output).group(1),
78+
)
79+
80+
name2 = uuid.uuid4().hex
81+
raw_output = self.openstack(
82+
'address scope create --ip-version 6 --no-share ' + name2,
83+
)
84+
self.addCleanup(self.openstack, 'address scope delete ' + name2)
85+
self.assertEqual(
86+
'6',
87+
re.search(self.re_ip_version, raw_output).group(1),
88+
)
89+
self.assertEqual(
90+
'False',
91+
re.search(self.re_shared, raw_output).group(1),
92+
)
3993

40-
def test_address_scope_show(self):
41-
opts = self.get_opts(self.FIELDS)
42-
raw_output = self.openstack('address scope show ' + self.NAME + opts)
43-
self.assertEqual(self.NAME + "\n", raw_output)
94+
# Test list
95+
raw_output = self.openstack('address scope list')
96+
self.assertIsNotNone(re.search(name1 + "\s+\|\s+4", raw_output))
97+
self.assertIsNotNone(re.search(name2 + "\s+\|\s+6", raw_output))
98+
99+
# Test list --share
100+
# TODO(dtroyer): returns 'HttpException: Bad Request'
101+
# raw_output = self.openstack('address scope list --share')
102+
# self.assertIsNotNone(re.search(name1 + "\s+\|\s+4", raw_output))
103+
# self.assertIsNotNone(re.search(name2 + "\s+\|\s+6", raw_output))
104+
105+
# Test list --no-share
106+
# TODO(dtroyer): returns 'HttpException: Bad Request'
107+
# raw_output = self.openstack('address scope list --no-share')
108+
# self.assertIsNotNone(re.search(name1 + "\s+\|\s+4", raw_output))
109+
# self.assertIsNotNone(re.search(name2 + "\s+\|\s+6", raw_output))
44110

45111
def test_address_scope_set(self):
46-
self.openstack('address scope set --share ' + self.NAME)
47-
opts = self.get_opts(['shared'])
48-
raw_output = self.openstack('address scope show ' + self.NAME + opts)
49-
self.assertEqual("True\n", raw_output)
112+
"""Tests create options, set, show, delete"""
113+
name = uuid.uuid4().hex
114+
newname = name + "_"
115+
raw_output = self.openstack(
116+
'address scope create ' +
117+
'--ip-version 4 ' +
118+
'--no-share ' +
119+
name,
120+
)
121+
self.addCleanup(self.openstack, 'address scope delete ' + newname)
122+
self.assertEqual(
123+
name,
124+
re.search(self.re_name, raw_output).group(1),
125+
)
126+
self.assertEqual(
127+
'4',
128+
re.search(self.re_ip_version, raw_output).group(1),
129+
)
130+
self.assertEqual(
131+
'False',
132+
re.search(self.re_shared, raw_output).group(1),
133+
)
134+
135+
raw_output = self.openstack(
136+
'address scope set ' +
137+
'--name ' + newname +
138+
' --share ' +
139+
name,
140+
)
141+
self.assertOutput('', raw_output)
142+
143+
raw_output = self.openstack('address scope show ' + newname)
144+
self.assertEqual(
145+
newname,
146+
re.search(self.re_name, raw_output).group(1),
147+
)
148+
self.assertEqual(
149+
'4',
150+
re.search(self.re_ip_version, raw_output).group(1),
151+
)
152+
self.assertEqual(
153+
'True',
154+
re.search(self.re_shared, raw_output).group(1),
155+
)

0 commit comments

Comments
 (0)