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 <thiago@redhat.com>
Reviewed-on: http://review.gluster.org/6053
Reviewed-by: Luis Pabon <lpabon@redhat.com>
Tested-by: Luis Pabon <lpabon@redhat.com>
This commit is contained in:
Thiago da Silva 2013-10-08 13:39:25 -04:00 committed by Luis Pabon
parent 2d56bc3803
commit 46cd43fdf4
3 changed files with 111 additions and 29 deletions

View File

@ -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])

View File

@ -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()

View File

@ -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