DISPATCH-1546: Added large message option to all tests so counts can be checked for large streaming messages. This closes #666.
diff --git a/tests/system_tests_delivery_counts.py b/tests/system_tests_delivery_counts.py
index 3c407b9..193b013 100644
--- a/tests/system_tests_delivery_counts.py
+++ b/tests/system_tests_delivery_counts.py
@@ -40,6 +40,11 @@
                             'deliveryCount',
                             'modifiedCount'])
 
+def get_body(n_sent, large_message=False):
+    if large_message:
+        body = {'number': n_sent, 'msg': LARGE_PAYLOAD}
+    else:
+        body = {'number': n_sent}
 
 def _link_stats_are_zero(statistics, keys):
     """
@@ -64,36 +69,44 @@
 
         cls.router = cls.tester.qdrouterd(name="A", config=config, wait=True)
 
-    def test_one_router_modified_counts(self):
+    def router_modified_counts(self, large_message=False):
         address = self.router.addresses[0]
 
-        test = ModifiedDeliveriesTest(address)
-        test.run()
-
         local_node = Node.connect(address, timeout=TIMEOUT)
         outs = local_node.query(type='org.apache.qpid.dispatch.router')
-
         deliveries_modified_index = outs.attribute_names.index('modifiedDeliveries')
+        results = outs.results[0]
+        num_modified_deliveries_pre_test = results[deliveries_modified_index]
 
+        num_messages = 10
+        test = ModifiedDeliveriesTest(address, num_messages, large_message)
+        test.run()
+
+        outs = local_node.query(type='org.apache.qpid.dispatch.router')
         results = outs.results[0]
 
-        self.assertEqual(results[deliveries_modified_index], 10)
+        self.assertEqual(results[deliveries_modified_index] - num_modified_deliveries_pre_test, num_messages)
 
         # check link statistics
         self.assertTrue(_link_stats_are_zero(test.sender_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'modifiedCount'])))
-        self.assertEqual(test.sender_stats['deliveryCount'], 10)
-        self.assertEqual(test.sender_stats['modifiedCount'], 10)
+        self.assertEqual(test.sender_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.sender_stats['modifiedCount'], num_messages)
 
         # receiver just drops the link, so these are not counted as modified
         # but unsettled instead
-        self.assertEqual(test.receiver_stats['deliveryCount'], 10)
-        self.assertEqual(test.receiver_stats['unsettledCount'], 10)
+        self.assertEqual(test.receiver_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.receiver_stats['unsettledCount'], num_messages)
         self.assertTrue(_link_stats_are_zero(test.receiver_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'unsettledCount'])))
 
+    def test_one_router_modified_counts(self):
+        self.router_modified_counts()
+
+    def test_one_router_large_message_modified_counts(self):
+        self.router_modified_counts(True)
 
 class OneRouterRejectedTest(TestCase):
     @classmethod
@@ -108,34 +121,43 @@
 
         cls.router = cls.tester.qdrouterd(name="A", config=config, wait=True)
 
-    def test_one_router_rejected_counts(self):
+    def one_router_rejected_counts(self, large_message=False):
         address = self.router.addresses[0]
 
-        test = RejectedDeliveriesTest(address)
-        test.run()
-
         local_node = Node.connect(address, timeout=TIMEOUT)
         outs = local_node.query(type='org.apache.qpid.dispatch.router')
-
         deliveries_rejected_index = outs.attribute_names.index('rejectedDeliveries')
+        results = outs.results[0]
+        deliveries_rejected_pre_test = results[deliveries_rejected_index]
 
+        num_messages = 10
+        test = RejectedDeliveriesTest(address, num_messages, large_message)
+        test.run()
+
+        outs = local_node.query(type='org.apache.qpid.dispatch.router')
         results = outs.results[0]
 
-        self.assertEqual(results[deliveries_rejected_index], 10)
+        self.assertEqual(results[deliveries_rejected_index] - deliveries_rejected_pre_test, num_messages)
 
         # check link statistics
-        self.assertEqual(test.sender_stats['deliveryCount'], 10)
-        self.assertEqual(test.sender_stats['rejectedCount'], 10)
+        self.assertEqual(test.sender_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.sender_stats['rejectedCount'], num_messages)
         self.assertTrue(_link_stats_are_zero(test.sender_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'rejectedCount'])))
 
-        self.assertEqual(test.receiver_stats['deliveryCount'], 10)
-        self.assertEqual(test.receiver_stats['rejectedCount'], 10)
+        self.assertEqual(test.receiver_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.receiver_stats['rejectedCount'], num_messages)
         self.assertTrue(_link_stats_are_zero(test.receiver_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'rejectedCount'])))
 
+    def test_one_router_rejected_counts(self):
+        self.one_router_rejected_counts()
+
+    def test_one_router_large_message_rejected_counts(self):
+        self.one_router_rejected_counts(True)
+
 
 class OneRouterReleasedDroppedPresettledTest(TestCase):
     @classmethod
@@ -151,24 +173,31 @@
 
         cls.router = cls.tester.qdrouterd(name="A", config=config, wait=True)
 
-    def test_one_router_released_dropped_counts(self):
+    def one_router_released_dropped_count(self, large_message=False):
         address = self.router.addresses[0]
 
-        test = ReleasedDroppedPresettledCountTest(address)
-        test.run()
-
         local_node = Node.connect(address, timeout=TIMEOUT)
         outs = local_node.query(type='org.apache.qpid.dispatch.router')
 
         deliveries_dropped_presettled_index = outs.attribute_names.index('droppedPresettledDeliveries')
         deliveries_released_index = outs.attribute_names.index('releasedDeliveries')
         deliveries_presettled_index = outs.attribute_names.index('presettledDeliveries')
+        results = outs.results[0]
+
+        deliveries_dropped_presettled_pre_test = results[deliveries_dropped_presettled_index]
+        deliveries_released_pre_test = results[deliveries_released_index]
+        deliveries_presettled_pre_test = results[deliveries_presettled_index]
+        num_messages = 20
+        test = ReleasedDroppedPresettledCountTest(address, num_messages, large_message)
+        test.run()
+
+        outs = local_node.query(type='org.apache.qpid.dispatch.router')
 
         results = outs.results[0]
 
-        self.assertEqual(results[deliveries_dropped_presettled_index], 10)
-        self.assertEqual(results[deliveries_released_index], 10)
-        self.assertEqual(results[deliveries_presettled_index], 10)
+        self.assertEqual(results[deliveries_dropped_presettled_index] - deliveries_dropped_presettled_pre_test, 10)
+        self.assertEqual(results[deliveries_released_index] - deliveries_released_pre_test, 10)
+        self.assertEqual(results[deliveries_presettled_index] - deliveries_presettled_pre_test, 10)
 
         # check link statistics
         self.assertEqual(test.sender_stats['deliveryCount'], test.n_sent)
@@ -180,7 +209,11 @@
                                                                          'releasedCount',
                                                                          'presettledCount',
                                                                          'droppedPresettledCount'])))
+    def test_one_router_released_dropped_counts(self):
+        self.one_router_released_dropped_count()
 
+    def test_one_router_large_message_released_dropped_counts(self):
+        self.one_router_released_dropped_count(True)
 
 class TwoRouterReleasedDroppedPresettledTest(TestCase):
     @classmethod
@@ -210,27 +243,31 @@
         cls.routers.append(cls.tester.qdrouterd("B", config_2, wait=True))
         cls.routers[1].wait_router_connected('A')
 
-    def test_two_router_released_dropped_counts(self):
+    def two_router_released_dropped_counts(self, large_message=False):
         address = self.routers[0].addresses[0]
 
         # Send presettled and settled messages to router 1.
         # Make sure the hello messages (which are presettled dont show up in the counts
 
-        test = ReleasedDroppedPresettledCountTest(address)
-        test.run()
-
         local_node = Node.connect(address, timeout=TIMEOUT)
         outs = local_node.query(type='org.apache.qpid.dispatch.router')
-
         deliveries_dropped_presettled_index = outs.attribute_names.index('droppedPresettledDeliveries')
         deliveries_released_index = outs.attribute_names.index('releasedDeliveries')
         deliveries_presettled_index = outs.attribute_names.index('presettledDeliveries')
+        results = outs.results[0]
+        deliveries_dropped_presettled_pre_test = results[deliveries_dropped_presettled_index]
+        deliveries_released_pre_test = results[deliveries_released_index]
+        deliveries_presettled_pre_test = results[deliveries_presettled_index]
+        num_messages = 20
+        test = ReleasedDroppedPresettledCountTest(address, num_messages, large_message)
+        test.run()
 
+        outs = local_node.query(type='org.apache.qpid.dispatch.router')
         results = outs.results[0]
 
-        self.assertEqual(results[deliveries_dropped_presettled_index], 10)
-        self.assertEqual(results[deliveries_released_index], 10)
-        self.assertEqual(results[deliveries_presettled_index], 10)
+        self.assertEqual(results[deliveries_dropped_presettled_index] - deliveries_dropped_presettled_pre_test, 10)
+        self.assertEqual(results[deliveries_released_index] - deliveries_released_pre_test, 10)
+        self.assertEqual(results[deliveries_presettled_index] - deliveries_presettled_pre_test, 10)
 
         # check link statistics
         self.assertEqual(test.sender_stats['deliveryCount'], test.n_sent)
@@ -243,6 +280,12 @@
                                                                          'presettledCount',
                                                                          'droppedPresettledCount'])))
 
+    def test_two_router_released_dropped_counts(self):
+        self.two_router_released_dropped_counts()
+
+    def test_two_router_large_message_released_dropped_counts(self):
+        self.two_router_released_dropped_counts(True)
+
 
 class AddressCheckerTimeout ( object ):
     def __init__(self, parent):
@@ -603,7 +646,7 @@
         # bit more time for the routers to stabilize.
         sleep(2)
 
-    def test_link_route_ingress_egress_transit_counts(self):
+    def link_route_ingress_egress_transit_counts(self, large_message=False):
         address1 = self.routers[2].addresses[0]
         address2 = self.routers[2].addresses[0]
 
@@ -620,16 +663,13 @@
         pre_egress_count = results[deliveries_egress_index]
         pre_transit_count = results[deliveries_transit_index]
 
+        num_messages = 10
         # Send and receive on the same router, router C
-        test = IngressEgressTransitLinkRouteTest(address1, address2)
+        test = IngressEgressTransitLinkRouteTest(address1, address2, num_messages, large_message=large_message)
         test.run()
         local_node = Node.connect(address1, timeout=TIMEOUT)
         outs = local_node.query(type='org.apache.qpid.dispatch.router')
 
-        deliveries_ingress_index = outs.attribute_names.index('deliveriesIngress')
-        deliveries_egress_index = outs.attribute_names.index('deliveriesEgress')
-        deliveries_transit_index = outs.attribute_names.index('deliveriesTransit')
-
         results = outs.results[0]
 
         post_ingress_count = results[deliveries_ingress_index]
@@ -658,6 +698,11 @@
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'acceptedCount'])))
 
+    def test_link_route_ingress_egress_transit_counts(self):
+        self.link_route_ingress_egress_transit_counts()
+
+    def test_link_route_large_message_ingress_egress_transit_counts(self):
+        self.link_route_ingress_egress_transit_counts(True)
 
 class TwoRouterIngressEgressTest(TestCase):
     @classmethod
@@ -686,7 +731,7 @@
         cls.routers.append(cls.tester.qdrouterd("B", config_2, wait=True))
         cls.routers[1].wait_router_connected('A')
 
-    def test_two_router_ingress_egress_counts(self):
+    def two_router_ingress_egress_counts(self, large_message=False):
         in_router_addr = self.routers[0].addresses[0]
         out_router_addr = self.routers[1].addresses[0]
 
@@ -710,21 +755,19 @@
 
         # Now run the test.  At the end of the test each router will be queried
         # for the per-link stats
-        test = IngressEgressTwoRouterTest(in_router_addr, out_router_addr)
+        num_messages = 10
+        test = IngressEgressTwoRouterTest(in_router_addr, out_router_addr, num_messages, large_message=large_message)
         test.run()
 
         # Gather the values for deliveries_ingress and deliveries_egress after running the test.
         local_node = Node.connect(in_router_addr, timeout=TIMEOUT)
         outs = local_node.query(type='org.apache.qpid.dispatch.router')
-        deliveries_ingress_index = outs.attribute_names.index('deliveriesIngress')
         results = outs.results[0]
 
         post_deliveries_ingresss = results[deliveries_ingress_index]
 
         local_node = Node.connect(out_router_addr, timeout=TIMEOUT)
         outs = local_node.query(type='org.apache.qpid.dispatch.router')
-        deliveries_egress_index = outs.attribute_names.index('deliveriesEgress')
-        deliveries_accepted_index = outs.attribute_names.index('acceptedDeliveries')
         results = outs.results[0]
 
         post_deliveries_egress = results[deliveries_egress_index]
@@ -737,15 +780,15 @@
         self.assertEqual(post_deliveries_egress - pre_deliveries_egress, 12)
 
         # check the link statistics
-        self.assertEqual(test.sender_stats['deliveryCount'], 10)
-        self.assertEqual(test.sender_stats['acceptedCount'], 10)
+        self.assertEqual(test.sender_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.sender_stats['acceptedCount'], num_messages)
         self.assertTrue(_link_stats_are_zero(test.sender_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'acceptedCount'])))
 
 
-        self.assertEqual(test.receiver_stats['deliveryCount'], 10)
-        self.assertEqual(test.receiver_stats['acceptedCount'], 10)
+        self.assertEqual(test.receiver_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.receiver_stats['acceptedCount'], num_messages)
         self.assertTrue(_link_stats_are_zero(test.receiver_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'acceptedCount'])))
@@ -754,8 +797,13 @@
         # exact number of accepted deliveries at this point in time. But it must at least be 10 since
         # we know for sure from the test that the 10 dispositions related to the 10 sent messages
         # were definitely received
-        self.assertTrue(accepted_deliveries_diff >= 10)
+        self.assertTrue(accepted_deliveries_diff >= num_messages)
 
+    def test_two_router_ingress_egress_counts(self):
+        self.two_router_ingress_egress_counts()
+
+    def test_two_router_large_message_ingress_egress_counts(self):
+        self.two_router_ingress_egress_counts(True)
 
 class OneRouterIngressEgressTest(TestCase):
     @classmethod
@@ -770,38 +818,50 @@
 
         cls.router = cls.tester.qdrouterd(name="A", config=config, wait=True)
 
-    def test_one_router_ingress_egress_counts(self):
+    def one_router_ingress_egress_counts(self, large_message=False):
         address = self.router.addresses[0]
 
-        test = IngressEgressOneRouterTest(address)
-        test.run()
-
         local_node = Node.connect(address, timeout=TIMEOUT)
         outs = local_node.query(type='org.apache.qpid.dispatch.router')
 
         deliveries_ingress_index = outs.attribute_names.index('deliveriesIngress')
         deliveries_egress_index = outs.attribute_names.index('deliveriesEgress')
+        results = outs.results[0]
+        deliveries_ingress_pre_test = results[deliveries_ingress_index]
+        deliveries_egress_pre_test = results[deliveries_egress_index]
+
+        num_messages = 10
+        test = IngressEgressOneRouterTest(address, num_messages, large_message=large_message)
+        test.run()
+
+        outs = local_node.query(type='org.apache.qpid.dispatch.router')
 
         results = outs.results[0]
 
         # 13 = ten msgs + 3 mgmt requests
-        self.assertEqual(results[deliveries_ingress_index], 13)
+        self.assertEqual(results[deliveries_ingress_index] - deliveries_ingress_pre_test, 13)
         # 12 = ten msgs + 2 mgmt requests
-        self.assertEqual(results[deliveries_egress_index], 12)
+        self.assertEqual(results[deliveries_egress_index] - deliveries_egress_pre_test, 13)
 
         # check the link statistics
-        self.assertEqual(test.sender_stats['deliveryCount'], 10)
-        self.assertEqual(test.sender_stats['acceptedCount'], 10)
+        self.assertEqual(test.sender_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.sender_stats['acceptedCount'], num_messages)
         self.assertTrue(_link_stats_are_zero(test.sender_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'acceptedCount'])))
 
-        self.assertEqual(test.receiver_stats['deliveryCount'], 10)
-        self.assertEqual(test.receiver_stats['acceptedCount'], 10)
+        self.assertEqual(test.receiver_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.receiver_stats['acceptedCount'], num_messages)
         self.assertTrue(_link_stats_are_zero(test.receiver_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'acceptedCount'])))
 
+    def test_one_router_ingress_egress_counts(self):
+        self.one_router_ingress_egress_counts()
+
+    def test_one_router_large_message_ingress_egress_counts(self):
+        self.one_router_ingress_egress_counts(True)
+
 
 class RouteContainerEgressCount(TestCase):
     @classmethod
@@ -829,34 +889,46 @@
 
         cls.router = cls.tester.qdrouterd(name="A", config=config, wait=True)
 
-    def test_route_container_egress(self):
+    def route_container_egress(self , large_message=False):
         regular_addr = self.router.addresses[0]
         route_container_addr = self.router.addresses[1]
-        test = RouteContainerEgressTest(route_container_addr, regular_addr)
-        test.run()
-
+        num_messages = 10
         local_node = Node.connect(regular_addr, timeout=TIMEOUT)
         outs = local_node.query(type='org.apache.qpid.dispatch.router')
+        deliveries_egress_route_container_index = outs.attribute_names.index('deliveriesEgressRouteContainer')
+        results = outs.results[0]
 
+        deliveries_egress_pre_test = results[deliveries_egress_route_container_index]
+
+        test = RouteContainerEgressTest(route_container_addr, regular_addr, num_messages, large_message=large_message)
+        test.run()
+
+        outs = local_node.query(type='org.apache.qpid.dispatch.router')
         deliveries_egress_route_container_index = outs.attribute_names.index('deliveriesEgressRouteContainer')
 
         results = outs.results[0]
         # 11 = 10 msgs + 1 mgmt msg
-        self.assertEqual(results[deliveries_egress_route_container_index], 11)
+        self.assertEqual(results[deliveries_egress_route_container_index] - deliveries_egress_pre_test, 11)
 
         # check link statistics
-        self.assertEqual(test.sender_stats['deliveryCount'], 10)
-        self.assertEqual(test.sender_stats['acceptedCount'], 10)
+        self.assertEqual(test.sender_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.sender_stats['acceptedCount'], num_messages)
         self.assertTrue(_link_stats_are_zero(test.sender_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'acceptedCount'])))
 
-        self.assertEqual(test.receiver_stats['deliveryCount'], 10)
-        self.assertEqual(test.receiver_stats['acceptedCount'], 10)
+        self.assertEqual(test.receiver_stats['deliveryCount'], num_messages)
+        self.assertEqual(test.receiver_stats['acceptedCount'], num_messages)
         self.assertTrue(_link_stats_are_zero(test.receiver_stats,
                                              _LINK_STATISTIC_KEYS - set(['deliveryCount',
                                                                          'acceptedCount'])))
 
+    def test_route_container_egress_count(self):
+        self.route_container_egress()
+
+    def test_route_container_large_message_egress_count(self):
+        self.route_container_egress(True)
+
 
 class OneRouterLinkCountersTest(TestCase):
     """
