From b27b46ee6ffa3be55393dfa5c4cfc55d24a4ef31 Mon Sep 17 00:00:00 2001 From: Pushpesh Sharma Date: Tue, 1 Oct 2013 12:10:40 +0530 Subject: Added Object Versioning Functional TC Changed container-server.conf to allow object versioning. Added object versioning testcase which does following: a. Setup method to create two containers object,versions b. Set 'X-Versions-Location':'versions' for 'object' container c. test method: 1. Write random data to a object named 'object' in 'object' container for random number of times 2. Match the current version of object with last data written 3. Delete the current version 4. Repeat steps 2-3 till list of data written exhausted Change-Id: I6b36008b9c4d967383169290c8fd3adf3c3446a8 Signed-off-by: Pushpesh Sharma Reviewed-on: http://review.gluster.org/6018 Reviewed-by: Luis Pabon Tested-by: Luis Pabon --- test/functional/conf/container-server.conf | 3 ++ test/functional/tests.py | 47 ++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/test/functional/conf/container-server.conf b/test/functional/conf/container-server.conf index 7e665f1..122d97e 100644 --- a/test/functional/conf/container-server.conf +++ b/test/functional/conf/container-server.conf @@ -30,3 +30,6 @@ log_level = WARN # normal request logging for the container server to unclutter the log # files. Warnings and errors will still be logged. log_requests = off + +#enable object versioning for functional test +allow_versions = on diff --git a/test/functional/tests.py b/test/functional/tests.py index 4536d0b..f58e7f3 100644 --- a/test/functional/tests.py +++ b/test/functional/tests.py @@ -1682,6 +1682,53 @@ class TestFileComparison(Base): self.assert_status(412) +class TestObjectVersioningEnv: + @classmethod + def setUp(cls): + cls.conn = Connection(config) + cls.conn.authenticate() + cls.account = Account(cls.conn, config.get('account', + config['username'])) + cls.account.delete_containers() + cls.containers = {} + #create two containers one for object other for versions of objects + for i in range(2): + hdrs={} + if i==0: + hdrs={'X-Versions-Location':'versions'} + cont = cls.containers['object'] = cls.account.container('object') + else: + cont = cls.containers['versions'] = cls.account.container('versions') + if not cont.create(hdrs=hdrs): + raise ResponseError(cls.conn.response) + cls.containers.append(cont) + + +class TestObjectVersioning(Base): + env = TestObjectVersioningEnv + set_up = False + + def testObjectVersioning(self): + versions = random.randrange(2,10) + dataArr=[] + #create versions + for i in range(versions): + data = File.random_data(10000*(i+1)) + file = self.env.containers['object'].file('object') + self.assertTrue(file.write(data)) + dataArr.append(data) + cont = self.env.containers['versions'] + info = cont.info() + self.assertEquals(info['object_count'], versions-1) + #match the current version of object with data in arr and delete it + for i in range(versions): + data = dataArr[-(i+1)] + file = self.env.containers['object'].file('object') + self.assertEquals(data,file.read()) + self.assert_(file.delete()) + self.assert_status(204) + + class TestFileComparisonUTF8(Base2, TestFileComparison): set_up = False -- cgit