diff --git a/src/python/oftest/testutils.py b/src/python/oftest/testutils.py
index cb6bf3a..943d41e 100644
--- a/src/python/oftest/testutils.py
+++ b/src/python/oftest/testutils.py
@@ -297,10 +297,10 @@
     """
     b = message.barrier_request()
     (resp, pkt) = ctrl.transact(b, timeout=timeout)
+    if resp is None:
+        raise AssertionError("barrier failed")
     # We'll trust the transaction processing in the controller that xid matched
-    if not resp:
-        return -1
-    return 0
+    return 0 # for backwards compatibility
 
 def port_config_get(controller, port_no):
     """
@@ -576,7 +576,7 @@
     logging.debug("Insert flow")
     parent.controller.message_send(request)
 
-    parent.assertEqual(do_barrier(parent.controller), 0, "Barrier failed")
+    do_barrier(parent.controller)
 
 def flow_match_test_port_pair(parent, ing_port, egr_ports, wildcards=None,
                               dl_vlan=-1, pkt=None, exp_pkt=None,
diff --git a/tests/FuncUtils.py b/tests/FuncUtils.py
index ad1b1ea..6ff2045 100644
--- a/tests/FuncUtils.py
+++ b/tests/FuncUtils.py
@@ -42,7 +42,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_exactflow,match)
 
@@ -69,7 +69,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_exactflow,match)         
        
@@ -97,7 +97,7 @@
     msg1.actions.add(act1)
 
     self.controller.message_send(msg1)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_wildcardsrc,match1)
 
@@ -124,7 +124,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_MatchSrc,match)
       
@@ -150,7 +150,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_matchdst,match)
 
@@ -176,7 +176,7 @@
         msg2.priority = priority
 
     self.controller.message_send(msg2)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_wildcard,match2)
 
@@ -209,7 +209,7 @@
         msg3.priority = priority
 
     self.controller.message_send(msg3)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_matchingress,match3)
 
@@ -241,7 +241,7 @@
         msg3.priority = priority
 
     self.controller.message_send(msg3)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_matchingress,match3)
 
@@ -268,7 +268,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_matchvlanid,match)
 
@@ -294,7 +294,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_matchvlanpcp,match)
 
@@ -321,7 +321,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_mulL2,match)
 
@@ -347,7 +347,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_mulL4,match)  
 
@@ -372,7 +372,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_iptos,match)
 
@@ -397,7 +397,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_iptos,match)
 
@@ -424,7 +424,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_matchtSrc,match)  
 
@@ -449,7 +449,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
     return (pkt_matchdst,match)        
 
@@ -476,7 +476,7 @@
     msg.actions.add(act)
 
     self.controller.message_send(msg)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
     return (pkt_matchtype,match)
 
    
@@ -500,7 +500,7 @@
 
     # Send the flow with action A'
     self.controller.message_send (msg5)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
 def modify_flow_action(self,of_ports,match,priority=None):
 # Modify the flow action
@@ -522,7 +522,7 @@
 
     # Send the flow with action A'
     self.controller.message_send (msg8)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
 def enqueue(self,ingress_port,egress_port,egress_queue_id):
 #Generate a flow with enqueue action i.e output to a queue configured on a egress_port
@@ -544,7 +544,7 @@
     
     logging.info("Inserting flow")
     self.controller.message_send(request)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
     return (pkt,match)
 
 
@@ -815,7 +815,7 @@
     if priority != None :
         msg4.priority = priority
     self.controller.message_send(msg4)
-    self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+    do_barrier(self.controller)
 
 
 
@@ -833,7 +833,7 @@
         msg6.priority = priority
 
     self.controller.message_send(msg6)
-    self.assertEqual(do_barrier(self.controller),0, "Barrier failed")
+    do_barrier(self.controller)
 
 
 ###########################################################################################################################################################
diff --git a/tests/actions.py b/tests/actions.py
index 7a3df4e..8be69dc 100644
--- a/tests/actions.py
+++ b/tests/actions.py
@@ -57,7 +57,7 @@
         msg.buffer_id = 0xffffffff
         msg.match = match
         self.controller.message_send(msg)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         #Sending N packets matching the flow inserted
         for pkt_cnt in range(5):
