Some tests from test_dhcp_agent depend on each other

Bug #1125951 reported by Alexej Ababilov
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
neutron
Fix Released
Undecided
Alexej Ababilov

Bug Description

Some tests from test_dhcp_agent depend on each other and fail for several launch orders. They may need config options that are initialized in other tests.

Example.
1. Run only TestDhcpAgentEventHandler

$ nosetests quantum.tests.unit.test_dhcp_agent:TestDhcpAgentEventHandler
test_disable_dhcp_helper_driver_failure (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_disable_dhcp_helper_known_network (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_disable_dhcp_helper_unknown_network (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_enable_dhcp_helper (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_enable_dhcp_helper_down_network (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_enable_dhcp_helper_driver_failure (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_enable_dhcp_helper_exception_during_rpc (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_network_create_end (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_network_delete_end (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_network_update_end_admin_state_down (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_network_update_end_admin_state_up (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_port_delete_end (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_port_delete_end_unknown_port (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_port_update_end (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_refresh_dhcp_helper_exception_during_rpc (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_refresh_dhcp_helper_no_dhcp_enabled_networks (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_subnet_update_end (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR
test_subnet_update_end_delete_payload (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler) ... ERROR

======================================================================
ERROR: test_disable_dhcp_helper_driver_failure (quantum.tests.unit.test_dhcp_agent.TestDhcpAgentEventHandler)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tmp/myenv/quantum/quantum/tests/unit/test_dhcp_agent.py", line 273, in setUp
    self.dhcp = dhcp_agent.DhcpAgent(cfg.CONF)
  File "/tmp/myenv/quantum/quantum/agent/dhcp_agent.py", line 68, in __init__
    self.lease_relay = DhcpLeaseRelay(self.update_lease)
  File "/tmp/myenv/quantum/quantum/agent/dhcp_agent.py", line 504, in __init__
    dirname = os.path.dirname(cfg.CONF.dhcp_lease_relay_socket)
  File "/tmp/myenv/quantum/quantum/openstack/common/cfg.py", line 1150, in __getattr__
    return self._get(name)
  File "/tmp/myenv/quantum/quantum/openstack/common/cfg.py", line 1454, in _get
    value = self._substitute(self._do_get(name, group))
  File "/tmp/myenv/quantum/quantum/openstack/common/cfg.py", line 1470, in _do_get
    info = self._get_opt_info(name, group)
  File "/tmp/myenv/quantum/quantum/openstack/common/cfg.py", line 1570, in _get_opt_info
    raise NoSuchOptError(opt_name, group)
NoSuchOptError: no such option: dhcp_lease_relay_socket

2. Run only TestDhcpAgent

$ nosetests quantum.tests.unit.test_dhcp_agent:TestDhcpAgent
test_call_driver (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ok
test_call_driver_failure (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ok
test_dhcp_agent_main (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ok
test_periodic_resync (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ERROR
test_periodoc_resync_helper (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ERROR
test_run_completes_single_pass (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ok
test_sync_state_disabled_net (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ERROR
test_sync_state_initial (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ERROR
test_sync_state_plugin_error (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ERROR
test_sync_state_same (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ERROR
test_update_lease (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ERROR
test_update_lease_failure (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent) ... ERROR

======================================================================
ERROR: test_periodic_resync (quantum.tests.unit.test_dhcp_agent.TestDhcpAgent)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tmp/myenv/quantum/quantum/tests/unit/test_dhcp_agent.py", line 234, in test_periodic_resync
    dhcp = dhcp_agent.DhcpAgent(cfg.CONF)
  File "/tmp/myenv/quantum/quantum/agent/dhcp_agent.py", line 66, in __init__
    self.device_manager = DeviceManager(self.conf, self.plugin_rpc)
  File "/tmp/myenv/quantum/quantum/agent/dhcp_agent.py", line 398, in __init__
    if not conf.interface_driver:
  File "/tmp/myenv/quantum/quantum/openstack/common/cfg.py", line 1150, in __getattr__
    return self._get(name)
  File "/tmp/myenv/quantum/quantum/openstack/common/cfg.py", line 1454, in _get
    value = self._substitute(self._do_get(name, group))
  File "/tmp/myenv/quantum/quantum/openstack/common/cfg.py", line 1470, in _do_get
    info = self._get_opt_info(name, group)
  File "/tmp/myenv/quantum/quantum/openstack/common/cfg.py", line 1570, in _get_opt_info
    raise NoSuchOptError(opt_name, group)
NoSuchOptError: no such option: interface_driver

And so on.

These problems can be fixed easily (just register necessary options in setUp):

--- a/quantum/tests/unit/test_dhcp_agent.py
+++ b/quantum/tests/unit/test_dhcp_agent.py
@@ -85,6 +85,7 @@ fake_down_network = FakeModel('12345678-dddd-dddd-1234567890ab',

 class TestDhcpAgent(unittest.TestCase):
     def setUp(self):
+ cfg.CONF.register_opts(dhcp_agent.DeviceManager.OPTS)
         cfg.CONF.register_opts(dhcp_agent.DhcpAgent.OPTS)
         cfg.CONF.register_opts(dhcp_agent.DhcpLeaseRelay.OPTS)
         self.driver_cls_p = mock.patch(
@@ -251,6 +252,7 @@ class TestDhcpAgent(unittest.TestCase):

 class TestDhcpAgentEventHandler(unittest.TestCase):
     def setUp(self):
         cfg.CONF.register_opts(dhcp_agent.DeviceManager.OPTS)
+ cfg.CONF.register_opts(dhcp_agent.DhcpLeaseRelay.OPTS)
         cfg.CONF.set_override('interface_driver',
                               'quantum.agent.linux.interface.NullDriver')

description: updated
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to quantum (master)

Fix proposed to branch: master
Review: https://review.openstack.org/22014

Changed in quantum:
assignee: nobody → Alessio Ababilov (aababilov)
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to quantum (master)

Reviewed: https://review.openstack.org/22014
Committed: http://github.com/openstack/quantum/commit/73e43ac7f8c55691772470756ccaf86e7f087243
Submitter: Jenkins
Branch: master

commit 73e43ac7f8c55691772470756ccaf86e7f087243
Author: Alessio Ababilov <email address hidden>
Date: Fri Feb 15 09:52:24 2013 +0200

    Allow tests from test_dhcp_agent run independently

    Some tests from test_dhcp_agent depend on each other
    and cannot be run in arbitrary order. TestDhcpAgent
    and TestDhcpAgentEventHandler need config options that
    are initialized in other tests. This patch eliminates
    such dependencies.

    Fixes: bug #1125951
    Change-Id: I10bc46a5e1244ea0f7a05a20bb162c50303f282e

Changed in quantum:
status: In Progress → Fix Committed
Akihiro Motoki (amotoki)
Changed in quantum:
milestone: none → grizzly-3
Thierry Carrez (ttx)
Changed in quantum:
status: Fix Committed → Fix Released
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to quantum (master)

Fix proposed to branch: master
Review: https://review.openstack.org/24652

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to quantum (master)

Reviewed: https://review.openstack.org/24652
Committed: http://github.com/openstack/quantum/commit/37ad346a7da82575e5d6cdd3b90317fc50700957
Submitter: Jenkins
Branch: master

commit 37ad346a7da82575e5d6cdd3b90317fc50700957
Author: Alessio Ababilov <email address hidden>
Date: Mon Mar 18 18:48:30 2013 +0200

    Allow tests in TestDhcpAgentEventHandler run independently

    Tests in TestDhcpAgentEventHandler depend on dhcp_confs
    option that is defined in quantum.agent.linux.dhcp. We have
    to register the option in order to allow independent testing.

    This problem is similar to bug #1125951.

    Fixes: bug #1156696

    Change-Id: I323908c6f70697e056294b1817ff32ce5d32b32c

Thierry Carrez (ttx)
Changed in quantum:
milestone: grizzly-3 → 2013.1
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.