summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorLuis Pabon <lpabon@redhat.com>2013-11-20 16:31:46 -0500
committerLuis Pabon <lpabon@redhat.com>2013-11-22 09:31:50 -0800
commit7095f1c6540612be7df25ece8f6f141b6089a844 (patch)
treedb16881dae6d2bf26a40b544876273605287fb28 /test
parentf4c0ab5b986c8caa912b2dd5037351a5a505428d (diff)
Fix double close issue in diskfile
The DiskWriter was closing the file descriptor when it finished writing but initializing it to None. Therefore, the DiskFile context manager would then try to close it also. Change-Id: I188ec814d025e28c7b89532f0502ebf1d4a20a09 Signed-off-by: Luis Pabon <lpabon@redhat.com> Reviewed-on: http://review.gluster.org/6317 Reviewed-by: Peter Portante <pportant@redhat.com> Reviewed-by: pushpesh sharma <psharma@redhat.com> Tested-by: pushpesh sharma <psharma@redhat.com>
Diffstat (limited to 'test')
-rw-r--r--test/unit/obj/test_diskfile.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/test/unit/obj/test_diskfile.py b/test/unit/obj/test_diskfile.py
index dc2c2fa..8869cce 100644
--- a/test/unit/obj/test_diskfile.py
+++ b/test/unit/obj/test_diskfile.py
@@ -32,7 +32,7 @@ from swift.common.exceptions import DiskFileNotExist, DiskFileError, \
from gluster.swift.common.exceptions import GlusterFileSystemOSError
import gluster.swift.common.utils
import gluster.swift.obj.diskfile
-from gluster.swift.obj.diskfile import DiskFile
+from gluster.swift.obj.diskfile import DiskWriter, DiskFile
from gluster.swift.common.utils import DEFAULT_UID, DEFAULT_GID, X_TYPE, \
X_OBJECT_TYPE, DIR_OBJECT
from gluster.swift.common.fs_utils import Fake_file
@@ -98,6 +98,24 @@ class MockRenamerCalled(Exception):
def _mock_renamer(a, b):
raise MockRenamerCalled()
+class TestDiskWriter(unittest.TestCase):
+ """ Tests for gluster.swift.obj.diskfile.DiskWriter """
+
+ def test_close(self):
+ dw = DiskWriter('a', 100, 'a', None)
+ mock_close = Mock()
+ with patch("gluster.swift.obj.diskfile.do_close", mock_close):
+ # It should call do_close
+ self.assertEqual(100, dw.fd)
+ dw.close()
+ self.assertEqual(1, mock_close.call_count)
+ self.assertEqual(None, dw.fd)
+
+ # It should not call do_close since it should
+ # have made fd equal to None
+ dw.close()
+ self.assertEqual(None, dw.fd)
+ self.assertEqual(1, mock_close.call_count)
class TestDiskFile(unittest.TestCase):
""" Tests for gluster.swift.obj.diskfile """
@@ -1029,7 +1047,7 @@ class TestDiskFile(unittest.TestCase):
assert os.path.exists(saved_tmppath)
dw.write("123")
# Closing the fd prematurely should not raise any exceptions.
- os.close(dw.fd)
+ dw.close()
assert not os.path.exists(saved_tmppath)
def test_create_err_on_unlink(self):