diff options
author | Prashanth Pai <ppai@redhat.com> | 2016-05-19 15:33:07 +0530 |
---|---|---|
committer | Thiago da Silva <thiago@redhat.com> | 2016-09-12 10:14:52 -0700 |
commit | a324c6e5cdfad77e8f91ec9869deb6b78425807e (patch) | |
tree | 22d89a29d43723d2728176bd10d9db1027507521 /test | |
parent | cfcfba624d554b46fe88f66949e02f5448d15e26 (diff) |
Fix validation of marker dir objects
For marker directory objects, validate_object() always returned False.
This was because st_size from stat was being compared to Content-Length
stored in metadata. Unlike files, for directories st_size is always
4096. Hence the comparison would always be '4096 == 0' which would
fail.
This patch makes the following changes:
* Do size comparison of st_size and Content-Length only for files.
* Get rid of _is_dir everywhere. This will simplify things.
Change-Id: Ib75e06c4e3bce36bab11ce7d029ff327f33c3146
Signed-off-by: Prashanth Pai <ppai@redhat.com>
Reviewed-on: http://review.gluster.org/14423
Reviewed-by: Thiago da Silva <thiago@redhat.com>
Tested-by: Thiago da Silva <thiago@redhat.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/unit/common/test_utils.py | 14 | ||||
-rw-r--r-- | test/unit/obj/test_diskfile.py | 14 |
2 files changed, 12 insertions, 16 deletions
diff --git a/test/unit/common/test_utils.py b/test/unit/common/test_utils.py index f88229a..8ba9a2a 100644 --- a/test/unit/common/test_utils.py +++ b/test/unit/common/test_utils.py @@ -810,9 +810,19 @@ class TestUtils(unittest.TestCase): utils.X_CONTENT_LENGTH: '12345', utils.X_TYPE: utils.OBJECT, utils.X_OBJECT_TYPE: 'na'} - fake_stat = Mock(st_size=12346) + fake_stat = Mock(st_size=12346, st_mode=33188) self.assertFalse(utils.validate_object(md, fake_stat)) - fake_stat = Mock(st_size=12345) + fake_stat = Mock(st_size=12345, st_mode=33188) + self.assertTrue(utils.validate_object(md, fake_stat)) + + def test_validate_object_marker_dir(self): + md = {utils.X_TIMESTAMP: 'na', + utils.X_CONTENT_TYPE: 'application/directory', + utils.X_ETAG: 'bad', + utils.X_CONTENT_LENGTH: '0', + utils.X_TYPE: utils.OBJECT, + utils.X_OBJECT_TYPE: utils.DIR_OBJECT} + fake_stat = Mock(st_size=4096, st_mode=16744) self.assertTrue(utils.validate_object(md, fake_stat)) diff --git a/test/unit/obj/test_diskfile.py b/test/unit/obj/test_diskfile.py index 72db849..9701f44 100644 --- a/test/unit/obj/test_diskfile.py +++ b/test/unit/obj/test_diskfile.py @@ -163,7 +163,6 @@ class TestDiskFile(unittest.TestCase): assert gdf._obj_path == "" assert gdf._put_datadir == os.path.join(self.td, "vol0", "bar"), gdf._put_datadir assert gdf._data_file == os.path.join(self.td, "vol0", "bar", "z") - assert gdf._is_dir is False assert gdf._fd is None def test_constructor_leadtrail_slash(self): @@ -193,10 +192,8 @@ class TestDiskFile(unittest.TestCase): assert gdf._fd is None assert gdf._disk_file_open is False assert gdf._metadata is None - assert not gdf._is_dir with gdf.open(): assert gdf._data_file == the_file - assert not gdf._is_dir assert gdf._fd is not None assert gdf._metadata == exp_md assert gdf._disk_file_open is True @@ -224,7 +221,6 @@ class TestDiskFile(unittest.TestCase): assert gdf._fd is None assert gdf._disk_file_open is False assert gdf._metadata is None - assert not gdf._is_dir # Case 1 # Ensure that reading metadata for non-GET requests @@ -285,9 +281,7 @@ class TestDiskFile(unittest.TestCase): assert gdf._fd is None assert gdf._metadata is None assert gdf._disk_file_open is False - assert not gdf._is_dir with gdf.open(): - assert not gdf._is_dir assert gdf._data_file == the_file assert gdf._fd is not None assert gdf._metadata == exp_md, "%r != %r" % (gdf._metadata, exp_md) @@ -308,7 +302,6 @@ class TestDiskFile(unittest.TestCase): _metadata[_mapit(the_file)] = inv_md gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z") assert gdf._obj == "z" - assert not gdf._is_dir assert gdf._fd is None assert gdf._disk_file_open is False with gdf.open(): @@ -334,10 +327,8 @@ class TestDiskFile(unittest.TestCase): del exp_md['X-Object-Type'] gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "d") assert gdf._obj == "d" - assert gdf._is_dir is False assert gdf._disk_file_open is False with gdf.open(): - assert gdf._is_dir assert gdf._data_file == the_dir assert gdf._disk_file_open is True assert gdf._disk_file_open is False @@ -353,7 +344,6 @@ class TestDiskFile(unittest.TestCase): fd.write("y" * fsize) gdf = self._get_diskfile(dev, par, acc, con, obj) assert gdf._obj == base_obj - assert not gdf._is_dir assert gdf._fd is None return gdf @@ -865,7 +855,6 @@ class TestDiskFile(unittest.TestCase): gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z") assert gdf._obj == "z" assert gdf._data_file == the_file - assert not gdf._is_dir later = float(gdf.read_metadata()['X-Timestamp']) + 1 gdf.delete(normalize_timestamp(later)) assert os.path.isdir(gdf._put_datadir) @@ -880,7 +869,6 @@ class TestDiskFile(unittest.TestCase): gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z") assert gdf._obj == "z" assert gdf._data_file == the_file - assert not gdf._is_dir now = float(gdf.read_metadata()['X-Timestamp']) gdf.delete(normalize_timestamp(now)) assert os.path.isdir(gdf._put_datadir) @@ -895,7 +883,6 @@ class TestDiskFile(unittest.TestCase): gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z") assert gdf._obj == "z" assert gdf._data_file == the_file - assert not gdf._is_dir later = float(gdf.read_metadata()['X-Timestamp']) + 1 # Handle the case the file is not in the directory listing. @@ -914,7 +901,6 @@ class TestDiskFile(unittest.TestCase): gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z") assert gdf._obj == "z" assert gdf._data_file == the_file - assert not gdf._is_dir later = float(gdf.read_metadata()['X-Timestamp']) + 1 |