diff options
Diffstat (limited to 'tests')
3 files changed, 216 insertions, 51 deletions
diff --git a/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_base_class.py b/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_base_class.py index 128288bb10f..dbbe02de7de 100644 --- a/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_base_class.py +++ b/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_base_class.py @@ -19,6 +19,7 @@ from distaf.util import tc from distaflibs.gluster.volume_ops import (setup_vol, get_volume_info, cleanup_volume) +from distaflibs.gluster.mount_ops import GlusterMount class GlusterBaseClass(): @@ -32,26 +33,49 @@ class GlusterBaseClass(): """ Initialise the class with the config values """ - if config_data['global_mode']: - self.volname = config_data['volumes'].keys()[0] - self.voltype = config_data['volumes'][self.volname]['voltype'] - self.servers = config_data['volumes'][self.volname]['servers'] - self.peers = config_data['volumes'][self.volname]['peers'] - self.clients = config_data['volumes'][self.volname]['clients'] - self.mount_proto = (config_data['volumes'][self.volname] - ['mount_proto']) - self.mountpoint = (config_data['volumes'][self.volname] - ['mountpoint']) + if config_data['gluster']['global_mode']: + self.volname = config_data['gluster']['volumes'][0]['name'] + self.voltype = (config_data['gluster']['volumes'][0]['voltype'] + ['type']) + self.servers = [] + for server in config_data['gluster']['volumes'][0]['servers']: + self.servers.append(server['host']) + self.peers = config_data['gluster']['volumes'][0]['peers'] + self.mounts = [] + for mount in config_data['gluster']['mounts']: + mount['client'] = mount['client']['host'] + mount['server'] = mount['server']['host'] + self.mounts.append(GlusterMount(mount)) + self.clients = [] + for mount_obj in self.mounts: + self.clients.append(mount_obj.client_system) + self.clients = filter(None, self.clients) + else: self.voltype = config_data['voltype'] self.volname = "%s-testvol" % self.voltype - self.servers = config_data['servers'].keys() - self.clients = config_data['clients'].keys() + self.servers = [] + for server in config_data['servers']: + self.servers.append(server['host']) + self.clients = [] + for client in config_data['clients']: + self.clients.append(client['host']) self.peers = [] if config_data['peers'] is not None: - self.peers = config_data['peers'].keys() + for peer in config_data['peers']: + self.peers.append(peers['host']) + self.mounts = [] self.mount_proto = config_data['mount_proto'] self.mountpoint = "/mnt/%s_mount" % self.mount_proto + for client in self.clients: + mount = {} + mount['protocol'] = config_data['mount_proto'] + mount['mountpoint'] = "/mnt/%s_mount" % self.mount_proto + mount['server'] = self.servers[0] + mount['client'] = client + mount['volname'] = self.volname + mount['options'] = "" + self.mounts.append(GlusterMount(mount)) self.mnode = self.servers[0] self.config_data = config_data @@ -62,23 +86,33 @@ class GlusterBaseClass(): dist = rep = dispd = red = stripe = 1 trans = '' if self.voltype == 'distribute': - dist = self.config_data[self.voltype]['dist_count'] - trans = self.config_data[self.voltype]['transport'] + dist = (self.config_data['gluster']['volume_types'][self.voltype] + ['dist_count']) + trans = (self.config_data['gluster']['volume_types'][self.voltype] + ['transport']) elif self.voltype == 'replicate': - rep = self.config_data[self.voltype]['replica'] - trans = self.config_data[self.voltype]['transport'] + rep = (self.config_data['gluster']['volume_types'][self.voltype] + ['replica_count']) + trans = (self.config_data['gluster']['volume_types'][self.voltype] + ['transport']) elif self.voltype == 'dist_rep': - dist = self.config_data[self.voltype]['dist_count'] - rep = self.config_data[self.voltype]['replica'] - trans = self.config_data[self.voltype]['transport'] + dist = (self.config_data['gluster']['volume_types'][self.voltype] + ['dist_count']) + rep = (self.config_data['gluster']['volume_types'][self.voltype] + ['replica_count']) + trans = (self.config_data['gluster']['volume_types'][self.voltype] + ['transport']) elif self.voltype == 'disperse': - dispd = self.config_data[self.voltype]['disperse'] - red = self.config_data[self.voltype]['redundancy'] - trans = self.config_data[self.voltype]['transport'] + dispd = (self.config_data['gluster']['volume_types'][self.voltype] + ['disperse_count']) + red = (self.config_data['gluster']['volume_types'][self.voltype] + ['redundancy_count']) + trans = (self.config_data['gluster']['volume_types'][self.voltype] + ['transport']) elif self.voltype == 'dist_disperse': dist = self.config_data[self.voltype]['dist_count'] - dispd = self.config_data[self.voltype]['disperse'] - red = self.config_data[self.voltype]['redundancy'] + dispd = self.config_data[self.voltype]['disperse_count'] + red = self.config_data[self.voltype]['redundancy_count'] trans = self.config_data[self.voltype]['transport'] else: tc.logger.error("The volume type is not present") diff --git a/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/mount_ops.py b/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/mount_ops.py index 2d435f40d53..2ee5b815c53 100644 --- a/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/mount_ops.py +++ b/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/mount_ops.py @@ -18,15 +18,139 @@ from distaf.util import tc +class GlusterMount(): + """Gluster Mount class -def mount_volume(volname, mtype='glusterfs', mpoint='/mnt/glusterfs', \ - mserver='', mclient='', options=''): + Args: + mount (dict): Mount dict with 'mount_protocol', 'mountpoint', + 'server', 'client', 'volname', 'options' as keys + + Returns: + Instance of GlusterMount class + """ + client_register = 0 + + def __init__(self, mount): + if mount['protocol']: + self.mounttype = mount['protocol'] + else: + self.mounttype = "glusterfs" + + if mount['mountpoint']: + self.mountpoint = mount['mountpoint'] + else: + self.mountpoint = "/mnt/%s" % self.mounttype + + self.server_system = mount['server'] + self.client_system = mount['client'] + self.volname = mount['volname'] + self.options = mount['options'] + + def mount(self): + """Mounts the volume + + Args: + uses instance args passed at init + + Returns: + bool: True on success and False on failure. + """ + (_retcode, _, _) = mount_volume(self.volname, + mtype=self.mounttype, + mpoint=self.mountpoint, + mserver=self.server_system, + mclient=self.client_system, + options=self.options) + + if _retcode == 0: + return True + else: + return False + + def is_mounted(self): + """Tests for mount on client + + Args: + uses instance args passed at init + + Returns: + bool: True on success and False on failure. + """ + _retcode = is_mounted(self.volname, + mpoint=self.mountpoint, + mserver=self.server_system, + mclient=self.client_system) + + if _retcode: + return True + else: + return False + + def unmount(self): + """Unmounts the volume + + Args: + uses instance args passed at init + + Returns: + bool: True on success and False on failure. + """ + (_retcode, _, _) = umount_volume(self.client_system, + self.mountpoint) + + if _retcode == 0: + return True + else: + return False + +def is_mounted(volname, mpoint, mserver, mclient): + """Check if mount exist. + + Args: + volname (str): Name of the volume + mpoint (str): Mountpoint dir + mserver (str): Server to which it is mounted to + mclient (str): Client from which it is mounted. + + Returns: + bool: True if mounted and False otherwise. """ - Mount the gluster volume with specified options - Takes the volume name as mandatory argument + # python will error on missing arg, so just checking for empty args here + if not volname or not mpoint or not mserver or not mclient: + tc.logger.error("Missing arguments for mount.") + return False + + ret, _, _ = tc.run(mclient, "mount | grep %s | grep %s | grep \"%s\"" + % (volname, mpoint, mserver), verbose=False) + if ret == 0: + tc.logger.debug("Volume %s is mounted at %s:%s" % (volname, + mclient, + mpoint)) + return True + else: + tc.logger.error("Volume %s is not mounted at %s:%s" % (volname, + mclient, + mpoint)) + return False + +def mount_volume(volname, mtype='glusterfs', mpoint='/mnt/glusterfs', + mserver='', mclient='', options=''): + """Mount the gluster volume with specified options. + + Args: + volname (str): Name of the volume to mount. - Returns a tuple of (returncode, stdout, stderr) - Returns (0, '', '') if already mounted + Kwargs: + mtype (str): Protocol to be used to mount. + mpoint (str): Mountpoint dir. + mserver (str): Server to mount. + mclient (str): Client from which it has to be mounted. + option (str): Options for the mount command. + + Returns: + tuple: Tuple containing three elements (ret, out, err). + (0, '', '') if already mounted. + (ret, out, err) of mount commnd execution otherwise. """ global tc if mserver == '': @@ -39,24 +163,30 @@ def mount_volume(volname, mtype='glusterfs', mpoint='/mnt/glusterfs', \ options = "%s" % options elif mtype == 'nfs' and options == '': options = '-o vers=3' - ret, _, _ = tc.run(mclient, "mount | grep %s | grep %s | grep \"%s\"" \ - % (volname, mpoint, mserver), verbose=False) - if ret == 0: - tc.logger.debug("Volume %s is already mounted at %s" \ - % (volname, mpoint)) + + if is_mounted(volname, mpoint, mserver, mclient): + tc.logger.debug("Volume %s is already mounted at %s" % + (volname, mpoint)) return (0, '', '') - mcmd = "mount -t %s %s %s:/%s %s" % \ - (mtype, options, mserver, volname, mpoint) - tc.run(mclient, "test -d %s || mkdir -p %s" % (mpoint, mpoint), \ - verbose=False) + + mcmd = ("mount -t %s %s %s:/%s %s" % + (mtype, options, mserver, volname, mpoint)) + _, _, _ = tc.run(mclient, "test -d %s || mkdir -p %s" % (mpoint, mpoint), + verbose=False) return tc.run(mclient, mcmd) -def umount_volume(client, mountpoint): - """ - unmounts the mountpoint - Returns the output of umount command +def umount_volume(mclient, mpoint): + """Unmounts the mountpoint. + + Args: + mclient (str): Client from which it has to be mounted. + mpoint (str): Mountpoint dir. + + Returns: + tuple: Tuple containing three elements (ret, out, err) as returned by + umount command execution. """ - cmd = "umount %s || umount -f %s || umount -l %s" \ - % (mountpoint, mountpoint, mountpoint) - return tc.run(client, cmd) + cmd = ("umount %s || umount -f %s || umount -l %s" % + (mpoint, mpoint, mpoint)) + return tc.run(mclient, cmd) diff --git a/tests/distaf/tests_d/distaf_gluster_config.yml b/tests/distaf/tests_d/distaf_gluster_config.yml index 28ae6e2894e..45b52c2490d 100644 --- a/tests/distaf/tests_d/distaf_gluster_config.yml +++ b/tests/distaf/tests_d/distaf_gluster_config.yml @@ -81,24 +81,25 @@ gluster: volume_types: distribute: &distribute + type: distribute dist_count: 4 transport: tcp - replicate: &replicate + type: replicate replica_count: 3 transport: tcp - dist_rep: &dist_rep + type: dist_rep dist_count: 2 replica_count: 2 transport: tcp - disperse: &disperse + type: disperse disperse_count: 4 redundancy_count: 2 transport: tcp - dist_disperse: &dist_disperse + type: dist_disperse dist_count: 2 disperse_count: 4 redundancy_count: 2 |