@@ -277,3 +277,60 @@ def test_non_string_dict_message(self):
277
277
data = self .get_data ()
278
278
# For some reason, non-string keys are ignored
279
279
self .assertFalse (42 in data [0 ][2 ])
280
+
281
+
282
+ class TestHandlerWithCircularQueue (unittest .TestCase ):
283
+ Q_TIMEOUT = 0.04
284
+ Q_SIZE = 3
285
+
286
+ def setUp (self ):
287
+ super (TestHandlerWithCircularQueue , self ).setUp ()
288
+ self ._server = mockserver .MockRecvServer ('localhost' )
289
+ self ._port = self ._server .port
290
+ self .handler = None
291
+
292
+ def get_handler_class (self ):
293
+ # return fluent.handler.FluentHandler
294
+ return fluent .asynchandler .FluentHandler
295
+
296
+ def get_data (self ):
297
+ return self ._server .get_recieved ()
298
+
299
+ def test_simple (self ):
300
+ handler = self .get_handler_class ()('app.follow' , port = self ._port ,
301
+ queue_timeout = self .Q_TIMEOUT ,
302
+ queue_maxsize = self .Q_SIZE ,
303
+ queue_circular = True )
304
+ self .handler = handler
305
+
306
+ self .assertEqual (self .handler .sender .queue_circular , True )
307
+ self .assertEqual (self .handler .sender .queue_maxsize , self .Q_SIZE )
308
+
309
+ logging .basicConfig (level = logging .INFO )
310
+ log = logging .getLogger ('fluent.test' )
311
+ handler .setFormatter (fluent .handler .FluentRecordFormatter ())
312
+ log .addHandler (handler )
313
+ log .info ({'cnt' : 1 , 'from' : 'userA' , 'to' : 'userB' })
314
+ log .info ({'cnt' : 2 , 'from' : 'userA' , 'to' : 'userB' })
315
+ log .info ({'cnt' : 3 , 'from' : 'userA' , 'to' : 'userB' })
316
+ log .info ({'cnt' : 4 , 'from' : 'userA' , 'to' : 'userB' })
317
+ log .info ({'cnt' : 5 , 'from' : 'userA' , 'to' : 'userB' })
318
+
319
+ # wait, giving time to the communicator thread to send the messages
320
+ time .sleep (0.5 )
321
+ # close the handler, to join the thread and let the test suite to terminate
322
+ handler .close ()
323
+
324
+ data = self .get_data ()
325
+ eq = self .assertEqual
326
+ # with the logging interface, we can't be sure to have filled up the queue, so we can
327
+ # test only for a cautelative condition here
328
+ self .assertTrue (len (data ) >= self .Q_SIZE )
329
+
330
+ el = data [0 ]
331
+ eq (3 , len (el ))
332
+ eq ('app.follow' , el [0 ])
333
+ eq ('userA' , el [2 ]['from' ])
334
+ eq ('userB' , el [2 ]['to' ])
335
+ self .assertTrue (el [1 ])
336
+ self .assertTrue (isinstance (el [1 ], int ))
0 commit comments