@@ -889,7 +961,8 @@
         presettled or unsettled messages.
         """
         def __init__(self, router_addr, count=None, rx_limit=None,
-                     credit=None, presettled=False, outcome=None):
+                     credit=None, presettled=False, outcome=None,
+                     large_message=False):
             super(OneRouterLinkCountersTest.LinkCountersTest,
                   self).__init__(auto_accept=False,
                                  auto_settle=False,
@@ -910,6 +983,7 @@
             self.conn = None
             self.sender_stats = None
             self.receiver_stats = None
+            self.large_message = large_message
 
         def timeout(self):
             self._cleanup()
@@ -953,7 +1027,10 @@
                                                         name="Tx_Test01")
         def on_sendable(self, event):
             if self.sent < self.count:
-                dlv = self.sender.send(Message(body="Test01"))
+                if self.large_message:
+                    dlv = self.sender.send(Message(body=LARGE_PAYLOAD))
+                else:
+                    dlv = self.sender.send(Message(body="Test01"))
                 if self.presettled:
                     dlv.settle()
                 self.sent += 1
@@ -967,8 +1044,59 @@
         def run(self):
             Container(self).run()
 
+    def verify_released(self, large_message=False):
+        """
+        Verify the link released count by releasing all received messages
+        """
+        test = self.LinkCountersTest(self.router.addresses[0],
+                                     outcome=Delivery.RELEASED,
+                                     large_message=large_message)
+        test.run()
+        self.assertEqual(test.receiver_stats['deliveryCount'], self.COUNT)
+        self.assertEqual(test.receiver_stats['releasedCount'], self.COUNT)
+        self.assertTrue(_link_stats_are_zero(test.receiver_stats,
+                                             _LINK_STATISTIC_KEYS
+                                             - set(['deliveryCount',
+                                                    'releasedCount'])))
 
-    def test_01_presettled(self):
+        self.assertEqual(test.sender_stats['deliveryCount'], self.COUNT)
+        self.assertEqual(test.sender_stats['releasedCount'], self.COUNT)
+        self.assertTrue(_link_stats_are_zero(test.sender_stats,
+                                             _LINK_STATISTIC_KEYS
+                                             - set(['deliveryCount',
+                                                    'releasedCount'])))
+
+    def verify_unsettled_count(self, large_message=False):
+        """
+        Verify the link unsettled count by granting less credit than required
+        by the sender
+        """
+        test = self.LinkCountersTest(self.router.addresses[0],
+                                     presettled=False,
+                                     count=self.COUNT,
+                                     rx_limit=self.CREDIT,
+                                     credit=self.CREDIT,
+                                     large_message=large_message)
+        test.run()
+
+        # expect the receiver to get rx_limit worth of unsettled deliveries
+        self.assertEqual(test.receiver_stats['deliveryCount'], self.CREDIT)
+        self.assertEqual(test.receiver_stats['unsettledCount'], self.CREDIT)
+        self.assertTrue(_link_stats_are_zero(test.receiver_stats,
+                                             _LINK_STATISTIC_KEYS
+                                             - set(['deliveryCount',
+                                                    'unsettledCount'])))
+
+        # expect sender only to be able to send as much as credit
+        self.assertEqual(test.sender_stats['deliveryCount'], self.CREDIT)
+        self.assertEqual(test.sender_stats['unsettledCount'], self.CREDIT)
+        self.assertTrue(_link_stats_are_zero(test.sender_stats,
+                                             _LINK_STATISTIC_KEYS
+                                             - set(['deliveryCount',
+                                                    'unsettledCount'])))
+
+
+    def verify_presettled_count(self, large_message=False):
         """
         Verify the presettled dropped count link counter by exhausting credit
         before sending is complete
