Implement a log level option to enable ONOS logs for every test case.
This is done automatically through overriding of setUp in CordLogger which every test class should inherit.
Otherwise, one can manually enable logSet for all controllers through the CordLogger logSet api.

Change-Id: I43bd5a97e0ab9cbec7d7c51daf2d5ea0d6961505
diff --git a/src/test/utils/CordLogger.py b/src/test/utils/CordLogger.py
index 5f38c8c..081e33c 100644
--- a/src/test/utils/CordLogger.py
+++ b/src/test/utils/CordLogger.py
@@ -1,11 +1,48 @@
 from OnosLog import OnosLog
 from scapy.all import log
+from onosclidriver import OnosCliDriver
 import unittest
+import os
+import time
 
 class CordLogger(unittest.TestCase):
 
+    controllers = os.getenv('ONOS_CONTROLLER_IP', '').split(',')
+    cliSessions = {}
+    onosLogLevel = 'INFO'
+    curLogLevel = onosLogLevel
+    testLogLevel = os.getenv('LOG_LEVEL', onosLogLevel)
+
+    @classmethod
+    def cliSessionEnter(cls):
+        try:
+            for controller in cls.controllers:
+                if not controller:
+                    continue
+                retries = 0
+                while retries < 3:
+                    cli = OnosCliDriver(controller = controller, connect = True)
+                    if cli.handle:
+                        cls.cliSessions[controller] = cli
+                        break
+                    else:
+                        retries += 1
+                        time.sleep(2)
+        except:
+            pass
+
+    @classmethod
+    def cliSessionExit(cls):
+        try:
+            for controller, cli in cls.cliSessions.items():
+                if cli:
+                    cli.disconnect()
+        except:
+            pass
+
     def setUp(self):
         '''Read the log buffer'''
+        self.logSet()
         try:
             onosLog = OnosLog()
             st, output = onosLog.get_log()
@@ -13,6 +50,8 @@
 
     def tearDown(self):
         '''Dump the log buffer for ERRORS/warnings'''
+        #reset the log level back to default log level after a test
+        self.logSet(level = self.onosLogLevel)
         try:
             onosLog = OnosLog()
             st, output = onosLog.get_log( ('ERROR','WARN') )
@@ -22,3 +61,26 @@
             else:
                 log.info('\nTest %s has no errors and warnings in the logs' %self._testMethodName)
         except: pass
+
+    @classmethod
+    def logSet(cls, level = None, app = 'org.onosproject', controllers = None, forced = False):
+        #explicit override of level is allowed to reset log levels
+        if level is None:
+            level = cls.testLogLevel
+        #if we are already at current/ONOS log level, there is nothing to do
+        if forced is False and level == cls.curLogLevel:
+            return
+        if controllers is None:
+            controllers = cls.controllers
+        else:
+            if type(controllers) in [str, unicode]:
+                controllers = [ controllers ]
+        cls.cliSessionEnter()
+        try:
+            for controller in controllers:
+                if cls.cliSessions.has_key(controller):
+                    cls.cliSessions[controller].logSet(level = level, app = app)
+            cls.curLogLevel = level
+        except:
+            pass
+        cls.cliSessionExit()