From 129e39fe6878f28ca203c690fab382b7289b334c Mon Sep 17 00:00:00 2001 From: Shwetha-H-Panduranga Date: Tue, 6 Dec 2011 14:25:20 +0530 Subject: Removing all automation files from the repo --- ATFCleanup.py | 25 - ATFExecute.py | 68 --- ATFInit.py | 233 ---------- ATFSetup.py | 52 --- Glusterfs/TestUnits/Replication/Main.py | 93 ---- Libraries/ClientUtils/ATFClientUtils.py | 213 --------- Libraries/GlusterCommands/ATFGlusterPeer.py | 38 -- Libraries/GlusterCommands/ATFGlusterVolume.py | 230 --------- Libraries/GlusterCommands/ATFGlusterd.py | 103 ---- Libraries/Log/ATFLog.py | 221 --------- Libraries/Ssh/ATFSsh.py | 177 ------- Libraries/TestEnv/ATFTestEnv.py | 460 ------------------ Libraries/Tests/ATFTests.py | 105 ----- Libraries/Utils/ATFUtils.py | 402 ---------------- Libraries/Validate/ATFValidate.py | 79 ---- README | 1 - SharedModules/Connect/ssh.py | 114 ----- SharedModules/Globals/atfglobals.py | 85 ---- SharedModules/Globals/logger.py | 211 --------- SharedModules/Globals/manager.py | 64 --- SharedModules/Globals/testenv.py | 462 ------------------ SharedModules/Globals/testruninfo.py | 144 ------ SharedModules/Parser/parser.py | 315 ------------- SharedModules/Utils/atfutils.py | 58 --- SharedModules/Utils/clientutils.py | 282 ----------- SharedModules/Utils/glusterutils.py | 644 -------------------------- SharedModules/Utils/hostutils.py | 193 -------- SharedModules/Utils/managerutils.py | 55 --- SharedModules/Utils/serverutils.py | 33 -- Templates/GlobalParam.cfg | 95 ---- Templates/config.cfg | 99 ---- TestUnits/replicate/self_heal/Main.py | 69 --- TestUnits/replicate/self_heal/testcases.py | 96 ---- TestUnits/replicate/self_heal/testcaseslist | 9 - TestUnits/replicate/self_heal/testenv.cfg | 98 ---- atf.py | 51 -- atfexecute.py | 63 --- atfinit.py | 27 -- atfsetup.py | 37 -- export.py | 13 - testruninfo.cfg | 99 ---- 41 files changed, 5916 deletions(-) delete mode 100755 ATFCleanup.py delete mode 100755 ATFExecute.py delete mode 100755 ATFInit.py delete mode 100755 ATFSetup.py delete mode 100755 Glusterfs/TestUnits/Replication/Main.py delete mode 100755 Libraries/ClientUtils/ATFClientUtils.py delete mode 100755 Libraries/GlusterCommands/ATFGlusterPeer.py delete mode 100755 Libraries/GlusterCommands/ATFGlusterVolume.py delete mode 100755 Libraries/GlusterCommands/ATFGlusterd.py delete mode 100755 Libraries/Log/ATFLog.py delete mode 100755 Libraries/Ssh/ATFSsh.py delete mode 100755 Libraries/TestEnv/ATFTestEnv.py delete mode 100755 Libraries/Tests/ATFTests.py delete mode 100755 Libraries/Utils/ATFUtils.py delete mode 100644 Libraries/Validate/ATFValidate.py delete mode 100644 README delete mode 100755 SharedModules/Connect/ssh.py delete mode 100644 SharedModules/Globals/atfglobals.py delete mode 100644 SharedModules/Globals/logger.py delete mode 100755 SharedModules/Globals/manager.py delete mode 100755 SharedModules/Globals/testenv.py delete mode 100644 SharedModules/Globals/testruninfo.py delete mode 100644 SharedModules/Parser/parser.py delete mode 100644 SharedModules/Utils/atfutils.py delete mode 100644 SharedModules/Utils/clientutils.py delete mode 100644 SharedModules/Utils/glusterutils.py delete mode 100644 SharedModules/Utils/hostutils.py delete mode 100644 SharedModules/Utils/managerutils.py delete mode 100644 SharedModules/Utils/serverutils.py delete mode 100755 Templates/GlobalParam.cfg delete mode 100755 Templates/config.cfg delete mode 100644 TestUnits/replicate/self_heal/Main.py delete mode 100644 TestUnits/replicate/self_heal/testcases.py delete mode 100644 TestUnits/replicate/self_heal/testcaseslist delete mode 100644 TestUnits/replicate/self_heal/testenv.cfg delete mode 100755 atf.py delete mode 100644 atfexecute.py delete mode 100644 atfinit.py delete mode 100644 atfsetup.py delete mode 100755 export.py delete mode 100755 testruninfo.cfg diff --git a/ATFCleanup.py b/ATFCleanup.py deleted file mode 100755 index c15f970..0000000 --- a/ATFCleanup.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python - -import ATFUtils - -def cleanup(): - """ - Description: - * Stop Glusterd on all Servers - * Stop Glusterd on all Clients - * Disconnect all SSH Connections - * Remove all Logger File Handlers - - Parameters: - None - - Returns: 0 - """ - - ATFUtils.stopserversglusterd() - ATFUtils.stopclientsglusterd() - ATFUtils.SshObj.closeall() - ATFUtils.LogObj.remove_detaillog_handler('ATF_LOG') - - return 0 - diff --git a/ATFExecute.py b/ATFExecute.py deleted file mode 100755 index 0f3a913..0000000 --- a/ATFExecute.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -import ATFUtils - -def execute(): - """ - Description: - Execute the TestsCases for Specified TestUnits. - Keyword is used to select the testscases under each TestUnit - - Parameters: - None - - Returns: - Success: 0 ( Successful Execution of all TestUnits ) - Failure: 1 ( Unsuccessful Test Runs ) - """ - - testunits = ATFUtils.TestsObj.get_testunits() - atfroot = ATFUtils.get_environ('ATF_ROOT') - - for unit in testunits: - testdir = atfroot + "/Glusterfs/TestUnits/" + unit - cwd = os.getcwd() - try: - os.chdir(testdir) - - except OSError as (errno, errstr): - ATFUtils.Logger.warning("OSError: [Error %d] %s: %s" % (errno, - errstr, testdir)) - ATFUtils.Logger.warning("Ignoring TestUnit:" + testdir) - continue - - else: - ATFUtils.set_environ(ATF_WORKUNIT=testdir) - try: - os.mkdir('Log') - - except OSError as (errno, errstr): - ATFUtils.Logger.debug("Log Directory already exist") - - ATFUtils.LogObj.add_detaillog_handler('ATF_LOG') - - ATFUtils.Logger.info("Starting Tests in TestUnit: " + testdir) - - sys.path.append(testdir) - import Main - - returncode = Main.main() - - if returncode: - ATFUtils.Logger.error("Test Runs Unsuccessful in TestUnit: " + - testdir) - ATFUtils.Logger.info("Ending Tests in TestUnit: " + testdir) - ATFUtils.LogObj.remove_detaillog_handler('ATF_LOG') - continue - - else: - ATFUtils.Logger.info("Test Runs Successful in TestUnit: " + - testdir) - ATFUtils.Logger.info("Ending Tests in TestUnit: " + testdir) - ATFUtils.LogObj.remove_detaillog_handler('ATF_LOG') - continue - - return 0 - diff --git a/ATFInit.py b/ATFInit.py deleted file mode 100755 index 7f28aca..0000000 --- a/ATFInit.py +++ /dev/null @@ -1,233 +0,0 @@ -#!/usr/bin/env python - -import re -import ConfigParser -import ATFUtils - -######################################################################## -## GlobalParameter file ConfigParser Object -######################################################################## -Config = ConfigParser.ConfigParser() - -def initialize(): - """ - Description: - Initialize ATFUtils.Logger, TestEnvironments - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - if ATFUtils.LogObj.create('ATF_LOG'): - return 1 - - if parseGPFile(): - return 1 - - ATFUtils.TestEnvObj.create_servershostlist() - ATFUtils.TestEnvObj.create_clientshostlist() - return 0 - -def ConfigSectionMap(section): - """ - Description: - Get the key=value pair for the Section 'section' - in the GlobalParam File - - Parameters: - section: Section Name in the GlobalParam File - - Returns: - Success: Dictionary: List of key=value pairs from section 'section' - Failure: 1 - """ - - dict1 = {} - - try: - options = Config.options(section) - - except ConfigParser.NoSectionError: - return 1 - - else: - for option in options: - dict1[option] = Config.get(section, option, raw=True) - - return dict1 - -def parseGPFile(): - """ - Description: - Parse Global Parameter file - - Parameters: - filename: Name of GlobalParam File - - Returns: - Success: 0 - Failure: 1 - """ - - filename = ATFUtils.TestEnvObj.get_globalparamfile() - status = Config.read(filename) - - if len(status) == 0: - ATFUtils.Logger.error("GlobalParam File: " + filename + "Not Found") - return 1 - else: - ### Parse Section: [Hosts] ### - Map = ConfigSectionMap('Hosts') - - if Map == 1: - ATFUtils.Logger.error( - "Section [Hosts] Not Found In GlobalParam File: " + - filename) - return 1 - else: - for key in Map.keys(): - name = key - host = Map[key] - name = name.lower() - ATFUtils.TestEnvObj.add_host(name, host) - - ### Parse Section: [Users] ### - Map = ConfigSectionMap("Users") - - if Map == 1: - ATFUtils.Logger.error( - "Section [Users] Not Found In GlobalParam File") - return 1 - else: - for key in Map.keys(): - name = key - user = Map[key] - name = name.lower() - ATFUtils.TestEnvObj.add_user(name, user) - - ### Parse Section: [Servers] ### - - Map = ConfigSectionMap('Servers') - - if Map == 1: - ATFUtils.Logger.error( - "Section [Servers] Not Found In GlobalParam File") - return 1 - else: - for key in Map.keys(): - name = key - value = Map[key] - user, host = re.split('@', value) - name = name.lower() - if ATFUtils.TestEnvObj.add_server(name, host, user): - return 1 - else: - continue - - ### Parse Section: [Clients] ### - Map = ConfigSectionMap('Clients') - - if Map == 1: - ATFUtils.Logger.error( - "Section [Clients] Not Found in GlobalParam File") - return 1 - else: - for key in Map.keys(): - name = key - value = Map[key] - user, host = re.split('@', value) - name = name.lower() - - if ATFUtils.TestEnvObj.add_client(name, host, user): - return 1 - else: - continue - - ### Parse Section: [ExportDirs] ### - Map = ConfigSectionMap('ExportDirs') - - if Map == 1: - ATFUtils.Logger.error( - "Section [ExportDirs] Not Found in GlobalParam File") - return 1 - else: - for key in Map.keys(): - exportname = key - exportdir = Map[key] - exportname = exportname.lower() - ATFUtils.TestEnvObj.add_exportdir(exportname, exportdir) - - ### Parse Section: [MountPoints] ### - Map = ConfigSectionMap('MountPoints') - - if Map == 1: - ATFUtils.Logger.error( - "Section [MountPoints] Not Found in GlobalParam File") - return 1 - else: - for key in Map.keys(): - mountname = key - mountpoint = Map[key] - mountname = mountname.lower() - ATFUtils.TestEnvObj.add_mountpoint(mountname, mountpoint) - - ### Parse Section: [Volumes] ### - Map = ConfigSectionMap('Volumes') - - if Map == 1: - ATFUtils.Logger.error( - "Section [Volumes] Not Found in GlobalParam File") - return 1 - else: - for key in Map.keys(): - volumekey = key - volumename = Map[volumekey] - volumekey = volumekey.lower() - ATFUtils.TestEnvObj.add_volume(volumekey, volumename) - - ### Parse Section: [GlusterfsVersion] ### - Map = ConfigSectionMap('GlusterfsVersion') - - if Map == 1: - ATFUtils.Logger.warning("Section: [GlusterfsVersion] Not Found") - else: - GlusterfsVersion = Map['version'] - if GlusterfsVersion == None: - GlusterfsVersion = '' - - ATFUtils.TestsObj.set_version(GlusterfsVersion) - - try: - fhr = open(filename, "r") - - except IOError: - ATFUtils.Logger.error("IOError:Cannot Open GlobalParam File " + - filename + "For Logging to Summary Log") - - else: - summarylog = ATFUtils.get_environ('ATF_SUMMARYLOG') - try: - fhw = open(summarylog, "a") - - except: - print "IOError: Cannot Open Summary Log FIle " + summarylog - ATFUtils.Logger.warning ( - "Unable to write GlobalParam Contents to SummaryLog: " + - summarylog) - - fhr.close() - - else: - lines = fhr.readlines() - fhw.write(("-" * 50) + "\nExported GlobalParam File: \n" + - ("-" * 50) + "\n") - fhw.writelines(lines) - - fhw.close() - fhr.close() - - return 0 diff --git a/ATFSetup.py b/ATFSetup.py deleted file mode 100755 index 502154d..0000000 --- a/ATFSetup.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env python - -import ATFUtils - -def setup(): - """ - Description: - * Setup SSH Connections to all Servers - * Setup SSH Connection to all Clients - * Cleanup Glusterd on all Servers - * Cleanup Glusterd on all Clients - * Stop Glusterd on all Servers - * Stop Glusterd on all Clients - * Start Glusterd on all Servers - * Start Glusterd on all Clients - * Peer Probe from a Server to Other Servers - - Returns: - Success: 0 ( If all the Setup Phases are Successful) - Failure: 1 ( If any of the Setup Phase is unsuccessful) - """ - - if ATFUtils.sshservers(): - return 1 - - if ATFUtils.sshclients(): - return 1 - - if ATFUtils.cleanupserversglusterd(): - return 1 - - if ATFUtils.cleanupclientsglusterd(): - return 1 - - if ATFUtils.stopserversglusterd(): - return 1 - - if ATFUtils.stopclientsglusterd(): - return 1 - - if ATFUtils.startserversglusterd(): - return 1 - - if ATFUtils.startclientsglusterd(): - return 1 - - if ATFUtils.peerprobe(): - return 1 - - return 0 - - diff --git a/Glusterfs/TestUnits/Replication/Main.py b/Glusterfs/TestUnits/Replication/Main.py deleted file mode 100755 index fa1888c..0000000 --- a/Glusterfs/TestUnits/Replication/Main.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python - -import ATFGlusterVolume -import ATFClientUtils -import ATFValidate -import ATFUtils -import logging - -def test1(): - """ - Description: Simple Replication Test - Setup:: - * create export directories export1, export2 - * create replicate volume with replica = 2 and transport = tcp - * start replicate volume - * create mount point on the client machine - * mount the replicate volume - - Execution: - * create a file - - Validation: - * Check whether the file is created on export1 and export2 - - Expected: - * File exists on export1 and export2 - - """ - - ATFUtils.Logger.debug("Starting TestCase : [Test001]") - ATFUtils.Logger.debug("Comment: Basic Replication Test") - - if ATFGlusterVolume.create_exportdirs("export1", "export2", host="host1"): - return 1 - - if ATFUtils.set_environ(ATF_HOST = "host1"): - return 1 - - if ATFGlusterVolume.create_volume("volume1", "host1:export1", - "host1:export2", voltype = 'replica 2', - transport = 'transport tcp'): - return 1 - - if ATFGlusterVolume.start_volume("volume1"): - return 1 - - if ATFClientUtils.create_mountpoint("mount1"): - return 1 - - if ATFClientUtils.mount("mount1", "glusterfs", "host1:volume1"): - return 1 - - if ATFClientUtils.touch("file1.txt", user = "root"): - return 1 - - ### Validate ### - - if ATFValidate.validate_replication(f1 = 'host1:export1:file1.txt', f2 = 'host1:export2:file1.txt'): - return 1 - - return 0 - -def cleanup(): - """ Cleanup Phase: - - Description: - * Unmount the client mount point - * Stop the replicate volume - """ - - ATFClientUtils.umount("mount1") - if ATFGlusterVolume.stop_volume("volume1", host="host1"): - return 1 - return 0 - -if __name__ == "__main__": - main() - - -def main(): - - status = 0 - status = test1() - status = cleanup() - return status - - - - - - - - diff --git a/Libraries/ClientUtils/ATFClientUtils.py b/Libraries/ClientUtils/ATFClientUtils.py deleted file mode 100755 index e3a1bfe..0000000 --- a/Libraries/ClientUtils/ATFClientUtils.py +++ /dev/null @@ -1,213 +0,0 @@ -#!/usr/bin/env python - -import re -import ATFUtils - -def create_mountpoint(mountname, **arguments): - """ - Description: - Create a Mount Point On the Client - - Parameter: - mountname: Name of the MountPoint - **arguments: key=value pair for specifying server, host, user - - Example: - mountname=mount1 - server=server1 - host=host1 - user=user1 - - Returns: - Success: 0 - Failure: 1 - """ - - command = "mkdir -p" - mountpoint = ATFUtils.TestEnvObj.get_mountpoint(mountname) - - if mountpoint == '': - ATFUtils.Logger.error("MountPoint: %s Not defined in GlobalParam File" - % mountname) - return 1 - else: - command = command + " " + mountpoint - - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if status == 1: - return 1 - else: - output = ATFUtils.parse_output(stdout, stderr) - return ATFUtils.set_environ(ATF_MOUNTPOINT = mountname) - -def umount(mountname, **arguments): - """ - Description: - Unmount a mount point - - Parameters: - mountname: Name of the mountpoint to unmount - **arguments: key=value pair for specifying server, host, user - - Example: - mountname=mount1 - server=server1 - host=host1 - user=user1 - - Returns: - Success: 0 - Failure: 1 - """ - - command = "umount" - - mountpoint = ATFUtils.TestEnvObj.get_mountpoint(mountname) - - if mountpoint == '': - ATFUtils.Logger.error("MountPoint: %s Not defined in GlobalParam File" - % mountname) - return 1 - else: - command = command + " " + mountpoint - - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if status == 1: - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - - -def mount(mountname, fstype, hostvolume, **arguments): - """ - Description: - Mount a filesystem - - Parameter: - mountname: Absolute Path of the mount point - fstype: FileSystem type - hostvolume: HostVolumeName to mount on mountpoint - **arguments: key=value pair for specifying host, user - - Returns: - Success: 0 - Failure: 1 - """ - - command = "mount" - mounttype = " -t " + fstype - command = command + mounttype - hostkey, volumekey = re.split(":", hostvolume) - - host = ATFUtils.TestEnvObj.get_host(hostkey) - if host == '': - ATFUtils.Logger.error("Host %s Not defined in GlobalParam File" % - hostkey) - return 1 - - volumename = ATFUtils.TestEnvObj.get_volume(volumekey) - if volumename == '': - ATFUtils.Logger.error("Volume %s Not defined in GlobalParam File" % - volumekey) - return 1 - - mountpoint = ATFUtils.TestEnvObj.get_mountpoint(mountname) - if mountpoint == '': - ATFUtils.Logger.error("MountPoint: %s Not defined in GlobalParam File" - % mountname) - return 1 - - hostvolume = host + ":" + volumename - command = command + " " + hostvolume + " " + mountpoint - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if status == 1: - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - - -def touch(filename, mountname='', **arguments): - """ - Description: - Creates a File. - - Parameters: - filename: Name of a file - mountname : Name of the MountPoint - **arguments: key=value pair for specifying host, user - - Returns: - Success: 0 - Failure: 1 - """ - - command = "touch" - - if mountname == '': - mountname = ATFUtils.get_environ('ATF_MOUNTPOINT') - if mountname == 1: - return 1 - - mountpoint = ATFUtils.TestEnvObj.get_mountpoint(mountname) - if mountpoint == '': - ATFUtils.Logger.error("MountPoint: %s Not defined in GlobalParam File" - % mountname) - return 1 - - abspath = mountpoint + "/" + filename - command = command + " " + abspath - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if status == 1: - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - -def mkdir(dirname, mountname='', **arguments): - """ - Description: - Create a Directory under the mountpoint - - Parameters: - dirname: directory path (Relative path from the mount point) - mountname: Name of the Mount Point - **arguments: key=value pair for specifying host, user - - Returns: - Success: 0 - Failure: 1 - """ - - command = "mkdir" - - if mountname == '': - mountname = ATFUtils.get_environ('ATF_MOUNTPOINT') - if mountname == 1: - return 1 - - mountpoint = ATFUtils.TestEnvObj.get_mountpoint(mountname) - if mountpoint == '': - ATFUtils.Logger.error("MountPoint: %s Not defined in GlobalParam File" - % mountname) - return 1 - - abspath = mountpoint + "/" + dirname - command = command + " " + abspath - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if status == 1: - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - diff --git a/Libraries/GlusterCommands/ATFGlusterPeer.py b/Libraries/GlusterCommands/ATFGlusterPeer.py deleted file mode 100755 index 9e40f50..0000000 --- a/Libraries/GlusterCommands/ATFGlusterPeer.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python -import ATFUtils -import ATFTestEnv - -def probe(): - """ - Description: - probe peer specified by - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - command = "gluster peer probe " - servers = ATFUtils.TestEnvObj.get_servershostlist() - - length = len(servers) - if (length == 1): - ATFUtils.Logger.warning("Self Probing of Server Not Required") - return 0 - else: - fromhost = servers.pop(0) - for host in servers: - command = command + host + " " - - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - host=fromhost, - user='root') - - if (status == 1): - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - diff --git a/Libraries/GlusterCommands/ATFGlusterVolume.py b/Libraries/GlusterCommands/ATFGlusterVolume.py deleted file mode 100755 index 20bfd4f..0000000 --- a/Libraries/GlusterCommands/ATFGlusterVolume.py +++ /dev/null @@ -1,230 +0,0 @@ -#!/usr/bin/env python -import ATFUtils -import ATFTestEnv -import re - -def create_volume(volumekey, *exportdirs, **arguments): - """ - Description: - Create a new Volume of specified type with mentioned bricks - - Parameters: - volumekey: Name of the Volume - - exportdirs: List of exportdirs to be used to create Volume - - arguments: Key=Value pair for "Volume Type" and "Transport Type". - 'voltype' = stripe|replica|distribute - 'transport' = tcp|rdma|tcp,rdma - 'host' = Server_IP - 'user' = User - - Return: - Success: 0 - Failure: 1 - - Example: - create('Replicate', - 'host1:export1', - 'host2:export1, - voltype='replica 2', - transport='transport tcp' - host = 'host(1..n)' - server = 'server(1..n)' - ) - """ - - command = "gluster volume create" - - volumename = ATFUtils.TestEnvObj.get_volume(volumekey) - if ( volumename == ''): - ATFUtils.Logger.error("Volume %s Not defined in GlobalParam File" % - volumekey) - return 1 - else: - command = command + " " + volumename - - if (arguments.has_key('voltype')): - command = command + " " + arguments.pop('voltype') - - if (arguments.has_key('transport')): - command = command + " " + arguments.pop('transport') - - exportdirlist = [] - for exportdir in exportdirs: - hostkey, exportkey = re.split(':', exportdir) - - host = ATFUtils.TestEnvObj.get_host(hostkey) - if ( host == '' ): - ATFUtils.Logger.error("Host %s Not defined in GlobalParam File" % - hostkey) - return 1 - - export = ATFUtils.TestEnvObj.get_exportdir(exportkey) - if (export == '' ): - ATFUtils.Logger.error( - "ExportDir %s Not defined in GlobalParam File" % exportkey) - return 1 - - exportdirlist.append(host + ":" +export) - - for exportdir in exportdirlist: - command = command + " " + exportdir - - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if (status == 1): - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - -def start_volume(volumekey, force='', **arguments): - """ - Description: - Start volume specified by volumename - - Parameters: - volumekey: Name of the Volume - - Returns: - Success: 0 - Failure: 1 - """ - - command = "gluster volume start" - - volumename = ATFUtils.TestEnvObj.get_volume(volumekey) - if ( volumename == ''): - ATFUtils.Logger.error("Volume %s Not defined in GlobalParam File" % - volumekey) - return 1 - else: - command = command + " " + volumename + " " + force - - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if (status == 1): - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - -def stop_volume(volumekey, force='', **arguments): - """ - Description: - Stop volume specified by volumename - - Parameters: - volumekey: Name of the Volume - force: force stop Gluster Volume - - Returns: - Success: 0 - Failure: 1 - """ - - command = "gluster volume stop" - - volumename = ATFUtils.TestEnvObj.get_volume(volumekey) - if ( volumename == ''): - ATFUtils.Logger.error("Volume %s Not defined in GlobalParam File" % - volumekey) - return 1 - else: - command = command + " " + volumename + " " + force - - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if (status == 1): - return 1 - else: - stdin.write("y\n") - return ATFUtils.parse_output(stdout, stderr) - - -def delete_volume(volumekey, **arguments): - """ - Description: - Delete volume specified by volumename - - Parameters: - volumekey: Name of the Volume - - Returns: - Success: 0 - Failure: 1 - """ - - command = "gluster volume delete" - - volumename = ATFUtils.TestEnvObj.get_volume(volumekey) - if ( volumename == ''): - ATFUtils.Logger.error("Volume %s Not defined in GlobalParam File" % - volumekey) - return 1 - else: - command = command + " " + volumename - - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if (status == 1): - return 1 - else: - stdin.write("y\n") - return ATFUtils.parse_output(stdout, stderr) - -def create_exportdirs(*exportdirs, **arguments): - """ - Description: - Create Bricks on the Server 'server' - - Parameters: - server: IP Address of Server where bricks has to be created - username: User on Server 'server' - bricks: List of Bricks to be created - - Return: - Success: 0 - Failure: 1 - """ - - command = "mkdir -p" - cleanup_command = "rm -rf" - exportdirlist = [] - - for exportkey in exportdirs: - exportdir = ATFUtils.TestEnvObj.get_exportdir(exportkey) - if (exportdir == '' ): - ATFUtils.Logger.error( - "ExportDir %s Not defined in GlobalParam File" % exportkey) - return 1 - else: - exportdirlist.append(exportdir) - - for exportdir in exportdirlist: - command = command + " " + exportdir - cleanup_command = cleanup_command + " " + exportdir - - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(cleanup_command, - **arguments) - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if (status == 1): - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - - - - - - diff --git a/Libraries/GlusterCommands/ATFGlusterd.py b/Libraries/GlusterCommands/ATFGlusterd.py deleted file mode 100755 index fe2a838..0000000 --- a/Libraries/GlusterCommands/ATFGlusterd.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python -import ATFUtils - -def start_glusterd(**arguments): - """ - Objective : - Start Glusterd process on the server - - Parameter : - arguments: key = value pair. - server = 'server(1..n)' - host = 'host(1..n)' - Return: - Success : 0 - Failure : 1 - """ - - command = "/etc/init.d/glusterd start" - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if (status == 1): - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - -def stop_glusterd(**arguments): - """ - Description: - Stop Glusterd process on the server - - Parameter: - arguments: key = value pair. - server = 'server(1..n)' - host = 'host(1..n)' - - Return: - Success : 0 - Failure : 1 - """ - - command = "/etc/init.d/glusterd stop" - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if (status == 1): - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - -def restart_glusterd(**arguments): - """ - Description: - Restart Glusterd process on the server - - Parameter: - arguments: key = value pair. - server = 'server(1..n)' - host = 'host(1..n)' - - Return: - Success : 0 - Failure : 1 - """ - - command = "/etc/init.d/glusterd restart" - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if (status == 1): - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - -def cleanup_glusterd(**arguments): - """ - Description: - Cleans up the glusterd directory on Servers - - Parameter: - arguments: key = value pair. - server = 'server(1..n)' - host = 'host(1..n)' - - Return: - Success : 0 - Failure : 1 - """ - - command = "rm -rf /etc/glusterd/*" - arguments['user'] = 'root' - status, stdin, stdout, stderr = ATFUtils.execute_command(command, - **arguments) - - if (status == 1): - return 1 - else: - return ATFUtils.parse_output(stdout, stderr) - - diff --git a/Libraries/Log/ATFLog.py b/Libraries/Log/ATFLog.py deleted file mode 100755 index 9165a7c..0000000 --- a/Libraries/Log/ATFLog.py +++ /dev/null @@ -1,221 +0,0 @@ -#!/usr/bin/env python - -import logging -import ATFUtils - -####################################################################### -## ATFLog class contains variables and methods for Logging -## the events during the test run. -## -## Variables: -## SummaryLog: [filename, loglevel, format] -## -## DetailLog: [filename, loglevel, format] -## -## StdoutLog: [loglevel, format] -## -###################################################################### -class Log(): - - - def __init__(self): - self.SummaryLog = {'format': - '%(asctime)s %(levelname)s : %(filename)s %(lineno)d - \ - \'%(message)s\''} - self.DetailLog = {'format': - '%(asctime)s %(levelname)s : %(pathname)s %(funcName)s \ - %(lineno)d - \'%(message)s\''} - self.StdoutLog = {'logstatus':'false', 'format':'%(asctime)s \ - %(levelname)s : %(filename)s %(lineno)d - \'%(message)s\''} - self.loggers = [] - - def get_loglevel(self, loglevel): - """ - Description: - Returns logging.(LogLevel) for loglevel - - Parameters: - loglevel: String specifying the loglevel - - Returns: - logging.(Loglevel) - """ - - LEVELS = {'DEBUG': logging.DEBUG, - 'INFO': logging.INFO, - 'WARNING': logging.WARNING, - 'ERROR': logging.ERROR, - 'CRITICAL': logging.CRITICAL, - 'debug': logging.DEBUG, - 'info': logging.INFO, - 'warning': logging.WARNING, - 'error': logging.ERROR, - 'critical': logging.CRITICAL} - return LEVELS.get(loglevel, logging.NOTSET) - - def set_summarylog(self, filename='SummaryLog.out', loglevel='INFO'): - """ - Description: - Set Summary Log Name and Log Level - - Parameters: - filename: SummaryLog File Name - loglevel : Log level to be set for summary log - """ - - self.SummaryLog['filename'] = filename - self.SummaryLog['loglevel'] = self.get_loglevel(loglevel) - - def set_detaillog(self, filename='DetailLog.out', loglevel = 'DEBUG'): - """ - Description: - Set Detail Log Name and Log Level - - Parameters: - filename: DetailLog FIle name - loglevel: Log level to be set for detail log - """ - - self.DetailLog['filename'] = filename - self.DetailLog['loglevel'] = self.get_loglevel(loglevel) - - def set_stdoutlog(self, loglevel='INFO'): - """ - Description: - Set Log Level for logging to STDOUT - - Parameters: - loglevel: Log level for logging to STDOUT - """ - - self.StdoutLog['loglevel'] = self.get_loglevel(loglevel) - self.StdoutLog['logstatus'] = 'true' - - def create(self, logname='ATF_LOG'): - """ - Description: - Create a Logger with LogName 'logname' - - Parameters: - logname: Name of the Logger - - Return: - Success: 0 (Successful creation of logger with name : 'logname') - Failure: 1 (Unable to create logger with name: logname) - """ - - # Create a Logger Object with name "logname". - # Set the log level to 'DEBUG' - logger = logging.getLogger(logname) - logger.setLevel(logging.DEBUG) - self.loggers.append({'logname': logname}) - - # Create Summary Log File Handler - # Set the Log Level - # Set the Log Record format for Summary Log - atfrootdir = ATFUtils.get_environ('ATF_ROOT') - abspath = atfrootdir + "/" + self.SummaryLog['filename'] - - try: - summary_handler = logging.FileHandler(abspath, mode='a') - - except IOError as (errno, errstr): - print "I/0 error({0}): {1}".format(errno, errstr) - return 1 - - else: - summary_handler.setLevel(self.SummaryLog['loglevel']) - summary_formatter = logging.Formatter(self.SummaryLog['format']) - summary_handler.setFormatter(summary_formatter) - logger.addHandler(summary_handler) - for log in self.loggers: - if log['logname'] == logname: - log['summary_handler'] = summary_handler - break - - # Create Stdout Log StreamHandler if log to stdout is defined - # Set the Log Level - # Set the Log Record format for STDOUT - if self.StdoutLog['logstatus'] == 'true': - stdout_handler = logging.StreamHandler() - stdout_handler.setLevel(self.StdoutLog['loglevel']) - stdout_formatter = logging.Formatter(self.StdoutLog['format']) - stdout_handler.setFormatter(stdout_formatter) - logger.addHandler(stdout_handler) - for log in self.loggers: - if log['logname'] == logname: - log['stdout_handler'] = stdout_handler - break - - ATFUtils.Logger = logger - return 0 - - def add_detaillog_handler(self, logname): - """ - Description: - Add a Detail Log FileHandler to Logger with logname 'logname' - - Parameters: - logname: Name of the Logger - - Returns: - Success: 0 - Failure: 1 - """ - - logger = logging.getLogger(logname) - - # Create Detail Log File Handler - # Set the Log Level - # Set the Log Record format for Detail Log - atfworkdir = ATFUtils.get_environ('ATF_WORKUNIT') - abspath = atfworkdir + "/Log/" + self.DetailLog['filename'] - - try: - detail_handler = logging.FileHandler(abspath, mode='w') - - except IOError as (errno, errstr): - logger.error("IOError ({0}): {1}".format(errno, errstr)) - return 1 - - else: - detail_handler.setLevel(self.DetailLog['loglevel']) - detail_formatter = logging.Formatter(self.DetailLog['format']) - detail_handler.setFormatter(detail_formatter) - logger.addHandler(detail_handler) - - for log in self.loggers: - if log['logname'] == logname: - log['detail_handler'] = detail_handler - break - - logger.debug("Detail Log File Handler Successfully Added") - - ATFUtils.Logger = logger - return 0 - - def remove_detaillog_handler(self, logname): - """ - Description: - Remove Detail Log File Handler from Logger with - logname 'logname' - - Parameters: - logname: Name of the Logger - """ - - logger = logging.getLogger(logname) - Map = {} - for log in self.loggers: - Map = log - - if Map.has_key('detail_handler'): - detail_handler = log.pop('detail_handler') - logger.removeHandler(detail_handler) - logger.info("DetailLog Handler Removed for the Logger: " + - logname) - else: - logger.warning("DetailLog Handler Not Found for the Logger: " + - logname) - return - diff --git a/Libraries/Ssh/ATFSsh.py b/Libraries/Ssh/ATFSsh.py deleted file mode 100755 index 63e690b..0000000 --- a/Libraries/Ssh/ATFSsh.py +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/env python -import paramiko -import logging - -################################################################### -## ATFSsh.Ssh Class contains variables and methods for -## Connecting to remote machine using SSH -## -## Variables: -## connections: List of Dictionaries. -## Each Dictionary contains {host, user, conn} information. -## host : Server IP address -## user : User on host -## conn : SSH Conn Object to user@host -################################################################### -class Ssh(): - - - def __init__(self): - self.connections = [] - - def connect(self, host, user): - """ - Objective: - SSH to Server "host" as User "user" - - Parameter: - host: Server IP Address - user: Login Username - - Return: - Success: 0 - Failure: 1 - """ - - logger = logging.getLogger('ATF_LOG') - connection = paramiko.SSHClient() - connection.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - - try: - connection.connect(host, username=user) - - except paramiko.BadHostKeyException as result: - logger.exception( - "BadHostKeyException: Unable to Connect to Server: '" + host + - "' as User: '" + user + "'") - return 1 - - except paramiko.AuthenticationException: - logger.exception("AuthenticationException: Unable to Authenticate " - + user + "@" + host) - return 1 - - except paramiko.SSHException: - logger.exception("SSHException: Unknown server " + host) - return 1 - - else: - self.connections.append({'host':host, 'user': user, 'conn': - connection}) - logger.info("Successfully Able to SSH to: " + user + "@" + host) - - return 0 - - def close(self, host, user): - """ - Objective: - Close SSH Connections for User "username" - on the Server "server" - - Parameters: - server: Server IP Address - username: User on the Server - - Return: - Success: 0 - Failure: 1 - """ - - logger = logging.getLogger('ATF_LOG') - index = 0 - - for conn in self.connections: - if conn['host'] == host and conn['user'] == user: - conn['conn'].close() - logger.info("Closing SSH Connection: " + conn['user'] + "@" + - conn['host']) - self.connection[index:(index + 1)] = [] - index = index - 1 - - index = index + 1 - - return 0 - - def closeall(self): - """ - Objective: - Close All Existing SSH Connections - - Parameters: - None. - - Return: - Success: 0 - Failure: 1 - """ - - logger = logging.getLogger('ATF_LOG') - - for conn in self.connections: - conn['conn'].close() - logger.info("Closing SSH Connection: " + conn['user'] + "@" + - conn['host']) - - self.connections[:] = [] - - return 0 - - def getconnection(self, host, user): - """ - Objective: - Return SSH connection object for username@server - - Parameters: - host: Server IP Address - user: User on the Server - - Return: - Success:SSH connection Object If SSH Connection Object exists - for username@server - Failure: 1 (If SSH Connection doesn't exist) - """ - - for conn in self.connections: - if conn['host'] == host and conn['user'] == user: - return conn['conn'] - - else: - return 1 - - def executecommand(self, command, host, user): - """ - Objective: - Execute Command "comamnd" on user@host - - Parameters: - host: IP address of Server/Client - user: username of user on Host 'host' - command: command to execute - - Return: - Success: 0 - Failure: 1 - """ - - logger = logging.getLogger('ATF_LOG') - output = [] - conn = self.getconnection(host, user) - - if conn == 1: - logger.error("SSH Connection Not Established to:" + user + "@" + - host) - output = [1, 0, 0, 0] - return output - - try: - stdin, stdout, stderr = conn.exec_command(command) - - except paramiko.SSHException: - logger.exception("Unable to Execute Command: " + command) - output = [1, 0, 0, 0] - return output - - else: - output = [0, stdin, stdout, stderr] - return output - diff --git a/Libraries/TestEnv/ATFTestEnv.py b/Libraries/TestEnv/ATFTestEnv.py deleted file mode 100755 index 09c5b79..0000000 --- a/Libraries/TestEnv/ATFTestEnv.py +++ /dev/null @@ -1,460 +0,0 @@ -#!/usr/bin/env python - -######################################################################## -## TestEnv Class contains variables and methods for storing and retrieving -## information about the Test Environment. -## -## Variables: -## Hosts: List of Dictionaries. -## Each Dictionary contains {'name':name, 'host':host} -## information -## -## Users: List of Dictionaries -## Each Dictionary contains {'name':name, 'user':user} -## information -## -## Servers: List of Dictionaries. -## Each Dictionary contains {'name': name, 'host': host, -## 'user': user} information -## -## Clients: List of Dictionaries. -## Each Dictionary contains {'name': name, 'host': host, -## 'user': user} information -## -## ExportDirs: List of Dictionaries. -## Each Dictionary contains {'exportname': exportname, -## 'exportdir': exportdir} information -## -## ServersHostList: Unique List of Hosts derieved from Servers List -## -## ClientsHostList: Unique List of Hosts derieved from Clients List -## -## -######################################################################## - -class TestEnv(): - - - def __init__(self): - self.Hosts = [] - self.Users = [] - self.Servers = [] - self.Clients = [] - self.ExportDirs = [] - self.ServersHostList = [] - self.ClientsHostList = [] - self.MountPoints = [] - self.Volumes = [] - self.GlobalParamFile = '' - - def set_globalparamfile(self, filename): - """ - Description: - Sets GlobalParameter file name - - Parameter: - filename: Name of the GlobalParam File - - Returns: - """ - - self.GlobalParamFile = filename - return - - def get_globalparamfile(self): - """ - Description: - Return GlobalParamFileName - - Parameter: - None - - Returns: - GlobalParamFIleName - """ - - return self.GlobalParamFile - - def add_host(self, name, host): - """ - Description: - Add a host to Hosts List - - Parameters: - name: Name of the host Ex: host1, host2 - host: Address of the host Ex: 192.168.1.5 - - Return: - """ - - self.Hosts.append({'name': name, 'host': host}) - return - - def get_host(self, name): - """ - Description: - Return host with name 'name' - - Parameters: - name: Name of the host to return - - Returns: - Success: host - Failure: '' - """ - - output = '' - - for host in self.Hosts: - if host['name'] == name: - output = host['host'] - break - - return output - - def get_hostslist(self): - """ - Description: - Returns self.Servers List - Returns: - self.Servers - """ - - return self.Hosts - - def add_user(self, name, user): - """ - Description: - Add a user to Users List - - Parameters: - name: key to recognize a user Ex: user1/user2 - user: Username - - Return: - """ - - self.Users.append({'name': name, 'user': user}) - return - - def get_user(self, name): - """ - Description: - Return user with key 'name' - - Parameters: - name: key used to recognize the user - - Returns: - Success: user - Failure: '' - """ - - output = '' - - for user in self.Users: - if user['name'] == name: - output = user['user'] - break - - return output - - def add_server(self, name, hostkey, userkey): - """ - Description: - Add a server to Servers List - - Parameters: - name: Name of the server (Example: Server1/Server2) - host: IP Address of the server - user: Username of User on 'host' - - Returns: - Success: 0 - Failure: 1 - """ - - host = self.get_host(hostkey) - user = self.get_user(userkey) - - if host == '' or user == '': - ATFUtils.Logger.error("%s or %s Not Defined " % (hostkey, userkey)) - return 1 - - self.Servers.append({'name': name, 'host': host, 'user': user}) - return 0 - - def get_server(self, name): - """ - Description: - Returns [host, user] tuple for Server Name 'name' - - Parameters: - name: Name of the Server - - Returns: - Success: Returns [host, user] tuple - Failure: ['', ''] tuple - """ - - output = ['', ''] - - for server in self.Servers: - if server['name'] == name: - output = [server['host'], server['user']] - break - - return output - - def get_serverslist(self): - """ - Description: - Returns self.Servers List - - Parameters: - None - - Returns: - self.Servers - """ - - return self.Servers - - def add_client(self, name, hostkey, userkey): - """ - Description: - Add a client to Clients List - - Parameters: - name: Name of the client (Example: Client1/Client2) - host: IP Address of the client - user: Username of User on 'host' - - Returns: - Success: 0 - Failure: 1 - """ - - host = self.get_host(hostkey) - user = self.get_user(userkey) - - if host == '' or user == '': - ATFUtils.Logger.error("%s or %s Not Defined " % (hostkey, userkey)) - return 1 - - self.Clients.append({'name': name, 'host': host, 'user': user}) - return 0 - - def get_client(self, name): - """ - Description: - Returns [host, user] tuple for Client Name 'name' - - Parameters: - name: Name of the Client - - Returns: - Success: Returns [host, user] tuple - Failure: ['', ''] tuple - """ - - output = ['', ''] - - for client in self.Clients: - if client['name'] == name: - output = [client['host'], client['user']] - break - - return output - - def get_clientslist(self): - """ - Description: - Returns self.Clients List - - Parameters: - None - - Returns: - self.Clients - """ - - return self.Clients - - def add_exportdir(self, exportname, dirname): - """ - Description: - Add a Export Directory to the Export Directory List - - Parameters: - exportname: Name of a Export Directory(Example: export1/export2) - dirname: Absolute Path of the Export DIrecotry - - Returns: - """ - - self.ExportDirs.append({'exportname': exportname, 'dirname': dirname}) - return - - def get_exportdir(self, exportname): - """ - Description: - Return Dir Name of the Export Directory Name 'exportname' - - Parameters: - exportname: Name of a Export Directory - - Returns: - Success: Absolute Path of Export DIrectory - Failure: '' - """ - - output = '' - - for exportdir in self.ExportDirs: - if exportdir['exportname'] == exportname: - output = exportdir['dirname'] - break - - return output - - def add_mountpoint(self, mountname, dirname): - """ - Description: - Add a Mount Point to the MountPoint List - - Parameters: - mountname: Name of a MountPoint(Example: mount1/mount2) - dirname: Absolute Path of the Mount Point - - Returns: - """ - - self.MountPoints.append({'mountname': mountname, 'dirname': dirname}) - return - - def get_mountpoint(self, mountname): - """ - Description: - Return MountPoint with Name 'mountname' - - Parameters: - mountname: Name of a MountPoint - - Returns: - Success: Absolute Path of MountPoint - Failure: '' - """ - - output = '' - - for mountpoint in self.MountPoints: - if mountpoint['mountname'] == mountname: - output = mountpoint['dirname'] - break - - return output - - def add_volume(self, volumekey, volumename): - """ - Description: - Add a Volume to Volumes List - - Parameters: - volumekey: key used to recognize the volumename Ex: volume1 - volumename: Volume Name Ex: Replicate_Volume - - Returns: - """ - - self.Volumes.append({'volumekey': volumekey, 'volumename': volumename}) - return - - def get_volume(self, volumekey): - """ - Description: - Returns Volumename with Volumekey 'volumekey' - - Parameters: - volumekey: VolumeKey - - Returns: - Success: Volumename - Failure: '' - """ - - output = '' - - for volume in self.Volumes: - if volume['volumekey'] == volumekey: - output = volume['volumename'] - break - - return output - - def create_servershostlist(self): - """ - Description: - Creats a Unique List of Hosts from the Servers List - - Parameters: - None - - Returns: - """ - - for server in self.Servers: - host = server['host'] - - if host not in self.ServersHostList: - self.ServersHostList.append(host) - - return - - def create_clientshostlist(self): - """ - Description: - Creats a Unique List of Hosts from the Clients List - - Parameters: - None - - Returns: - """ - - for client in self.Clients: - host = client['host'] - - if host not in self.ClientsHostList: - self.ClientsHostList.append(host) - - return - - def get_servershostlist(self): - """ - Description: - Returns ServersHostList - - Parameters: - None - - Returns: - Return ServersHostList - """ - - return self.ServersHostList - - def get_clientshostlist(self): - """ - Description: - Returns ClientsHostList - - Parameters: - None - - Returns: - Return ClientsHostList - """ - - return self.ClientsHostList - diff --git a/Libraries/Tests/ATFTests.py b/Libraries/Tests/ATFTests.py deleted file mode 100755 index 245e96a..0000000 --- a/Libraries/Tests/ATFTests.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python - -############################################################################## -## ATFTests Class contains variables and methods for storing and retrieving -## information about "TESTS" that has to be executed. -## -## Variables: -## TestUnits: List of TestUnits to be run. -## -## KeyWords: List of keywords to be used to select tests under each -## TestUnit. -## -## Version: Glusterfs version. This is used to select tests based on version -## of Glusterfs. -############################################################################## - -class Tests(): - def __init__(self): - self.TestUnits = [] - self.KeyWords = [] - self.Version = '' - - def add_testunits(self, testunit): - """ - Description: - Add a testunit to TestUnits List - - Parameter: - testunit: Name of the Testing Unit - - Returns: - """ - - self.TestUnits.append(testunit) - return - - def sort_testunits(self): - """ - Description: - Sort the TestUnit List in Descending Order - - Parameter: - - Returns: - """ - - self.TestUnits.sort() - self.TestUnits.reverse() - return - - def get_testunits(self): - """ - Description: - Return TestUnits List - - Parameters: - - Returns: - Success: Testunit Name - Failure: '' - """ - - return self.TestUnits - - def add_keywords(self, keyname): - """ - Description: - Add Keywords to KeyWords List - - Parameters: - keyname: Keyword - - Returns: - """ - - self.KeyWords.append(keyname) - return - - def set_version(self, version): - """ - Description: - Set Glusterfs Version under test. - - Parameters: - version: Glusterfs version - - Returns: - """ - - self.Version = version - return - - def get_version(self): - """ - Description: - Returns Glusterfs Vesrion under test - - Parameters: - - Returns: - Glusterfs Version - """ - - return self.Version - diff --git a/Libraries/Utils/ATFUtils.py b/Libraries/Utils/ATFUtils.py deleted file mode 100755 index 0afcf22..0000000 --- a/Libraries/Utils/ATFUtils.py +++ /dev/null @@ -1,402 +0,0 @@ -#!/usr/bin/env python - -import os -import re -import logging -import ATFLog -import ATFTests -import ATFTestEnv -import ATFSsh -import ATFGlusterd -import ATFGlusterPeer - -######################################################################### -## ATFLog.Log Object -######################################################################### -LogObj = ATFLog.Log() - -######################################################################### -## ATFTests.Tests Object -######################################################################### -TestsObj = ATFTests.Tests() - -######################################################################### -## ATFTestEnv.TestEnv Object -######################################################################### -TestEnvObj = ATFTestEnv.TestEnv() - -######################################################################### -## ATFSsh.Ssh Object -######################################################################### -SshObj = ATFSsh.Ssh() - -######################################################################### -## Logger for 'ATF_LOG' -######################################################################### -Logger = logging.getLogger('ATF_LOG') - -def set_environ(**arguments): - """ - Description: - Set the Env Variable 'envvar' to Value 'value' - - Parameters: - **arguments: key=value pairs. - key: Environment Variable name - value: Value of the Environment Valiable - - Return: - Success: 1 (Successfully Set the envar to value) - Failure: 0 (Unable to set the envvar to value) - - Example: - ATFUtils.set_environ(ATF_USER = user1 ,ATF_SERVER = server1) - """ - - envvars = sorted(arguments.keys()) - - for var in envvars: - try: - os.environ[var] = arguments[var] - - except KeyError as (key): - Logger.error("Unable to Export Environment Variable '" + key + "'") - return 1 - - else: - Logger.debug("Exported Environment Variable '" + var + "' = " + - arguments[var]) - - return 0 - -def get_environ(envvar, log = 1): - """ - Description: - Return the Value of Environment Variable 'envvar' - - Parameters: - name: Name of the Environment Variable - log: To keep track of whether to log the error message or not - - Return: - Success : Value of Environment Variable 'envvar' - Failure: 1 - """ - - try: - value = os.environ[envvar] - - except KeyError: - if log == 1: - Logger.error("Key Error: Environment Variable %s Not Defined" % - envvar) - value = 1 - - except OSError as key: - if log == 1: - Logger.error("Environment Variable '" + key + "' Not Defined") - value = 1 - - else: - Logger.debug("Returning " + envvar + " = " + value) - - return value - -def parse_output(stdout, stderr): - """ - Description: - Parse the STDOUT and STDERR ChannelFiles - - Parameter: - stdout: ChannelFile for stdout - stderr: ChannelFile for stderr - - Return: - Success: 0 (STDOUT has DATA) - Failure: 1 (STDERR has DATA) - """ - - output = stderr.readlines() - - if len(output) == 0: - for line in stdout.readlines(): - Logger.debug(line) - return 0 - else: - for line in output: - Logger.error(line) - return 1 - -def execute_command(command, **arguments): - """ - Description: - - Parameter: - command: Command to be executed - **arguments: key=value pair for specifying server, host, user - - Returns: - Success: 0 - Failure: 1 - """ - - output = [1, 0, 0, 0] - ip_string = '(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})' - serverkey = hostkey = userkey = '' - serverkeyfound = hostkeyfound = 0 - - if arguments.has_key('server'): - serverkey = arguments['server'] - serverkeyfound = 1 - elif arguments.has_key('host'): - hostkey = arguments['host'] - hostkeyfound = 1 - else: - serverkey = get_environ('ATF_SERVER', log = 0) - - if serverkey == 1: - serverkeyfound = 0 - hostkey = get_environ('ATF_HOST') - - if hostkey == 1: - Logger.error("Server/Host not defined for command execution") - return output - else: - hostkeyfound = 1 - else: - serverkeyfound = 1 - - if serverkeyfound == 1: - host, user = TestEnvObj.get_server(serverkey) - - if host == '' or user == '': - Logger.error("Server: " + serverkey + - "Not Defined in GlobalParam File") - return output - elif hostkey != '': - if re.match(ip_string, hostkey): - host = hostkey - else : - host = TestEnvObj.get_host(hostkey) - if host == '': - Logger.error("Host: " + hostkey + - "Not Defined in GlobalParam File") - return output - - if arguments.has_key('user'): - userkey = arguments['user'] - else: - userkey = get_environ('ATF_USER') - if userkey == 1: - Logger.error( - "Ignoring KeyError: Environment Variable ATF_USER Not " + - "Defined for command execution") - return output - - if userkey != 'root': - user = TestEnvObj.get_user(userkey, log = 0) - if user == '': - Logger.error("User: " + userkey + - "Not Defined in GlobalParam File") - return output - else: - user = 'root' - - Logger.info("Executing Command: " + command + " - " + user + "@" + host) - status, stdin, stdout, stderr = SshObj.executecommand(command, host, user) - output = [status, stdin, stdout, stderr] - return output - -def sshservers(): - """ - Description: - SSH to all Servers in the ServersList - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - for server in TestEnvObj.get_serverslist(): - host = server['host'] - user = server['user'] - - if SshObj.connect(host, user): - return 1 - else: - continue - - return 0 - -def sshclients(): - """ - Description: - SSH to all Clients in the ClientsList - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - for client in TestEnvObj.get_clientslist(): - host = client['host'] - user = client['user'] - - if SshObj.connect(host, user): - return 1 - else: - continue - - return 0 - -def cleanupserversglusterd(): - """ - Descriptions: - Cleanup glusterd directory on all Servers in ServersList - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - for host in TestEnvObj.get_servershostlist(): - if ATFGlusterd.cleanup_glusterd(host = host): - return 1 - else: - continue - - return 0 - -def cleanupclientsglusterd(): - """ - Description: - Cleanup Glusted directory on all the Clients in ClientsList - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - for host in TestEnvObj.get_clientshostlist(): - if ATFGlusterd.cleanup_glusterd(host = host): - return 1 - else: - continue - - return 0 - -def stopserversglusterd(): - """ - Description: - Stop Glusterd on all the Servers in ServersList - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - for host in TestEnvObj.get_servershostlist(): - if ATFGlusterd.stop_glusterd(host = host): - return 1 - else: - continue - - return 0 - -def stopclientsglusterd(): - """ - Description: - Stop Glusted on all the Clients in ClientsList - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - for host in TestEnvObj.get_clientshostlist(): - if ATFGlusterd.stop_glusterd(host = host): - return 1 - else: - continue - - return 0 - -def startserversglusterd(): - """ - Description: - Start Glusterd on all the Servers in ServersList - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - for host in TestEnvObj.get_servershostlist(): - if ATFGlusterd.start_glusterd(host = host): - return 1 - else: - continue - - return 0 - -def startclientsglusterd(): - """ - Description: - Start GLusterd on all Clients in ClientsList - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - for host in TestEnvObj.get_clientshostlist(): - if ATFGlusterd.start_glusterd(host = host): - return 1 - else: - continue - - return 0 - -def peerprobe(): - """ - Description: - PeerProbe to all Servers in ServerList from one of the server - in the ServerList - - Parameters: - None - - Returns: - Success: 0 - Failure: 1 - """ - - if ATFGlusterPeer.probe(): - return 1 - else: - return 0 - diff --git a/Libraries/Validate/ATFValidate.py b/Libraries/Validate/ATFValidate.py deleted file mode 100644 index 9cebbf8..0000000 --- a/Libraries/Validate/ATFValidate.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python - -import re -import ATFUtils - -def validate_replication(**arguments): - """ - Description: - Validate whether the files are replicated or not - - Parameters: - arguments: key=value pair. - key: file1..filen - value: host:exportdir:filename comabination - - Example:f1 = 'host1:export1:file1.txt', f2 = 'host1:export2:file1.txt - - Returns: - Success: 0 - Failure: 1 - """ - - Map = [] - command = "ls" - - for key in arguments.keys(): - value = arguments[key] - hostkey, exportkey, filename = re.split(":", value) - - host = ATFUtils.TestEnvObj.get_host(hostkey) - if (host == ''): - ATFUtils.Logger.error("Host %s Not defined in GlobalParam File" % - hostkey) - return 1 - - exportdir = ATFUtils.TestEnvObj.get_exportdir(exportkey) - if (exportdir == ''): - ATFUtils.Logger.error( - "ExportDir %s Not defined in GlobalParam File" % exportkey) - return 1 - else: - abspath = exportdir + "/" + filename - Map.append({'host':host, 'path':abspath}) - - - for item in Map: - arguments['host'] = item['host'] - arguments['user'] = 'root' - abspath = item['path'] - val_command = command + " " + abspath - - status, stdin, stdout, stderr = ATFUtils.execute_command(val_command, - **arguments) - - if ( status == 1): - ATFUtils.Logger.error("Error in Validation") - else: - status = False - readout = stdout.readlines() - readerr = stderr.readlines() - - if( len(readerr) == 0): - for line in readout: - if ( re.match(abspath, line)): - status = True - else: - status = False - - if (status == False): - ATFUtils.Logger.error("Validation Failed: Path Not found - %s" % abspath) - return - else: - continue - - if(status == True): - ATFUtils.Logger.info("Validate_replication Successfully Complete") - - return 0 - diff --git a/README b/README deleted file mode 100644 index 038cf5e..0000000 --- a/README +++ /dev/null @@ -1 +0,0 @@ -README for Gluster Automation Framework. diff --git a/SharedModules/Connect/ssh.py b/SharedModules/Connect/ssh.py deleted file mode 100755 index a9952bb..0000000 --- a/SharedModules/Connect/ssh.py +++ /dev/null @@ -1,114 +0,0 @@ -""" - sshConnection Class for connecting and performing operation on - remote server using SSH Protocol. -""" -import paramiko -import pdb -import time - -class SshConnection(): - - def __init__(self): - self._connection = None - self._connection = paramiko.SSHClient() - - def connect(self, host, user=None, password=None): - """ - Objective: - SSH to Server "host" as User "user" - - Parameter: - host: Server IP Address - user: Login Username - password: Login password - - Return: - Success: 0 - Failure: 1 - """ - self._connection.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - - if user == None: - user = "root" - - if password == None: - password = "syst3m" - - try: - self._connection.connect(host, username=user, password=password) - - except paramiko.BadHostKeyException as result: - print( - "BadHostKeyException: Unable to Connect to Server: '" + host + - "' as User: '" + user + "'") - return 1 - - except paramiko.AuthenticationException: - print("AuthenticationException: Unable to Authenticate " - + user + "@" + host) - return 1 - - except paramiko.SSHException: - print("SSHException: Unknown server " + host) - return 1 - - return 0 - - def close(self): - """ - Objective: - Close SSH Connections - """ - self._connection.close() - return - - def executecommand(self, command, commandInput=None): - """ - Objective: - Execute Command "comamnd" - - Parameters: - command: command to execute - - Return: - Success: 0 - Failure: 1 - """ - output = {} - output["exitstatus"] = None - output["stdoutdata"] = None - output["stderrdata"] = None - exit_status_ready_flag = True - - try: - transport = self._connection.get_transport() - channel = transport.open_session() - channel.exec_command(command) - # Adding sleep to get the correct exit_status. - time.sleep(5) - exit_status_ready_flag = channel.exit_status_ready() - if not exit_status_ready_flag: - stdin = channel.makefile("wb") - - if commandInput: - stdin.write(commandInput) - else: - print "This command requirs Command Input \ - after executing comamnd for command completion" - stdin.write("\n") - return output - - stdout = channel.makefile("rb") - stderr = channel.makefile_stderr("rb") - exit_status = channel.recv_exit_status() - - output["exitstatus"] = exit_status - output["stdoutdata"] = stdout.readlines() - output["stderrdata"] = stderr.readlines() - - except paramiko.SSHException: - print("Unable to Execute Command: " + command) - - return output - - diff --git a/SharedModules/Globals/atfglobals.py b/SharedModules/Globals/atfglobals.py deleted file mode 100644 index ff1faad..0000000 --- a/SharedModules/Globals/atfglobals.py +++ /dev/null @@ -1,85 +0,0 @@ -"""atfglobals module contain AtfGlobal class and GlobalObj - -AtfGlobals class wrapps all global objects used in the framework -*) TestrunInfo -*) Logger -*) Testenv -*) ConnectionsManager - -GlobalObj is 'The Instance' of AtfGlobals which will be referred throughout -the framework utilities. -""" - -import testruninfo -import logger -import testenv -import manager - -class AtfGlobals: - - - def __init__(self): - self._testruninfo = None - self._logger = logger.Log() - self._env = None - self._connectionsmanager = manager.ConnectionsManager() - - def getTestrunInfoObj(self): - """Returns TestrunInfo Object - """ - return self._testruninfo - - def getLoggerObj(self): - """Returns Logger Object - """ - return self._logger - - def getTestenvObj(self): - """Returns Current TestEnvironment Object. - """ - return self._env - - def getConnectionsManagerObj(self): - """Returns ConnectionsManager Object - """ - return self._connectionsmanager - - def initTestrunInfoObj(self): - """Instantiation of TestrunInfo Object - """ - self._testruninfo = testruninfo.TestRunInfo() - - def initLoggerObj(self): - """Instantiation of Logger Object - """ - self._logger = logger.Log() - - def initTestenvObj(self): - """Instantiation of Testenv Object - """ - self._env = testenv.TestEnv() - - def initConnectionsManagerObj(self): - """Instantiation of ConnectionsManager Object - """ - self._connectionsmanager = manager.ConnectionsManager() - -GlobalObj = AtfGlobals() -__all__ = ['GlobalObj'] - - - - - - - - - - - - - - - - - diff --git a/SharedModules/Globals/logger.py b/SharedModules/Globals/logger.py deleted file mode 100644 index 9d11bd7..0000000 --- a/SharedModules/Globals/logger.py +++ /dev/null @@ -1,211 +0,0 @@ -""" - logger class contains variables and methods for Logging - the events during the test run. - - Variables: - SummaryLog: [filename, loglevel, format] - - DetailLog: [filename, loglevel, format] - - StdoutLog: [loglevel, format] - -""" -import logging - -class Log(): - - def __init__(self): - self._summarylog = {'format': - '%(asctime)s %(levelname)s : %(filename)s %(lineno)d - \ - \'%(message)s\''} - self._detaillog = {'format': - '%(asctime)s %(levelname)s : %(pathname)s %(funcName)s \ - %(lineno)d - \'%(message)s\''} - self._stdoutlog = {'logstatus':'false', 'format':'%(asctime)s \ - %(levelname)s : %(filename)s %(lineno)d - \'%(message)s\''} - self._loggers = [] - - - def getLogLevel(self, loglevel): - """ - Description: - Returns logging.(LogLevel) for loglevel - - Parameters: - loglevel: String specifying the loglevel - - Returns: - logging.(Loglevel) - """ - - LEVELS = {'DEBUG': logging.DEBUG, - 'INFO': logging.INFO, - 'WARNING': logging.WARNING, - 'ERROR': logging.ERROR, - 'CRITICAL': logging.CRITICAL, - 'debug': logging.DEBUG, - 'info': logging.INFO, - 'warning': logging.WARNING, - 'error': logging.ERROR, - 'critical': logging.CRITICAL} - return LEVELS.get(loglevel, logging.NOTSET) - - def setSummaryLog(self, filename='SummaryLog.out', loglevel='INFO'): - """ - Description: - Set Summary Log Name and Log Level - - Parameters: - filename: SummaryLog File Name - loglevel : Log level to be set for summary log - """ - - self._summarylog['filename'] = filename - self._summarylog['loglevel'] = self.getLogLevel(loglevel) - - def setDetailLog(self, filename='DetailLog.out', loglevel = 'DEBUG'): - """ - Description: - Set Detail Log Name and Log Level - - Parameters: - filename: DetailLog FIle name - loglevel: Log level to be set for detail log - """ - - self._detaillog['filename'] = filename - self._detaillog['loglevel'] = self.getLogLevel(loglevel) - - def setStdoutLog(self, do_log=True, loglevel='INFO'): - """ - Description: - Set Log Level for logging to STDOUT - - Parameters: - loglevel: Log level for logging to STDOUT - """ - self._stdoutlog['do_log'] = do_log - self._stdoutlog['loglevel'] = self.getLogLevel(loglevel) - - def createLogger(self, atfdir, logname='ATFLOG'): - """ - Description: - Create a Logger with LogName 'logname' - - Parameters: - logname: Name of the Logger - - Return: - Success: 0 (Successful creation of logger with name : 'logname') - Failure: 1 (Unable to create logger with name: logname) - """ - - # Create a Logger Object with name "logname". - # Set the log level to 'DEBUG' - logger = logging.getLogger(logname) - logger.setLevel(logging.DEBUG) - self.loggers.append({'logname': logname}) - - # Create Summary Log File Handler - # Set the Log Level - # Set the Log Record format for Summary Log - summarylog_abspath = atfdir + "/" + self._summarylog['filename'] - try: - summary_handler = logging.FileHandler(summarylog_abspath, mode='w') - - except IOError as (errno, errstr): - print "I/0 error({0}): {1}".format(errno, errstr) - return 1 - - else: - summary_formatter = logging.Formatter(self._summarylog['format']) - summary_handler.setFormatter(summary_formatter) - summary_handler.setLevel(self._summarylog['loglevel']) - logger.addHandler(summary_handler) - for log in self._loggers: - if log['logname'] == logname: - log['summary_handler'] = summary_handler - break - - # Create Stdout Log StreamHandler if log to stdout is defined - # Set the Log Level - # Set the Log Record format for STDOUT - if self._stdoutlog['do_log'] == 'true': - stdout_handler = logging.StreamHandler() - stdout_handler.setLevel(self._stdoutlog['loglevel']) - stdout_formatter = logging.Formatter(self._stdoutlog['format']) - stdout_handler.setFormatter(stdout_formatter) - logger.addHandler(stdout_handler) - for log in self._loggers: - if log['logname'] == logname: - log['stdout_handler'] = stdout_handler - break - return 0 - - def addDetaillogHandler(self, abspath, logname): - """ - Description: - Add a Detail Log FileHandler to Logger with logname 'logname' - - Parameters: - logname: Name of the Logger - - Returns: - Success: 0 - Failure: 1 - """ - - logger = logging.getLogger(logname) - - # Create Detail Log File Handler - # Set the Log Level - # Set the Log Record format for Detail Log - abspath = abspath + self._detaillog['filename'] - - try: - detail_handler = logging.FileHandler(abspath, mode='w') - - except IOError as (errno, errstr): - logger.error("IOError ({0}): {1}".format(errno, errstr)) - return 1 - - else: - detail_handler.setLevel(self._detaillog['loglevel']) - detail_formatter = logging.Formatter(self._detaillog['format']) - detail_handler.setFormatter(detail_formatter) - logger.addHandler(detail_handler) - - for log in self._loggers: - if log['logname'] == logname: - log['detail_handler'] = detail_handler - break - - logger.debug("Detail Log File Handler Successfully Added") - - return 0 - - def removeDetaillogHandler(self, logname): - """ - Description: - Remove Detail Log File Handler from Logger with - logname 'logname' - - Parameters: - logname: Name of the Logger - """ - - logger = logging.getLogger(logname) - Map = {} - for log in self._loggers: - Map = log - - if Map.has_key('detail_handler'): - detail_handler = log.pop('detail_handler') - logger.removeHandler(detail_handler) - logger.info("DetailLog Handler Removed for the Logger: " + - logname) - else: - logger.warning("DetailLog Handler Not Found for the Logger: " + - logname) - return - diff --git a/SharedModules/Globals/manager.py b/SharedModules/Globals/manager.py deleted file mode 100755 index d73cf15..0000000 --- a/SharedModules/Globals/manager.py +++ /dev/null @@ -1,64 +0,0 @@ -""" manager module contains: - -*) ConnectionsManager Class -""" -class ConnectionsManager(): - """ - *) Manages Client SSH Connections in the current TestEnvironment - *) Manages Server SSH Connections in the current TestEnvironment - *) Manages allhosts SSH Connection in the current TestEnvironment - """ - def __init__(self): - - self._serverpool = {} - self._clientpool = {} - self._all = {} - - def addServer(self, key, server): - """ - Add a server to _serverpool - """ - - self._serverpool[key] = server - self._all[key] = server - return - - def addClient(self, key, client): - """ - Add a client to clientpool - """ - - self._clientpool[key] = client - self._all[key] = client - return - - def getServers(self): - """ - Return the server object - """ - - return self._serverpool - - def getClients(self): - """ - Return the client object - """ - - return self._clientpool - - def getConnection(self, key): - """ - """ - value = None - if self._all.has_key(key): - value = self._all[key] - return value - - def getConnections(self): - """ - """ - return self._all - - - - diff --git a/SharedModules/Globals/testenv.py b/SharedModules/Globals/testenv.py deleted file mode 100755 index 9aa8ec8..0000000 --- a/SharedModules/Globals/testenv.py +++ /dev/null @@ -1,462 +0,0 @@ -"""testenv module. - -TestEnv Class has attributes which holds information of the current -testenvironment. It includes information about Servers, Clients, Volume, -Bricks, MountPoints etc. -TestEnv Class provides methods to access the testenvironment info -""" - -from collections import namedtuple -import re - -class TestEnv(): - - def __init__(self): - self._exportdirs = {} - self._servers = {} - self._bricks = {} - self._volumes = {} - self._clients = {} - self._mountdevices = {} - self._mounts = {} - self._gluster_download_paths = [] - self._active_volume = None - - self._exportdir_tuple = namedtuple('ExportDir', - ['dir', 'fstype', 'device']) - - self._server_tuple = namedtuple('Server', - ['hostname', 'user', 'password', - 'glusterversion', 'installpath']) - - self._brick_tuple = namedtuple('Brick', - ['hostname', 'path']) - - self._volume_tuple = namedtuple('Volume', - ['volumename', 'volumetype', 'count', - 'transporttype', 'bricks']) - - self._client_tuple = namedtuple('Client', - ['hostname', 'user', 'password', - 'glusterversion', 'installpath']) - - self._mountdevice_tuple = namedtuple('MountDevice', - ['hostname', 'volumename']) - - self._mount_tuple = namedtuple('Mount', - ['client', 'dir', 'device', - 'type', 'logfile', 'options']) - - def addExportdir(self, key, dir_, **arguments): - """ - """ - fstype = device = None - if (arguments.has_key('fstype') and arguments['fstype']): - fstype = arguments['fstype'] - - if (arguments.has_key('device') and arguments['device']): - device = arguments['device'] - - exportdir_obj = self._exportdir_tuple(dir_, fstype, device) - self._exportdirs[key] = exportdir_obj - - def getExportdir(self, exportdirkey): - """ - """ - exportdir_obj = None - if self._exportdirs.has_key(exportdirkey): - exportdir_obj = self._exportdirs[exportdirkey] - - return exportdir_obj - - def getExportdirs(self): - """Returns self._exportdirs dictionary. - 'key' in dict is exportdirkey - 'value' is exportdir namedtuple object - """ - - return self._exportdirs - - def addServer(self, key, hostname, user, password, - glusterversion, **arguments): - """ - """ - installpath = None - if (arguments.has_key('installpath') and arguments['installpath']): - installpath = arguments['installpath'] - - server_obj = self._server_tuple(hostname, user, password, - glusterversion, installpath) - - self._servers[key] = server_obj - - def getServer(self, serverkey): - """ - """ - server_obj = None - if self._servers.has_key(serverkey): - server_obj = self._servers[serverkey] - - return server_obj - - def getServers(self): - """ - """ - servers = {} - - for serverkey in self._servers.keys(): - servers[serverkey] = self.getServer(serverkey) - - return servers - - def addClient(self, key, hostname, user, password, - glusterversion, **arguments): - """ - """ - installpath = None - if arguments.has_key('installpath') and arguments['installpath']: - installpath = arguments['installpath'] - - client_obj = self._client_tuple(hostname, user, password, - glusterversion, installpath) - self._clients[key] = client_obj - - def getClient(self, clientkey): - """ - """ - client_obj = None - if self._clients.has_key(clientkey): - client_obj = self._clients[clientkey] - - return client_obj - - def getClients(self): - """ - """ - clients = {} - - for clientkey in self._clients.keys(): - clients[clientkey] = self.getClient(clientkey) - - return clients - - def addBrick(self, key, hostname, path, **arguments): - """ - """ - brick_obj = self._brick_tuple(hostname, path) - self._bricks[key] = brick_obj - - def getBrick(self, brickkey): - """ - """ - return_brick_obj = None - newhostname = newpath = '' - - if self._bricks.has_key(brickkey): - brick_obj = self._bricks[brickkey] - else: - return return_brick_obj - - hostname_value = brick_obj.hostname - serverkey = re.split("\.", hostname_value, maxsplit=1)[0] - server_obj = self.getServer(serverkey) - if server_obj: - newhostname = server_obj.hostname - else: - return return_brick_obj - - path_value = brick_obj.path - if re.match("^\/", path_value): - path = path_value - else: - exportdir_obj = self.getExportdir(path_value) - if exportdir_obj: - newpath = exportdir_obj.dir - else: - brick_obj = None - return return_brick_obj - - return_brick_obj = brick_obj._replace(hostname=newhostname, - path=newpath) - - return return_brick_obj - - def getBricks(self): - """ - """ - return_bricks = {} - - for brickkey in self._bricks.keys(): - return_bricks[brickkey] = self.getBrick(brickkey) - - return return_bricks - - def getRawBrick(self, brickkey): - brick_obj = None - if self._bricks.has_key(brickkey): - brick_obj = self._bricks[brickkey] - return brick_obj - - def getBrickKeys(self): - """ - """ - brick_keys = [] - brick_keys.extend(self._bricks.keys()) - return brick_keys - - def addBricksToVolume(self, volumekey="ActiveVolume", *bricks): - """ - """ - volume_obj = None - if volumekey == "ActiveVolume": - volumekey = self._active_volume - - if not (volumekey and self._volumes.has_key(volumekey)): - return 1 - - volume_obj = self._volumes[volumekey] - - for brick in bricks: - volume_obj.bricks.append(brick) - - return 0 - - def replaceBrickInVolume(self, replace_brick, to_brick, - volumekey="ActiveVolume"): - """ - """ - volume_obj = None - replaced_status = False - if volumekey == "ActiveVolume": - volumekey = self._active_volume - - if not (volumekey and self._volumes.has_key(volumekey)): - return 1 - - volume_obj = self._volumes[volumekey] - for index, brick in enumerate(volume_obj.bricks): - if brick == replace_brick: - volume_obj.bricks[index] = to_brick - replaced_status = True - break - else: - continue - - if replaced_status: - return 0 - else: - return 1 - - def addVolume(self, key, volumename, volumetype, count, - transporttype, bricks): - """ - """ - brickskeylist = [x.strip() for x in bricks.split(",")] - volume_obj = self._volume_tuple(volumename, volumetype, - count, transporttype, brickskeylist) - self._volumes[key] = volume_obj - - def getVolume(self, volumekey): - """ - """ - return_volume_obj = None - - if not self._volumes.has_key(volumekey): - return return_volume_obj - - volume_obj = self._volumes[volumekey] - brickslist = [] - for brickkey in volume_obj.bricks: - brick_obj = self.getBrick(brickkey) - if not brick_obj: - return return_volume_obj - else: - brickslist.append(brick_obj) - - return_volume_obj = volume_obj._replace(bricks=brickslist) - - return return_volume_obj - - def getVolumes(self): - """ - """ - return_volumes = {} - for volumekey in self._volumes.keys(): - return_volumes[volumekey] = self.getVolume(volumekey) - - return return_volumes - - def addMountDevice(self, key, hostname, volumename): - """ - """ - mountdevice_obj = self._mountdevice_tuple(hostname, volumename) - self._mountdevices[key] = mountdevice_obj - - def getMountDevice(self, mountdevicekey): - """ - *) Check the hostname = IPAddress - *) Check hostname refers to any server - *) Check the volume is defined. - *) Substitute all values - """ - returndevice_obj = None - ip_pattern = re.compile('(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})') - - if not self._mountdevices.has_key(mountdevicekey): - return returndevice_obj - - else: - mountdevice_obj = self._mountdevices[mountdevicekey] - - hostname_value = mountdevice_obj.hostname - if ip_pattern.match(hostname_value): - newhostname = hostname_value - elif re.match('(([a-z]|[A-Z])+[0-9]+)\.hostname', hostname_value): - serverkey = re.split("\.", hostname_value, maxsplit=1)[0] - server_obj = self.getServer(serverkey) - if server_obj: - newhostname = server_obj.hostname - else: - return returndevice_obj - else: - newhostname = hostname_value - volumekey = re.split("\.", mountdevice_obj.volumename, maxsplit=1)[0] - volume_obj = self.getVolume(volumekey) - if volume_obj: - newvolumename = volume_obj.volumename - else: - return returndevice_obj - - - returndevice_obj = mountdevice_obj._replace(hostname=newhostname, - volumename=newvolumename) - return returndevice_obj - - def getMountDevices(self): - """ - """ - return_mount_devices = {} - - for mountdevicekey in self._mountdevices.keys(): - return_mount_devices[mountdevicekey] = self.getMountDevice(mountdevicekey) - - return return_mount_devices - - def addMount(self, key, client, dir_, device, **arguments): - """ - """ - logfile = options = None - type_ = "glusterfs" - - if (arguments.has_key("type") and arguments['type']): - type_ = arguments['type'] - - if (arguments.has_key("logfile") and arguments['logfile']): - logfile = arguments['logfile'] - - if (arguments.has_key("options") and arguments['options']): - options = arguments['options'] - - mount_obj = self._mount_tuple(client, dir_, device, - type_, logfile, options) - self._mounts[key] = mount_obj - - def getMount(self, mountkey): - """ - """ - return_mount_obj = None - if not self._mounts.has_key(mountkey): - return return_mount_obj - - mount_obj = self._mounts[mountkey] - devicekey = mount_obj.device - device_obj = self.getMountDevice(devicekey) - if not device_obj: - return return_mount_obj - else: - return_mount_obj = mount_obj._replace(device=device_obj) - - return return_mount_obj - - def getMounts(self): - """ - """ - return_mounts = {} - - for mountkey in self._mounts.keys(): - return_mounts[mountkey] = self.getMount(mountkey) - - return return_mounts - - def getMountsKeys(self): - """ - """ - mounts_keys = [] - mounts_keys.extend(self._mounts.keys()) - return mounts_keys - - def addDefaults(self, **arguments): - """ - """ - downloadpaths = [] - - if (arguments.has_key('downloadpath') and arguments['downloadpath']): - paths = arguments['downloadpath'] - downloadpaths = [x.strip() for x in paths.split(",")] - - self._gluster_download_paths = downloadpaths - - def setActiveVolume(self, volumekey): - """ - """ - if self._volumes.has_key(volumekey): - self._active_volume = volumekey - return 0 - else: - return 1 - - def getActiveVolume(self): - """ - """ - active_volume_key = self._active_volume - active_volume = self.getVolume(active_volume_key) - return active_volume - - def getGlusterDownloadPaths(self): - """ - """ - return self._gluster_download_paths - - def getHosts(self): - """ - """ - all_hosts = {} - all_hosts.update(self.getServers) - all_hosts.update(self.getClients) - return all_hosts - - def getHostsKeys(self): - """ - """ - hosts_keys = [] - hosts_keys.extend(self._servers.keys()) - hosts_keys.extend(self._clients.keys()) - return hosts_keys - - def getHost(self, hostkey): - """ - """ - host_obj = None - host_obj = self.getServer(hostkey) - if host_obj: - return host_obj - else: - host_obj = self.getClient(hostkey) - return host_obj - - - - - - - diff --git a/SharedModules/Globals/testruninfo.py b/SharedModules/Globals/testruninfo.py deleted file mode 100644 index 9b012e8..0000000 --- a/SharedModules/Globals/testruninfo.py +++ /dev/null @@ -1,144 +0,0 @@ -"""testruninfo module - -TestRunInfo Class contains variables and methods for storing and retrieving -information about current "TestRun". -""" -import re - -class TestRunInfo(): - def __init__(self): - self._testunits = [] - self._keywords = '' - self._glusterversion = '' - self._atfdir = '' - self._summaryloginfo = {} - self._detailloginfo = {} - self._stdoutloginfo = {} - - def addGlusterVersion(self, version): - """ - """ - self._glusterversion = version - - def getGlusterVersion(self): - """ - """ - return self._glusterversion - - def addSummaryLogInfo(self, filename, loglevel): - """ - """ - if not filename: - filename = "SummaryLog.out" - - if not loglevel: - loglevel = "info" - - self._summaryloginfo['filename'] = filename - self._summaryloginfo['loglevel'] = loglevel - - def getSummaryLogInfo(self): - """ - """ - return self._summaryloginfo - - def addDetailLogInfo(self, filename, loglevel): - """ - """ - if not filename: - filename = "DetailLog.out" - - if not loglevel: - loglevel = "info" - - self._detailloginfo['filename'] = filename - self._detailloginfo['loglevel'] = loglevel - - def getDetailLogInfo(self): - """ - """ - return self._detailloginfo - - def addStdoutLogInfo(self, do_log, loglevel): - """ - """ - true_pattern = re.compile('True|Yes', re.IGNORECASE) - false_pattern = re.compile('False|No', re.IGNORECASE) - - if not loglevel: - loglevel = "info" - - if true_pattern.match(do_log): - do_log = True - - elif false_pattern.match(do_log): - do_log = False - - else: - do_log = True - - self._stdoutloginfo['do_log'] = do_log - self._stdoutloginfo['loglevel'] = loglevel - - def getStdoutLogInfo(self): - """ - """ - return self._stdoutloginfo - - def addAtfDir(self, atfdir): - """ - """ - self._atfdir = atfdir - - def getAtfDir(self): - """ - """ - return self._atfdir - - def addTestUnits(self, testunit): - """ - Description: - Add a testunit to TestUnits List - - Parameter: - testunit: Name of the Testing Unit - - Returns: - """ - - self._testunits.append(testunit) - return - - def getTestUnits(self): - """ - Description: - Return TestUnits List - - Parameters: - - Returns: - Success: Testunit Name - Failure: '' - """ - - return self._testunits - - def addKeywords(self, keywords): - """ - Description: - Add Keywords to KeyWords List - - Parameters: - keyname: Keyword - - Returns: - """ - self._keywords = keywords - - def getKeywords(self): - """ - """ - return self._keywords - - - 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'] - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SharedModules/Utils/atfutils.py b/SharedModules/Utils/atfutils.py deleted file mode 100644 index 980c286..0000000 --- a/SharedModules/Utils/atfutils.py +++ /dev/null @@ -1,58 +0,0 @@ -"""atfutils module contains general purpose wrappers - -*) assert_success -*) assert_failure -*) print-stdout -*) print_stderr -*) set_active_volume -""" - -import re -import ssh -from atfglobals import GlobalObj - -def assert_success(**arguments): - """ - """ - if not arguments["exitstatus"]: - return 0 - else: - return 1 - -def assert_failure(**arguments): - """ - """ - if arguments["exitstatus"]: - return 0 - else: - return 1 - -def print_stdout(stdoutdata): - """ - """ - if not stdoutdata == None: - for data in stdoutdata: - print data - -def print_stderr(stderrdata): - if not stderrdata == None: - for data in stderrdata: - print data - -def set_active_volume(volumekey): - """ - """ - env = GlobalObj.getTestenvObj() - return_status = env.setActiveVolume(volumekey) - if return_status: - print "Unable to set Active Volume. '%s' Not defined in TestEnvironment"\ - % volumekey - return return_status - - - -__all__ = ['assert_success', - 'assert_failure', - 'print-stdout', - 'print_stderr', - 'set_active_volume'] diff --git a/SharedModules/Utils/clientutils.py b/SharedModules/Utils/clientutils.py deleted file mode 100644 index ad5d593..0000000 --- a/SharedModules/Utils/clientutils.py +++ /dev/null @@ -1,282 +0,0 @@ -"""clientutils module contains functions required for performing -certain operations on client - -Supported Wrappers :- ------------ -*) umount -*) umountall -*) mount -*) mountall -""" - -import atfutils -import hostutils -from atfglobals import GlobalObj - -def umount(mountkey): - """unmounts a mountpoint - - Parameters: - mountkey : name given to a mount as specified in testenv.cfg file. - Ex:-"mount1" - - Returns: - Success : 0 - Failure : 1` - """ - base_command = "umount " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - - mount_obj = env.getMount(mountkey) - if not mount_obj: - print "InValid Mount. %s not defined in TestEnvironment" % mountkey - return 1 - - clientkey = mount_obj.client - client_connection = cm.getConnection(clientkey) - if not client_connection: - print "SSH connection to host '%s' has not been established" % clientkey - return 1 - - command = base_command + mount_obj.dir - print "%s : %s" % (clientkey, command) - output = client_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - if return_status: - stdoutdata = str(output["stdoutdata"]) - if ((stdoutdata.rfind("not found")) or (stdoutdata.rfind("not mount"))): - return_status = 0 - - else: - print "Unable to umount %s" % mountkey - - return return_status - -def umountall(): - """unmounts all mount specified in testenv.cfg file. - Ex:- mount1, mount2 etc - - Parameters: - None - - Returns: - Success : 0 - Failure : 1` - """ - env = GlobalObj.getTestenvObj() - failure_flag = False - - mounts_keys = env.getMountsKeys() - for mountkey in mounts_keys: - return_status = umount(mountkey) - if return_status: - failure_flag = True - - if failure_flag: - return 1 - else: - return 0 - -def mount(mountkey): - """mounts a filesystem - - Parameters: - mountkey : name given to a mount as specified in testenv.cfg file. - Ex:-"mount1" - - Returns: - Success : 0 - Failure : 1` - """ - - base_command = command = "mount " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - - mount_obj = env.getMount(mountkey) - if not mount_obj: - print "InValid Mount. %s not defined in TestEnvironment" % mountkey - return 1 - - clientkey = mount_obj.client - client_connection = cm.getConnection(clientkey) - if not client_connection: - print "SSH connection to host '%s' has not been established" % clientkey - return 1 - - mountdevice_obj = mount_obj.device - device = mountdevice_obj.hostname + ":/" + mountdevice_obj.volumename - options = ["-t", mount_obj.type] - if mount_obj.logfile: - options.extend(["-o", ("log-file="+mount_obj.logfile), - "log-level=INFO"]) - - if mount_obj.options: - options.extend([mount_obj.option]) - - options.extend([device, mount_obj.dir]) - for index, option in enumerate(options): - command = command + option + " " - - return_status = hostutils.mkdir(clientkey, mount_obj.dir) - if return_status: - return return_status - - print "%s : %s" % (clientkey, command) - output = client_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def mountall(): - """mounts a filesystem for all mounts specified in testenv.cfg file. - - Parameters: - None - - Returns: - Success : 0 - Failure : 1` - """ - env = GlobalObj.getTestenvObj() - - mounts_keys = env.getMountsKeys() - for mountkey in mounts_keys: - return_status = mount(mountkey) - if return_status: - return return_status - - return 0 - - -def execute_on_mount(mountkey, command, commandInput=None): - """ - """ - env = GlobalObj.getTestenvObj() - mount_obj = env.getMount(mountkey) - if not mount_obj: - print "InValid Mount. %s not defined in TestEnvironment" % mountkey - return 1 - - clientkey = mount_obj.client - mountdir = mount_obj.dir - command = "cd " + mountdir + " ;" + command - return_status = hostutils.execute_command(clientkey, command, commandInput) - return return_status - -__all__ = ['execute_on_mount', - 'umount', - 'umountall', - 'mount', - 'mountall'] - -##def umountall(clientkey): -## """ -## """ -## base_command = "umount " -## env = GlobalObj.get_testenv_obj() -## cm = GlobalObj.get_connectionsmanager_obj() -## client_obj = env.getclient(clientkey) -## mountdir = client_obj.mountdir -## volume = client_obj.device -## client = cm.getconnection(clientkey) -## -## mountpoints = [] -## success_flag = False -## failure_flag = False -## command = "mount | grep " + mountdir -## output = client.executecommand(command) -## if not output["exitstatus"]: -## for data in output["stdoutdata"]: -## mountpoints.append(data.split(" ")[2]) -## -## for mountpoint in mountpoints: -## command = base_command + mountpoint -## output = client.executecommand(command) -## return_code = utils.assert_success(**output) -## if return_code: -## failure_flag = True -## else: -## success_flag = True -## continue -## -## if failure_flag: -## return 1 -## -## mountpoints = [] -## success_flag = False -## failure_flag = False -## command = "mount | grep " + volume -## output = client.executecommand(command) -## if not output["exitstatus"]: -## for data in output["stdoutdata"]: -## mountpoints.append(data.split(" ")[2]) -## -## for mountpoint in mountpoints: -## command = base_command + mountpoint -## output = client.executecommand(command) -## return_code = utils.assert_success(**output) -## if return_code: -## failure_flag = True -## else: -## success_flag = True -## continue -## -## if failure_flag: -## return 1 -## -## return 0 - -##def cd_mount(mountkey): -## """ -## """ -## env = GlobalObj.getTestenvObj() -## mount_obj = env.getMount(mountkey) -## if not mount_obj: -## print "InValid Mount. %s not defined in TestEnvironment" % mountkey -## return 1 -## -## clientkey = mount_obj.client -## dirpath = mount_obj.dir -## return_status = hostutils.cd(clientkey, dirpath) -## return return_status -## -##def cd_allmounts(): -## """ -## """ -## env = GlobalObj.getTestenvObj() -## mounts_keys = env.getMountsKeys() -## for mountkey in mounts_keys: -## return_status = cd_mount(mountkey) -## if return_status: -## return return_status -## -## return 0 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SharedModules/Utils/glusterutils.py b/SharedModules/Utils/glusterutils.py deleted file mode 100644 index 0c15af1..0000000 --- a/SharedModules/Utils/glusterutils.py +++ /dev/null @@ -1,644 +0,0 @@ -"""glusterutils module contains wrappers for gluster commands. - -*) glusterd_start -*) glusterd_start_allservers -*) glusterd_stop -*) glusterd_stop_allservers -*) glusterd_restart -*) glusterd_remove_dir -*) glusterd_remove_dir_allservers -*) glusterd_remove_logs_allservers -*) volume_delete -*) volume_create -*) volume_start -*) volume_stop -*) volume_addbrick -*) volume_replacebrick -*) volume_set -*) volume_reset -*) peer_probe -*) create_brick -*) mount_exportdir -*) umount_exportdir -""" - -import re -import atfutils -import hostutils -from atfglobals import GlobalObj - - -def glusterd_start(serverkey, force=False): - """ - """ - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - commands_to_execute = ["which glusterd", "ps -e | grep glusterd"] - gluster_version = env.getServer(serverkey).glusterversion - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - """ Check if gluster is already running. If already Running and force=True, - restart glusterd process""" - command = commands_to_execute.pop() - output = host_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - if not return_status: - if force: - return_status = glusterd_restart(serverkey) - return return_status - else: - return return_status - - command = commands_to_execute.pop() - output = host_connection.executecommand(command) - if output["exitstatus"]: - print "Unable to start glusterd" - return_status = atfutils.assert_success(**output) - return return_status - else: - if output["stdoutdata"]: - gluster_path = None - gluster_path = output["stdoutdata"][0].strip("\n") - else: - print "Unable to find gluster path" - return_status = atfutils.assert_success(**output) - return return_status - - if gluster_path: - command = gluster_path + " --version" - output = host_connection.executecommand(command) - if not output["stdoutdata"] == None: - if re.search(gluster_version, str(output["stdoutdata"])): - print "%s : %s" % (serverkey, gluster_path) - output = host_connection.executecommand(gluster_path) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - else: - print "Unable to start glusterd" - return 1 - else: - print "Unable to start glusterd" - return 1 - -def glusterd_start_allservers(force=False): - """ - """ - env = GlobalObj.getTestenvObj() - all_servers = env.getServers() - for serverkey in all_servers.keys(): - return_status = glusterd_start(serverkey) - if return_status: - return return_status - - return 0 - -def glusterd_stop(serverkey): - """ - """ - base_command = "kill -KILL " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - gluster_pid_list = [] - output = host_connection.executecommand("pidof glusterd") - return_status = atfutils.assert_failure(**output) - if not return_status: - return return_status - - else: - if output["stdoutdata"]: - for output in output["stdoutdata"]: - gluster_pid_list.append(output) - - for pid in gluster_pid_list: - command = base_command + pid - print "%s : %s" % (serverkey, command) - output = host_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - if return_status: - break - - return return_status - -def glusterd_stop_allservers(): - """ - """ - env = GlobalObj.getTestenvObj() - all_servers = env.getServers() - for serverkey in all_servers.keys(): - return_status = glusterd_stop(serverkey) - if return_status: - return return_status - - return 0 - -def glusterd_restart(serverkey): - """ - """ - return_status = glusterd_stop(serverkey) - if return_status: - return return_status - else: - return_status = glusterd_start(serverkey) - return return_status - -def glusterd_remove_dir(serverkey): - """ - """ - command = "rm -rf /etc/glusterd/*" - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - - server_obj = env.getServer(serverkey) - if not server_obj: - print "Invalid Host. %s not defined in TestEnvironment" % serverkey - return 1 - - server_connection = cm.getConnection(serverkey) - if not server_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (serverkey, command) - output = server_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return 0 - -def glusterd_remove_dir_allservers(): - """ - """ - env = GlobalObj.getTestenvObj() - all_servers = env.getServers() - for serverkey in all_servers.keys(): - return_status = glusterd_remove_dir(serverkey) - - return 0 - - -def glusterd_remove_logs(serverkey): - """ - """ - base_command = "rm -rf " - log_paths = ["/var/log/glusterfs/*.log", "/var/log/glusterfs/bricks/*"] - absolute_path_list = [] - prefix_path = '' - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - - server_obj = env.getServer(serverkey) - if not server_obj: - print "Invalid Host. %s not defined in TestEnvironment" % serverkey - return 1 - - server_connection = cm.getConnection(serverkey) - if not server_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - if server_obj.installpath: - prefix_path = server_obj.installpath - - for path in log_paths: - absolute_path_list.append(prefix_path + path) - - for path in absolute_path_list: - command = base_command + path - print "%s : %s" % (serverkey, command) - output = server_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - - return 0 - -def glusterd_remove_logs_allservers(): - """ - """ - env = GlobalObj.getTestenvObj() - all_servers = env.getServers() - for serverkey in all_servers.keys(): - return_status = glusterd_remove_logs(serverkey) - - return 0 - -def volume_delete(serverkey): - """ - """ - base_command = "gluster volume delete " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - active_volume = env.getActiveVolume() - if not active_volume: - print "Invalid Volume.ActiveVolume not defined for the TestEnvironment" - return 1 - volumename = active_volume.volumename - command = base_command + volumename - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (serverkey, command) - output = host_connection.executecommand(command, commandInput="y\n") - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def volume_create(serverkey): - """ - """ - base_command = "gluster volume create " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - active_volume = env.getActiveVolume() - if not active_volume: - print "ActiveVolume not defined for the TestEnvironment" - return 1 - - command = base_command + \ - active_volume.volumename + " " + \ - active_volume.volumetype + " " + \ - active_volume.count + " " + \ - "transport " + active_volume.transporttype + " " - - for brick_obj in active_volume.bricks: - brick_value = brick_obj.hostname + ":" + brick_obj.path - command = command + brick_value + " " - - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (serverkey, command) - output = host_connection.executecommand(command, commandInput="y\n") - return_status = atfutils.assert_success(**output) - if return_status: - if str(output["stdoutdata"]).rfind("already exists"): - return_status = 0 - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def volume_start(serverkey, force=False): - """ - """ - base_command = "gluster volume start " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - active_volume = env.getActiveVolume() - if not active_volume: - print "ActiveVolume not defined for the TestEnvironment" - return 1 - volumename = active_volume.volumename - command = base_command + volumename - if force: - command = command + " force" - - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (serverkey, command) - output = host_connection.executecommand(command, commandInput="y\n") - return_status = atfutils.assert_success(**output) - if return_status: - if str(output["stdoutdata"]).rfind("already started"): - return_status = 0 - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def volume_stop(serverkey, force=False): - """ - """ - base_command = "gluster volume stop " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - active_volume = env.getActiveVolume() - if not active_volume: - print "ActiveVolume not defined for the TestEnvironment" - return 1 - volumename = active_volume.volumename - command = base_command + volumename - if force: - command = command + " force" - - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (serverkey, command) - output = host_connection.executecommand(command, commandInput="y\n") - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def volume_addbrick(serverkey, *bricks): - """ - """ - base_command = "gluster volume add-brick " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - active_volume = env.getActiveVolume() - if not active_volume: - print "ActiveVolume not defined for the TestEnvironment" - return 1 - volumename = active_volume.volumenameGlobalObj.getConnectionsManagerObj() - command = base_command + volumename + " " - for brick in bricks: - brick_obj = env.getBrick(brick) - if not brick_obj: - print "Invalid Brick. Brick Not defined in TestEnvironment" - return 1 - brick_value = brick_obj.hostname + ":" + brick_obj.path - command = command + brick_value - - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (serverkey, command) - output = host_connection.executecommand(command, commandInput="y\n") - return_status = atfutils.assert_success(**output) - if not return_status: - if env.addBricksToVolume(*bricks): - return 1 - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def volume_replacebrick(serverkey, replacebrick_key, tobrick_key): - """ - """ - base_command = "gluster volume replace-brick " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - active_volume = env.getActiveVolume() - if not active_volume: - print "ActiveVolume not defined for the TestEnvironment" - return 1 - volumename = active_volume.volumename - command = base_command + volumename + " " - replace_brick = env.getbrick(replacebrick_key) - to_brick = env.getbrick(tobrick_key) - command = command + replace_brick + " " + to_brick - - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (serverkey, command) - output = host_connection.executecommand(command, commandInput="y\n") - return_status = atfutils.assert_success(**output) - if not return_status: - if env.replaceBrickInVolume(replacebrick_key, tobrick_key): - return 1 - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def volume_set(serverkey, key, value): - """ - """ - base_command = "gluster volume set " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - active_volume = env.getActiveVolume() - if not active_volume: - print "ActiveVolume not defined for the TestEnvironment" - return 1 - volumename = active_volume.volumename - command = base_command + volumename + " " + key + " " + value - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (serverkey, command) - output = host_connection.executecommand(command, commandInput="y\n") - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def volume_reset(serverkey): - """ - """ - base_command = "gluster volume reset " - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - active_volume = env.getActiveVolume() - if not active_volume: - print "ActiveVolume not defined for the TestEnvironment" - return 1 - volumename = active_volume.volumename - command = base_command + volumename - host_connection = cm.getConnection(serverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (serverkey, command) - output = host_connection.executecommand(command, commandInput="y\n") - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def peer_probe(fromserverkey): - """ - """ - base_command = "gluster peer probe " - command = base_command - all_servers = {} - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - all_servers = env.getServers() - all_servers.pop(fromserverkey) - - for key in all_servers.keys(): - if key is fromserverkey: - continue - else: - server_obj = all_servers[key] - command = command + server_obj.hostname + " " - - host_connection = cm.getConnection(fromserverkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - print "%s : %s" % (fromserverkey, command) - output = host_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def create_brick(brickkey): - """ - """ - return_status = 1 - env = GlobalObj.getTestenvObj() - brick_obj = env.getRawBrick(brickkey) - - hostname_value = brick_obj.hostname - serverkey = re.split("\.", hostname_value, maxsplit=1)[0] - - exportdir = brick_obj.path - device = fstype = None - """If the exportdir is not a mount point of a device: - 1) Remove the existing exportdir - 2) Create new exportdir""" - - if re.match("^\/", exportdir): - dirpath = exportdir - command = base_command + dirpath - else: - export_obj = env.getExportdir(exportdir) - dirpath = export_obj.dir - device = export_obj.device - fstype = export_obj.fstype - - print "%s : %s" % (serverkey, 'create_brick') - if device: - if umount_device(serverkey, device): - return return_status - if hostutils.mkfs(serverkey, device, fstype): - return return_status - if mount_exportdir(serverkey, device, fstype, dirpath): - return return_status - return 0 - - else: - if hostutils.rmdir(serverkey, dirpath): - return return_status - if hostutils.mkdir(serverkey, dirpath): - return return_status - - return 0 - -def umount_device(serverkey, device): - """ - """ - base_command = "umount " - cm = GlobalObj.getConnectionsManagerObj() - - server_connection = cm.getConnection(serverkey) - if not server_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - mountpoints = hostutils.find_mountpoints(serverkey, device) - - for mountpoint in mountpoints: - command = base_command + mountpoint - print "%s : %s" % (serverkey, command) - output = server_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - if return_status: - stdoutdata = str(output["stdoutdata"]) - if ((stdoutdata.rfind("not found")) or (stdoutdata.rfind("not mount"))): - return_status = 0 - - else: - return return_status - - return 0 - -def mount_exportdir(serverkey, device, fstype, dirpath): - """ - """ - base_command = "mount " - cm = GlobalObj.getConnectionsManagerObj() - - server_connection = cm.getConnection(serverkey) - if not server_connection: - print "SSH connection to host '%s' has not been established" % serverkey - return 1 - - if fstype is None: - fstype = "xfs" - - command = base_command + "-t " + fstype + " " + device + " " + dirpath - - print "%s : %s" % (serverkey, command) - output = server_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def create_brick_allservers(): - """ - """ - env = GlobalObj.getTestenvObj() - brick_keys = env.getBrickKeys() - for brickkey in brick_keys: - return_status = create_brick(brickkey) - if return_status: - return return_status - - return 0 - - -__all__ = ['glusterd_start', - 'glusterd_start_allservers', - 'glusterd_stop', - 'glusterd_stop_allservers', - 'glusterd_restart', - 'glusterd_remove_dir', - 'glusterd_remove_dir_allservers', - 'glusterd_remove_logs_allservers', - 'volume_delete', - 'volume_create', - 'volume_start', - 'volume_stop', - 'volume_addbrick', - 'volume_replacebrick', - 'volume_set', - 'volume_reset', - 'peer_probe', - 'create_brick', - 'create_brick_allservers', - 'mount_exportdir', - 'umount_device'] - - - - - - - - - - - - - - - - - diff --git a/SharedModules/Utils/hostutils.py b/SharedModules/Utils/hostutils.py deleted file mode 100644 index 68bb1bf..0000000 --- a/SharedModules/Utils/hostutils.py +++ /dev/null @@ -1,193 +0,0 @@ -"""hostutils module contains wrappers for commands that can be executed on any -host in the test environment - -Supported Wrappers: -------------------- -*) rmdir -*) mkdir -*) mkfs -*) execute_command -""" - -import re -import atfutils -from atfglobals import GlobalObj - -def cd(hostkey, dirpath): - """ - """ - base_command = "cd " - cm = GlobalObj.getConnectionsManagerObj() - host_connection = cm.getConnection(hostkey) - if not host_connection: - print "SSH Connection Not established to host '%s' " % hostkey - return 1 - command = base_command + dirpath - print "%s : %s" % (hostkey, command) - output = host_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def rmdir(hostkey, dirpath): - """ - """ - base_command = "rm -rf " - cm = GlobalObj.getConnectionsManagerObj() - system_dirs = re.compile('(/bin|/boot|/dev|/etc|/lib|/mnt|/net|/opt|/root|/sbin|/usr|/var|/sys)\/?$') - if system_dirs.match(dirpath): - print "System Directiories cannot be deleted" - return 1 - - else: - host_connection = cm.getConnection(hostkey) - if not host_connection: - print "SSH Connection Not established to host '%s' " % hostkey - return 1 - command = base_command + dirpath - print "%s : %s" % (hostkey, command) - output = host_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def mkdir(hostkey, dirpath): - """ - """ - base_command = "mkdir -p " - cm = GlobalObj.getConnectionsManagerObj() - system_dirs = re.compile('(/bin|/boot|/dev|/etc|/lib|/mnt|/net|/opt|/root|/sbin|/usr|/var|/sys)\/?$') - if system_dirs.match(dirpath): - print "System Directiories cannot be created" - return 1 - - else: - host_connection = cm.getConnection(hostkey) - if not host_connection: - print "SSH Connection Not established to host '%s' " % hostkey - return 1 - command = base_command + dirpath - print "%s : %s" % (hostkey, command) - output = host_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def mkfs(hostkey, device, fstype=None): - """ - """ - base_command = "mkfs " - cm = GlobalObj.getConnectionsManagerObj() - host_connection = cm.getConnection(hostkey) - if not host_connection: - print "SSH Connection Not established to host '%s' " % hostkey - return 1 - - if fstype is None: - fstype = "xfs" - - command = base_command + " -t " + fstype + " -f " + device - print "%s : %s" % (hostkey, command) - output = host_connection.executecommand(command) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - -def find_mountpoints(hostkey, device): - """ - """ - base_command = "mount | grep " - cm = GlobalObj.getConnectionsManagerObj() - - host_connection = cm.getConnection(hostkey) - if not host_connection: - print "SSH connection to host '%s' has not been established" % hostkey - return 1 - - mountpoints = [] - command = base_command + device - print "%s : %s" % (hostkey, command) - output = host_connection.executecommand(command) - if not output["exitstatus"]: - for data in output["stdoutdata"]: - mountpoints.append(data.split(" ")[2]) - - return mountpoints - -def execute_command(hostkey, command, commandInput=None): - """ - """ - cm = GlobalObj.getConnectionsManagerObj() - host_connection = cm.getConnection(hostkey) - if not host_connection: - print "SSH Connection Not established to host '%s' " % hostkey - return 1 - new_command = _substitute_value_for_variables(hostkey, command) - - print "%s : %s" % (hostkey, command) - output = host_connection.executecommand(new_command, commandInput) - return_status = atfutils.assert_success(**output) - atfutils.print_stdout(output['stdoutdata']) - atfutils.print_stderr(output['stderrdata']) - return return_status - - -def _substitute_value_for_variables(hostkey, command): - """ - """ - pattern_for_variables = re.compile("<[a-z]+\d*>") - pattern_for_hosts = re.compile('(server|client|master)*') - variables_to_replace = [] - replace_values = {} - new_command = command - Functions_Map = { - "server" : "getserver", - "client" : "getclient", - "master" : "getmaster" - } - variables = pattern_for_variables.findall(command) - host = None - - if not variables: - return new_command - - else: - result = pattern_for_hosts.match(hostkey.lower()).group(0) - if result: - funcname = Functions_Map[result] - function = getattr(env, funcname) - if re.match("master", result): - host = function() - else: - host = function(hostkey) - - if not host: - print "No Host to execute the command\n" - return 1 - - for variable in variables: - if variable not in variables_to_replace: - variables_to_replace.append(variable.strip("<>")) - - for variable in variables_to_replace: - value = host.__getattribute__(variable) - replace_values[variable] = value - - for key in replace_values.keys(): - value = replace_values[key] - key = "<" + key + ">" - pattern = re.compile(key) - new_command = pattern.sub(value, new_command) - - return new_command - -__all__ = ['cd', - 'rmdir', - 'mkdir', - 'mkfs', - 'find_mountpoints', - 'execute_command'] diff --git a/SharedModules/Utils/managerutils.py b/SharedModules/Utils/managerutils.py deleted file mode 100644 index ca38b3f..0000000 --- a/SharedModules/Utils/managerutils.py +++ /dev/null @@ -1,55 +0,0 @@ -"""managerutils module. - -Supported Wrappers:- ---------------- -*) ssh_connect -*) ssh_connect_allhosts -""" - -import re -import ssh -from atfglobals import GlobalObj - -def ssh_connect(hostkey): - """ - """ - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - host_connection = cm.getConnection(hostkey) - if not host_connection: - host_obj = env.getHost(hostkey) - if not host_obj: - print "Invalid Host. %s is not defined in TestEnvironment" % hostkey - return 1 - else: - host_connection = ssh.SshConnection() - if host_connection.connect(host_obj.hostname, host_obj.user, - host_obj.password): - return 1 - else: - if re.match("server", hostkey, re.IGNORECASE): - cm.addServer(hostkey, host_connection) - else: - cm.addClient(hostkey, host_connection) - return 0 - else: - print "Connection to %s already exist" % hostkey - - return 0 - -def ssh_connect_allhosts(): - """ - """ - env = GlobalObj.getTestenvObj() - cm = GlobalObj.getConnectionsManagerObj() - hosts_keys = env.getHostsKeys() - for hostkey in hosts_keys: - return_status = ssh_connect(hostkey) - if return_status: - return return_status - - return 0 - -__all__ = ['ssh_connect', - 'ssh_connect_allhosts'] - diff --git a/SharedModules/Utils/serverutils.py b/SharedModules/Utils/serverutils.py deleted file mode 100644 index 618ee23..0000000 --- a/SharedModules/Utils/serverutils.py +++ /dev/null @@ -1,33 +0,0 @@ -"""serverutils module -""" -import re -import hostutils -from atfglobals import GlobalObj - -def execute_on_brick(brickkey, command, commandInput=None): - """ - """ - env = GlobalObj.getTestenvObj() - - raw_brick_obj = env.getRawBrick(brickkey) - if not raw_brick_obj: - print "InValid Brick. %s not defined in TestEnvironment" % brickkey - return 1 - serverkey = re.split("\.", raw_brick_obj.hostname, maxsplit=1)[0] - - brick_obj = env.getBrick(brickkey) - if not brick_obj: - print "InValid Brick. %s not defined in TestEnvironment" % brickkey - return 1 - exportdirpath = brick_obj.path - - command = "cd " + exportdirpath + ";" + command - return_status = hostutils.execute_command(serverkey, command, commandInput) - return return_status - -__all__ = ['execute_on_brick'] - - - - - diff --git a/Templates/GlobalParam.cfg b/Templates/GlobalParam.cfg deleted file mode 100755 index 9e74e6d..0000000 --- a/Templates/GlobalParam.cfg +++ /dev/null @@ -1,95 +0,0 @@ -############################################################################# -## GlobalParameter File -## This File is used to specify the TestEnvironment/TestBed under Test. -############################################################################# - -############################################################################# -## Section: [Hosts] -## host = IP_Address of the Machine -## Example: -## host1 = 192.168.0.2 -## host2 = 192.168.0.3 -############################################################################# -[Hosts] -host1 = - -############################################################################# -## Section: [Users] -## user = Name of the User involved -## Example: -## user1 = root -## user2 = qa -############################################################################# -[Users] -user1 = - -############################################################################# -## Section: [Servers] -## server = user@host combination. -## List of Servers in the TestEnvironment. -## Every SSH Connection is recognized by user@host. -## -## Example: -## server1 = user1@host1 -############################################################################# -[Servers] -server1 = - -############################################################################# -## Section: [Clients] -## server = user@host combination. -## List of Clients in the TestEnvironment. -## Every SSH Connection is recognized by user@host. -## -## Example: -## client1 = user2@host1 -############################################################################# -[Clients] -client1 = - -############################################################################# -## Section: [ExportDirs] -## exportdir = Absolute Path of the exportdirectories -## -## Example: -## export1 = /home/export1 -## export2 = /home/export2 -############################################################################# -[ExportDirs] -export1 = - -############################################################################# -## Section: [MountPoints] -## mount = Absolute Path of the Mount Points -## -## Example: -## mount1 = /mnt/client1 -## mount2 = /mnt/client2 -############################################################################# -[MountPoints] -mount1 = - -############################################################################# -## Section: [Volumes] -## volume = name of the volume -## -## Example: -## volume1 = replicate_volume -## volume2 = distribute_volume -## volume3 = stripe_volume -############################################################################# -[Volumes] -volume1 = - -############################################################################# -## Section: [GlusterfsVersion] -## version = GlusterFSVersion under test -## Example: -## version = 3.2 -############################################################################# -[GlusterfsVersion] -version = - - - - diff --git a/Templates/config.cfg b/Templates/config.cfg deleted file mode 100755 index e498115..0000000 --- a/Templates/config.cfg +++ /dev/null @@ -1,99 +0,0 @@ -############################################################################# -## ATF Configuration File. This is input for the atf.py python script. -## This File contains various sections. -## The information under each section will be used for Selecting/Running Tests -############################################################################# - -############################################################################# -## Section: [Keywords] -## Used to select the testcases tagged with keystring for test execution. -## keystring: sanity -## Selects all testcases tagged with sanity keyword under given TestUnit -## (This is used for Sanity Runs) -## keystring: art -## Selects all testcases tagged with art keyword under given TestUnit -## (This is used for Regression Runs) -## Example: -## keystring = art -## keystring = sanity -############################################################################# -[Keywords] -keystring = - -############################################################################# -## Section: [WorkUnits] -## unit specifies glusterfs features (testuntis) under test. -## Each TestUnit is directory under Glusterfs/TestUnits directory -## Example: -## unit1 = Replication -## unit2 = Replication/Self-heal -## unit3 = Distribution -## unit4 = Stripe -############################################################################# -[WorkUnits] -unit1 = - -############################################################################# -## Section: [ATFRoot] -## rootdir = absolute path of the directory where Automation Framework -## is Installed -## Example: -## rootdir = /ATF -## rootdir = /home/qa/ATF -############################################################################# -[ATFRoot] -rootdir = - -############################################################################# -## Section: [SummaryLog] -## filename = FileName to Log SummaryLogs -## loglevel = LogLevel could be debug| info | warning | error -## Example: -## filename = SummaryLog.out -## loglevel = info -############################################################################# -[SummaryLog] -filename = -loglevel = - -############################################################################# -## Section: [DetailLog] -## filename = FileName to Log DetailLogs of test case execution -## loglevel = LogLevel could be debug| info | warning | error -## Example: -## filename = DetailLog.out -## loglevel = info -############################################################################# -[DetailLog] -filename = -loglevel = - -############################################################################# -## Section: [StdoutLog] -## do_log = true | false. -## If do_log = true, Log to STDOUT. Else, do not log to STDOUT. -## loglevel = LogLevel could be debug| info | warning | error -## Example: -## do_log = true -## loglevel = info -############################################################################# -[StdoutLog] -do_log = -loglevel = - -############################################################################# -## Section: [GlobalParam] -## filename = Absolute path of the global Parameter File. -## GlobalParam file contains information about the TestEnvironment. -## Example: -## filename = /ATF/GlobalParam.cfg -## filename = /home/qa/ATF/GlobalParam.cfg -############################################################################# -[GlobalParam] -filename = - - - - - - diff --git a/TestUnits/replicate/self_heal/Main.py b/TestUnits/replicate/self_heal/Main.py deleted file mode 100644 index 4e37265..0000000 --- a/TestUnits/replicate/self_heal/Main.py +++ /dev/null @@ -1,69 +0,0 @@ -"""Main module for the testunit. - -This module "main" function is called from atfexecute to execute the testunit. -""" -import parser -import atfutils -import glusterutils -import managerutils -import testcases - -def initialize(filename): - """ - """ - return_status = 1 - if parser.parse_testenv_configfile(filename): - return return_status - if managerutils.ssh_connect_allhosts(): - return return_status - - return 0 - -def setup(): - """ - """ - return_status = 1 - if atfutils.set_active_volume("volume1"): - return return_status - return 0 - -def execute(*testcaselist): - """ - """ - passedtestcases = 0 - failedtestcases = 0 - selectedtestcases = len(testcaselist) - - for testcase in testcaselist: - function_obj = getattr(testcases, testcase) - if function_obj: - print "Starting Test: ' %s '" % testcase - return_status = function_obj() - if return_status: - print "TestCase ' %s ' Failed" % testcase - failedtestcases += 1 - else: - print "TestCase ' %s ' Passed" % testcase - passedtestcases += 1 - print "Ending Test: ' %s '" % testcase - else: - print "TestCase %s not defined in 'testcases' module" % testcase - continue - - print "Selected %d : Passed %d, Failed %d" % (selectedtestcases, - passedtestcases, - failedtestcases) - -def cleanup(): - """ - """ - pass - -def main(testenvfile, *testcaselist): - """ - """ - initialize(testenvfile) - setup() - execute(*testcaselist) - cleanup() - return diff --git a/TestUnits/replicate/self_heal/testcases.py b/TestUnits/replicate/self_heal/testcases.py deleted file mode 100644 index 0015e5f..0000000 --- a/TestUnits/replicate/self_heal/testcases.py +++ /dev/null @@ -1,96 +0,0 @@ -"""testcases for replicate/self-heal -""" - -import sys -import time -import hostutils -import managerutils -import glusterutils -import atfutils -import clientutils -import serverutils -import parser - -def reset_testenv(): - return_status = 1 - if clientutils.umountall(): - return return_status - glusterutils.volume_stop("server1", force=True) - glusterutils.volume_delete("server1") - glusterutils.glusterd_stop_allservers() - glusterutils.glusterd_remove_dir_allservers() - glusterutils.glusterd_remove_logs_allservers() - return 0 - -def setup_testenv(): - """ - """ - return_status = 1 - if glusterutils.glusterd_start_allservers(force=True): - return return_status - if glusterutils.peer_probe("server1"): - return return_status - if glusterutils.create_brick_allservers(): - return return_status - if glusterutils.volume_create("server1"): - return 1 - glusterutils.volume_set("server1", key="diagnostics.client-log-level", value="DEBUG") - if glusterutils.volume_start("server1"): - return 1 - if clientutils.mountall(): - return 1 - return 0 - -def test001(): - """ - Description: Test for failure when the entry does not exist - """ - return_status = 1 - if reset_testenv(): - return return_status - if setup_testenv(): - return return_status - return_status = clientutils.execute_on_mount("mount1", "ls abcd") - - if return_status: - test_status = 0 - else: - test_status = 1 - - return test_status - -def test002(): - """ - Description: Test for estale when the fs is stale - """ - return_status = 1 - if reset_testenv(): - return return_status - if setup_testenv(): - return return_status - - clientutils.execute_on_mount("mount1", "touch file") - serverutils.execute_on_brick("brick1", - "setfattr -n trusted.gfid -v 0sBfz5vAdHTEK1GZ99qjqTIg== file") - return_status = clientutils.execute_on_mount("mount1", "find file | xargs stat") - - if return_status: - test_status = 0 - else: - test_status = 1 - - return test_status - - - - - - - - - - - - - - diff --git a/TestUnits/replicate/self_heal/testcaseslist b/TestUnits/replicate/self_heal/testcaseslist deleted file mode 100644 index ba90492..0000000 --- a/TestUnits/replicate/self_heal/testcaseslist +++ /dev/null @@ -1,9 +0,0 @@ -################################################################# -# List of testcases for the self-heal feature of afr. -# TestCaseId : Version : Keyword -################################################################## -test001 : >= 3.2 : art -test002 : >= 3.2 : art - - - diff --git a/TestUnits/replicate/self_heal/testenv.cfg b/TestUnits/replicate/self_heal/testenv.cfg deleted file mode 100644 index a8b15c8..0000000 --- a/TestUnits/replicate/self_heal/testenv.cfg +++ /dev/null @@ -1,98 +0,0 @@ -[DEFAULT] -user = root -password = syst3m -glusterversion = 3.2.5 -installpath = -downloadpath = - -# ExportDir Section. -# Necessary Options: dir -# Optional: fstype, device -[export1] -dir = /export -fstype = xfs -device = /dev/sdb1 - -[export2] -dir = /export -fstype = xfs -device = /dev/sda1 - -# Server Section -# Necessary Options: hostname, username, password, glusterversion. -# The username, password, glusterversion defaults from DEFAULTS Section and -# can be overridden -# Optional: installpath -[server1] -hostname = 10.1.11.110 - -[server2] -hostname = 10.1.11.111 - -# Brick Section -# Necessary Options: hostname, path -[brick1] -hostname = server1.hostname -path = export1 - -[brick2] -hostname = server2.hostname -path = export2 - - -# Volume Section -# Necessary Options: volumename, volumetype, count, transporttype, bricks -[volume1] -volumename = replicate -volumetype = replica -count = 2 -transporttype = tcp -bricks = brick1, brick2 - -# Client Section -# Necessary Options: hostname, username, password, glusterversion. -# The username, password, glusterversion defaults from DEFAULTS Section and -# can be overridden -# Optional: installpath -[client1] -hostname = 10.1.11.109 - -# MountDevice Section -# Necessary Options: hostname, volume -# The Server1.hostname could be a VIP also. Need not be a server hostname -# IN a general case,(without NFS) we keep the 1st server from serverpool -# The volume specified in this section is the "active_volume" onto which all -# clients will be mounting to. This active volume and hostname can be changed -# during testrun. -[mountdevice1] -hostname = server1.hostname -volumename = volume1.volumename - -# Mount Section -# addMount(dir, type, client, device=master.volume, logfile=None) -[mount1] -dir = /mnt/replicate1 -client = client1 -device = mountdevice1 -type = glusterfs -logfile = -options = - -[mount2] -dir = /mnt/replicate2 -client = client1 -device = mountdevice1 -type = glusterfs - -[mount3] -dir = /mnt/replicate3 -client = client1 -device = mountdevice1 -type = glusterfs - - - - - - - diff --git a/atf.py b/atf.py deleted file mode 100755 index 63b0f9d..0000000 --- a/atf.py +++ /dev/null @@ -1,51 +0,0 @@ -"""atf module is the entry point of the regression suite. - -CommandLine Usage: python atf.py -f testruninfo.cfg -""" -import argparse -import atfinit -import atfexecute - -def main(args): - """ - Description: - *) Initialize TestRun - *) Execute TestUnits - - Parameters: - args: Command Line Arguments passed to 'atf' - - Returns: - Success: 0 - Failure: 1 - """ - if atfinit.initialize(args): - exit(1) - - if atfexecute.execute(): - exit(1) - - else: - exit(0) - -if __name__ == "__main__": - - argparser = argparse.ArgumentParser( - description="Runs GlusterFS Functional/Regression Test Suite", - epilog="Report Bugs to dl-qa@gluster.com") - - argparser.add_argument('-f', '--file', required=True, type=str, - help="TestRunInfo FileName") - - args = argparser.parse_args() - - main(args) - - - - - - - - - diff --git a/atfexecute.py b/atfexecute.py deleted file mode 100644 index a60402b..0000000 --- a/atfexecute.py +++ /dev/null @@ -1,63 +0,0 @@ -"""atfexecute -""" - -import os.path -import sys -import parser -from atfglobals import GlobalObj - -def _execute_testunit(testunit): - """ - *) Parse the testcaseslist file in the 'testunit' and select test cases - specified for testing 'glusterversion' - *) Call Main.py of 'testunit' to execute the testcases. - """ - return_status = 1 - testruninfo_obj = GlobalObj.getTestrunInfoObj() - atfdir = testruninfo_obj.getAtfDir() - testunit_abspath = atfdir + "/TestUnits/" + testunit - - testenvfile = testunit_abspath + "/testenv.cfg" - testcaseslistfile = testunit_abspath + "/testcaseslist" - - if not os.path.exists(testenvfile): - default_testenvfile = atfdir + "testenv.cfg" - if not os.path.exists(testenvfile): - print "Skipping TestUnit %s . TestEnv File Not Found" % testenvfile - return return_status - else: - testenvfile = default_testenvfile - - if not os.path.exists(testcaseslistfile): - print "Skipping TestUnit %s" % testunit - return return_status - else: - testcaseslist = [] - testcasespassed = None - testcasesfailed = None - totaltestcases = None - - testcaseslist = parser.parse_testcaseslist_file(testcaseslistfile) - if not testcaseslist: - print "Skipping TestUnit %s. No testcases to execute" % testunit - return return_status - else: - sys.path.append(testunit_abspath) - import Main - print "Executing TestUnit: %s" % testunit - print "-" * 50 - return_status = Main.main(testenvfile, *testcaseslist) - return return_status - -def execute(): - """ - *) Execute the TestsCases form TestUnits specified in TestRunInfo File - """ - testruninfo_obj = GlobalObj.getTestrunInfoObj() - testunits = testruninfo_obj.getTestUnits() - for testunit in testunits: - _execute_testunit(testunit) - - return 0 - -__all__ = ['execute'] diff --git a/atfinit.py b/atfinit.py deleted file mode 100644 index f50eefb..0000000 --- a/atfinit.py +++ /dev/null @@ -1,27 +0,0 @@ -"""atfinit module - -""" -import os.path -import parser -from atfglobals import GlobalObj - -def _initialize_testrun_info(testrun_info_filename): - """ - """ - return_status = 1 - if not os.path.exists(testrun_info_filename): - print "Testrun Info File ' %s ' not found" % testrun_info_filename - return return_status - else: - return_status = parser.parse_testrun_info_file(testrun_info_filename) - return return_status - -def initialize(args): - """ - *) Initialize TestrunInfo File - """ - testrun_info_filename = args.file - return_status = _initialize_testrun_info(testrun_info_filename) - return return_status - -__all__ = ['initialize'] diff --git a/atfsetup.py b/atfsetup.py deleted file mode 100644 index 8631ab4..0000000 --- a/atfsetup.py +++ /dev/null @@ -1,37 +0,0 @@ -"""atf setup -""" - -from atfglobals import GlobalObj - -def _setup_loggers(): - """ - """ - testruninfo_obj = GlobalObj.getTestrunInfoObj() - logger_obj = GlobalObj.getLoggerObj() - - summaryloginfo = testruninfo_obj.getSummaryLogInfo() - detailloginfo = testruninfo_obj.getDetailLogInfo() - stdoutloginfo = testruninfo_obj.getStdoutLogInfo() - - logger_obj.setSummaryLog(summaryloginfo['filename'], - summaryloginfo['loglevel']) - loggerobj.setDetailLog(detailloginfo['filename'], - detailloginfo['loglevel']) - loggerobj.setStdoutLog(stdoutloginfo['do_log'], - stdoutloginfo['loglevel']) - - atfdir = testruninfo_obj.getAtfDir() - return_status = logger_obj.createLogger(atfdir) - if return_status: - print "Unable to create Loggers" - return return_status - -def setup(): - """ - *) Setup SummaryLogs , DetailLogs Handlers - """ - return_status = _setup_loggers() - return return_status - -__all__ = ['setup'] - diff --git a/export.py b/export.py deleted file mode 100755 index e33812a..0000000 --- a/export.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python - -import os -import os - -exportstr = '' -libdir = os.getcwd() + "/SharedModules/" -for dirname, dirnames, filenames in os.walk(libdir): - for subdirname in dirnames: - exportstr = exportstr + os.path.join(dirname, subdirname) + ':' - -exportstr = os.getcwd() + ":" + libdir + ":" + exportstr -print exportstr diff --git a/testruninfo.cfg b/testruninfo.cfg deleted file mode 100755 index ed65461..0000000 --- a/testruninfo.cfg +++ /dev/null @@ -1,99 +0,0 @@ -############################################################################# -## ATF Configuration File. This is input for the atf.py python script. -## This File contains various sections. -## The information under each section will be used for Selecting/Running Tests -############################################################################# - -############################################################################# -## Section: [Keywords] -## Used to select the testcases tagged with keystring for test execution. -## keywords: sanity -## Selects all testcases tagged with sanity keyword under given TestUnit -## (This is used for Sanity Runs) -## keywords: art -## Selects all testcases tagged with art keyword under given TestUnit -## (This is used for Regression Runs) -## Example: -## keywords = art -## keywords = sanity -############################################################################# -[Keywords] -keywords = - -############################################################################# -## Section: [WorkUnits] -## unit specifies glusterfs features (testuntis) under test. -## Each TestUnit is directory under Glusterfs/TestUnits directory -## Example: -## unit1 = Replication -## unit2 = Replication/Self-heal -## unit3 = Distribution -## unit4 = Stripe -############################################################################# -[TestUnits] -unit1 = replicate/self_heal - -############################################################################# -## Section: [ATFDir] -## atfdir = absolute path of the directory where Automation Framework -## is Installed -## Example: -## dir = /ATF -## dir = /home/qa/ATF -############################################################################# -[ATFDir] -dir = /home/shwetha/PythonCustomLibs/ATF - -############################################################################# -## Section: [SummaryLog] -## filename = FileName to Log SummaryLogs -## loglevel = LogLevel could be debug| info | warning | error -## Example: -## filename = SummaryLog.out -## loglevel = info -############################################################################# -[SummaryLog] -filename = -loglevel = - -############################################################################# -## Section: [DetailLog] -## filename = FileName to Log DetailLogs of test case execution -## loglevel = LogLevel could be debug| info | warning | error -## Example: -## filename = DetailLog.out -## loglevel = info -############################################################################# -[DetailLog] -filename = -loglevel = - -############################################################################# -## Section: [StdoutLog] -## do_log = true | false. -## If do_log = true, Log to STDOUT. Else, do not log to STDOUT. -## loglevel = LogLevel could be debug| info | warning | error -## Example: -## do_log = true -## loglevel = info -############################################################################# -[StdoutLog] -do_log = -loglevel = - -############################################################################# -## Section: [GlusterVersion] -## filename = Version of the 'Gluster' for testing -## -## Example: -## version = '3.3.2' -## -############################################################################# -[GlusterVersion] -version = 3.2.5 - - - - - - -- cgit