From 46cd43fdf401b16f9e1b588e5fc8d2c5dd599b37 Mon Sep 17 00:00:00 2001 From: Thiago da Silva Date: Tue, 8 Oct 2013 13:39:25 -0400 Subject: Adding new unit tests and removed some unused functions New unit tests help improve test coverage of common/Glusterfs.py code Also removed a function that was no longer being used. Change-Id: Iaa0eed3d2b9ffcc148c1e00b28322ebf93b3f13c Signed-off-by: Thiago da Silva Reviewed-on: http://review.gluster.org/6053 Reviewed-by: Luis Pabon Tested-by: Luis Pabon --- gluster/swift/common/Glusterfs.py | 30 +---------- test/unit/common/test_Glusterfs.py | 108 +++++++++++++++++++++++++++++++++++++ tox.ini | 2 +- 3 files changed, 111 insertions(+), 29 deletions(-) diff --git a/gluster/swift/common/Glusterfs.py b/gluster/swift/common/Glusterfs.py index 9ff54ba..55012d3 100644 --- a/gluster/swift/common/Glusterfs.py +++ b/gluster/swift/common/Glusterfs.py @@ -21,10 +21,9 @@ import logging import urllib from ConfigParser import ConfigParser, NoSectionError, NoOptionError -from swift.common.utils import TRUE_VALUES, search_tree +from swift.common.utils import TRUE_VALUES from gluster.swift.common.fs_utils import do_ismount -from gluster.swift.common.exceptions import GlusterfsException, \ - FailureToMountError +from gluster.swift.common.exceptions import FailureToMountError # # Read the fs.conf file once at startup (module load) @@ -286,28 +285,3 @@ def _get_export_list(): export_list.append(item.split(':')[1].strip(' ')) return export_list - - -def get_mnt_point(vol_name, conf_dir=SWIFT_DIR, conf_file="object-server*"): - """ - Read the object-server's configuration file and return - the device value. - - :param vol_name: target GlusterFS volume name - :param conf_dir: Swift configuration directory root - :param conf_file: configuration file name for which to search - :returns full path to given target volume name - :raises GlusterfsException if unable to fetch mount point root from - configuration files - """ - mnt_dir = '' - conf_files = search_tree(conf_dir, conf_file, '.conf') - if not conf_files: - raise GlusterfsException("Config file, %s, in directory, %s, " - "not found" % (conf_file, conf_dir)) - _conf = ConfigParser() - if _conf.read(conf_files[0]): - mnt_dir = _conf.get('DEFAULT', 'devices', '') - return os.path.join(mnt_dir, vol_name) - else: - raise GlusterfsException("Config file, %s, is empty" % conf_files[0]) diff --git a/test/unit/common/test_Glusterfs.py b/test/unit/common/test_Glusterfs.py index bcb233c..8a111f7 100644 --- a/test/unit/common/test_Glusterfs.py +++ b/test/unit/common/test_Glusterfs.py @@ -16,6 +16,8 @@ import unittest import os, fcntl, errno, shutil import time +import StringIO +import mock from tempfile import mkdtemp import gluster.swift.common.Glusterfs as gfs @@ -124,5 +126,111 @@ class TestGlusterfs(unittest.TestCase): finally: shutil.rmtree(tmpdir) + def test_get_drive_mount_point_name_unique_id_None(self): + """ + Using the public method mount to test _get_drive_mount_point_name + """ + try: + tmpdir = mkdtemp() + root = os.path.join(tmpdir, 'mnt/gluster-object') + drive = 'test' + + _init_mock_variables(tmpdir) + gfs._allow_mount_per_server = True + self.assertTrue(gfs.mount(root, drive)) + finally: + gfs._allow_mount_per_server = False + _reset_mock_variables() + shutil.rmtree(tmpdir) + + def test_get_drive_mount_point_name_unique_id_exists(self): + """ + Using the public method mount to test _get_drive_mount_point_name + and the _unique_id is already defined + """ + try: + tmpdir = mkdtemp() + root = os.path.join(tmpdir, 'mnt/gluster-object') + drive = 'test' + + _init_mock_variables(tmpdir) + gfs._allow_mount_per_server = True + gfs._unique_id = 0 + self.assertTrue(gfs.mount(root, drive)) + finally: + gfs._allow_mount_per_server = False + gfs._unique_id = None + _reset_mock_variables() + shutil.rmtree(tmpdir) + + def test_invalid_drive_name(self): + try: + tmpdir = mkdtemp() + root = os.path.join(tmpdir, 'mnt/gluster-object') + drive = 'te st' + + _init_mock_variables(tmpdir) + self.assertFalse(gfs.mount(root, drive)) + finally: + _reset_mock_variables() + shutil.rmtree(tmpdir) + + def test_already_mounted(self): + try: + tmpdir = mkdtemp() + root = os.path.join(tmpdir, 'mnt/gluster-object') + drive = 'test' + + _init_mock_variables(tmpdir) + def mock_do_ismount(path): + return True + + with mock.patch("gluster.swift.common.Glusterfs.do_ismount", + mock_do_ismount): + self.assertTrue(gfs.mount(root, drive)) + finally: + _reset_mock_variables() + shutil.rmtree(tmpdir) + + def test_get_export_list(self): + try: + tmpdir = mkdtemp() + root = os.path.join(tmpdir, 'mnt/gluster-object') + drive = 'test' + + # undo mocking of _get_export_list + tmp_get_export_list = gfs._get_export_list + _init_mock_variables(tmpdir) + gfs._get_export_list = tmp_get_export_list + + def mock_os_popen(cmd): + mock_string = """ + Volume Name: test + Type: Distribute + Volume ID: 361cfe52-75c0-4a76-88af-0092a92270b5 + Status: Started + Number of Bricks: 1 + Transport-type: tcp + Bricks: + Brick1: myhost:/export/brick/test + + Volume Name: test2 + Type: Distribute + Volume ID: a6df4e2b-6040-4e19-96f1-b8d8c0a29528 + Status: Started + Number of Bricks: 1 + Transport-type: tcp + Bricks: + Brick1: myhost:/export/brick/test2 + """ + return StringIO.StringIO(mock_string) + + # mock os_popen + with mock.patch('os.popen', mock_os_popen): + self.assertTrue(gfs.mount(root, drive)) + finally: + _reset_mock_variables() + shutil.rmtree(tmpdir) + def tearDown(self): _reset_mock_variables() diff --git a/tox.ini b/tox.ini index 4e87a3c..b42092b 100644 --- a/tox.ini +++ b/tox.ini @@ -14,7 +14,7 @@ deps = --download-cache={homedir}/.pipcache -r{toxinidir}/tools/test-requires changedir = {toxinidir}/test/unit -commands = nosetests -v --exe --with-xunit --with-coverage --cover-package gluster --cover-erase --cover-xml --cover-html --cover-branches {posargs} +commands = nosetests -v --exe --with-xunit --with-coverage --cover-package gluster --cover-erase --cover-xml --cover-html --cover-branches --with-html-output {posargs} [tox:jenkins] downloadcache = ~/cache/pip -- cgit