@@ -160,7 +160,7 @@
         
         logging.info("Inserting flow")
         self.controller.message_send(request)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         #Send Packet matching the flow
         logging.info("Sending packet to dp port " + str(ingress_port))
@@ -211,7 +211,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
             
             #Send packet matching the flow
             logging.info("Sending packet to dp port " + str(ingress_port))
@@ -262,7 +262,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             #Send packet matching the flow
             logging.info("Sending packet to dp port " + str(ingress_port))
@@ -311,7 +311,7 @@
         
         logging.info("Inserting flow")
         self.controller.message_send(request)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         #Send Packet matching the flow
         logging.info("Sending packet to dp port " + str(ingress_port))
@@ -360,7 +360,7 @@
         request.actions.add(act)
         logging.info("Inserting flow")
         self.controller.message_send(request)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         #Send packet matching the flow
         logging.info("Sending packet to dp port " + str(ingress_port))
diff --git a/tests/basic.py b/tests/basic.py
index f9e9d88..0aefe73 100644
--- a/tests/basic.py
+++ b/tests/basic.py
@@ -78,7 +78,7 @@
         # Poll controller with expect message type packet in
 
         delete_all_flows(self.controller)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         vid = test_param_get('vid', default=TEST_VID_DEFAULT)
 
@@ -128,7 +128,7 @@
 
     def runTest(self):
         delete_all_flows(self.controller)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         for of_port in config["port_map"].keys():
             pkt = simple_tcp_packet()
@@ -166,7 +166,7 @@
         self.assertTrue(len(config["port_map"]) > 1, "Too few ports for test")
 
         delete_all_flows(self.controller)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         of_ports = config["port_map"].keys()
         d_port = of_ports[0]
