From a76d38119befe654bd9ef906c55de0d334ac950a Mon Sep 17 00:00:00 2001 From: Steve Martinelli <s.martinelli@gmail.com> Date: Fri, 13 Jan 2017 12:00:31 -0800 Subject: [PATCH] Fix network functional tests for sdk 0.9.12 it seems the SDK returns "is_default", but doesn't actually set it based on --default or --is-default I already had these functioanl tests mostly converted to JSON, so I dumped that in here too to make the is_default stuff cleaner. Change-Id: I47ca62f57c73aa7fa984ca54742fc86b6bb837c4 --- .../functional/network/v2/test_network.py | 229 ++++++++++-------- 1 file changed, 125 insertions(+), 104 deletions(-) diff --git a/openstackclient/tests/functional/network/v2/test_network.py b/openstackclient/tests/functional/network/v2/test_network.py index ef42dcceef..c55d70f9af 100644 --- a/openstackclient/tests/functional/network/v2/test_network.py +++ b/openstackclient/tests/functional/network/v2/test_network.py @@ -10,164 +10,173 @@ # License for the specific language governing permissions and limitations # under the License. -import re +import json import uuid -import testtools - from openstackclient.tests.functional import base class NetworkTests(base.TestCase): """Functional tests for network""" - @classmethod - def setUpClass(cls): - # Set up some regex for matching below - cls.re_id = re.compile("id\s+\|\s+(\S+)") - cls.re_description = re.compile("description\s+\|\s+([^|]+?)\s+\|") - cls.re_enabled = re.compile("admin_state_up\s+\|\s+(\S+)") - cls.re_shared = re.compile("shared\s+\|\s+(\S+)") - cls.re_external = re.compile("router:external\s+\|\s+(\S+)") - cls.re_default = re.compile("is_default\s+\|\s+(\S+)") - cls.re_port_security = re.compile( - "port_security_enabled\s+\|\s+(\S+)" - ) - def test_network_delete(self): """Test create, delete multiple""" name1 = uuid.uuid4().hex - raw_output = self.openstack( - 'network create ' + + cmd_output = json.loads(self.openstack( + 'network create -f json ' + '--description aaaa ' + name1 - ) + )) + self.assertIsNotNone(cmd_output["id"]) self.assertEqual( 'aaaa', - re.search(self.re_description, raw_output).group(1), + cmd_output["description"], ) + name2 = uuid.uuid4().hex - raw_output = self.openstack( - 'network create ' + + cmd_output = json.loads(self.openstack( + 'network create -f json ' + '--description bbbb ' + name2 - ) + )) + self.assertIsNotNone(cmd_output["id"]) self.assertEqual( 'bbbb', - re.search(self.re_description, raw_output).group(1), + cmd_output["description"], ) del_output = self.openstack('network delete ' + name1 + ' ' + name2) self.assertOutput('', del_output) - @testtools.skip('broken SDK testing') def test_network_list(self): """Test create defaults, list filters, delete""" name1 = uuid.uuid4().hex - raw_output = self.openstack( - 'network create ' + + cmd_output = json.loads(self.openstack( + 'network create -f json ' + '--description aaaa ' + name1 - ) + )) self.addCleanup(self.openstack, 'network delete ' + name1) + self.assertIsNotNone(cmd_output["id"]) self.assertEqual( 'aaaa', - re.search(self.re_description, raw_output).group(1), + cmd_output["description"], ) # Check the default values self.assertEqual( 'UP', - re.search(self.re_enabled, raw_output).group(1), + cmd_output["admin_state_up"], ) self.assertEqual( - 'False', - re.search(self.re_shared, raw_output).group(1), + False, + cmd_output["shared"], ) self.assertEqual( 'Internal', - re.search(self.re_external, raw_output).group(1), + cmd_output["router:external"], ) # NOTE(dtroyer): is_default is not present in the create output # so make sure it stays that way. - self.assertIsNone(re.search(self.re_default, raw_output)) + # NOTE(stevemar): is_default *is* present in SDK 0.9.11 and newer, + # but the value seems to always be None, regardless + # of the --default or --no-default value. + # self.assertEqual('x', cmd_output) + if ('is_default' in cmd_output): + self.assertEqual( + None, + cmd_output["is_default"], + ) self.assertEqual( - 'True', - re.search(self.re_port_security, raw_output).group(1), + True, + cmd_output["port_security_enabled"], ) name2 = uuid.uuid4().hex - raw_output = self.openstack( - 'network create ' + + cmd_output = json.loads(self.openstack( + 'network create -f json ' + '--description bbbb ' + '--disable ' + '--share ' + name2 - ) + )) self.addCleanup(self.openstack, 'network delete ' + name2) + self.assertIsNotNone(cmd_output["id"]) self.assertEqual( 'bbbb', - re.search(self.re_description, raw_output).group(1), + cmd_output["description"], ) self.assertEqual( 'DOWN', - re.search(self.re_enabled, raw_output).group(1), + cmd_output["admin_state_up"], ) self.assertEqual( - 'True', - re.search(self.re_shared, raw_output).group(1), + True, + cmd_output["shared"], + ) + if ('is_default' in cmd_output): + self.assertEqual( + None, + cmd_output["is_default"], + ) + self.assertEqual( + True, + cmd_output["port_security_enabled"], ) # Test list --long - raw_output = self.openstack('network list --long') - self.assertIsNotNone( - re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output) - ) - self.assertIsNotNone( - re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output) - ) + cmd_output = json.loads(self.openstack( + "network list -f json " + + "--long" + )) + col_name = [x["Name"] for x in cmd_output] + self.assertIn(name1, col_name) + self.assertIn(name2, col_name) # Test list --long --enable - raw_output = self.openstack('network list --long --enable') - self.assertIsNotNone( - re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output) - ) - self.assertIsNone( - re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output) - ) + cmd_output = json.loads(self.openstack( + "network list -f json " + + "--enable " + + "--long" + )) + col_name = [x["Name"] for x in cmd_output] + self.assertIn(name1, col_name) + self.assertNotIn(name2, col_name) # Test list --long --disable - raw_output = self.openstack('network list --long --disable') - self.assertIsNone( - re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output) - ) - self.assertIsNotNone( - re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output) - ) + cmd_output = json.loads(self.openstack( + "network list -f json " + + "--disable " + + "--long" + )) + col_name = [x["Name"] for x in cmd_output] + self.assertNotIn(name1, col_name) + self.assertIn(name2, col_name) # Test list --long --share - raw_output = self.openstack('network list --long --share') - self.assertIsNone( - re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output) - ) - self.assertIsNotNone( - re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output) - ) + cmd_output = json.loads(self.openstack( + "network list -f json " + + "--share " + + "--long" + )) + col_name = [x["Name"] for x in cmd_output] + self.assertNotIn(name1, col_name) + self.assertIn(name2, col_name) # Test list --long --no-share - raw_output = self.openstack('network list --long --no-share') - self.assertIsNotNone( - re.search("\|\s+" + name1 + "\s+\|\s+ACTIVE", raw_output) - ) - self.assertIsNone( - re.search("\|\s+" + name2 + "\s+\|\s+ACTIVE", raw_output) - ) + cmd_output = json.loads(self.openstack( + "network list -f json " + + "--no-share " + + "--long" + )) + col_name = [x["Name"] for x in cmd_output] + self.assertIn(name1, col_name) + self.assertNotIn(name2, col_name) - @testtools.skip('broken SDK testing') def test_network_set(self): """Tests create options, set, show, delete""" name = uuid.uuid4().hex - raw_output = self.openstack( - 'network create ' + + cmd_output = json.loads(self.openstack( + 'network create -f json ' + '--description aaaa ' + '--enable ' + '--no-share ' + @@ -175,30 +184,38 @@ class NetworkTests(base.TestCase): '--no-default ' + '--enable-port-security ' + name - ) + )) self.addCleanup(self.openstack, 'network delete ' + name) + self.assertIsNotNone(cmd_output["id"]) self.assertEqual( 'aaaa', - re.search(self.re_description, raw_output).group(1), + cmd_output["description"], ) self.assertEqual( 'UP', - re.search(self.re_enabled, raw_output).group(1), + cmd_output["admin_state_up"], ) self.assertEqual( - 'False', - re.search(self.re_shared, raw_output).group(1), + False, + cmd_output["shared"], ) self.assertEqual( 'Internal', - re.search(self.re_external, raw_output).group(1), + cmd_output["router:external"], ) # NOTE(dtroyer): is_default is not present in the create output # so make sure it stays that way. - self.assertIsNone(re.search(self.re_default, raw_output)) + # NOTE(stevemar): is_default *is* present in SDK 0.9.11 and newer, + # but the value seems to always be None, regardless + # of the --default or --no-default value. + if ('is_default' in cmd_output): + self.assertEqual( + None, + cmd_output["is_default"], + ) self.assertEqual( - 'True', - re.search(self.re_port_security, raw_output).group(1), + True, + cmd_output["port_security_enabled"], ) raw_output = self.openstack( @@ -212,32 +229,34 @@ class NetworkTests(base.TestCase): ) self.assertOutput('', raw_output) - raw_output = self.openstack('network show ' + name) + cmd_output = json.loads(self.openstack( + 'network show -f json ' + name + )) self.assertEqual( 'cccc', - re.search(self.re_description, raw_output).group(1), + cmd_output["description"], ) self.assertEqual( 'DOWN', - re.search(self.re_enabled, raw_output).group(1), + cmd_output["admin_state_up"], ) self.assertEqual( - 'True', - re.search(self.re_shared, raw_output).group(1), + True, + cmd_output["shared"], ) self.assertEqual( 'External', - re.search(self.re_external, raw_output).group(1), + cmd_output["router:external"], ) # why not 'None' like above?? self.assertEqual( - 'False', - re.search(self.re_default, raw_output).group(1), + False, + cmd_output["is_default"], ) self.assertEqual( - 'False', - re.search(self.re_port_security, raw_output).group(1), + False, + cmd_output["port_security_enabled"], ) # NOTE(dtroyer): There is ambiguity around is_default in that @@ -252,14 +271,16 @@ class NetworkTests(base.TestCase): ) self.assertOutput('', raw_output) - raw_output = self.openstack('network show ' + name) + cmd_output = json.loads(self.openstack( + 'network show -f json ' + name + )) self.assertEqual( 'cccc', - re.search(self.re_description, raw_output).group(1), + cmd_output["description"], ) # NOTE(dtroyer): This should be 'True' self.assertEqual( - 'False', - re.search(self.re_default, raw_output).group(1), + False, + cmd_output["port_security_enabled"], )