A R Karthick | 9313b76 | 2016-11-07 13:14:35 -0800 | [diff] [blame] | 1 | from OnosLog import OnosLog |
| 2 | from scapy.all import log |
A R Karthick | e14fc02 | 2016-12-08 14:50:29 -0800 | [diff] [blame] | 3 | from onosclidriver import OnosCliDriver |
A R Karthick | 9313b76 | 2016-11-07 13:14:35 -0800 | [diff] [blame] | 4 | import unittest |
A R Karthick | e14fc02 | 2016-12-08 14:50:29 -0800 | [diff] [blame] | 5 | import os |
| 6 | import time |
A R Karthick | 9313b76 | 2016-11-07 13:14:35 -0800 | [diff] [blame] | 7 | |
| 8 | class CordLogger(unittest.TestCase): |
| 9 | |
A R Karthick | e14fc02 | 2016-12-08 14:50:29 -0800 | [diff] [blame] | 10 | 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 Karthick | 9313b76 | 2016-11-07 13:14:35 -0800 | [diff] [blame] | 43 | def setUp(self): |
| 44 | '''Read the log buffer''' |
A R Karthick | e14fc02 | 2016-12-08 14:50:29 -0800 | [diff] [blame] | 45 | self.logSet() |
A R Karthick | 9313b76 | 2016-11-07 13:14:35 -0800 | [diff] [blame] | 46 | try: |
| 47 | onosLog = OnosLog() |
| 48 | st, output = onosLog.get_log() |
A R Karthick | 9313b76 | 2016-11-07 13:14:35 -0800 | [diff] [blame] | 49 | except: pass |
| 50 | |
| 51 | def tearDown(self): |
| 52 | '''Dump the log buffer for ERRORS/warnings''' |
A R Karthick | e14fc02 | 2016-12-08 14:50:29 -0800 | [diff] [blame] | 53 | #reset the log level back to default log level after a test |
| 54 | self.logSet(level = self.onosLogLevel) |
A R Karthick | 9313b76 | 2016-11-07 13:14:35 -0800 | [diff] [blame] | 55 | try: |
| 56 | onosLog = OnosLog() |
| 57 | st, output = onosLog.get_log( ('ERROR','WARN') ) |
A R Karthick | 9313b76 | 2016-11-07 13:14:35 -0800 | [diff] [blame] | 58 | 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 Karthick | e14fc02 | 2016-12-08 14:50:29 -0800 | [diff] [blame] | 64 | |
| 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() |