@@ -260,6 +260,31 @@ def do_send(x, y, z):
260
260
self .txn_ctrl .send .assert_called_with (srv2 , [srv_2_event2 ], [])
261
261
self .assertEquals (3 , self .txn_ctrl .send .call_count )
262
262
263
+ def test_send_large_txns (self ):
264
+ srv_1_defer = defer .Deferred ()
265
+ srv_2_defer = defer .Deferred ()
266
+ send_return_list = [srv_1_defer , srv_2_defer ]
267
+
268
+ def do_send (x , y , z ):
269
+ return make_deferred_yieldable (send_return_list .pop (0 ))
270
+
271
+ self .txn_ctrl .send = Mock (side_effect = do_send )
272
+
273
+ service = Mock (id = 4 , name = "service" )
274
+ event_list = [Mock (name = "event%i" % (i + 1 )) for i in range (200 )]
275
+ for event in event_list :
276
+ self .queuer .enqueue_event (service , event )
277
+
278
+ # Expect the first event to be sent immediately.
279
+ self .txn_ctrl .send .assert_called_with (service , [event_list [0 ]], [])
280
+ srv_1_defer .callback (service )
281
+ # Then send the next 100 events
282
+ self .txn_ctrl .send .assert_called_with (service , event_list [1 :101 ], [])
283
+ srv_2_defer .callback (service )
284
+ # Then the final 99 events
285
+ self .txn_ctrl .send .assert_called_with (service , event_list [101 :], [])
286
+ self .assertEquals (3 , self .txn_ctrl .send .call_count )
287
+
263
288
def test_send_single_ephemeral_no_queue (self ):
264
289
# Expect the event to be sent immediately.
265
290
service = Mock (id = 4 , name = "service" )
@@ -296,3 +321,19 @@ def test_send_single_ephemeral_with_queue(self):
296
321
# Expect the queued events to be sent
297
322
self .txn_ctrl .send .assert_called_with (service , [], event_list_2 + event_list_3 )
298
323
self .assertEquals (2 , self .txn_ctrl .send .call_count )
324
+
325
+ def test_send_large_txns_ephemeral (self ):
326
+ d = defer .Deferred ()
327
+ self .txn_ctrl .send = Mock (
328
+ side_effect = lambda x , y , z : make_deferred_yieldable (d )
329
+ )
330
+ # Expect the event to be sent immediately.
331
+ service = Mock (id = 4 , name = "service" )
332
+ first_chunk = [Mock (name = "event%i" % (i + 1 )) for i in range (100 )]
333
+ second_chunk = [Mock (name = "event%i" % (i + 101 )) for i in range (50 )]
334
+ event_list = first_chunk + second_chunk
335
+ self .queuer .enqueue_ephemeral (service , event_list )
336
+ self .txn_ctrl .send .assert_called_once_with (service , [], first_chunk )
337
+ d .callback (service )
338
+ self .txn_ctrl .send .assert_called_with (service , [], second_chunk )
339
+ self .assertEquals (2 , self .txn_ctrl .send .call_count )
0 commit comments