Nova net functional tests round 1

* address scope
* network agent
* network flavor
* network flavor profile
* network meter
* network meter rule

Also create a new common network functional test class
NetworkTests to house the setting of haz_network in a single place.
The individual test skipping stays in the final classes to re-enforce
the idea that some tests work with both Nova-net and Neutron.

Change-Id: Ie3910231c6fc9e2031438c599afa904f43c874a7
This commit is contained in:
Dean Troyer 2017-04-26 19:27:00 -05:00
parent 7b609ebd55
commit e0d1af94a1
7 changed files with 279 additions and 129 deletions

View File

@ -0,0 +1,22 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from openstackclient.tests.functional import base
class NetworkTests(base.TestCase):
"""Functional tests for Network commands"""
@classmethod
def setUpClass(cls):
# super(NetworkTests, cls).setUp()
cls.haz_network = base.is_service_enabled('network')

View File

@ -13,10 +13,10 @@
import json
import uuid
from openstackclient.tests.functional import base
from openstackclient.tests.functional.network.v2 import common
class AddressScopeTests(base.TestCase):
class AddressScopeTests(common.NetworkTests):
"""Functional tests for address scope. """
# NOTE(dtroyer): Do not normalize the setup and teardown of the resource
@ -24,6 +24,12 @@ class AddressScopeTests(base.TestCase):
# has its own needs and there are collisions when running
# tests in parallel.
def setUp(self):
super(AddressScopeTests, self).setUp()
# Nothing in this class works with Nova Network
if not self.haz_network:
self.skipTest("No Network service present")
def test_address_scope_delete(self):
"""Test create, delete multiple"""
name1 = uuid.uuid4().hex

View File

@ -13,39 +13,85 @@
import json
import uuid
from openstackclient.tests.functional import base
from openstackclient.tests.functional.network.v2 import common
class NetworkAgentTests(base.TestCase):
"""Functional tests for network agent. """
IDs = None
HEADERS = ['ID']
FIELDS = ['id']
class NetworkAgentTests(common.NetworkTests):
"""Functional tests for network agent"""
@classmethod
def test_network_agent_list(cls):
opts = cls.get_opts(cls.HEADERS)
raw_output = cls.openstack('network agent list' + opts)
# get the list of network agent IDs.
cls.IDs = raw_output.split('\n')
def setUp(self):
super(NetworkAgentTests, self).setUp()
# Nothing in this class works with Nova Network
if not self.haz_network:
self.skipTest("No Network service present")
def test_network_agent_show(self):
opts = self.get_opts(self.FIELDS)
raw_output = self.openstack('network agent show ' + self.IDs[0] + opts)
self.assertEqual(self.IDs[0] + "\n", raw_output)
def test_network_agent_list_show_set(self):
"""Test network agent list, set, show commands
def test_network_agent_set(self):
opts = self.get_opts(['admin_state_up'])
self.openstack('network agent set --disable ' + self.IDs[0])
raw_output = self.openstack('network agent show ' + self.IDs[0] + opts)
self.assertEqual("DOWN\n", raw_output)
self.openstack('network agent set --enable ' + self.IDs[0])
raw_output = self.openstack('network agent show ' + self.IDs[0] + opts)
self.assertEqual("UP\n", raw_output)
Do these serially because show and set rely on the existing agent IDs
from the list output and we had races when run in parallel.
"""
# agent list
agent_list = json.loads(self.openstack(
'network agent list -f json'
))
self.assertIsNotNone(agent_list[0])
agent_ids = list([row["ID"] for row in agent_list])
# agent show
cmd_output = json.loads(self.openstack(
'network agent show -f json ' +
agent_ids[0]
))
self.assertEqual(
agent_ids[0],
cmd_output['id'],
)
# agent set
raw_output = self.openstack(
'network agent set ' +
'--disable ' +
agent_ids[0]
)
self.assertOutput('', raw_output)
cmd_output = json.loads(self.openstack(
'network agent show -f json ' +
agent_ids[0]
))
self.assertEqual(
"DOWN",
cmd_output['admin_state_up'],
)
raw_output = self.openstack(
'network agent set ' +
'--enable ' +
agent_ids[0]
)
self.assertOutput('', raw_output)
cmd_output = json.loads(self.openstack(
'network agent show -f json ' +
agent_ids[0]
))
self.assertEqual(
"UP",
cmd_output['admin_state_up'],
)
class NetworkAgentListTests(base.TestCase):
"""Functional test for network agent list --network. """
class NetworkAgentListTests(common.NetworkTests):
"""Functional test for network agent"""
def setUp(self):
super(NetworkAgentListTests, self).setUp()
# Nothing in this class works with Nova Network
if not self.haz_network:
self.skipTest("No Network service present")
def test_network_dhcp_agent_list(self):
"""Test network agent list"""