@@ -978,7 +1106,8 @@
                                      presettled=True,
                                      count=self.COUNT,
                                      rx_limit=limit,
-                                     credit=limit)
+                                     credit=limit,
+                                     large_message=large_message)
         test.run()
 
         # since these are presettled the sender should have credit
@@ -1018,56 +1147,7 @@
                                                     'droppedPresettledCount',
                                                     'presettledCount'])))
 
-    def test_02_unsettled(self):
-        """
-        Verify the link unsettled count by granting less credit than required
-        by the sender
-        """
-        test = self.LinkCountersTest(self.router.addresses[0],
-                                     presettled=False,
-                                     count=self.COUNT,
-                                     rx_limit=self.CREDIT,
-                                     credit=self.CREDIT)
-        test.run()
-
-        # expect the receiver to get rx_limit worth of unsettled deliveries
-        self.assertEqual(test.receiver_stats['deliveryCount'], self.CREDIT)
-        self.assertEqual(test.receiver_stats['unsettledCount'], self.CREDIT)
-        self.assertTrue(_link_stats_are_zero(test.receiver_stats,
-                                             _LINK_STATISTIC_KEYS
-                                             - set(['deliveryCount',
-                                                    'unsettledCount'])))
-
-        # expect sender only to be able to send as much as credit
-        self.assertEqual(test.sender_stats['deliveryCount'], self.CREDIT)
-        self.assertEqual(test.sender_stats['unsettledCount'], self.CREDIT)
-        self.assertTrue(_link_stats_are_zero(test.sender_stats,
-                                             _LINK_STATISTIC_KEYS
-                                             - set(['deliveryCount',
-                                                    'unsettledCount'])))
-
-    def test_03_released(self):
-        """
-        Verify the link released count by releasing all received messages
-        """
-        test = self.LinkCountersTest(self.router.addresses[0],
-                                     outcome=Delivery.RELEASED)
-        test.run()
-        self.assertEqual(test.receiver_stats['deliveryCount'], self.COUNT)
-        self.assertEqual(test.receiver_stats['releasedCount'], self.COUNT)
-        self.assertTrue(_link_stats_are_zero(test.receiver_stats,
-                                             _LINK_STATISTIC_KEYS
-                                             - set(['deliveryCount',
-                                                    'releasedCount'])))
-
-        self.assertEqual(test.sender_stats['deliveryCount'], self.COUNT)
-        self.assertEqual(test.sender_stats['releasedCount'], self.COUNT)
-        self.assertTrue(_link_stats_are_zero(test.sender_stats,
-                                             _LINK_STATISTIC_KEYS
-                                             - set(['deliveryCount',
-                                                    'releasedCount'])))
-
-    def test_04_one_credit_accepted(self):
+    def verify_one_credit_accepted(self, large_message=False):
         """
         Verify counters on a credit-blocked link
         """
