tests: Collect info on failure of conn_tester
Whenever instance of ConnectionTester raises ConnectionTesterException then custom info is collected and printed into debug log. This is useful for debugging non-deterministic gate failures. Change-Id: Ie886dec9c0e805fa8710af8ae3cb70855fd4ad29
This commit is contained in:
parent
5b7fd5f0f1
commit
00ffb557d6
|
@ -15,11 +15,16 @@
|
|||
import functools
|
||||
|
||||
import fixtures
|
||||
from oslo_log import log as logging
|
||||
|
||||
from neutron.agent import firewall
|
||||
from neutron.agent.linux import ip_lib
|
||||
from neutron.agent.linux import utils
|
||||
from neutron.tests.common import machine_fixtures
|
||||
from neutron.tests.common import net_helpers
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ConnectionTesterException(Exception):
|
||||
pass
|
||||
|
@ -108,6 +113,12 @@ class ConnectionTester(fixtures.Fixture):
|
|||
def peer_ip_address(self):
|
||||
return self._peer.ip
|
||||
|
||||
def collect_debug_info(self, exc_info):
|
||||
conntrack_entries = utils.execute(['conntrack', '-L'],
|
||||
run_as_root=True,
|
||||
check_exit_code=False)
|
||||
LOG.debug("Conntrack entries:\n%s", conntrack_entries)
|
||||
|
||||
def flush_arp_tables(self):
|
||||
"""Flush arptables in all used namespaces"""
|
||||
for machine in (self._peer, self._vm):
|
||||
|
@ -305,3 +316,19 @@ class LinuxBridgeConnectionTester(ConnectionTester):
|
|||
def flush_arp_tables(self):
|
||||
self._bridge.neigh.flush(4, 'all')
|
||||
super(LinuxBridgeConnectionTester, self).flush_arp_tables()
|
||||
|
||||
def collect_debug_info(self, exc_info):
|
||||
super(LinuxBridgeConnectionTester, self).collect_debug_info(exc_info)
|
||||
ip_wrapper = ip_lib.IPWrapper(self.bridge_namespace)
|
||||
ipt_rules = ip_wrapper.netns.execute(['iptables', '-L', '-nv'],
|
||||
run_as_root=True)
|
||||
LOG.debug('iptables rules in %s namespace:\n%s',
|
||||
self.bridge_namespace,
|
||||
ipt_rules)
|
||||
for namespace in (self.vm_namespace, self.peer_namespace):
|
||||
ip_wrapper = ip_lib.IPWrapper(namespace)
|
||||
ip_output = ip_wrapper.netns.execute(['ip', 'a'],
|
||||
run_as_root=True)
|
||||
LOG.debug('"ip a" in namespace %s:\n%s',
|
||||
namespace,
|
||||
ip_output)
|
||||
|
|
|
@ -86,6 +86,7 @@ class FirewallTestCase(base.BaseSudoTestCase):
|
|||
super(FirewallTestCase, self).setUp()
|
||||
self.tester = self.useFixture(
|
||||
conn_testers.LinuxBridgeConnectionTester())
|
||||
self.addOnException(self.tester.collect_debug_info)
|
||||
self.firewall = self.create_iptables_firewall()
|
||||
vm_mac = self.tester.vm_mac_address
|
||||
vm_port_id = self.tester.vm_port_id
|
||||
|
|
Loading…
Reference in New Issue