def testFlushLevel(self): """ACSHandler flushes buffer when message priority greater than threshold arrives""" h = ACSHandler.ACSHandler() lr = ACSHandler.ACSLogRecord("Nested.Name", logging.INFO, "/path/to/file.py", 100, "Test text", [], None) self.assertEqual(False, h.shouldFlush(lr)) lr = ACSHandler.ACSLogRecord("Nested.Name", logging.CRITICAL+1, "/path/to/file.py", 100, "Test text", [], None) self.assertEqual(True, h.shouldFlush(lr))
def testFlushToFile(self): """ACSHandler writes log messages to a file""" h = ACSHandler.ACSHandler() h.file_handler = mock.Mock(spec=logging.Handler) lr = ACSHandler.ACSLogRecord("Nested.Name", "TRACE", "/path/to/file.py", 100, "Test text", [], None) h.flushToFile(lr) self.assertEqual('handle',h.file_handler.method_calls[0][0])
def testShouldFlushCapacity(self): """ACSHandler flushes when capacity is reached""" h = ACSHandler.ACSHandler() lr = ACSHandler.ACSLogRecord("Nested.Name", logging.NOTSET+1, "/path/to/file.py", 100, "Test text", [], None) self.assertEqual(False, h.shouldFlush(lr)) h.buffer += [ lr, lr, lr, lr, lr, lr, lr, lr, lr, lr ] self.assertEqual(True, h.shouldFlush(lr))
def testFlush(self): """ACSHandler flushes buffer correctly""" h = ACSHandler.ACSHandler() lr = ACSHandler.ACSLogRecord("Nested.Name", logging.INFO, "/path/to/file.py", 100, "Test text", None, None) h.buffer = [ lr, lr ] expected = [ 'logInfo' , 'logInfo' ] h.flush() self.assertEquals(expected, [ n[0] for n in mockLogSvc.method_calls[-2:]])
def testFlushToFileNoHandler(self): """ACSHandler creates singleton file handler when necessary""" def mockInitFileHandler(self): self.file_handler = mock.Mock(spec=logging.FileHandler) holdmethod = ACSHandler.ACSHandler.initFileHandler ACSHandler.ACSHandler.initFileHandler = mockInitFileHandler h = ACSHandler.ACSHandler() lr = ACSHandler.ACSLogRecord("Nested.Name", "TRACE", "/path/to/file.py", 100, "Test text", [], None) self.assertEqual(True, h.file_handler is None) h.flushToFile(lr) self.assertEqual(False, h.file_handler is None) ACSHandler.ACSHandler.initFileHandler = holdmethod
def testFullLogQueue(self): """ACSHandler drops new messages when pending message queue is full""" def mockFlush(self): return 0 holdFlush = ACSHandler.ACSHandler.flush ACSHandler.ACSHandler.flush = mockFlush h = ACSHandler.ACSHandler(capacity=ACSHandler.DEFAULT_RECORD_CAPACITY) lr = ACSHandler.ACSLogRecord("Nested.Name", logging.INFO, "/path/to/file.py", 100, "Test text", None, None) lrn = ACSHandler.ACSLogRecord("Name", logging.INFO, "/path/to/file.py", 100, "Test text", None, None) h.buffer += [ lr, lr, lr, lr, lr, lr, lr, lr, lr, lr ] self.assertEqual([ lr, lr, lr, lr, lr, lr, lr, lr, lr, lr ], h.buffer) h.handle(lrn) self.assertEqual([ lr, lr, lr, lr, lr, lr, lr, lr, lr, lr ], h.buffer) ACSHandler.ACSHandler.flush = holdFlush
def testFlushException(self): """ACSHandler handles exceptions correctly when flushing buffer""" def mockSendLog(self, record): raise Exception() holdSendLog = ACSHandler.ACSHandler.sendLog ACSHandler.ACSHandler.sendLog = mockSendLog h = ACSHandler.ACSHandler() h.file_handler = mock.Mock(spec=logging.Handler) lr = ACSHandler.ACSLogRecord("Nested.Name", logging.INFO, "/path/to/file.py", 100, "Test text", None, None) h.buffer = [ lr, lr ] expected = [ 'handle' , 'handle' ] h.flush() self.assertEquals(expected, [ n[0] for n in h.file_handler.method_calls[-2:]]) ACSHandler.ACSHandler.sendLog = holdSendLog
def testFormatNoData(self): """ACSFormatter formats a log record that has no data attribute correctly""" lr = ACSHandler.ACSLogRecord("Simple", "TRACE", "/path/to/file.py", 100, "Test text", [], None) lr.created = 0 lr.msecs = 0 s = self.f.format(lr) self.assertEqual("1970-01-01T00:00:00.000 Simple Test text",s)
def testConstructorDefault(self): """ACSHandler initialized""" h = ACSHandler.ACSHandler() self.assertEqual(ACSHandler.DEFAULT_MAXIMUM_QUEUE, h.capacity) self.assertEqual(ACSHandler.DEFAULT_RECORD_CAPACITY, h.batchsize) self.assertEqual(ACSHandler.DEFAULT_IMMEDIATE_DISPATCH, h.dispatchlevel) self.assertEqual(mockLogSvc.__repr__(), h.logSvc.__repr__())
def testFormatDataList(self): """ACSFormatter formats a log record with a data list attribute correctly""" lr = ACSHandler.ACSLogRecord("Simple", "TRACE", "/path/to/file.py", 100, "Test text", [], None) lr.created = 0 lr.msecs = 0 lr.data = [ ACSLog.NVPair('a', 'A'), ACSLog.NVPair('5', '5'), ACSLog.NVPair('B', '9') ] s = self.f.format(lr) self.assertEqual("1970-01-01T00:00:00.000 Simple Test text [ a=A 5=5 B=9 ]",s)
def testFormatDataDict(self): """ACSFormatter formats a log record with a data dictionary attribute correctly""" lr = ACSHandler.ACSLogRecord("Simple", "TRACE", "/path/to/file.py", 100, "Test text", [], None) lr.created = 0 lr.msecs = 0 lr.data = { 'a' : 'A', 5 : '5', 'B' : 9 } s = self.f.format(lr) self.assertEqual("1970-01-01T00:00:00.000 Simple Test text [ a=A B=9 5=5 ]",s)
def testSendLogWithAudience(self): """ACSHandler sends logWithAudience messages at the appropriate levels""" import Acspy.Common.Log l = Acspy.Common.Log.Logger('test') h = ACSHandler.ACSHandler() extras = { 'priority' : ACSLog.ACS_LOG_ERROR, 'audience' : "", 'array' : "", 'antenna' : "" } lr = l.makeRecord("Sample", Acspy.Common.Log.LEVELS[8], "/path/to/file.py", 100, 'ErrorTrace', (), None, 'dummy', extras) h.sendLog(lr) logcall = mockLogSvc.method_calls[-1] self.assertEquals("logWithAudience", logcall[0]) self.assertEquals(ACSLog.ACS_LOG_ERROR, logcall[1][0])
def testSimpleConstructor(self): """ACSLogRecord initialized with simple name""" lr = ACSHandler.ACSLogRecord("Simple", "TRACE", "/path/to/file.py", 100, "Test text", [], None) self.assertEqual("Simple", lr.name) self.assertEqual(lr.name, lr.source) self.assertEqual("/path/to/file.py", lr.pathname) self.assertEqual("file.py", lr.filename) self.assertEqual("file", lr.module) self.assertEqual("Test text", lr.msg) self.assertEqual([], lr.args) self.assertEqual(None, lr.exc_info) self.assertEqual(None, lr.funcName)
def testSendLogErrorTrace(self): """ACSHandler sends errortrace messages at the appropriate levels""" import Acspy.Common.Log import Acspy.Common.ErrorTrace as ErrorTrace l = Acspy.Common.Log.Logger('test') h = ACSHandler.ACSHandler() et = ErrorTrace.ErrorTrace(1,1) extras = { 'errortrace' : et, 'priority' : ACSLog.ACS_LOG_ERROR } lr = l.makeRecord("Sample", Acspy.Common.Log.LEVELS[8], "/path/to/file.py", 100, 'ErrorTrace', (), None, 'dummy', extras) h.sendLog(lr) logcall = mockLogSvc.method_calls[-1] self.assertEquals("logErrorWithPriority", logcall[0]) self.assertEquals(ACSLog.ACS_LOG_ERROR, logcall[1][1])