View File

@ -14,15 +14,20 @@
import json
import uuid
from openstackclient.tests.functional import base
from openstackclient.tests.functional.network.v2 import common
class NetworkFlavorTests(base.TestCase):
"""Functional tests for network flavor."""
class NetworkFlavorTests(common.NetworkTests):
"""Functional tests for network flavor"""
def test_add_remove_network_flavor_profile(self):
def setUp(self):
super(NetworkFlavorTests, self).setUp()
# Nothing in this class works with Nova Network
if not self.haz_network:
self.skipTest("No Network service present")
def test_network_flavor_add_remove_profile(self):
"""Test add and remove network flavor to/from profile"""
# Create Flavor
name1 = uuid.uuid4().hex
cmd_output1 = json.loads(self.openstack(

View File

@ -12,30 +12,40 @@
import json
from openstackclient.tests.functional import base
from openstackclient.tests.functional.network.v2 import common
class NetworkFlavorProfileTests(base.TestCase):
"""Functional tests for network flavor-profile."""
class NetworkFlavorProfileTests(common.NetworkTests):
"""Functional tests for network flavor profile"""
DESCRIPTION = 'fakedescription'
METAINFO = 'Extrainfo'
def setUp(self):
super(NetworkFlavorProfileTests, self).setUp()
# Nothing in this class works with Nova Network
if not self.haz_network:
self.skipTest("No Network service present")
def test_network_flavor_profile_create(self):
json_output = json.loads(self.openstack(
' network flavor profile create -f json --description '
+ self.DESCRIPTION + ' --enable --metainfo ' + self.METAINFO))
'network flavor profile create -f json ' +
'--description ' + self.DESCRIPTION + ' ' +
'--enable --metainfo ' + self.METAINFO
))
ID = json_output.get('id')
self.assertIsNotNone(ID)
self.assertEqual(
True,
json_output.get('enabled'))
json_output.get('enabled'),
)
self.assertEqual(
'fakedescription',
json_output.get('description'))
json_output.get('description'),
)
self.assertEqual(
'Extrainfo',
json_output.get('meta_info')
json_output.get('meta_info'),
)
# Clean up
@ -44,40 +54,51 @@ class NetworkFlavorProfileTests(base.TestCase):
def test_network_flavor_profile_list(self):
json_output = json.loads(self.openstack(
' network flavor profile create -f json --description '
+ self.DESCRIPTION + ' --enable --metainfo ' + self.METAINFO))
'network flavor profile create -f json ' +
'--description ' + self.DESCRIPTION + ' ' +
'--enable ' +
'--metainfo ' + self.METAINFO
))
ID1 = json_output.get('id')
self.assertIsNotNone(ID1)
self.assertEqual(
True,
json_output.get('enabled'))
json_output.get('enabled'),
)
self.assertEqual(
'fakedescription',
json_output.get('description'))
json_output.get('description'),
)
self.assertEqual(
'Extrainfo',
json_output.get('meta_info')
json_output.get('meta_info'),
)
json_output = json.loads(self.openstack(
' network flavor profile create -f json --description '
+ self.DESCRIPTION + ' --disable --metainfo ' + self.METAINFO))
'network flavor profile create -f json ' +
'--description ' + self.DESCRIPTION + ' ' +
'--disable ' +
'--metainfo ' + self.METAINFO
))
ID2 = json_output.get('id')
self.assertIsNotNone(ID2)
self.assertEqual(
False,
json_output.get('enabled'))
json_output.get('enabled'),
)
self.assertEqual(
'fakedescription',
json_output.get('description'))
json_output.get('description'),
)
self.assertEqual(
'Extrainfo',
json_output.get('meta_info')
json_output.get('meta_info'),
)
# Test list
json_output = json.loads(self.openstack(
'network flavor profile list -f json'))
'network flavor profile list -f json'
))
self.assertIsNotNone(json_output)
id_list = [item.get('ID') for item in json_output]
@ -86,39 +107,48 @@ class NetworkFlavorProfileTests(base.TestCase):
# Clean up
raw_output = self.openstack(
'network flavor profile delete ' + ID1 + " " + ID2)
'network flavor profile delete ' + ID1 + ' ' + ID2
)
self.assertOutput('', raw_output)
def test_network_flavor_profile_set(self):
json_output_1 = json.loads(self.openstack(
' network flavor profile create -f json --description '
+ self.DESCRIPTION + ' --enable --metainfo ' + self.METAINFO))
'network flavor profile create -f json ' +
'--description ' + self.DESCRIPTION + ' ' +
'--enable ' +
'--metainfo ' + self.METAINFO
))
ID = json_output_1.get('id')
self.assertIsNotNone(ID)
self.assertEqual(
True,
json_output_1.get('enabled'))
json_output_1.get('enabled'),
)
self.assertEqual(
'fakedescription',
json_output_1.get('description'))
json_output_1.get('description'),
)
self.assertEqual(
'Extrainfo',
json_output_1.get('meta_info')
json_output_1.get('meta_info'),
)
self.openstack('network flavor profile set --disable ' + ID)
json_output = json.loads(self.openstack('network flavor profile show '
'-f json ' + ID))
json_output = json.loads(self.openstack(
'network flavor profile show -f json ' + ID
))
self.assertEqual(
False,
json_output.get('enabled'))
json_output.get('enabled'),
)
self.assertEqual(
'fakedescription',
json_output.get('description'))
json_output.get('description'),
)
self.assertEqual(
'Extrainfo',
json_output.get('meta_info')
json_output.get('meta_info'),
)
# Clean up
@ -127,24 +157,32 @@ class NetworkFlavorProfileTests(base.TestCase):
def test_network_flavor_profile_show(self):
json_output_1 = json.loads(self.openstack(
' network flavor profile create -f json --description '
+ self.DESCRIPTION + ' --enable --metainfo ' + self.METAINFO))
'network flavor profile create -f json ' +
'--description ' + self.DESCRIPTION + ' ' +
'--enable ' +
'--metainfo ' + self.METAINFO
))
ID = json_output_1.get('id')
self.assertIsNotNone(ID)
json_output = json.loads(self.openstack('network flavor profile show '
'-f json ' + ID))
json_output = json.loads(self.openstack(
'network flavor profile show -f json ' + ID
))
self.assertEqual(
ID,
json_output["id"])
json_output["id"],
)
self.assertEqual(
True,
json_output["enabled"])
json_output["enabled"],
)
self.assertEqual(
'fakedescription',
json_output["description"])
json_output["description"],
)
self.assertEqual(
'Extrainfo',
json_output["meta_info"])
json_output["meta_info"],
)
# Clean up
raw_output = self.openstack('network flavor profile delete ' + ID)