@@ -1097,6 +1177,31 @@
                                                     'unsettledCount',
                                                     'acceptedCount'])))
 
+    def test_01_presettled(self):
+        self.verify_presettled_count()
+
+    def test_02_large_mesage_presettled(self):
+        self.verify_presettled_count(True)
+
+    def test_03_unsettled(self):
+        self.verify_presettled_count()
+
+    def test_04_large_message_unsettled(self):
+        self.verify_presettled_count(True)
+
+    def test_05_released(self):
+        self.verify_released()
+
+    def test_06_large_message_released(self):
+        self.verify_released(True)
+
+    def test_07_one_credit_accepted(self):
+        self.verify_one_credit_accepted()
+
+    def test_08_large_message_one_credit_accepted(self):
+        self.verify_one_credit_accepted(True)
+
+
 
 class RouteContainerIngressCount(TestCase):
     @classmethod
@@ -1158,7 +1263,7 @@
 
 
 class IngressEgressTwoRouterTest(MessagingHandler):
-    def __init__(self, sender_address, receiver_address):
+    def __init__(self, sender_address, receiver_address, num_messages, large_message=False):
         super(IngressEgressTwoRouterTest, self).__init__()
         self.sender = None
         self.receiver = None
@@ -1170,12 +1275,13 @@
         self.receiver_address = receiver_address
         self.n_sent = 0
         self.n_received = 0
