Add default timeout for do_barrier
And check the result do_barrier in all calls.
diff --git a/src/python/oftest/controller.py b/src/python/oftest/controller.py
index debff35..70b3aad 100644
--- a/src/python/oftest/controller.py
+++ b/src/python/oftest/controller.py
@@ -111,6 +111,7 @@
self.port = port
self.dbg_state = "init"
self.logger = logging.getLogger("controller")
+ self.barrier_to = 15 # Barrier timeout default value; add to config
# Transaction and message type waiting variables
# xid_cv: Condition variable (semaphore) for packet waiters
@@ -161,7 +162,7 @@
self.parse_errors += 1
return
if hdr.length == 0:
- self.logger.info("Header length is zero")
+ self.logger.error("Header length is zero; out of sync")
self.parse_errors += 1
return
@@ -287,7 +288,8 @@
return False
if len(pkt) == 0:
- self.logger.warning("Zero-length switch read")
+ self.logger.warning("Zero-length switch read; closing cxn")
+ return True
self._pkt_handle(pkt)
else:
@@ -501,7 +503,7 @@
return (msg, pkt)
- def transact(self, msg, timeout=None, zero_xid=False):
+ def transact(self, msg, timeout=-1, zero_xid=False):
"""
Run a message transaction with the switch
@@ -520,15 +522,19 @@
if not zero_xid and msg.header.xid == 0:
msg.header.xid = gen_xid()
+ if timeout == -1:
+ timeout = self.barrier_to
+ self.logger.debug("Running transaction %d" % msg.header.xid)
self.xid_cv.acquire()
if self.xid:
self.xid_cv.release()
self.logger.error("Can only run one transaction at a time")
- return None
+ return (None, None)
self.xid = msg.header.xid
self.xid_response = None
self.message_send(msg.pack())
+ self.logger.debug("Waiting for transaction %d" % msg.header.xid)
self.xid_cv.wait(timeout)
if self.xid_response:
(resp, pkt) = self.xid_response