adding TestON
diff --git a/TestON/bin/updatedriver.py b/TestON/bin/updatedriver.py
new file mode 100644
index 0000000..084286d
--- /dev/null
+++ b/TestON/bin/updatedriver.py
@@ -0,0 +1,370 @@
+import inspect
+import sys
+import os
+import re 
+sys.path.append("../")
+from core import xmldict
+'''
+@author: Raghav Kashyap (raghavkashyap@paxterrasolutions.com)
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+'''
+
+
+class UpdateDriver:
+    def __init__(self):
+        self.default = ''
+        self.configFile = "/home/openflow/TestON/config/ofadriver.cfg"
+        self.methodDict = {}
+        self.fileDict = {}
+        
+
+    def getmethods(self,modulePath,Class) :
+        '''
+         This will get the list of methods in given module or class.
+         It accepts the module path and class name. If there is no 
+         class name then it has be mentioned as None.
+        '''
+        methodList = []
+        moduleList = modulePath.split("/")
+        newModule = ".".join([moduleList[len(moduleList) - 2],moduleList[len(moduleList) - 1]])
+        print "Message : Method list is being obatined , Please wait ..." 
+        try :
+            if Class :
+                Module = __import__(moduleList[len(moduleList) - 1], globals(), locals(), [Class], -1)
+                ClassList = [x.__name__ for x in Module.__dict__.values() if inspect.isclass(x)]
+                self.ClassList = ClassList
+                Class = vars(Module)[Class]
+                methodList = [x.__name__ for x in Class.__dict__.values() if inspect.isfunction(x)]
+            else :
+                Module = __import__(moduleList[len(moduleList) - 1], globals(), locals(),[moduleList[len(moduleList) - 2]], -1)
+                methodList = [x.__name__ for x in Module.__dict__.values() if inspect.isfunction(x)]
+                ClassList = [x.__name__ for x in Module.__dict__.values() if inspect.isclass(x)]
+                self.ClassList = ClassList
+        except :
+            print "Error : " +str(sys.exc_info()[1])
+         
+        
+        self.method = methodList
+        return self.method
+
+    def echo(self) :
+        print "Echoing !!!!!!"
+
+    def getargs(self,moduleName,className,method) :
+        '''
+          This will return the list of arguments in a method of python module of class.
+          It accepts method list as an argument.
+        '''
+        print "Message : Argument list is being obtained for each method"
+        methodArgsDict = {}
+        if className == None:
+            moduleList = moduleName.split(".")
+            for index,name in enumerate(method) :
+                Module = __import__(moduleList[len(moduleList) -1], globals(), locals(), [moduleList[len(moduleList) -2]], -1)
+                try :
+                    names = vars(Module)[name]
+                except KeyError:
+                    print "Message : method '" + name + "'does not exists,Continued with including it. "
+                    return False
+                argumentList = inspect.getargspec(names) #inspect.getargvalues(name)
+                methodArgsDict[name] = argumentList[0]
+        else :
+            moduleList = moduleName.split(".")
+            for index,name in enumerate(method) :
+                Module = __import__(moduleList[len(moduleList) - 1], globals(), locals(), [className], -1)
+                Class = getattr(Module, className)
+                try :
+                    names = vars(Class)[name]
+                except KeyError :
+                    print "Message : method '" + name + "'does not exists,Continued with include it."
+                    return False
+
+                argumentList = inspect.getargspec(names) #inspect.getargvalues(name)
+                methodArgsDict[name] = argumentList[0]
+
+        return methodArgsDict
+
+    def configparser(self,fileName):
+        '''
+         It will parse the config file (ofa.cfg) and return as dictionary
+        '''
+        
+        matchFileName = re.match(r'(.*)\.cfg', fileName, re.M | re.I)
+        if matchFileName:
+            self.configFile = fileName
+            try :
+                xml = open(fileName).read()
+                self.configDict = xmldict.xml_to_dict(xml)
+                return self.configDict
+            except :
+                print "Error : Config file " + self.configFile + " not defined properly or file path error"
+        
+ 
+    def getList(self):
+        '''
+          This method will maintain the hash with module->class->methodList or 
+          module -> methodList .It will return the same Hash.
+        '''
+        classList = []
+        try :
+            moduleList = self.configDict['config-driver']['importTypes'][self.driver]['modules'].keys()
+        except KeyError,e:
+            print "Error : Module Does not Exists"    
+            print e
+            return False
+     
+        for index,value in enumerate(moduleList):
+            modulePath = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['path']
+            moduleName = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['name']
+
+            try :
+                pathList = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['set-path'].split(",")
+                sys.path.extend(pathList)  
+            except KeyError :
+                print "Error : No System Path is given "
+                pass
+            try :
+                Class = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['classes']
+            except :
+                Class = None
+            if Class == None :
+                methodList = self.getmethods(modulePath,None)
+                self.methodDict[moduleName] =  methodList
+                self.method_ignoreList(value,None)
+                self.getMethodArgsHash(moduleName,value,None)
+            else :
+                classList = self.configDict['config-driver']['importTypes'][self.driver]['modules'][value]['classes'].keys()
+                for indx,className in enumerate(classList):
+                    if className == 'ignore-list' :
+                        pass
+                    else :
+                        methodList = self.getmethods(modulePath,className)
+                        self.methodDict[moduleName] = {className : methodList}
+                        self.method_ignoreList(value,className)
+                        self.class_ignoreList(value)
+                        self.getMethodArgsHash(moduleName,value,className)
+
+    def class_ignoreList(self,module) :
+        '''
+        It removes the ignored classes for each module mention in ofadriver.cfg 
+        '''
+        class_ignoreList = [] 
+        if self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['classes'] == None :
+            pass
+        else :
+            try :
+                class_ignoreList = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['classes']['ignore-list']).split(",")
+            except KeyError :
+                print "Message : No Class Ignore List present"
+                return True
+        moduleName = self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['name']
+        try :
+            for index,className in enumerate(class_ignoreList):
+                if className in self.methodDict[moduleName].keys():
+                    del self.methodDict[moduleName][className]
+        except AttributeError:
+            pass      
+        return self.methodDict
+
+    def method_ignoreList(self,module,className):
+        '''
+        It removes the ignored methods of each module or class mentioned in ofadriver.cfg.
+        '''
+        method_ignoreList = []
+
+        try :
+            if className == None :
+                try :
+                    method_ignoreList = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['methods']['ignore-list']).split(",")
+                except TypeError :
+                    pass
+            else :
+                try :
+                    method_ignoreList = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['classes'][className]['methods']['ignore-list']).split(",")
+                except TypeError :
+                    pass 
+        except KeyError :
+            print "Message : No Ignore-List Exists , proceeding for looking add method"
+            self.add_method(module,className)
+            return True
+
+        moduleName = self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['name']
+        #import pprint
+        #pprint.pprint(self.methodDict[moduleName])
+        for index, method in enumerate(method_ignoreList) :
+            if className == None :
+                try :
+                    self.methodDict[moduleName].remove(method)
+                    #pprint.pprint(self.methodDict)
+                except ValueError:
+                    print "Message : Method " + method + "Does not exist in module " + moduleName + ", Continue to rest execution"
+                    pass
+
+            else :    
+                if method in self.methodDict[moduleName][className] :
+                    self.methodDict[moduleName][className].remove(method)
+        self.add_method(module,className)
+        return self.methodDict
+
+    def add_method(self,module,className) :
+        '''
+         This  will add the methods(mentioned in ofadriver.cfg file) into method list if it doesnot exists in list. 
+        '''
+        method_List = []
+        try :
+            if className == None :
+                try :
+                    method_List = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['methods']['add-list']).split(",")
+                except TypeError :
+                    pass
+            else :
+                try :
+                    method_List = str(self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['classes'][className]['methods']['add-list']).split(",")
+                except TypeError :
+                    pass
+                
+        except KeyError :
+            print "Message : No Add-List Exists , Proceeding with all available methods"
+            return True
+        moduleName = self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['name']
+        for index, method in enumerate(method_List) :
+            if className == None :    
+                self.methodDict[moduleName] = []
+                self.methodDict[moduleName].append(method)
+            else :
+                self.methodDict[moduleName][className] = []
+                self.methodDict[moduleName][className].append(method)
+
+    def getMethodArgsHash(self,moduleName,module,className):
+        '''
+         This will maintain a Hash of class->method->argumentsList
+        '''
+        modulePath = self.configDict['config-driver']['importTypes'][self.driver]['modules'][module]['path']
+        moduleList = modulePath.split("/")
+        newModule = ".".join([moduleList[len(moduleList) - 2],moduleList[len(moduleList) - 1]])
+        if className == None :
+            methodArgs = self.getargs(newModule,None,self.methodDict[moduleName])  
+            self.fileDict[moduleName] = methodArgs 
+        else :
+            methodArgs = self.getargs(newModule,className,self.methodDict[moduleName][className])
+            self.fileDict[className] = methodArgs
+        return self.fileDict
+             
+    def appendDriver(self,fileName):
+        '''
+         This will append the given driver file with methods along with arguments.
+        '''
+        matchFileName = re.match(r'(.*)\.py', fileName, re.M | re.I)
+        
+        if matchFileName:
+            fileHandle = None
+            try :
+                print "Message : Writing Driver file at " + fileName
+                fileHandle = open(fileName,"a")
+                content = ''
+
+                for index, key in enumerate(self.fileDict.keys()):
+                    try :
+                        for ind, method in enumerate(self.fileDict[key].keys()):
+                            if not method == "__init__" :
+                                args = ''
+                                args = ",".join(self.fileDict[key][method])
+                                content = content + "\n" + " " * 4 + "def " + method + "(self," + args + ") :"
+                                content = content + "\n" + " " * 8 + "return " + key + "." + method + "(" + args + ")\n"
+                    except AttributeError :
+                        pass
+                fileHandle.write(content)
+                fileHandle.close()
+                return content
+
+            except :
+                print "Error : Driver file " + fileName + "does not exists"
+        else :
+             print "Error : File name " + fileName + "is not python module"
+             return False  
+
+
+    def writeDriver(self, driver) :
+        '''
+         This will accept the List of driver name and write those drivers if no driver name is specified
+         then it will write all of the driver specified in the ofadriver.cfg.
+        '''
+        self.printHeader(driver)
+        drivers = []
+        commaMatch  = re.search(",", driver, flags=0)
+        if commaMatch:
+            drivers = driver.split(",")
+        else :
+            drivers.append(driver)
+        self.driverList = []
+        if len(drivers) == 0:
+            for index, driverName in enumerate(self.configDict['config-driver']['importTypes'].keys()):
+                self.driver = driverName
+                result = self.getList()
+                if result : 
+                    self.getDriverPath()
+                    self.appendDriver(self.driverPath + self.driver + ".py")
+                    self.driverList.append(self.driverPath + self.driver + ".py")
+                else :
+                    return False 
+        else :
+            for index, driverName in enumerate(drivers) :
+                
+                self.driver = driverName
+                result = self.getList()
+                if result :
+                    self.getDriverPath()
+                    self.appendDriver(self.driverPath + self.driver + ".py")
+                    self.driverList.append(self.driverPath + self.driver + ".py")
+                else :
+                    return False 
+         
+        print "=" * 90
+        print " " * 30  + "Output Driver File :"
+        print ",\n".join(self.driverList)         
+        print "=" * 90
+        return True   
+       
+
+ 
+    def getDriverPath(self):
+        '''
+         It will set the driver path and returns it.If driver path is not specified then it will take 
+         default path (/lib/updatedriver/).
+        ''' 
+        self.driverPath = ''
+        try : 
+            self.driverPath = self.configDict['config-driver']['importTypes'][self.driver]['driver-path']
+              
+        except KeyError :
+            path = re.sub("(bin)$", "", os.getcwd()) 
+            self.driverPath = path + "/lib/updatedriver/"
+        return self.driverPath
+
+
+    def printHeader(self,driver):
+        content = ''
+        
+        print " " * 10 +"=" * 90 + "\n"
+        content = content + " " * 30 + "*-- Welcome to Updated Driver --*\n"       
+        content = content + "\n" + " " * 10 + " " * 10 + "Config File : " + "/home/openflow/TestON/config/ofadriver.py"
+        content = content + "\n" + " " * 10 + " " * 10 + "Drivers Name : " + driver      
+        print content 
+        print " " * 10 + "=" * 90 
+
+
+