-        self.num_messages = 10
+        self.num_messages = num_messages
         self.start = False
         self.n_accept = 0
         self.sender_stats = None
         self.receiver_stats = None
         self.done = False
+        self.large_message = large_message
 
     def timeout(self):
         self.conn_sender.close()
@@ -1204,7 +1310,7 @@
             return
 
         if self.n_sent < self.num_messages:
-            msg = Message(body={'number': self.n_sent})
+            msg = Message(body=get_body(self.n_sent, self.large_message))
             self.sender.send(msg)
             self.n_sent += 1
 
@@ -1230,7 +1336,7 @@
 
 
 class IngressEgressOneRouterTest(MessagingHandler):
-    def __init__(self, address):
+    def __init__(self, address, num_messages, large_message=False):
         super(IngressEgressOneRouterTest, self).__init__()
         self.sender = None
         self.receiver = None
@@ -1241,10 +1347,11 @@
         self.n_sent = 0
         self.n_received = 0
         self.n_accepted = 0
-        self.num_messages = 10
+        self.num_messages = num_messages
         self.sender_stats = None
         self.receiver_stats = None
         self.done = False
+        self.large_message = large_message
 
     def timeout(self):
         self.conn.close()
@@ -1270,7 +1377,7 @@
 
     def on_sendable(self, event):
         if self.n_sent < self.num_messages:
