summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorThiago da Silva <thiago@redhat.com>2013-11-12 15:26:10 -0500
committerLuis Pabon <lpabon@redhat.com>2013-11-14 13:38:56 -0800
commit2282142e4f2610577b2119280eb4688ca721054c (patch)
treea1430559d523eb7bf9937a03a2cab4077a117046 /test
parenta43de0dc5b0c6781c86a8da05d3ebe31f992510e (diff)
fix metadata overwrite during a post request
During a post request, the object-server is ovewriting the existing object metadata. This fix prevents the overwrite of the system metadata while it allows for the user to add/remove user metadata Change-Id: Ic62cd064589b625ee425a9934be8766650622c13 Signed-off-by: Thiago da Silva <thiago@redhat.com> Reviewed-on: http://review.gluster.org/6254 Reviewed-by: Luis Pabon <lpabon@redhat.com> Tested-by: Luis Pabon <lpabon@redhat.com>
Diffstat (limited to 'test')
-rw-r--r--test/unit/obj/test_diskfile.py92
1 files changed, 91 insertions, 1 deletions
diff --git a/test/unit/obj/test_diskfile.py b/test/unit/obj/test_diskfile.py
index 27ff51e..bd34eb1 100644
--- a/test/unit/obj/test_diskfile.py
+++ b/test/unit/obj/test_diskfile.py
@@ -414,7 +414,97 @@ class TestDiskFile(unittest.TestCase):
assert gdf._metadata is None
fmd = _metadata[_mapit(the_dir)]
md.update({'X-Object-Type': 'file', 'X-Type': 'Object'})
- assert fmd == md, "on-disk md = %r, md = %r" % (fmd, md)
+ assert fmd['a'] == md['a']
+ assert fmd['Content-Type'] == md['Content-Type']
+
+ def test_add_metadata_to_existing_file(self):
+ the_path = os.path.join(self.td, "vol0", "bar")
+ the_file = os.path.join(the_path, "z")
+ os.makedirs(the_path)
+ with open(the_file, "wb") as fd:
+ fd.write("1234")
+ ini_md = {
+ 'X-Type': 'Object',
+ 'X-Object-Type': 'file',
+ 'Content-Length': 4,
+ 'ETag': 'etag',
+ 'X-Timestamp': 'ts',
+ 'Content-Type': 'application/loctet-stream'}
+ _metadata[_mapit(the_file)] = ini_md
+ gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z")
+ md = {'Content-Type': 'application/octet-stream', 'a': 'b'}
+ gdf.put_metadata(md.copy())
+ self.assertTrue(_metadata[_mapit(the_file)]['a'], 'b')
+ newmd = {'X-Object-Meta-test':'1234'}
+ gdf.put_metadata(newmd.copy())
+ on_disk_md = _metadata[_mapit(the_file)]
+ self.assertTrue(on_disk_md['Content-Length'], 4)
+ self.assertTrue(on_disk_md['X-Object-Meta-test'], '1234')
+ self.assertTrue(on_disk_md['X-Type'], 'Object')
+ self.assertTrue(on_disk_md['X-Object-Type'], 'file')
+ self.assertTrue(on_disk_md['ETag'], 'etag')
+ self.assertFalse('a' in on_disk_md)
+
+ def test_add_md_to_existing_file_with_md_in_gdf(self):
+ the_path = os.path.join(self.td, "vol0", "bar")
+ the_file = os.path.join(the_path, "z")
+ os.makedirs(the_path)
+ with open(the_file, "wb") as fd:
+ fd.write("1234")
+ ini_md = {
+ 'X-Type': 'Object',
+ 'X-Object-Type': 'file',
+ 'Content-Length': 4,
+ 'name': 'z',
+ 'ETag': 'etag',
+ 'X-Timestamp': 'ts'}
+ _metadata[_mapit(the_file)] = ini_md
+ gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z")
+
+ # make sure gdf has the _metadata
+ gdf.open()
+ md = {'a': 'b'}
+ gdf.put_metadata(md.copy())
+ self.assertTrue(_metadata[_mapit(the_file)]['a'], 'b')
+ newmd = {'X-Object-Meta-test':'1234'}
+ gdf.put_metadata(newmd.copy())
+ on_disk_md = _metadata[_mapit(the_file)]
+ self.assertTrue(on_disk_md['Content-Length'], 4)
+ self.assertTrue(on_disk_md['X-Object-Meta-test'], '1234')
+ self.assertFalse('a' in on_disk_md)
+
+ def test_add_metadata_to_existing_dir(self):
+ the_cont = os.path.join(self.td, "vol0", "bar")
+ the_dir = os.path.join(the_cont, "dir")
+ os.makedirs(the_dir)
+ gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "dir")
+ self.assertEquals(gdf._metadata, None)
+ init_md = {
+ 'X-Type': 'Object',
+ 'Content-Length': 0,
+ 'ETag': 'etag',
+ 'X-Timestamp': 'ts',
+ 'X-Object-Meta-test':'test',
+ 'Content-Type': 'application/directory'}
+ _metadata[_mapit(the_dir)] = init_md
+
+ md = {'X-Object-Meta-test':'test'}
+ gdf.put_metadata(md.copy())
+ self.assertEqual(_metadata[_mapit(the_dir)]['X-Object-Meta-test'],
+ 'test')
+ self.assertEqual(_metadata[_mapit(the_dir)]['Content-Type'].lower(),
+ 'application/directory')
+
+ # set new metadata
+ newmd = {'X-Object-Meta-test2':'1234'}
+ gdf.put_metadata(newmd.copy())
+ self.assertEqual(_metadata[_mapit(the_dir)]['Content-Type'].lower(),
+ 'application/directory')
+ self.assertEqual(_metadata[_mapit(the_dir)]["X-Object-Meta-test2"],
+ '1234')
+ self.assertEqual(_metadata[_mapit(the_dir)]['X-Object-Type'],
+ DIR_OBJECT)
+ self.assertFalse('X-Object-Meta-test' in _metadata[_mapit(the_dir)])
def test_put_w_tombstone(self):
gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z")