diff options
| author | Shwetha Panduranga <spandura@redhat.com> | 2016-06-27 02:26:06 +0530 | 
|---|---|---|
| committer | Kaushal M <kaushal@redhat.com> | 2016-06-26 21:15:12 -0700 | 
| commit | d2842f1b58ed31a45f9fb69efa4f4c7ae5ffd984 (patch) | |
| tree | 8850c035aed8d3edf7f947d1e0c731dd40ee658d /tests/distaf | |
| parent | eaadde082e460eb3c2d90965d3e85e1766936f16 (diff) | |
Modifying gluster_base_class and mount_ops to suit the config file changes made
Change-Id: Ic551724dd27fcc2cc618e8de04110752bf5a8786
BUG: 1350017
Signed-off-by: Shwetha Panduranga <spandura@redhat.com>
Reviewed-on: http://review.gluster.org/14808
Tested-by: ShwethaHPanduranga
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Jonathan Holloway <jholloway@redhat.com>
Smoke: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'tests/distaf')
4 files changed, 251 insertions, 56 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..367570d6e0e 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,8 @@  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 +from distaflibs.gluster.gluster_init import env_setup_servers  class GlusterBaseClass(): @@ -33,25 +35,48 @@ 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']) +            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,29 +87,39 @@ 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")              return False -        ret = setup_vol(self.volname, dist, rep, dispd, red, stripe, trans, -                        servers=self.servers) +        ret = setup_vol(self.volname, self.mnode, dist, rep, dispd, red, +                        stripe, trans, servers=self.servers)          if not ret:              tc.logger.error("Unable to setup volume %s", self.volname)              return False @@ -94,7 +129,11 @@ class GlusterBaseClass():          """              Function to setup the volume for testing.          """ -        volinfo = get_volume_info(server=self.servers[0]) +        if not env_setup_servers(): +            tc.logger.error("Unable to setup testenv") +            return False + +        volinfo = get_volume_info(mnode=self.servers[0])          if volinfo is not None and self.volname in volinfo.keys():              tc.logger.debug("The volume %s is already present in %s",                              self.volname, self.mnode) diff --git a/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_init.py b/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_init.py index 633208ca49c..9a3c8599724 100644 --- a/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_init.py +++ b/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_init.py @@ -17,7 +17,7 @@  from distaf.util import tc - +import re  """      This file contains the glusterd and other initial gluster      options like start/stop glusterd and env_setup_servers for @@ -67,4 +67,11 @@ def env_setup_servers(snap=True, servers=''):      """      tc.logger.info("The function isn't implemented yet")      tc.logger.info("Please setup the bricks manually.") + +    if servers == '': +        servers = tc.servers + +    if not start_glusterd(servers): +        return False +      return True 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..3082da0484f 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,140 @@  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. -        Returns a tuple of (returncode, stdout, stderr) -        Returns (0, '', '') if already mounted +    Args: +        volname (str): Name of the volume to mount. + +    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. +            (1, '', '') if setup_samba_service fails in case of smb. +            (ret, out, err) of mount commnd execution otherwise.      """      global tc      if mserver == '': @@ -39,24 +164,47 @@ 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)) + +    if mtype == 'cifs': +        from distaflibs.gluster.samba_ops import setup_samba_service +        smbuser = tc.global_config['gluster']['cluster_config']['smb']['user'] +        smbpasswd = (tc.global_config['gluster']['cluster_config']['smb'] +                     ['passwd']) + +        if not setup_samba_service(volname, mserver, smbuser, smbpasswd): +            tc.logger.error("Failed to setup samba service %s" % mserver) +            return (1, '', '') + +        mcmd = ("mount -t cifs -o username=root,password=%s " +                "\\\\\\\\%s\\\\gluster-%s %s" % (smbpasswd, mserver, +                                                 volname, mpoint)) +    # Create mount dir +    _, _, _ = tc.run(mclient, "test -d %s || mkdir -p %s" % (mpoint, mpoint), +                     verbose=False) + +    # Create mount      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..c9e8d824b64 100644 --- a/tests/distaf/tests_d/distaf_gluster_config.yml +++ b/tests/distaf/tests_d/distaf_gluster_config.yml @@ -68,10 +68,10 @@ gluster:              ctdb_vips:                  -   vip: vip1                      routing_prefix: '23' -                    interfaces: 'eth0' +                    interface: 'eth0'                  -   vip: vip2                      routing_prefix: '22' -                    interfaces: 'eth0' +                    interface: 'eth0'              ctdb_metavol_brick_path: ''          nfs_ganesha: @@ -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  | 