-            msg = Message(body={'number': self.n_sent})
+            msg = Message(body=get_body(self.n_sent, self.large_message))
             self.sender.send(msg)
             self.n_sent += 1
 
@@ -1287,7 +1394,7 @@
 
 
 class RouteContainerEgressTest(MessagingHandler):
-    def __init__(self, route_container_addr, sender_addr):
+    def __init__(self, route_container_addr, sender_addr, num_messages, large_message=False):
         super(RouteContainerEgressTest, self).__init__()
         self.sender_addr = sender_addr
         self.route_container_addr = route_container_addr
@@ -1302,7 +1409,7 @@
         self.n_sent = 0
         self.n_received = 0
         self.n_accepted = 0
-        self.num_messages = 10
+        self.num_messages = num_messages
         self.sender_stats = None
         self.receiver_stats = None
         self.done = False
@@ -1437,7 +1544,7 @@
 
 
 class IngressEgressTransitLinkRouteTest(MessagingHandler):
-    def __init__(self, sender_addr, receiver_addr):
+    def __init__(self, sender_addr, receiver_addr, num_messages, large_message=False):
         super(IngressEgressTransitLinkRouteTest, self).__init__()
         self.timer = None
         self.receiver_conn = None
@@ -1447,7 +1554,7 @@
         self.dest = "pulp.task"
         self.start = False
         self.n_sent = 0
