Allow TestON to be run from anywhere.

Use absolute path instead of current working path
Clean up some error handling on startup

Still to be done:
Cleanup other usages of os.getcwd()
Change-Id: I014f4fec29a85edd1816127d3062b595baadcab5
diff --git a/TestON/bin/cli.py b/TestON/bin/cli.py
index b515486..ffe9d67 100755
--- a/TestON/bin/cli.py
+++ b/TestON/bin/cli.py
@@ -472,7 +472,8 @@
         converter = updatedriver.UpdateDriver()
 
         if config == '':
-            path = re.sub("(bin)$", "", os.getcwd())
+            location = os.path.abspath( os.path.dirname( __file__ ) )
+            path = re.sub( "(bin)$", "", location )
             config = path + "/config/updatedriver.cfg"
             configDict = converter.configparser(config)
 
diff --git a/TestON/config/teston.cfg b/TestON/config/teston.cfg
index 82c96dc..c7442f6 100644
--- a/TestON/config/teston.cfg
+++ b/TestON/config/teston.cfg
@@ -1,18 +1,18 @@
 <config>
 
-    <parser> 
-        <file>../core/xmlparser.py</file>
+    <parser>
+        <file>core/xmlparser.py</file>
         <class>xmlparser</class>
     </parser>
     <mail_to>hari@onlab.us</mail_to>
 
-    <logger> 
-        <file>../core/logger.py</file>
+    <logger>
+        <file>core/logger.py</file>
         <class>Logger</class>
     </logger>
-    
+
     <responseparser>
-        <file>../core/jsonparser.py</file>
+        <file>core/jsonparser.py</file>
         <class>JsonParser</class>
     </responseparser>
 </config>
diff --git a/TestON/core/teston.py b/TestON/core/teston.py
index 067d268..5bc702b 100644
--- a/TestON/core/teston.py
+++ b/TestON/core/teston.py
@@ -37,16 +37,17 @@
 import openspeak
 import subprocess
 global path, drivers_path, core_path, tests_path,logs_path
-path = re.sub("(core|bin)$", "", os.getcwd())
+location = os.path.abspath( os.path.dirname( __file__ ) )
+path = re.sub( "(core|bin)$", "", location )
 drivers_path = path+"drivers/"
 core_path = path+"core"
 tests_path = path+"tests"
 logs_path = path+"logs/"
 config_path = path + "config/"
-sys.path.append(path)
-sys.path.append( drivers_path)
-sys.path.append(core_path )
-sys.path.append(tests_path)
+sys.path.append( path )
+sys.path.append( drivers_path )
+sys.path.append( core_path )
+sys.path.append( tests_path )
 
 from core.utilities import Utilities
 from core.Thread import Thread
@@ -624,15 +625,16 @@
     verifyOnosCell(options)
 
 def verifyTest(options):
-    if options.testname:
-        main.TEST = options.testname
-        main.classPath = "tests."+main.TEST+"."+main.TEST
-        main.tests_path = tests_path
-    elif options.example :
-        main.TEST = options.example
-        main.tests_path = path+"/examples/"
-        main.classPath = "examples."+main.TEST+"."+main.TEST
-    else :
+    try:
+        if options.testname:
+            main.TEST = options.testname
+            main.classPath = "tests."+main.TEST+"."+main.TEST
+            main.tests_path = tests_path
+        elif options.example:
+            main.TEST = options.example
+            main.tests_path = path+"/examples/"
+            main.classPath = "examples."+main.TEST+"."+main.TEST
+    except AttributeError:
         print "Test or Example not specified please specify the --test <test name > or --example <example name>"
         main.exit()
 
@@ -713,18 +715,22 @@
     main.openspeak = openspeak.OpenSpeak()
     openspeakfile = main.testDir+"/" + main.TEST + "/" + main.TEST + ".ospk"
     testfile = main.testDir+"/" + main.TEST + "/" + main.TEST + ".py"
-    if os.path.exists(openspeakfile) :
+    if os.path.exists(openspeakfile):
+        # Openspeak file found, compiling to python
         main.openspeak.compiler(openspeakfile=openspeakfile,writetofile=1)
     elif os.path.exists(testfile):
-        print ''
+        # No openspeak found, using python file instead
+        pass
     else:
-        print "\nThere is no :\""+main.TEST+"\" test, Please Provide OpenSpeak Script/ test script"
+        print "\nThere is no \""+main.TEST+"\" test script.\nPlease provide a " +\
+              "Python or OpenSpeak test script in the tests folder: " +\
+              main.testDir+"/" + main.TEST + "/"
         __builtin__.testthread = None
         main.exit()
     try :
         testModule = __import__(main.classPath, globals(), locals(), [main.TEST], -1)
     except(ImportError):
