diff options
Diffstat (limited to 'SharedModules/Parser')
-rw-r--r-- | SharedModules/Parser/parser.py | 315 |
1 files changed, 0 insertions, 315 deletions
diff --git a/SharedModules/Parser/parser.py b/SharedModules/Parser/parser.py deleted file mode 100644 index ee3a2d1..0000000 --- a/SharedModules/Parser/parser.py +++ /dev/null @@ -1,315 +0,0 @@ -""" Parser module contains parsers for parsing: -*) TestrunInfo file -*) TestEnvironment file -*) Testcaselist file. -""" - -import ConfigParser -import re -from collections import OrderedDict -import os -from atfglobals import GlobalObj - - -def verify_necessary_options(cp, section, necessary_options): - """Helper function for all parsers to verify necessary options - in a section of the config file. - - Parameters: - cp : Config Parser Object - section: name of the section in ConfigFile - necessary_options: Options necessary under Section 'section' - - Returns: - Success: True (if all necessary_options are found in 'section') - Failure: False ( if any of the necessaty_options not found in 'section') - """ - all_options_found = True - items = dict(cp.items(section)) - for option in necessary_options: - if not (items.has_key(option) and items[option]): - print "' %s ' Should be defined in Section: %s" % (option, section) - all_options_found = False - return all_options_found - - -def parse_testrun_info_file(filename): - """ - Parse TestrunInfo File - """ - GlobalObj.initTestrunInfoObj() - testruninfo_obj = GlobalObj.getTestrunInfoObj() - cp = ConfigParser.SafeConfigParser() - necessary_sections = ["keywords", "testunits", "atfdir", - "summarylog","detaillog", "stdoutlog", - "glusterversion"] - matched_sections = [] - unmatched_sections = [] - - if not cp.read(filename): - print "Error reading file ' %s '.File Not found " % filename - return 1 - else: - available_sections = cp.sections() - found_all_sections = True - for section in necessary_sections: - matched_obj = re.search(section, str(available_sections), - re.IGNORECASE) - if not matched_obj: - found_all_sections = False - unmatched_sections.append(section) - else: - matched_sections.append(matched_obj.group(0)) - - if not found_all_sections: - for section in unmatched_sections: - print "Section %s Not Found" % section - print "Please define the above sections in TestRunInfo File" - return 1 - - else: - for section in matched_sections: - Map = {} - if re.match("keywords", section, re.IGNORECASE): - Map = dict(cp.items(section)) - testruninfo_obj.addKeywords(Map['keywords']) - - elif re.match("testunits", section, re.IGNORECASE): - Map = dict(cp.items(section)) - testunits = Map.values() - for testunit in testunits: - if testunit: - testruninfo_obj.addTestUnits(testunit) - - elif re.match("atfdir", section, re.IGNORECASE): - Map = dict(cp.items(section)) - atfdir = Map['dir'] - if not atfdir: - print "dir option not defined in ATFDir. " + \ - "The 'dir'option should be defined" - return 1 - else: - testruninfo_obj.addAtfDir(atfdir) - - elif re.match("summarylog", section, re.IGNORECASE): - Map = dict(cp.items(section)) - testruninfo_obj.addSummaryLogInfo(Map['filename'], - Map['loglevel']) - - elif re.match("detaillog", section, re.IGNORECASE): - Map = dict(cp.items(section)) - testruninfo_obj.addDetailLogInfo(Map['filename'], - Map['loglevel']) - - elif re.match("stdoutlog", section, re.IGNORECASE): - Map = dict(cp.items(section)) - testruninfo_obj.addStdoutLogInfo(Map['do_log'], - Map['loglevel']) - - elif re.match("glusterversion", section, re.IGNORECASE): - Map = dict(cp.items(section)) - glusterversion = Map['version'] - if not glusterversion: - print "version option not defined in GlusterVersion. " + \ - "The 'version' option should be defined" - return 1 - else: - testruninfo_obj.addGlusterVersion(glusterversion) - - return 0 - -def parse_testcaseslist_file(filename): - """ - Parse TestCasesList file - """ - return_status = 1 - testcaseslist = [] - if not os.path.exists(filename): - print "%s file not found." % filename - return return_status - - testruninfo_obj = GlobalObj.getTestrunInfoObj() - glusterversion = testruninfo_obj.getGlusterVersion() - - testcaseslistfile = open(filename, "r") - filedata = testcaseslistfile.readlines() - - testcaseslist = [] - for data in filedata: - if (not data.strip() or re.match("^#", data)): - continue - - else: - testcaseid, version, keyword = (value.strip() for value in - data.split(':')) - testcaseslist.append({'testcaseid':testcaseid, 'version':version, - 'keyword':keyword}) - - selected_testcases = [] - if glusterversion == "master": - for testcase in testcaseslist: - selected_testcases.append(testcase['testcaseid']) - return selected_testcases - else: - for testcase in testcaseslist: - if re.match("^(<|>|=|<=|>=)", testcase['version']): - condition, version = (x.strip() for x in - testcase['version'].split()) - - if ((condition == "<=" and glusterversion <= version) or - (condition == ">=" and glusterversion >= version) or - (condition == "<" and glusterversion < version) or - (condition == ">" and glusterversion > version) or - (condition == "=" and glusterversion == version)): - selected_testcases.append(testcase['testcaseid']) - - elif re.search("-", testcaseid['version']): - fromversion, toversion = (x.strip() for x in - testcaseid['version'].split("-")) - if (glusterversion >= fromversion and - glusterversion <= toversion): - selected_testcases.append(testcase['testcaseid']) - - return selected_testcases - - -def parse_testenv_configfile(filename): - """ - parse testenv.cfg file - """ - GlobalObj.initTestenvObj() - env = GlobalObj.getTestenvObj() - cp = ConfigParser.SafeConfigParser(dict_type=OrderedDict) - sections_to_functions_mapping = { - "export" : "addExportdir", - "server" : "addServer", - "brick" : "addBrick", - "volume" : "addVolume", - "client" : "addClient", - "mountdevice" : "addMountDevice", - "mount" : "addMount", - "defaults" : "addDefaults"} - section_pattern = re.compile('(export|server|brick|volume|client|mountdevice|mount)*') - if not cp.read(filename): - print "Error reading file ' %s '.File Not found " % filename - return 1 - else: - defaults = dict(cp.defaults()) - function = getattr(env, "addDefaults") - function(**defaults) - sections = cp.sections() - for section in sections: - items = dict(cp.items(section)) - matched_obj = section_pattern.match((section.lower())) - result = matched_obj.group(0) - if result is '': - continue - else: - funcname = sections_to_functions_mapping[result] - function = getattr(env, funcname) - necessary_options = [] - - if re.match('export', result): - necessary_options = ["dir"] - if verify_necessary_options(cp, section, necessary_options): - dir_ = items.pop('dir') - function(section, dir_, **items) - else: - return 1 - - elif re.match('server', result): - necessary_options = ["hostname", "user", "password", - "glusterversion"] - if verify_necessary_options(cp, section, necessary_options): - hostname = items.pop('hostname') - user = items.pop('user') - password = items.pop('password') - glusterversion = items.pop('glusterversion') - function(section, hostname, user, password, - glusterversion, **items) - else: - return 1 - - elif re.match('client', result): - necessary_options = ["hostname", "user", "password", - "glusterversion"] - if verify_necessary_options(cp, section, necessary_options): - hostname = items.pop('hostname') - user = items.pop('user') - password = items.pop('password') - glusterversion = items.pop('glusterversion') - function(section, hostname, user, password, - glusterversion, **items) - else: - return 1 - - elif re.match('brick', result): - necessary_options = ["hostname", "path"] - if verify_necessary_options(cp, section, necessary_options): - hostname = items.pop('hostname') - path = items.pop('path') - function(section, hostname, path, **items) - else: - return 1 - - elif re.match('volume', result): - necessary_options = ["volumename", "volumetype", - "count", "transporttype", - "bricks"] - if verify_necessary_options(cp, section, necessary_options): - volumename = items.pop('volumename') - volumetype = items.pop('volumetype') - count = items.pop('count') - transporttype = items.pop('transporttype') - bricks = items.pop('bricks') - function(section, volumename, volumetype, - count, transporttype, bricks) - else: - return 1 - - elif re.match('mountdevice', result): - necessary_options = ["hostname", "volumename"] - if verify_necessary_options(cp, section, necessary_options): - hostname = items.pop('hostname') - volumename = items.pop('volumename') - function(section, hostname, volumename) - - elif re.match('mount', result): - necessary_options = ["client", "dir", "device"] - if verify_necessary_options(cp, section, necessary_options): - client = items.pop('client') - dir_ = items.pop('dir') - device = items.pop('device') - function(section, client, dir_, device, **items) - - else: - return 1 - return 0 - - -__all__ = ['parse_testrun_info_file', - 'parse_testcaseslist_file', - 'parse_testenv_configfile'] - - - - - - - - - - - - - - - - - - - - - - - |