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()
diff --git a/src/test/utils/__init__.py b/src/test/utils/__init__.py
index 714a2b8..c34e915 100644
--- a/src/test/utils/__init__.py
+++ b/src/test/utils/__init__.py
@@ -1,12 +1,12 @@
-# 
+#
 # Copyright 2016-present Ciena Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
-# 
+#
 # http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,4 +17,6 @@
 ##add the python path to lookup the utils
 working_dir = os.path.dirname(os.path.realpath(sys.argv[-1]))
 utils_dir = os.path.join(working_dir, '../fsm')
+cli_dir = os.path.join(working_dir, '../cli')
 __path__.append(utils_dir)
+__path__.append(cli_dir)