Merge "Ensure no "agent" functional tests are skipped in the gate"

This commit is contained in:
Jenkins 2015-06-12 04:33:46 +00:00 committed by Gerrit Code Review
commit 87cb6cb0ad
3 changed files with 37 additions and 6 deletions

View File

@ -11,8 +11,14 @@
# under the License. # under the License.
# #
import functools
import unittest.case
import testtools.testcase
from neutron.common import constants as n_const from neutron.common import constants as n_const
from neutron.tests import base from neutron.tests import base
from neutron.tests import tools
def create_resource(prefix, creation_func, *args, **kwargs): def create_resource(prefix, creation_func, *args, **kwargs):
@ -40,3 +46,24 @@ def create_resource(prefix, creation_func, *args, **kwargs):
return creation_func(name, *args, **kwargs) return creation_func(name, *args, **kwargs)
except RuntimeError: except RuntimeError:
pass pass
def no_skip_on_missing_deps(wrapped):
"""Do not allow a method/test to skip on missing dependencies.
This decorator raises an error if a skip is raised by wrapped method when
OS_FAIL_ON_MISSING_DEPS is evaluated to True. This decorator should be used
only for missing dependencies (including missing system requirements).
"""
@functools.wraps(wrapped)
def wrapper(*args, **kwargs):
try:
return wrapped(*args, **kwargs)
except (testtools.TestCase.skipException, unittest.case.SkipTest) as e:
if base.bool_from_env('OS_FAIL_ON_MISSING_DEPS'):
tools.fail(
'%s cannot be skipped because OS_FAIL_ON_MISSING_DEPS '
'is enabled, skip reason: %s' % (wrapped.__name__, e))
raise
return wrapper

View File

@ -23,6 +23,7 @@ from neutron.agent.linux import ip_lib
from neutron.cmd.sanity import checks from neutron.cmd.sanity import checks
from neutron.plugins.openvswitch.agent import ovs_neutron_agent as ovsagt from neutron.plugins.openvswitch.agent import ovs_neutron_agent as ovsagt
from neutron.plugins.openvswitch.common import constants from neutron.plugins.openvswitch.common import constants
from neutron.tests.common import base as common_base
from neutron.tests.common import net_helpers from neutron.tests.common import net_helpers
from neutron.tests.functional.agent import test_ovs_lib from neutron.tests.functional.agent import test_ovs_lib
from neutron.tests.functional import base from neutron.tests.functional import base
@ -85,12 +86,11 @@ class _OVSAgentOFCtlTestBase(_OVSAgentTestBase):
class _ARPSpoofTestCase(object): class _ARPSpoofTestCase(object):
def setUp(self): def setUp(self):
if not checks.arp_header_match_supported():
self.skipTest("ARP header matching not supported")
# NOTE(kevinbenton): it would be way cooler to use scapy for # NOTE(kevinbenton): it would be way cooler to use scapy for
# these but scapy requires the python process to be running as # these but scapy requires the python process to be running as
# root to bind to the ports. # root to bind to the ports.
super(_ARPSpoofTestCase, self).setUp() super(_ARPSpoofTestCase, self).setUp()
self.skip_without_arp_support()
self.src_addr = '192.168.0.1' self.src_addr = '192.168.0.1'
self.dst_addr = '192.168.0.2' self.dst_addr = '192.168.0.2'
self.src_namespace = self.useFixture( self.src_namespace = self.useFixture(
@ -104,6 +104,11 @@ class _ARPSpoofTestCase(object):
# wait to add IPs until after anti-spoof rules to ensure ARP doesn't # wait to add IPs until after anti-spoof rules to ensure ARP doesn't
# happen before # happen before
@common_base.no_skip_on_missing_deps
def skip_without_arp_support(self):
if not checks.arp_header_match_supported():
self.skipTest("ARP header matching not supported")
def test_arp_spoof_doesnt_block_normal_traffic(self): def test_arp_spoof_doesnt_block_normal_traffic(self):
self._setup_arp_spoof_for_port(self.src_p.name, [self.src_addr]) self._setup_arp_spoof_for_port(self.src_p.name, [self.src_addr])
self._setup_arp_spoof_for_port(self.dst_p.name, [self.dst_addr]) self._setup_arp_spoof_for_port(self.dst_p.name, [self.dst_addr])

View File

@ -20,6 +20,7 @@ from oslo_config import cfg
from neutron.agent.common import config from neutron.agent.common import config
from neutron.agent.linux import utils from neutron.agent.linux import utils
from neutron.tests import base from neutron.tests import base
from neutron.tests.common import base as common_base
SUDO_CMD = 'sudo -n' SUDO_CMD = 'sudo -n'
@ -51,9 +52,6 @@ class BaseSudoTestCase(base.BaseTestCase):
if not base.bool_from_env('OS_SUDO_TESTING'): if not base.bool_from_env('OS_SUDO_TESTING'):
self.skipTest('Testing with sudo is not enabled') self.skipTest('Testing with sudo is not enabled')
self.fail_on_missing_deps = (
base.bool_from_env('OS_FAIL_ON_MISSING_DEPS'))
config.register_root_helper(cfg.CONF) config.register_root_helper(cfg.CONF)
self.config(group='AGENT', self.config(group='AGENT',
root_helper=os.environ.get('OS_ROOTWRAP_CMD', SUDO_CMD)) root_helper=os.environ.get('OS_ROOTWRAP_CMD', SUDO_CMD))
@ -61,10 +59,11 @@ class BaseSudoTestCase(base.BaseTestCase):
root_helper_daemon=os.environ.get( root_helper_daemon=os.environ.get(
'OS_ROOTWRAP_DAEMON_CMD')) 'OS_ROOTWRAP_DAEMON_CMD'))
@common_base.no_skip_on_missing_deps
def check_command(self, cmd, error_text, skip_msg, run_as_root=False): def check_command(self, cmd, error_text, skip_msg, run_as_root=False):
try: try:
utils.execute(cmd, run_as_root=run_as_root) utils.execute(cmd, run_as_root=run_as_root)
except RuntimeError as e: except RuntimeError as e:
if error_text in str(e) and not self.fail_on_missing_deps: if error_text in str(e):
self.skipTest(skip_msg) self.skipTest(skip_msg)
raise raise