From 01a5f8306b9f772fa1f5f46c07355b747a2c0af6 Mon Sep 17 00:00:00 2001 From: Shwetha Panduranga Date: Mon, 3 Oct 2016 15:38:38 +0530 Subject: Adding a bvt testcase Change-Id: Ide7e3bac46fbaf354a2a5c8baef8510b4aefec78 Signed-off-by: Shwetha Panduranga --- .../glustolibs/gluster/gluster_base_class.py | 84 ++++++++++++++++------ .../glustolibs/gluster/volume_libs.py | 49 ++++++++----- 2 files changed, 94 insertions(+), 39 deletions(-) (limited to 'glustolibs-gluster/glustolibs') diff --git a/glustolibs-gluster/glustolibs/gluster/gluster_base_class.py b/glustolibs-gluster/glustolibs/gluster/gluster_base_class.py index e63be6988..8ab513d00 100644 --- a/glustolibs-gluster/glustolibs/gluster/gluster_base_class.py +++ b/glustolibs-gluster/glustolibs/gluster/gluster_base_class.py @@ -24,7 +24,7 @@ import unittest from glusto.core import Glusto as g import os - +import random class runs_on(g.CarteTestClass): """Decorator providing runs_on capability for standard unittest script""" @@ -85,7 +85,7 @@ class GlusterBaseClass(unittest.TestCase): }, 'dispersed': { 'type': 'dispersed', - 'disperse_count': 4, + 'disperse_count': 6, 'redundancy_count': 2, 'transport': 'tcp' }, @@ -97,13 +97,13 @@ class GlusterBaseClass(unittest.TestCase): 'distributed-replicated': { 'type': 'distributed-replicated', 'dist_count': 2, - 'replica_count': 2, + 'replica_count': 3, 'transport': 'tcp' }, 'distributed-dispersed': { 'type': 'distributed-dispersed', 'dist_count': 2, - 'disperse_count': 4, + 'disperse_count': 6, 'redundancy_count': 2, 'transport': 'tcp' } @@ -112,12 +112,13 @@ class GlusterBaseClass(unittest.TestCase): # Get the volume configuration. cls.volume = {} found_volume = False - if 'volumes' in g.config['gluster']: - for volume in g.config['gluster']['volumes']: - if volume['voltype']['type'] == cls.volume_type: - cls.volume = volume - found_volume = True - break + if 'gluster' in g.config: + if 'volumes' in g.config['gluster']: + for volume in g.config['gluster']['volumes']: + if volume['voltype']['type'] == cls.volume_type: + cls.volume = volume + found_volume = True + break if found_volume: if not 'name' in cls.volume: @@ -144,28 +145,59 @@ class GlusterBaseClass(unittest.TestCase): cls.volume_type) return False + # SMB Info + if cls.mount_type == 'cifs' or cls.mount_type == 'smb': + cls.volume['smb'] = {} + cls.volume['smb']['enable'] = True + users_info_found = False + try: + if cls.volume['smb']['users_info']: + users_info_found = True + except KeyError: + users_info_found = False + + if not users_info_found: + cls.volume['smb']['users_info'] = {} + try: + cls.volume['smb']['users_info'] = ( + g.config['gluster']['cluster_config']['smb'] + ['users_info']) + except KeyError: + pass + + if not cls.volume['smb']['users_info']: + cls.volume['smb']['users_info']['root'] = {} + cls.volume['smb']['users_info']['root']['password'] = ( + 'foobar') + # Define Volume variables. cls.volname = cls.volume['name'] cls.servers = cls.volume['servers'] cls.voltype = cls.volume['voltype']['type'] cls.mnode = cls.servers[0] + try: + cls.smb_users_info = cls.volume['smb']['users_info'] + except KeyError: + cls.smb_users_info = {} # Get the mount configuration. cls.mounts_dict_list = [] cls.mounts = [] found_mount = False - if 'mounts' in g.config['gluster']: - for mount in g.config['gluster']['mounts']: - if mount['protocol'] == cls.mount_type: - if not 'volname' in mount: - mount['volname'] = cls.volname - if not 'server' in mount: - mount['server'] = mnode - if not 'mountpoint' in mount: - mount['mountpoint'] = (os.path.join( - "/mnt", '_'.join([cls.volname, cls.mount_type]))) - cls.mounts_dict_list.append(mount) - found_mount = True + if 'gluster' in g.config: + if 'mounts' in g.config['gluster']: + for mount in g.config['gluster']['mounts']: + if mount['protocol'] == cls.mount_type: + if ('volname' not in mount or (not mount['volname'])): + mount['volname'] = cls.volname + if ('server' not in mount or (not mount['server'])): + mount['server'] = mnode + if ('mountpoint' not in mount or + (not mount['mountpoint'])): + mount['mountpoint'] = (os.path.join( + "/mnt", '_'.join([cls.volname, cls.mount_type]))) + cls.mounts_dict_list.append(mount) + found_mount = True if not found_mount: for client in g.config['clients']: mount = { @@ -180,6 +212,14 @@ class GlusterBaseClass(unittest.TestCase): 'options': '' } cls.mounts_dict_list.append(mount) + + if cls.mount_type == 'cifs' or cls.mount_type == 'smb': + for mount in cls.mounts_dict_list: + if 'smbuser' not in mount: + mount['smbuser'] = random.choice(cls.smb_users_info.keys()) + mount['smbpasswd'] = ( + cls.smb_users_info[mount['smbuser']]['password']) + from glustolibs.gluster.mount_ops import create_mount_objs cls.mounts = create_mount_objs(cls.mounts_dict_list) diff --git a/glustolibs-gluster/glustolibs/gluster/volume_libs.py b/glustolibs-gluster/glustolibs/gluster/volume_libs.py index 37af7fa57..24aac821d 100644 --- a/glustolibs-gluster/glustolibs/gluster/volume_libs.py +++ b/glustolibs-gluster/glustolibs/gluster/volume_libs.py @@ -22,7 +22,18 @@ from glusto.core import Glusto as g import time -from glustolibs.gluster.volume_ops import get_volume_info +from glustolibs.gluster.lib_utils import form_bricks_list +from glustolibs.gluster.volume_ops import (volume_create, volume_start, + set_volume_options, get_volume_info, + volume_stop, volume_delete) +from glustolibs.gluster.tiering_ops import (add_extra_servers_to_cluster, + tier_attach, + is_tier_process_running) +from glustolibs.gluster.quota_ops import (enable_quota, set_quota_limit_usage, + is_quota_enabled) +from glustolibs.gluster.uss_ops import enable_uss, is_uss_enabled +from glustolibs.gluster.samba_ops import share_volume_over_smb +from glustolibs.gluster.snap_ops import snap_delete_by_volumename def setup_volume(mnode, all_servers_info, volume_config, force=False): @@ -180,6 +191,7 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): else: g.log.error("Invalid volume type defined in config") return False + # Get transport type if 'transport' in volume_config['voltype']: transpor_type = volume_config['voltype']['transport'] @@ -187,7 +199,6 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): transport_type = 'tcp' # get bricks_list - from glustolibs.gluster.lib_utils import form_bricks_list bricks_list = form_bricks_list(mnode=mnode, volname=volname, number_of_bricks=number_of_bricks, servers=servers, @@ -196,8 +207,8 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): g.log.error("Number_of_bricks is greater than the unused bricks on " "servers") return False + # Create volume - from glustolibs.gluster.volume_ops import volume_create ret, out, err = volume_create(mnode=mnode, volname=volname, bricks_list=bricks_list, force=force, **kwargs) @@ -207,7 +218,6 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): # Start Volume time.sleep(2) - from glustolibs.gluster.volume_ops import volume_start ret = volume_start(mnode, volname) if not ret: g.log.error("volume start %s failed" % volname) @@ -217,7 +227,6 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): if ('tier' in volume_config and 'create_tier' in volume_config['tier'] and volume_config['tier']['create_tier']): # get servers info for tier attach - from glustolibs.gluster.tiering_ops import add_extra_servers_to_cluster if ('extra_servers' in volume_config and volume_config['extra_servers']): extra_servers = volume_config['extra_servers'] @@ -256,7 +265,6 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): number_of_bricks = dist * rep # Attach Tier - from glustolibs.gluster.tiering_ops import tier_attach ret, out, err = tier_attach(mnode=mnode, volname=volname, extra_servers=extra_servers, extra_servers_info=all_servers_info, @@ -268,7 +276,6 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): time.sleep(30) # Check if tier is running - from glustolibs.gluster.tiering_ops import is_tier_process_running rc = True for server in extra_servers: ret = is_tier_process_running(server, volname) @@ -281,7 +288,6 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): # Enable Quota if ('quota' in volume_config and 'enable' in volume_config['quota'] and volume_config['quota']['enable']): - from glustolibs.gluster.quota_ops import enable_quota ret, _, _ = enable_quota(mnode=mnode, volname=volname) if ret != 0: g.log.error("Unable to set quota on the volume %s", volname) @@ -303,7 +309,6 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): size = "100GB" # Set quota_limit_usage - from glustolibs.gluster.quota_ops import set_quota_limit_usage ret, _, _ = set_quota_limit_usage(mnode=mnode, volname=volname, path=path, limit=size) if ret != 0: @@ -311,7 +316,6 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): return False # Check if quota is enabled - from glustolibs.gluster.quota_ops import is_quota_enabled ret = is_quota_enabled(mnode=mnode, volname=volname) if not ret: g.log.error("Quota not enabled on the volume %s", volname) @@ -320,13 +324,11 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): # Enable USS if ('uss' in volume_config and 'enable' in volume_config['uss'] and volume_config['uss']['enable']): - from glustolibs.gluster.uss_ops import enable_uss ret, out, err = enable_uss(mnode=mnode, volname=volname) if ret != 0: g.log.error("Unable to enable uss on the volume %s", volname) return False - from glustolibs.gluster.uss_ops import is_uss_enabled ret = is_uss_enabled(mnode=mnode, volname=volname) if not ret: g.log.error("USS is not enabled on the volume %s", volname) @@ -342,10 +344,27 @@ def setup_volume(mnode, all_servers_info, volume_config, force=False): ## g.log.error("failed to set the ganesha option for %s" % volname) ## return False + # Enable Samba + if ('smb' in volume_config and 'enable' in volume_config['smb'] and + volume_config['smb']['enable']): + smb_users_info = {} + if ('users_info' in volume_config['smb'] and + volume_config['smb']['users_info']): + smb_users_info = volume_config['smb']['users_info'] + else: + g.log.error("SMB Users info not available in the volume config." + "Unable to export volume %s as SMB Share" % volname) + return False + ret = share_volume_over_smb(mnode=mnode, volname=volname, + servers=servers, + smb_users_info=smb_users_info) + if not ret: + g.log.error("Failed to export volume %s as SMB Share" % volname) + return False + # Set all the volume options: if 'options' in volume_config: volume_options = volume_config['options'] - from glustolibs.gluster.volume_ops import set_volume_options ret = set_volume_options(mnode=mnode, volname=volname, options=volume_options) if not ret: @@ -370,8 +389,6 @@ def cleanup_volume(mnode, volname): Example: cleanup_volume("abc.xyz.com", "testvol") """ - from glustolibs.gluster.snap_ops import snap_delete_by_volumename - volinfo = get_volume_info(mnode, volname) if volinfo is None or volname not in volinfo: g.log.info("Volume %s does not exist in %s" % (volname, mnode)) @@ -383,13 +400,11 @@ def cleanup_volume(mnode, volname): "volume %s" % volname) return False - from glustolibs.gluster.volume_ops import volume_stop ret, _, _ = volume_stop(mnode, volname, force=True) if ret != 0: g.log.error("Failed to stop volume %s" % volname) return False - from glustolibs.gluster.volume_ops import volume_delete ret = volume_delete(mnode, volname) if not ret: g.log.error("Unable to cleanup the volume %s" % volname) -- cgit