summaryrefslogtreecommitdiffstats
path: root/test/unit/obj/test_diskfile.py
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-20 13:38:28 -0800
commit47f401b2ef0023f57b1fce83b10f9c6a3aa5c757 (patch)
tree374a6cb7b1e84c43c24074aeb689907a7dcc2c73 /test/unit/obj/test_diskfile.py
parentd65cee2e3bd2fb0fbf49f6a4d55a1480c915278f (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> Signed-off-by: Thiago da Silva <thiago@redhat.com> Reviewed-on: http://review.gluster.org/6315
Diffstat (limited to 'test/unit/obj/test_diskfile.py')
-rw-r--r--test/unit/obj/test_diskfile.py100
1 files changed, 95 insertions, 5 deletions
diff --git a/test/unit/obj/test_diskfile.py b/test/unit/obj/test_diskfile.py
index 8270e05..340087f 100644
--- a/test/unit/obj/test_diskfile.py
+++ b/test/unit/obj/test_diskfile.py
@@ -425,11 +425,101 @@ class TestDiskFile(unittest.TestCase):
gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z")
md = {'Content-Type': 'application/octet-stream', 'a': 'b'}
gdf.write_metadata(md.copy())
- on_disk_md = _metadata[_mapit(the_dir)]
- del on_disk_md['X-Type']
- del on_disk_md['X-Object-Type']
- assert on_disk_md == md, "on_disk_md = %r, md = %r" % (
- on_disk_md, md)
+ self.assertIsNone(gdf._metadata)
+ fmd = _metadata[_mapit(the_dir)]
+ md.update({'X-Object-Type': 'file', 'X-Type': 'Object'})
+ self.assertTrue(fmd['a'], md['a'])
+ self.assertTrue(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.write_metadata(md.copy())
+ self.assertTrue(_metadata[_mapit(the_file)]['a'], 'b')
+ newmd = {'X-Object-Meta-test':'1234'}
+ gdf.write_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.write_metadata(md.copy())
+ self.assertTrue(_metadata[_mapit(the_file)]['a'], 'b')
+ newmd = {'X-Object-Meta-test':'1234'}
+ gdf.write_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.write_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.write_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_write_metadata_w_meta_file(self):
the_path = os.path.join(self.td, "vol0", "bar")