@@ -369,7 +369,7 @@
         rv = port_config_set(self.controller, of_port,
                              port_config ^ ofp.OFPPC_NO_FLOOD, ofp.OFPPC_NO_FLOOD)
         self.assertTrue(rv != -1, "Error sending port mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # Verify change took place with same feature request
         (hw_addr, port_config2, advert) = \
@@ -384,7 +384,7 @@
         rv = port_config_set(self.controller, of_port, port_config,
                              ofp.OFPPC_NO_FLOOD)
         self.assertTrue(rv != -1, "Error sending port mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
 class PortConfigModErr(base_tests.SimpleProtocol):
     """
diff --git a/tests/bsn_ipmask.py b/tests/bsn_ipmask.py
index 65885f0..9f0838f 100644
--- a/tests/bsn_ipmask.py
+++ b/tests/bsn_ipmask.py
@@ -153,7 +153,7 @@
               self, pkt1, ing_port=ports[0], egr_ports=[ports[2]],
               wildcards=wildcards))
 
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
             
         msg(ip0)
         self.dataplane.send(ports[0], str(pkt0))
diff --git a/tests/bsn_mirror.py b/tests/bsn_mirror.py
index ebf0f75..e2d895e 100644
--- a/tests/bsn_mirror.py
+++ b/tests/bsn_mirror.py
@@ -152,7 +152,7 @@
         flow_mod.actions.add(act3)
         delete_all_flows(self.controller)
         self.controller.message_send(flow_mod)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
         
         logging.info("Sending packet to port %s" % ports[0])
         self.dataplane.send(ports[0], str(pkt))
diff --git a/tests/caps.py b/tests/caps.py
index b546513..55bedd8 100644
--- a/tests/caps.py
+++ b/tests/caps.py
@@ -58,7 +58,7 @@
     # Make sure we can install at least one flow
     logging.info("Inserting initial flow")
     obj.controller.message_send(request)
-    obj.assertEqual(do_barrier(obj.controller, timeout=10), 0, "Barrier failed")
+    do_barrier(obj.controller, timeout=10)
     flow_count = 1
 
     logging.info("Table idx: " + str(table_idx))
@@ -69,7 +69,7 @@
         obj.controller.message_send(request)
         flow_count += 1
         if flow_count % count_check == 0:
-            obj.assertEqual(do_barrier(obj.controller, timeout=10), 0, "Barrier failed")
+            do_barrier(obj.controller, timeout=10)
             response, pkt = obj.controller.transact(tstats)
             obj.assertTrue(response is not None, "Get tab stats failed")
             logging.info(response.show())
diff --git a/tests/detailed_contr_sw_messages.py b/tests/detailed_contr_sw_messages.py
index 31c3393..601cc72 100644
--- a/tests/detailed_contr_sw_messages.py
+++ b/tests/detailed_contr_sw_messages.py
@@ -65,7 +65,7 @@
         act3.port = of_ports[1]
         msg3.actions.add(act3)
         self.controller.message_send(msg3)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # Verify Flow does not get inserted 
         verify_tablestats(self,expect_active=1)
@@ -189,7 +189,7 @@
         logging.info("Inserting flow")
         self.controller.message_send(request)
 
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         #Verify OFPET_FLOW_MOD_FAILED/OFPFMFC_OVERLAP error is recieved on the control plane
         (response, pkt) = self.controller.poll(exp_msg=ofp.OFPT_ERROR,         
@@ -234,7 +234,7 @@
 
         logging.info("Inserting flow")
         self.controller.message_send(request)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed") 
+        do_barrier(self.controller) 
 
         #Verify the flow gets added i.e. active_count= 1
         verify_tablestats(self,expect_active=1)
@@ -399,7 +399,7 @@
         msg9.flags |= ofp.OFPFF_SEND_FLOW_REM
         rv1 = self.controller.message_send(msg9)
         self.assertTrue(rv1 != -1, "Error installing flow mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # Delete the flow-2
         delete_all_flows(self.controller)
@@ -573,7 +573,7 @@
         msg7.match = match
 
         self.controller.message_send(msg7)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # Verify flow will not get deleted, active_entries in table_stats_request = 1
         verify_tablestats(self,expect_active=1)
@@ -589,7 +589,7 @@
         msg7.match = match
 
         self.controller.message_send(msg7)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
         
         #Verify flow gets deleted.
         verify_tablestats(self,expect_active=0)
@@ -622,7 +622,7 @@
         msg9.flags |= ofp.OFPFF_SEND_FLOW_REM
         rv1 = self.controller.message_send(msg9)
         self.assertTrue(rv1 != -1, "Error installing flow mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         #Verify flow gets inserted
         verify_tablestats(self,expect_active=1)
@@ -704,7 +704,7 @@
         msg9.flags |= ofp.OFPFF_SEND_FLOW_REM
         rv1 = self.controller.message_send(msg9)
         self.assertTrue(rv1 != -1, "Error installing flow mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         #Verify flow gets inserted
         verify_tablestats(self,expect_active=1)
@@ -760,7 +760,7 @@
         msg3.actions.add(act3)
 
         self.controller.message_send(msg3)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         #Verify no flow removed message is generated
         (response, pkt) = self.controller.poll(exp_msg=ofp.OFPT_FLOW_REMOVED,
diff --git a/tests/flow_expire.py b/tests/flow_expire.py
index ece6dcd..484f22f 100644
--- a/tests/flow_expire.py
+++ b/tests/flow_expire.py
@@ -68,7 +68,7 @@
         
         logging.info("Inserting flow")
         self.controller.message_send(request)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         (response, pkt) = self.controller.poll(exp_msg=ofp.OFPT_FLOW_REMOVED,
                                                timeout=test_timeout)
diff --git a/tests/flow_stats.py b/tests/flow_stats.py
index a96bb45..8f59ccc 100644
--- a/tests/flow_stats.py
+++ b/tests/flow_stats.py
@@ -148,7 +148,7 @@
         # send flow
         logging.info("Inserting flow")
         self.controller.message_send(flow_mod_msg)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # no packets sent, so zero packet count
         self.verifyStats(flow_mod_msg, match, ofp.OFPP_NONE, test_timeout, 0)
@@ -270,7 +270,7 @@
         self.controller.message_send(flow_mod_msg1)
         logging.info("Inserting flow2")
         self.controller.message_send(flow_mod_msg2)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         num_pkt1s = random.randint(10,30)
         logging.info("Sending " + str(num_pkt1s) + " pkt1s")
@@ -381,7 +381,7 @@
         self.controller.message_send(flow_mod_msg1)
         logging.info("Inserting flow2")
         self.controller.message_send(flow_mod_msg2)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         num_pkt1s = random.randint(10,30)
         logging.info("Sending " + str(num_pkt1s) + " pkt1s")
@@ -498,7 +498,7 @@
         # send flow
         logging.info("Inserting flow")
         self.controller.message_send(flow_mod_msg)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # send packet N times
         num_sends = random.randint(10,20)
diff --git a/tests/load.py b/tests/load.py
index 7f8f7dd..9977027 100644
--- a/tests/load.py
+++ b/tests/load.py
@@ -76,7 +76,7 @@
         request.actions.add(act)
 
         self.controller.message_send(request)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # Create packet out and send to port lb_port + 1
         msg = message.packet_out()
@@ -91,7 +91,7 @@
         self.controller.message_send(msg)
 
         for idx in range(0, barrier_count):
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
             # To do:  Add some interesting functionality here
             logging.info("Barrier %d completed" % idx)
 
@@ -113,7 +113,7 @@
         # Poll controller with expect message type packet in
 
         delete_all_flows(self.controller)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
         out_count = 0
         in_count = 0
 
diff --git a/tests/message_types.py b/tests/message_types.py
index 21e92d7..889c281 100644
--- a/tests/message_types.py
+++ b/tests/message_types.py
@@ -369,7 +369,7 @@
             
             logging.info("Inserting flow....")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
             
             #Send packet matching the flow
             logging.debug("Sending packet to dp port " + str(of_ports[0]))
@@ -467,7 +467,7 @@
 
         logging.info("Inserting flow....")
         self.controller.message_send(request)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
             
         #Send packet matching the flow
         logging.debug("Sending packet to dp port " + str(of_ports[0]))
@@ -560,7 +560,7 @@
         rv = port_config_set(self.controller, of_ports[0],
                              port_config ^ ofp.OFPPC_NO_FLOOD, ofp.OFPPC_NO_FLOOD)
         self.assertTrue(rv != -1, "Error sending port mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # Verify change took place with features request
         logging.info("Verify the change and then set it back")
@@ -576,7 +576,7 @@
         rv = port_config_set(self.controller, of_ports[0],port_config,
                              ofp.OFPPC_NO_FLOOD)
         self.assertTrue(rv != -1, "Error sending port mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
 
 class PortModFwd(base_tests.SimpleDataPlane):
@@ -603,7 +603,7 @@
         rv = port_config_set(self.controller, of_ports[0],
                              port_config ^ ofp.OFPPC_NO_FWD, ofp.OFPPC_NO_FWD)
         self.assertTrue(rv != -1, "Error sending port mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # Verify change took place with features request
         logging.info("Verify the change and then set it back")
@@ -620,7 +620,7 @@
         rv = port_config_set(self.controller, of_ports[0],port_config,
                              ofp.OFPPC_NO_FWD)
         self.assertTrue(rv != -1, "Error sending port mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
 
 class PortModPacketIn(base_tests.SimpleDataPlane):
@@ -647,7 +647,7 @@
         rv = port_config_set(self.controller, of_ports[0],
                              port_config ^ ofp.OFPPC_NO_PACKET_IN, ofp.OFPPC_NO_PACKET_IN)
         self.assertTrue(rv != -1, "Error sending port mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # Verify change took place with features request
         logging.info("Verify the change and then set it back")
@@ -664,7 +664,7 @@
         rv = port_config_set(self.controller, of_ports[0],port_config,
                              ofp.OFPPC_NO_PACKET_IN)
         self.assertTrue(rv != -1, "Error sending port mod")
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
 
 class DescStatsReplyBody(base_tests.SimpleDataPlane):
diff --git a/tests/openflow_protocol_messages.py b/tests/openflow_protocol_messages.py
index 4f63b07..b182015 100644
--- a/tests/openflow_protocol_messages.py
+++ b/tests/openflow_protocol_messages.py
@@ -265,7 +265,7 @@
 
         #Clear Switch state
         delete_all_flows(self.controller)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         logging.info("Sending a Simple tcp packet a dataplane port")
         logging.info("Expecting a packet_in event on the control plane")
diff --git a/tests/pktact.py b/tests/pktact.py
index 3c9b04c..17b555f 100644
--- a/tests/pktact.py
+++ b/tests/pktact.py
@@ -125,7 +125,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + 
                            str(ingress_port))
@@ -189,7 +189,7 @@
 
         logging.info("Inserting flow")
         self.controller.message_send(request)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         logging.info("Sending packet to dp port " +
                         str(ingress_port))
@@ -276,7 +276,7 @@
 
                 logging.info("Inserting flow")
                 self.controller.message_send(request)
-                self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+                do_barrier(self.controller)
 
                 # Get current stats for selected egress queue
 
@@ -405,7 +405,7 @@
 
                 logging.info("Inserting flow")
                 self.controller.message_send(request)
-                self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+                do_barrier(self.controller)
 
                 # Get current stats for selected egress queue
 
@@ -525,7 +525,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + 
                            str(ingress_port))
@@ -579,7 +579,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + str(ingress_port))
             self.dataplane.send(ingress_port, str(pkt))
@@ -631,7 +631,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + str(ingress_port))
             self.dataplane.send(ingress_port, str(pkt))
@@ -674,7 +674,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + str(ingress_port))
             self.dataplane.send(ingress_port, str(pkt))
@@ -722,7 +722,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + str(ingress_port))
             self.dataplane.send(ingress_port, str(pkt))
@@ -765,7 +765,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + str(ingress_port))
             self.dataplane.send(ingress_port, str(pkt))
@@ -813,7 +813,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + str(ingress_port))
             self.dataplane.send(ingress_port, str(pkt))
@@ -870,7 +870,7 @@
 
             logging.info("Inserting flow")
             self.controller.message_send(request)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + str(ingress_port))
             logging.info("No flood port is " + str(no_flood_port))
@@ -883,7 +883,7 @@
             rv = port_config_set(self.controller, no_flood_port,
                                  0, ofp.OFPPC_NO_FLOOD)
             self.assertEqual(rv, 0, "Failed to reset port config")
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             # Check that packets are now flooded to no_flood_port
             logging.info("Sending packet to dp port " + str(ingress_port))
@@ -952,7 +952,7 @@
 
     def _ClearTable(self):
         delete_all_flows(self.controller)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
     def runTest(self):
         
@@ -1030,7 +1030,7 @@
             msg.out_port = ofp.OFPP_NONE
             logging.debug("Remove flow with priority " + str(prio))
             self.controller.message_send(msg)
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
         else:
             raise Exception("Not initialized")
 
@@ -1777,7 +1777,7 @@
         # Install the first set of flows
         for f_idx in range(flow_count):
             self.controller.message_send(flows[0][f_idx])
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
     
         logging.info("Installed %d flows" % flow_count)
     
@@ -1797,8 +1797,7 @@
                 for f_idx in range(flow_count):
                     self.controller.message_send(flows[t_idx][f_idx])
                     updates += 1
-                self.assertEqual(do_barrier(self.controller), 0,
-                                 "Barrier failed")
+                do_barrier(self.controller)
 
         end = time.time()
         divisor = end - start or (end - start + 1)
@@ -1949,7 +1948,7 @@
             # This flow should not match, but it has a higher priority.
             addFlow(matching=False, priority=1, output_port=ofp.OFPP_IN_PORT)
 
-            self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+            do_barrier(self.controller)
 
             logging.info("Sending packet to dp port " + str(ingress_port))
             self.dataplane.send(ingress_port, str(pkt))
@@ -2086,7 +2085,7 @@
         request2.actions.add(act)
         self.controller.message_send(request2)
 
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         logging.info("Sending packet to dp port " + 
                        str(ingress_port))
diff --git a/tests/port_stats.py b/tests/port_stats.py
index 29b04ae..8a762e8 100644
--- a/tests/port_stats.py
+++ b/tests/port_stats.py
@@ -176,7 +176,7 @@
         # send flow
         logging.info("Inserting flow")
         self.controller.message_send(flow_mod_msg)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # get initial port stats count
         initTxInPort, initRxInPort = getStats(self, ingress_port)
@@ -247,7 +247,7 @@
         self.controller.message_send(flow_mod_msg1)
         logging.info("Inserting flow2")
         self.controller.message_send(flow_mod_msg2)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         # get initial port stats count
         initTxInPort, initRxInPort = getStats(self, ingress_port)
@@ -323,7 +323,7 @@
         self.controller.message_send(flow_mod_msg1)
         logging.info("Inserting flow2")
         self.controller.message_send(flow_mod_msg2)
-        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
+        do_barrier(self.controller)
 
         num_pkt1s = random.randint(5,10)
         logging.info("Sending " + str(num_pkt1s) + " pkt1s")