View File

@ -16,26 +16,33 @@
import json
import uuid
from openstackclient.tests.functional import base
from openstackclient.tests.functional.network.v2 import common
class TestMeter(base.TestCase):
"""Functional tests for network meter."""
class TestMeter(common.NetworkTests):
"""Functional tests for network meter"""
# NOTE(dtroyer): Do not normalize the setup and teardown of the resource
# creation and deletion. Little is gained when each test
# has its own needs and there are collisions when running
# tests in parallel.
def setUp(self):
super(TestMeter, self).setUp()
# Nothing in this class works with Nova Network
if not self.haz_network:
self.skipTest("No Network service present")
def test_meter_delete(self):
"""Test create, delete multiple"""
name1 = uuid.uuid4().hex
name2 = uuid.uuid4().hex
description = 'fakedescription'
json_output = json.loads(self.openstack(
'network meter create -f json ' + name1 + ' --description '
+ description)
)
'network meter create -f json ' +
' --description ' + description + ' ' +
name1
))
self.assertEqual(
name1,
json_output.get('name'),
@ -43,17 +50,18 @@ class TestMeter(base.TestCase):
# Check if default shared values
self.assertEqual(
False,
json_output.get('shared')
json_output.get('shared'),
)
self.assertEqual(
'fakedescription',
json_output.get('description')
json_output.get('description'),
)
json_output_2 = json.loads(self.openstack(
'network meter create -f json ' + name2 + ' --description '
+ description)
)
'network meter create -f json ' +
'--description ' + description + ' ' +
name2
))
self.assertEqual(
name2,
json_output_2.get('name'),
@ -61,11 +69,11 @@ class TestMeter(base.TestCase):
# Check if default shared values
self.assertEqual(
False,
json_output_2.get('shared')
json_output_2.get('shared'),
)
self.assertEqual(
'fakedescription',
json_output_2.get('description')
json_output_2.get('description'),
)
raw_output = self.openstack(
@ -77,10 +85,15 @@ class TestMeter(base.TestCase):
"""Test create, list filters, delete"""
name1 = uuid.uuid4().hex
json_output = json.loads(self.openstack(
'network meter create -f json --description Test1 --share '
+ name1)
'network meter create -f json ' +
'--description Test1 ' +
'--share ' +
name1
))
self.addCleanup(
self.openstack,
'network meter delete ' + name1
)
self.addCleanup(self.openstack, 'network meter delete ' + name1)
self.assertEqual(
'Test1',
@ -93,18 +106,20 @@ class TestMeter(base.TestCase):
name2 = uuid.uuid4().hex
json_output_2 = json.loads(self.openstack(
'network meter create -f json --description Test2 --no-share '
+ name2)
)
'network meter create -f json ' +
'--description Test2 ' +
'--no-share ' +
name2
))
self.addCleanup(self.openstack, 'network meter delete ' + name2)
self.assertEqual(
'Test2',
json_output_2.get('description')
json_output_2.get('description'),
)
self.assertEqual(
False,
json_output_2.get('shared')
json_output_2.get('shared'),
)
raw_output = json.loads(self.openstack('network meter list -f json'))
@ -117,42 +132,43 @@ class TestMeter(base.TestCase):
name1 = uuid.uuid4().hex
description = 'fakedescription'
json_output = json.loads(self.openstack(
'network meter create -f json ' + name1 + ' --description '
+ description)
)
'network meter create -f json ' +
' --description ' + description + ' ' +
name1
))
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)
)
'network meter show -f json ' + meter_id
))
self.assertEqual(
False,
json_output.get('shared')
json_output.get('shared'),
)
self.assertEqual(
'fakedescription',
json_output.get('description')
json_output.get('description'),
)
self.assertEqual(
name1,
json_output.get('name')
json_output.get('name'),
)
# Test show with name
json_output = json.loads(self.openstack(
'network meter show -f json ' + name1)
)
'network meter show -f json ' + name1
))
self.assertEqual(
meter_id,
json_output.get('id')
json_output.get('id'),
)
self.assertEqual(
False,
json_output.get('shared')
json_output.get('shared'),
)
self.assertEqual(
'fakedescription',
json_output.get('description')
json_output.get('description'),
)

