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
This commit is contained in:
Nakul Dahiwade 2017-03-01 21:15:10 +00:00
parent a93440023b
commit 289f15a814
2 changed files with 135 additions and 64 deletions
openstackclient/tests/functional/network/v2

@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import re
import json
import uuid
from openstackclient.tests.functional import base
@ -27,37 +27,45 @@ class TestMeter(base.TestCase):
# has its own needs and there are collisions when running
# tests in parallel.
@classmethod
def setUpClass(cls):
# Set up some regex for matching below
cls.re_name = re.compile("name\s+\|\s+([^|]+?)\s+\|")
cls.re_shared = re.compile("shared\s+\|\s+(\S+)")
cls.re_description = re.compile("description\s+\|\s+([^|]+?)\s+\|")
def test_meter_delete(self):
"""Test create, delete multiple"""
name1 = uuid.uuid4().hex
name2 = uuid.uuid4().hex
raw_output = self.openstack(
'network meter create ' + name1,
description = 'fakedescription'
json_output = json.loads(self.openstack(
'network meter create -f json ' + name1 + ' --description '
+ description)
)
self.assertEqual(
name1,
re.search(self.re_name, raw_output).group(1),
json_output.get('name'),
)
# Check if default shared values
self.assertEqual(
'False',
re.search(self.re_shared, raw_output).group(1)
False,
json_output.get('shared')
)
self.assertEqual(
'fakedescription',
json_output.get('description')
)
raw_output = self.openstack(
'network meter create ' + name2,
json_output_2 = json.loads(self.openstack(
'network meter create -f json ' + name2 + ' --description '
+ description)
)
self.assertEqual(
name2,
re.search(self.re_name, raw_output).group(1),
json_output_2.get('name'),
)
# Check if default shared values
self.assertEqual(
False,
json_output_2.get('shared')
)
self.assertEqual(
'fakedescription',
json_output_2.get('description')
)
raw_output = self.openstack(
@ -68,35 +76,83 @@ class TestMeter(base.TestCase):
def test_meter_list(self):
"""Test create, list filters, delete"""
name1 = uuid.uuid4().hex
raw_output = self.openstack(
'network meter create --description Test1 --share ' + name1,
json_output = json.loads(self.openstack(
'network meter create -f json --description Test1 --share '
+ name1)
)
self.addCleanup(self.openstack, 'network meter delete ' + name1)
self.assertEqual(
'Test1',
re.search(self.re_description, raw_output).group(1),
json_output.get('description'),
)
self.assertEqual(
'True',
re.search(self.re_shared, raw_output).group(1),
True,
json_output.get('shared'),
)
name2 = uuid.uuid4().hex
raw_output = self.openstack(
'network meter create --description Test2 --no-share ' + name2,
json_output_2 = json.loads(self.openstack(
'network meter create -f json --description Test2 --no-share '
+ name2)
)
self.addCleanup(self.openstack, 'network meter delete ' + name2)
self.assertEqual(
'Test2',
re.search(self.re_description, raw_output).group(1),
json_output_2.get('description')
)
self.assertEqual(
'False',
re.search(self.re_shared, raw_output).group(1),
False,
json_output_2.get('shared')
)
raw_output = self.openstack('network meter list')
self.assertIsNotNone(re.search(name1 + "\s+\|\s+Test1", raw_output))
self.assertIsNotNone(re.search(name2 + "\s+\|\s+Test2", raw_output))
raw_output = json.loads(self.openstack('network meter list -f json'))
name_list = [item.get('Name') for item in raw_output]
self.assertIn(name1, name_list)
self.assertIn(name2, name_list)
def test_meter_show(self):
"""Test create, show, delete"""
name1 = uuid.uuid4().hex
description = 'fakedescription'
json_output = json.loads(self.openstack(
'network meter create -f json ' + name1 + ' --description '
+ description)
)
meter_id = json_output.get('id')
self.addCleanup(self.openstack, 'network meter delete ' + name1)
# Test show with ID
json_output = json.loads(self.openstack(
'network meter show -f json ' + meter_id)
)
self.assertEqual(
False,
json_output.get('shared')
)
self.assertEqual(
'fakedescription',
json_output.get('description')
)
self.assertEqual(
name1,
json_output.get('name')
)
# Test show with name
json_output = json.loads(self.openstack(
'network meter show -f json ' + name1)
)
self.assertEqual(
meter_id,
json_output.get('id')
)
self.assertEqual(
False,
json_output.get('shared')
)
self.assertEqual(
'fakedescription',
json_output.get('description')
)

@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import re
import json
import uuid
from openstackclient.tests.functional import base
@ -27,19 +27,11 @@ class TestMeterRule(base.TestCase):
@classmethod
def setUpClass(cls):
# Set up some regex for matching below
cls.re_id = re.compile("id\s+\|\s+(\S+)")
cls.re_direction = re.compile("direction\s+\|\s+(\S+)")
cls.re_ip_prefix = re.compile(
"remote_ip_prefix\s+\|\s+([^|]+?)\s+\|"
)
cls.re_meter_id = re.compile("metering_label_id\s+\|\s+(\S+)")
json_output = json.loads(cls.openstack(
'network meter create -f json ' + cls.METER_NAME
))
raw_output = cls.openstack(
'network meter create ' + cls.METER_NAME
)
cls.METER_ID = re.search(cls.re_id, raw_output).group(1)
cls.METER_ID = json_output.get('id')
@classmethod
def tearDownClass(cls):
@ -49,58 +41,81 @@ class TestMeterRule(base.TestCase):
def test_meter_rule_delete(self):
"""test create, delete"""
raw_output = self.openstack(
'network meter rule create ' +
json_output = json.loads(self.openstack(
'network meter rule create -f json ' +
'--remote-ip-prefix 10.0.0.0/8 ' +
self.METER_ID
)
rule_id = re.search(self.re_id, raw_output).group(1)
re_ip = re.search(self.re_ip_prefix, raw_output)
))
rule_id = json_output.get('id')
re_ip = json_output.get('remote_ip_prefix')
self.addCleanup(self.openstack,
'network meter rule delete ' + rule_id)
self.assertIsNotNone(re_ip)
self.assertIsNotNone(rule_id)
self.assertEqual(
'10.0.0.0/8', re_ip
)
def test_meter_rule_list(self):
"""Test create, list, delete"""
raw_output = self.openstack(
'network meter rule create ' +
json_output = json.loads(self.openstack(
'network meter rule create -f json ' +
'--remote-ip-prefix 10.0.0.0/8 ' +
self.METER_ID
)
rule_id = re.search(self.re_id, raw_output).group(1)
))
rule_id_1 = json_output.get('id')
self.addCleanup(self.openstack,
'network meter rule delete ' + rule_id)
'network meter rule delete ' + rule_id_1)
self.assertEqual(
'10.0.0.0/8',
re.search(self.re_ip_prefix, raw_output).group(1)
json_output.get('remote_ip_prefix')
)
raw_output = self.openstack('network meter rule list')
self.assertIsNotNone(re.search(rule_id + "|\s+\|\s+\|\s+10.0.0.0/8",
raw_output))
json_output_1 = json.loads(self.openstack(
'network meter rule create -f json ' +
'--remote-ip-prefix 11.0.0.0/8 ' +
self.METER_ID
))
rule_id_2 = json_output_1.get('id')
self.addCleanup(self.openstack,
'network meter rule delete ' + rule_id_2)
self.assertEqual(
'11.0.0.0/8',
json_output_1.get('remote_ip_prefix')
)
json_output = json.loads(self.openstack('network meter rule list -f '
'json'))
rule_id_list = [item.get('ID') for item in json_output]
ip_prefix_list = [item.get('Remote IP Prefix') for item in json_output]
self.assertIn(rule_id_1, rule_id_list)
self.assertIn(rule_id_2, rule_id_list)
self.assertIn('10.0.0.0/8', ip_prefix_list)
self.assertIn('11.0.0.0/8', ip_prefix_list)
def test_meter_rule_show(self):
"""Test create, show, delete"""
raw_output = self.openstack(
'network meter rule create ' +
json_output = json.loads(self.openstack(
'network meter rule create -f json ' +
'--remote-ip-prefix 10.0.0.0/8 ' +
'--egress ' +
self.METER_ID
)
rule_id = re.search(self.re_id, raw_output).group(1)
))
rule_id = json_output.get('id')
self.assertEqual(
'egress',
re.search(self.re_direction, raw_output).group(1)
json_output.get('direction')
)
raw_output = self.openstack('network meter rule show ' + rule_id)
json_output = json.loads(self.openstack('network meter rule show'
' -f json ' + rule_id))
self.assertEqual(
'10.0.0.0/8',
re.search(self.re_ip_prefix, raw_output).group(1)
json_output.get('remote_ip_prefix')
)
self.assertIsNotNone(rule_id)