-        self.num_messages = 10
+        self.num_messages = num_messages
         self.n_received = 0
         self.n_accepted = 0
         self.sender_addr = sender_addr
@@ -1456,6 +1563,7 @@
         self.sender_stats = None
         self.receiver_stats = None
         self.done = False
+        self.large_message = large_message
 
     def timeout(self):
         self.error = "Timeout Expired: self.n_sent=%d self.n_received=%d" % (self.n_sent, self.self.n_received)
@@ -1494,7 +1602,7 @@
             return
 
         if self.n_sent < self.num_messages:
-            msg = Message(body={'number': self.n_sent})
+            msg = Message(body=get_body(self.n_sent, self.large_message))
             self.sender.send(msg)
             self.n_sent += 1
 
@@ -1511,14 +1619,14 @@
 
 
 class ReleasedDroppedPresettledCountTest(MessagingHandler):
-    def __init__(self, sender_addr):
+    def __init__(self, sender_addr, num_messages, large_message=False):
         super(ReleasedDroppedPresettledCountTest, self).__init__()
         self.timer = None
         self.sender_conn = None
         self.sender = None
         self.error = None
         self.n_sent = 0
-        self.num_messages = 20
+        self.num_messages = num_messages
         self.sender_addr = sender_addr
         self.sender_stats = None
 