-        print "There was an import error, it might mean that there is no test like "+main.TEST
+        print "There was an import error, it might mean that there is no test named "+main.TEST
         main.exit()
 
     testClass = getattr(testModule, main.TEST)
@@ -754,28 +760,26 @@
     '''
     confighash = main.configDict
     if 'file' in confighash['config']['parser'] and 'class' in confighash['config']['parser']:
-        if confighash['config']['parser']['file'] != None or confighash['config']['parser']['class']!= None :
-            if os.path.exists(confighash['config']['parser']['file']) :
-                module = re.sub(r".py\s*$","",confighash['config']['parser']['file'])
+        path = confighash['config']['parser']['file']
+        if path != None or confighash['config']['parser']['class']!= None:
+            try:
+                module = re.sub( r".py\s*$", "", path )
                 moduleList = module.split("/")
                 newModule = ".".join([moduleList[len(moduleList) - 2],moduleList[len(moduleList) - 1]])
-                try :
-                    parsingClass = confighash['config']['parser']['class']
-                    parsingModule = __import__(newModule, globals(), locals(), [parsingClass], -1)
-                    parsingClass = getattr(parsingModule, parsingClass)
-                    main.parser = parsingClass()
-                    #hashobj = main.parser.parseParams(main.classPath)
-                    if hasattr(main.parser,"parseParams") and hasattr(main.parser,"parseTopology") and hasattr(main.parser,"parse") :
-                        pass
-                    else:
-                        main.exit()
-                except ImportError:
-                    print sys.exc_info()[1]
+                parsingClass = confighash['config']['parser']['class']
+                parsingModule = __import__(newModule, globals(), locals(), [parsingClass], -1)
+                parsingClass = getattr(parsingModule, parsingClass)
+                main.parser = parsingClass()
+                #hashobj = main.parser.parseParams(main.classPath)
+                if hasattr(main.parser,"parseParams") and hasattr(main.parser,"parseTopology") and hasattr(main.parser,"parse"):
+                    pass
+                else:
+                    print "Invalid parser format"
                     main.exit()
-            else :
-                print "No Such File Exists !!"+ confighash['config']['parser']['file'] +"using default parser"
+            except ImportError:
+                print "Could not find the file " + path + " using default parser."
                 load_defaultParser()
-        elif confighash['config']['parser']['file'] == None or confighash['config']['parser']['class'] == None :
+        elif confighash['config']['parser']['file'] == None or confighash['config']['parser']['class'] == None:
             load_defaultParser()
     else:
         load_defaultParser()
@@ -808,22 +812,19 @@
     '''
     confighash = main.configDict
     if 'file' in confighash['config']['logger'] and 'class' in confighash['config']['logger']:
-        if confighash['config']['logger']['file'] != None or confighash['config']['logger']['class']!= None :
-            if os.path.exists(confighash['config']['logger']['file']) :
-                module = re.sub(r".py\s*$","",confighash['config']['logger']['file'])
+        path = confighash['config']['logger']['file']
+        if path != None or confighash['config']['logger']['class']!= None :
+            try:
+                module = re.sub( r".py\s*$", "", path )
                 moduleList = module.split("/")
                 newModule = ".".join([moduleList[len(moduleList) - 2],moduleList[len(moduleList) - 1]])
-                try :
-                    loggerClass = confighash['config']['logger']['class']
-                    loggerModule = __import__(newModule, globals(), locals(), [loggerClass], -1)
-                    loggerClass = getattr(loggerModule, loggerClass)
-                    main.logger = loggerClass()
-                    #hashobj = main.parser.parseParams(main.classPath)
-
-                except ImportError:
-                    print sys.exc_info()[1]
-            else :
-                print "No Such File Exists !!"+confighash['config']['logger']['file']+ "Using default logger"
+                loggerClass = confighash['config']['logger']['class']
+                loggerModule = __import__(newModule, globals(), locals(), [loggerClass], -1)
+                loggerClass = getattr(loggerModule, loggerClass)
+                main.logger = loggerClass()
+                #hashobj = main.parser.parseParams(main.classPath)
+            except ImportError:
+                print "Could not find the file " + path + " using default logger."
                 load_defaultlogger()
         elif confighash['config']['parser']['file'] == None or confighash['config']['parser']['class'] == None :
             load_defaultlogger()