Skip to content

Commit 6707957

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Beef up network functional tests"
2 parents 385b87c + 22cee10 commit 6707957

File tree

1 file changed

+235
-24
lines changed

1 file changed

+235
-24
lines changed

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

Lines changed: 235 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,41 +10,252 @@
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 NetworkTests(base.TestCase):
19-
"""Functional tests for network. """
20-
NAME = uuid.uuid4().hex
21-
HEADERS = ['Name']
22-
FIELDS = ['name']
20+
"""Functional tests for network"""
2321

2422
@classmethod
2523
def setUpClass(cls):
26-
opts = cls.get_opts(cls.FIELDS)
27-
raw_output = cls.openstack('network create ' + cls.NAME + opts)
28-
expected = cls.NAME + '\n'
29-
cls.assertOutput(expected, raw_output)
24+
# Set up some regex for matching below
25+
cls.re_id = re.compile("id\s+\|\s+(\S+)")
26+
cls.re_description = re.compile("description\s+\|\s+([^|]+?)\s+\|")
27+
cls.re_enabled = re.compile("admin_state_up\s+\|\s+(\S+)")
28+
cls.re_shared = re.compile("shared\s+\|\s+(\S+)")
29+
cls.re_external = re.compile("router:external\s+\|\s+(\S+)")
30+
cls.re_default = re.compile("is_default\s+\|\s+(\S+)")
31+
cls.re_port_security = re.compile(
32+
"port_security_enabled\s+\|\s+(\S+)"
33+
)
3034

31-
@classmethod
32-
def tearDownClass(cls):
33-
raw_output = cls.openstack('network delete ' + cls.NAME)
34-
cls.assertOutput('', raw_output)
35+
def test_network_delete(self):
36+
"""Test create, delete multiple"""
37+
name1 = uuid.uuid4().hex
38+
raw_output = self.openstack(
39+
'network create ' +
40+
'--description aaaa ' +
41+
name1
42+
)
43+
self.assertEqual(
44+
'aaaa',
45+
re.search(self.re_description, raw_output).group(1),
46+
)
47+
name2 = uuid.uuid4().hex
48+
raw_output = self.openstack(
49+
'network create ' +
50+
'--description bbbb ' +
51+
name2
52+
)
53+
self.assertEqual(
54+
'bbbb',
55+
re.search(self.re_description, raw_output).group(1),
56+
)
57+
58+
del_output = self.openstack('network delete ' + name1 + ' ' + name2)
59+
self.assertOutput('', del_output)
3560

3661
def test_network_list(self):
37-
opts = self.get_opts(self.HEADERS)
38-
raw_output = self.openstack('network list' + opts)
39-
self.assertIn(self.NAME, raw_output)
62+
"""Test create defaults, list filters, delete"""
63+
name1 = uuid.uuid4().hex
64+
raw_output = self.openstack(
65+
'network create ' +
66+
'--description aaaa ' +
67+
name1
68+
)
69+
self.addCleanup(self.openstack, 'network delete ' + name1)
70+
self.assertEqual(
71+
'aaaa',
72+
re.search(self.re_description, raw_output).group(1),
73+
)
74+
# Check the default values
75+
self.assertEqual(
76+
'UP',
77+
re.search(self.re_enabled, raw_output).group(1),
78+
)
79+
self.assertEqual(
80+
'False',
81+
re.search(self.re_shared, raw_output).group(1),
82+
)
83+
self.assertEqual(
84+
'Internal',
85+
re.search(self.re_external, raw_output).group(1),
86+
)
87+
# NOTE(dtroyer): is_default is not present in the create output
88+
# so make sure it stays that way.
89+
self.assertIsNone(re.search(self.re_default, raw_output))
90+
self.assertEqual(
91+
'True',
92+
re.search(self.re_port_security, raw_output).group(1),
93+
)
94+
95+
name2 = uuid.uuid4().hex
96+
raw_output = self.openstack(
97+
'network create ' +
98+
'--description bbbb ' +
99+
'--disable ' +
100+
'--share ' +
101+
name2
102+
)
103+
self.addCleanup(self.openstack, 'network delete ' + name2)
104+
self.assertEqual(
105+
'bbbb',
106+
re.search(self.re_description, raw_output).group(1),
107+
)
108+
self.assertEqual(
109+
'DOWN',
110+
re.search(self.re_enabled, raw_output).group(1),
111+
)
112+
self.assertEqual(
113+
'True',
114+
re.search(self.re_shared, raw_output).group(1),
115+
)
116+
117+
# Test list --long
118+
raw_output = self.openstack('network list --long')
119+
self.assertIsNotNone(
120+
re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output)
121+
)
122+
self.assertIsNotNone(
123+
re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output)
124+
)
125+
126+
# Test list --long --enable
127+
raw_output = self.openstack('network list --long --enable')
128+
self.assertIsNotNone(
129+
re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output)
130+
)
131+
self.assertIsNone(
132+
re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output)
133+
)
134+
135+
# Test list --long --disable
136+
raw_output = self.openstack('network list --long --disable')
137+
self.assertIsNone(
138+
re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output)
139+
)
140+
self.assertIsNotNone(
141+
re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output)
142+
)
143+
144+
# Test list --long --share
145+
raw_output = self.openstack('network list --long --share')
146+
self.assertIsNone(
147+
re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output)
148+
)
149+
self.assertIsNotNone(
150+
re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output)
151+
)
152+
153+
# Test list --long --no-share
154+
raw_output = self.openstack('network list --long --no-share')
155+
self.assertIsNotNone(
156+
re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output)
157+
)
158+
self.assertIsNone(
159+
re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output)
160+
)
40161

