summaryrefslogtreecommitdiffstats
path: root/tests/distaf
diff options
context:
space:
mode:
authorShwetha Panduranga <spandura@redhat.com>2016-06-27 02:26:06 +0530
committerKaushal M <kaushal@redhat.com>2016-06-26 21:15:12 -0700
commitd2842f1b58ed31a45f9fb69efa4f4c7ae5ffd984 (patch)
tree8850c035aed8d3edf7f947d1e0c731dd40ee658d /tests/distaf
parenteaadde082e460eb3c2d90965d3e85e1766936f16 (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')
-rw-r--r--tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_base_class.py93
-rw-r--r--tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/gluster_init.py9
-rw-r--r--tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/mount_ops.py192
-rw-r--r--tests/distaf/tests_d/distaf_gluster_config.yml13
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