View File

@ -16,31 +16,40 @@
import json
import uuid
from openstackclient.tests.functional import base
from openstackclient.tests.functional.network.v2 import common
class TestMeterRule(base.TestCase):
class TestMeterRule(common.NetworkTests):
"""Functional tests for meter rule"""
METER_NAME = uuid.uuid4().hex
METER_ID = None
METER_RULE_ID = None
@classmethod
def setUpClass(cls):
json_output = json.loads(cls.openstack(
'network meter create -f json ' + cls.METER_NAME
))
cls.METER_ID = json_output.get('id')
common.NetworkTests.setUpClass()
if cls.haz_network:
json_output = json.loads(cls.openstack(
'network meter create -f json ' + cls.METER_NAME
))
cls.METER_ID = json_output.get('id')
@classmethod
def tearDownClass(cls):
raw_output = cls.openstack('network meter delete ' + cls.METER_ID)
cls.assertOutput('', raw_output)
common.NetworkTests.tearDownClass()
if cls.haz_network:
raw_output = cls.openstack('network meter delete ' + cls.METER_ID)
cls.assertOutput('', raw_output)
def setUp(self):
super(TestMeterRule, self).setUp()
# Nothing in this class works with Nova Network
if not self.haz_network:
self.skipTest("No Network service present")
def test_meter_rule_delete(self):
"""test create, delete"""
json_output = json.loads(self.openstack(
'network meter rule create -f json ' +
'--remote-ip-prefix 10.0.0.0/8 ' +
@ -49,8 +58,10 @@ class TestMeterRule(base.TestCase):
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.addCleanup(
self.openstack,
'network meter rule delete ' + rule_id
)
self.assertIsNotNone(re_ip)
self.assertIsNotNone(rule_id)
self.assertEqual(
@ -65,8 +76,10 @@ class TestMeterRule(base.TestCase):
self.METER_ID
))
rule_id_1 = json_output.get('id')
self.addCleanup(self.openstack,
'network meter rule delete ' + rule_id_1)
self.addCleanup(
self.openstack,
'network meter rule delete ' + rule_id_1
)
self.assertEqual(
'10.0.0.0/8',
json_output.get('remote_ip_prefix')
@ -78,15 +91,18 @@ class TestMeterRule(base.TestCase):
self.METER_ID
))
rule_id_2 = json_output_1.get('id')
self.addCleanup(self.openstack,
'network meter rule delete ' + rule_id_2)
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'))
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)
@ -95,7 +111,6 @@ class TestMeterRule(base.TestCase):
self.assertIn('11.0.0.0/8', ip_prefix_list)
def test_meter_rule_show(self):
"""Test create, show, delete"""
json_output = json.loads(self.openstack(
'network meter rule create -f json ' +
@ -110,14 +125,16 @@ class TestMeterRule(base.TestCase):
json_output.get('direction')
)
json_output = json.loads(self.openstack('network meter rule show'
' -f json ' + rule_id))
json_output = json.loads(self.openstack(
'network meter rule show -f json ' + rule_id
))
self.assertEqual(
'10.0.0.0/8',
json_output.get('remote_ip_prefix')
)
self.assertIsNotNone(rule_id)
self.addCleanup(self.openstack,
'network meter rule delete ' + rule_id)
self.addCleanup(
self.openstack,
'network meter rule delete ' + rule_id
)