41162
def test_network_set(self):
42-
raw_output = self.openstack('network set --disable ' + self.NAME)
43-
opts = self.get_opts(['name', 'admin_state_up'])
44-
raw_output = self.openstack('network show ' + self.NAME + opts)
45-
self.assertEqual("DOWN\n" + self.NAME + "\n", raw_output)
46-
47-
def test_network_show(self):
48-
opts = self.get_opts(self.FIELDS)
49-
raw_output = self.openstack('network show ' + self.NAME + opts)
50-
self.assertEqual(self.NAME + "\n", raw_output)
163+
"""Tests create options, set, show, delete"""
164+
name = uuid.uuid4().hex
165+
raw_output = self.openstack(
166+
'network create ' +
167+
'--description aaaa ' +
168+
'--enable ' +
169+
'--no-share ' +
170+
'--internal ' +
171+
'--no-default ' +
172+
'--enable-port-security ' +
173+
name
174+
)
175+
self.addCleanup(self.openstack, 'network delete ' + name)
176+
self.assertEqual(
177+
'aaaa',
178+
re.search(self.re_description, raw_output).group(1),
179+
)
180+
self.assertEqual(
181+
'UP',
182+
re.search(self.re_enabled, raw_output).group(1),
183+
)
184+
self.assertEqual(
185+
'False',
186+
re.search(self.re_shared, raw_output).group(1),
187+
)
188+
self.assertEqual(
189+
'Internal',
190+
re.search(self.re_external, raw_output).group(1),
191+
)
192+
# NOTE(dtroyer): is_default is not present in the create output
193+
# so make sure it stays that way.
194+
self.assertIsNone(re.search(self.re_default, raw_output))
195+
self.assertEqual(
196+
'True',
197+
re.search(self.re_port_security, raw_output).group(1),
198+
)
199+
200+
raw_output = self.openstack(
201+
'network set ' +
202+
'--description cccc ' +
203+
'--disable ' +
204+
'--share ' +
205+
'--external ' +
206+
'--disable-port-security ' +
207+
name
208+
)
209+
self.assertOutput('', raw_output)
210+
211+
raw_output = self.openstack('network show ' + name)
212+
213+
self.assertEqual(
214+
'cccc',
215+
re.search(self.re_description, raw_output).group(1),
216+
)
217+
self.assertEqual(
218+
'DOWN',
219+
re.search(self.re_enabled, raw_output).group(1),
220+
)
221+
self.assertEqual(
222+
'True',
223+
re.search(self.re_shared, raw_output).group(1),
224+
)
225+
self.assertEqual(
226+
'External',
227+
re.search(self.re_external, raw_output).group(1),
228+
)
229+
# why not 'None' like above??
230+
self.assertEqual(
231+
'False',
232+
re.search(self.re_default, raw_output).group(1),
233+
)
234+
self.assertEqual(
235+
'False',
236+
re.search(self.re_port_security, raw_output).group(1),
237+
)
238+
239+
# NOTE(dtroyer): There is ambiguity around is_default in that
240+
# it is not in the API docs and apparently can
241+
# not be set when the network is --external,
242+
# although the option handling code only looks at
243+
# the value of is_default when external is True.
244+
raw_output = self.openstack(
245+
'network set ' +
246+
'--default ' +
247+
name
248+
)
249+
self.assertOutput('', raw_output)
250+
251+
raw_output = self.openstack('network show ' + name)
252+
253+
self.assertEqual(
254+
'cccc',
255+
re.search(self.re_description, raw_output).group(1),
256+
)
257+
# NOTE(dtroyer): This should be 'True'
258+
self.assertEqual(
259+
'False',
260+
re.search(self.re_default, raw_output).group(1),
261+
)

0 commit comments

Comments
 (0)