Skip to content

Commit 289f15a

Browse files
committed
Jsonify meter and meter rule functional tests
Some functional tests try to parse the CLI table output format, that cause much work on parse string by using regular expression. Using json format in functional tests is better and easier way, this patch reworks for meter and meter rule related tests. Change-Id: I1f2a95c873a4ed23dd1afa4040900a1c7704d0bf
1 parent a934400 commit 289f15a

2 files changed

Lines changed: 135 additions & 64 deletions

File tree

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

Lines changed: 86 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# License for the specific language governing permissions and limitations
1414
# under the License.
1515

16-
import re
16+
import json
1717
import uuid
1818

1919
from openstackclient.tests.functional import base
@@ -27,37 +27,45 @@ class TestMeter(base.TestCase):
2727
# has its own needs and there are collisions when running
2828
# tests in parallel.
2929

30-
@classmethod
31-
def setUpClass(cls):
32-
# Set up some regex for matching below
33-
cls.re_name = re.compile("name\s+\|\s+([^|]+?)\s+\|")
34-
cls.re_shared = re.compile("shared\s+\|\s+(\S+)")
35-
cls.re_description = re.compile("description\s+\|\s+([^|]+?)\s+\|")
36-
3730
def test_meter_delete(self):
3831
"""Test create, delete multiple"""
3932
name1 = uuid.uuid4().hex
4033
name2 = uuid.uuid4().hex
41-
42-
raw_output = self.openstack(
43-
'network meter create ' + name1,
34+
description = 'fakedescription'
35+
json_output = json.loads(self.openstack(
36+
'network meter create -f json ' + name1 + ' --description '
37+
+ description)
4438
)
4539
self.assertEqual(
4640
name1,
47-
re.search(self.re_name, raw_output).group(1),
41+
json_output.get('name'),
4842
)
4943
# Check if default shared values
5044
self.assertEqual(
51-
'False',
52-
re.search(self.re_shared, raw_output).group(1)
45+
False,
46+
json_output.get('shared')
47+
)
48+
self.assertEqual(
49+
'fakedescription',
50+
json_output.get('description')
5351
)
5452

55-
raw_output = self.openstack(
56-
'network meter create ' + name2,
53+
json_output_2 = json.loads(self.openstack(
54+
'network meter create -f json ' + name2 + ' --description '
55+
+ description)
5756
)
5857
self.assertEqual(
5958
name2,
60-
re.search(self.re_name, raw_output).group(1),
59+
json_output_2.get('name'),
60+
)
61+
# Check if default shared values
62+
self.assertEqual(
63+
False,
64+
json_output_2.get('shared')
65+
)
66+
self.assertEqual(
67+
'fakedescription',
68+
json_output_2.get('description')
6169
)
6270

6371
raw_output = self.openstack(
@@ -68,35 +76,83 @@ def test_meter_delete(self):
6876
def test_meter_list(self):
6977
"""Test create, list filters, delete"""
7078
name1 = uuid.uuid4().hex
71-
raw_output = self.openstack(
72-
'network meter create --description Test1 --share ' + name1,
79+
json_output = json.loads(self.openstack(
80+
'network meter create -f json --description Test1 --share '
81+
+ name1)
7382
)
7483
self.addCleanup(self.openstack, 'network meter delete ' + name1)
7584

7685
self.assertEqual(
7786
'Test1',
78-
re.search(self.re_description, raw_output).group(1),
87+
json_output.get('description'),
7988
)
8089
self.assertEqual(
81-
'True',
82-
re.search(self.re_shared, raw_output).group(1),
90+
True,
91+
json_output.get('shared'),
8392
)
8493

8594
name2 = uuid.uuid4().hex
86-
raw_output = self.openstack(
87-
'network meter create --description Test2 --no-share ' + name2,
95+
json_output_2 = json.loads(self.openstack(
96+
'network meter create -f json --description Test2 --no-share '
97+
+ name2)
8898
)
8999
self.addCleanup(self.openstack, 'network meter delete ' + name2)
90100

91101
self.assertEqual(
92102
'Test2',
93-
re.search(self.re_description, raw_output).group(1),
103+
json_output_2.get('description')
104+
)
105+
self.assertEqual(
106+
False,
107+
json_output_2.get('shared')
108+
)
109+
110+
raw_output = json.loads(self.openstack('network meter list -f json'))
111+
name_list = [item.get('Name') for item in raw_output]
112+
self.assertIn(name1, name_list)
113+
self.assertIn(name2, name_list)
114+
115+
def test_meter_show(self):
116+
"""Test create, show, delete"""
117+
name1 = uuid.uuid4().hex
118+
description = 'fakedescription'
119+
json_output = json.loads(self.openstack(
120+
'network meter create -f json ' + name1 + ' --description '
121+
+ description)
122+
)
123+
meter_id = json_output.get('id')
124+
self.addCleanup(self.openstack, 'network meter delete ' + name1)
125+
126+
# Test show with ID
127+
json_output = json.loads(self.openstack(
128+
'network meter show -f json ' + meter_id)
94129
)
95130
self.assertEqual(
96-
'False',
97-
re.search(self.re_shared, raw_output).group(1),
131+
False,
132+
json_output.get('shared')
133+
)
134+
self.assertEqual(
135+
'fakedescription',
136+
json_output.get('description')
137+
)
138+
self.assertEqual(
139+
name1,
140+
json_output.get('name')
98141
)
99142

100-
raw_output = self.openstack('network meter list')
101-
self.assertIsNotNone(re.search(name1 + "\s+\|\s+Test1", raw_output))
102-
self.assertIsNotNone(re.search(name2 + "\s+\|\s+Test2", raw_output))
143+
# Test show with name
144+
json_output = json.loads(self.openstack(
145+
'network meter show -f json ' + name1)
146+
)
147+
self.assertEqual(
148+
meter_id,
149+
json_output.get('id')
150+
)
151+
self.assertEqual(
152+
False,
153+
json_output.get('shared')
154+
)
155+
self.assertEqual(
156+
'fakedescription',
157+
json_output.get('description')
158+
)

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

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# License for the specific language governing permissions and limitations
1414
# under the License.
1515

16-
import re
16+
import json
1717
import uuid
1818

1919
from openstackclient.tests.functional import base
@@ -27,19 +27,11 @@ class TestMeterRule(base.TestCase):
2727

2828
@classmethod
2929
def setUpClass(cls):
30-
# Set up some regex for matching below
31-
cls.re_id = re.compile("id\s+\|\s+(\S+)")
32-
cls.re_direction = re.compile("direction\s+\|\s+(\S+)")
33-
cls.re_ip_prefix = re.compile(
34-
"remote_ip_prefix\s+\|\s+([^|]+?)\s+\|"
35-
)
36-
cls.re_meter_id = re.compile("metering_label_id\s+\|\s+(\S+)")
37-
38-
raw_output = cls.openstack(
39-
'network meter create ' + cls.METER_NAME
40-
)
30+
json_output = json.loads(cls.openstack(
31+
'network meter create -f json ' + cls.METER_NAME
32+
))
4133

42-
cls.METER_ID = re.search(cls.re_id, raw_output).group(1)
34+
cls.METER_ID = json_output.get('id')
4335

4436
@classmethod
4537
def tearDownClass(cls):
@@ -49,58 +41,81 @@ def tearDownClass(cls):
4941
def test_meter_rule_delete(self):
5042
"""test create, delete"""
5143

52-
raw_output = self.openstack(
53-
'network meter rule create ' +
44+
json_output = json.loads(self.openstack(
45+
'network meter rule create -f json ' +
5446
'--remote-ip-prefix 10.0.0.0/8 ' +
5547
self.METER_ID
56-
)
57-
rule_id = re.search(self.re_id, raw_output).group(1)
58-
re_ip = re.search(self.re_ip_prefix, raw_output)
48+
))
49+
rule_id = json_output.get('id')
50+
re_ip = json_output.get('remote_ip_prefix')
5951

6052
self.addCleanup(self.openstack,
6153
'network meter rule delete ' + rule_id)
6254
self.assertIsNotNone(re_ip)
6355
self.assertIsNotNone(rule_id)
56+
self.assertEqual(
57+
'10.0.0.0/8', re_ip
58+
)
6459

6560
def test_meter_rule_list(self):
6661
"""Test create, list, delete"""
67-
raw_output = self.openstack(
68-
'network meter rule create ' +
62+
json_output = json.loads(self.openstack(
63+
'network meter rule create -f json ' +
6964
'--remote-ip-prefix 10.0.0.0/8 ' +
7065
self.METER_ID
71-
)
72-
rule_id = re.search(self.re_id, raw_output).group(1)
66+
))
67+
rule_id_1 = json_output.get('id')
7368
self.addCleanup(self.openstack,
74-
'network meter rule delete ' + rule_id)
69+
'network meter rule delete ' + rule_id_1)
7570
self.assertEqual(
7671
'10.0.0.0/8',
77-
re.search(self.re_ip_prefix, raw_output).group(1)
72+
json_output.get('remote_ip_prefix')
7873
)
7974

80-
raw_output = self.openstack('network meter rule list')
81-
self.assertIsNotNone(re.search(rule_id + "|\s+\|\s+\|\s+10.0.0.0/8",
82-
raw_output))
75+
json_output_1 = json.loads(self.openstack(
76+
'network meter rule create -f json ' +
77+
'--remote-ip-prefix 11.0.0.0/8 ' +
78+
self.METER_ID
79+
))
80+
rule_id_2 = json_output_1.get('id')
81+
self.addCleanup(self.openstack,
82+
'network meter rule delete ' + rule_id_2)
83+
self.assertEqual(
84+
'11.0.0.0/8',
85+
json_output_1.get('remote_ip_prefix')
86+
)
87+
88+
json_output = json.loads(self.openstack('network meter rule list -f '
89+
'json'))
90+
rule_id_list = [item.get('ID') for item in json_output]
91+
ip_prefix_list = [item.get('Remote IP Prefix') for item in json_output]
92+
self.assertIn(rule_id_1, rule_id_list)
93+
self.assertIn(rule_id_2, rule_id_list)
94+
self.assertIn('10.0.0.0/8', ip_prefix_list)
95+
self.assertIn('11.0.0.0/8', ip_prefix_list)
8396

8497
def test_meter_rule_show(self):
98+
8599
"""Test create, show, delete"""
86-
raw_output = self.openstack(
87-
'network meter rule create ' +
100+
json_output = json.loads(self.openstack(
101+
'network meter rule create -f json ' +
88102
'--remote-ip-prefix 10.0.0.0/8 ' +
89103
'--egress ' +
90104
self.METER_ID
91-
)
92-
rule_id = re.search(self.re_id, raw_output).group(1)
105+
))
106+
rule_id = json_output.get('id')
93107

94108
self.assertEqual(
95109
'egress',
96-
re.search(self.re_direction, raw_output).group(1)
110+
json_output.get('direction')
97111
)
98112

99-
raw_output = self.openstack('network meter rule show ' + rule_id)
113+
json_output = json.loads(self.openstack('network meter rule show'
114+
' -f json ' + rule_id))
100115

101116
self.assertEqual(
102117
'10.0.0.0/8',
103-
re.search(self.re_ip_prefix, raw_output).group(1)
118+
json_output.get('remote_ip_prefix')
104119
)
105120
self.assertIsNotNone(rule_id)
106121

0 commit comments

Comments
 (0)