@@ -1527,6 +1635,7 @@
         self.n_released = 0
         self.expect_released = 10
         self.done = False
+        self.large_message = large_message
 
     def check_if_done(self):
         if not self.done and self.expect_released == self.n_released:
@@ -1552,7 +1661,7 @@
     def on_sendable(self, event):
         # We are sending a total of 20 deliveries. 10 unsettled and 10 pre-settled to a multicast address
         if self.n_sent < self.num_messages:
-            msg = Message(body={'number': self.n_sent})
+            msg = Message(body=get_body(self.n_sent, self.large_message))
             msg.address = self.dest
             dlv = self.sender.send(msg)
             if self.n_sent < 10:
@@ -1568,13 +1677,13 @@
 
 
 class RejectedDeliveriesTest(MessagingHandler):
-    def __init__(self, addr):
+    def __init__(self, addr, num_messages, large_message=False):
         super(RejectedDeliveriesTest, self).__init__(auto_accept=False)
         self.addr = addr
         self.dest = "someaddress"
         self.error = None
         self.n_sent = 0
-        self.num_messages = 10
+        self.num_messages = num_messages
         self.n_rejected = 0
         self.sender_conn = None
         self.receiver_conn = None
@@ -1584,6 +1693,7 @@
         self.sender_stats = None
         self.receiver_stats = None
         self.done = False
+        self.large_message = large_message
 
     def check_if_done(self):
         if not self.done and self.n_rejected == self.num_messages:
@@ -1620,7 +1730,7 @@
 
     def on_sendable(self, event):
         if self.n_sent < self.num_messages:
-            msg = Message( body={'number': self.n_sent})
+            msg = Message(body=get_body(self.n_sent, self.large_message))
             self.sender.send(msg)
             self.n_sent += 1
 
@@ -1629,13 +1739,13 @@
 
 
 class ModifiedDeliveriesTest(MessagingHandler):
-    def __init__(self, addr):
+    def __init__(self, addr, num_messages, large_message=False):
         super(ModifiedDeliveriesTest, self).__init__(auto_accept=False)
         self.addr = addr
         self.dest = "someaddress"
         self.error = None
         self.n_sent = 0
-        self.num_messages = 10
+        self.num_messages = num_messages
         self.n_modified = 0
         self.sender_conn = None
         self.receiver_conn = None
@@ -1646,6 +1756,7 @@
         self.sender_stats = None
         self.receiver_stats = None
         self.done = False
+        self.large_message = large_message
 
     def check_if_done(self):
         if not self.done and self.n_modified == self.num_messages:
@@ -1688,7 +1799,7 @@
 
     def on_sendable(self, event):
         if self.n_sent < self.num_messages:
-            msg = Message(body={'number': self.n_sent})
+            msg = Message(body=get_body(self.n_sent, self.large_message))
             self.sender.send(msg)
             self.n_sent += 1