blob: 081e33c808680cb8458734c99d577916d0e204f6 [file] [log] [blame]
A R Karthick9313b762016-11-07 13:14:35 -08001from OnosLog import OnosLog
2from scapy.all import log
A R Karthicke14fc022016-12-08 14:50:29 -08003from onosclidriver import OnosCliDriver
A R Karthick9313b762016-11-07 13:14:35 -08004import unittest
A R Karthicke14fc022016-12-08 14:50:29 -08005import os
6import time
A R Karthick9313b762016-11-07 13:14:35 -08007
8class CordLogger(unittest.TestCase):
9
A R Karthicke14fc022016-12-08 14:50:29 -080010 controllers = os.getenv('ONOS_CONTROLLER_IP', '').split(',')
11 cliSessions = {}
12 onosLogLevel = 'INFO'
13 curLogLevel = onosLogLevel
14 testLogLevel = os.getenv('LOG_LEVEL', onosLogLevel)
15
16 @classmethod
17 def cliSessionEnter(cls):
18 try:
19 for controller in cls.controllers:
20 if not controller:
21 continue
22 retries = 0
23 while retries < 3:
24 cli = OnosCliDriver(controller = controller, connect = True)
25 if cli.handle:
26 cls.cliSessions[controller] = cli
27 break
28 else:
29 retries += 1
30 time.sleep(2)
31 except:
32 pass
33
34 @classmethod
35 def cliSessionExit(cls):
36 try:
37 for controller, cli in cls.cliSessions.items():
38 if cli:
39 cli.disconnect()
40 except:
41 pass
42
A R Karthick9313b762016-11-07 13:14:35 -080043 def setUp(self):
44 '''Read the log buffer'''
A R Karthicke14fc022016-12-08 14:50:29 -080045 self.logSet()
A R Karthick9313b762016-11-07 13:14:35 -080046 try:
47 onosLog = OnosLog()
48 st, output = onosLog.get_log()
A R Karthick9313b762016-11-07 13:14:35 -080049 except: pass
50
51 def tearDown(self):
52 '''Dump the log buffer for ERRORS/warnings'''
A R Karthicke14fc022016-12-08 14:50:29 -080053 #reset the log level back to default log level after a test
54 self.logSet(level = self.onosLogLevel)
A R Karthick9313b762016-11-07 13:14:35 -080055 try:
56 onosLog = OnosLog()
57 st, output = onosLog.get_log( ('ERROR','WARN') )
A R Karthick9313b762016-11-07 13:14:35 -080058 if st and output:
59 log.info('\nTest %s has errors and warnings\n' %self._testMethodName)
60 log.info('%s' %output)
61 else:
62 log.info('\nTest %s has no errors and warnings in the logs' %self._testMethodName)
63 except: pass
A R Karthicke14fc022016-12-08 14:50:29 -080064
65 @classmethod
66 def logSet(cls, level = None, app = 'org.onosproject', controllers = None, forced = False):
67 #explicit override of level is allowed to reset log levels
68 if level is None:
69 level = cls.testLogLevel
70 #if we are already at current/ONOS log level, there is nothing to do
71 if forced is False and level == cls.curLogLevel:
72 return
73 if controllers is None:
74 controllers = cls.controllers
75 else:
76 if type(controllers) in [str, unicode]:
77 controllers = [ controllers ]
78 cls.cliSessionEnter()
79 try:
80 for controller in controllers:
81 if cls.cliSessions.has_key(controller):
82 cls.cliSessions[controller].logSet(level = level, app = app)
83 cls.curLogLevel = level
84 except:
85 pass
86 cls.cliSessionExit()