diff --git a/test/functional/tests.py b/test/functional/tests.py index f00ae5c0d1..8d82d73edd 100644 --- a/test/functional/tests.py +++ b/test/functional/tests.py @@ -1540,6 +1540,116 @@ class TestFileUTF8(Base2, TestFile): set_up = False +class TestDloEnv(object): + @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.container = cls.account.container(Utils.create_name()) + + if not cls.container.create(): + raise ResponseError(cls.conn.response) + + # avoid getting a prefix that stops halfway through an encoded + # character + prefix = Utils.create_name().decode("utf-8")[:10].encode("utf-8") + cls.segment_prefix = prefix + + for letter in ('a', 'b', 'c', 'd', 'e'): + file_item = cls.container.file("%s/seg_lower%s" % (prefix, letter)) + file_item.write(letter * 10) + + file_item = cls.container.file("%s/seg_upper%s" % (prefix, letter)) + file_item.write(letter.upper() * 10) + + man1 = cls.container.file("man1") + man1.write('man1-contents', + hdrs={"X-Object-Manifest": "%s/%s/seg_lower" % + (cls.container.name, prefix)}) + + man1 = cls.container.file("man2") + man1.write('man2-contents', + hdrs={"X-Object-Manifest": "%s/%s/seg_upper" % + (cls.container.name, prefix)}) + + manall = cls.container.file("manall") + manall.write('manall-contents', + hdrs={"X-Object-Manifest": "%s/%s/seg" % + (cls.container.name, prefix)}) + + +class TestDlo(Base): + env = TestDloEnv + set_up = False + + def test_get_manifest(self): + file_item = self.env.container.file('man1') + file_contents = file_item.read() + self.assertEqual( + file_contents, + "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee") + + file_item = self.env.container.file('man2') + file_contents = file_item.read() + self.assertEqual( + file_contents, + "AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE") + + file_item = self.env.container.file('manall') + file_contents = file_item.read() + self.assertEqual( + file_contents, + ("aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee" + + "AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE")) + + def test_get_manifest_document_itself(self): + file_item = self.env.container.file('man1') + file_contents = file_item.read(parms={'multipart-manifest': 'get'}) + self.assertEqual(file_contents, "man1-contents") + + def test_get_range(self): + file_item = self.env.container.file('man1') + file_contents = file_item.read(size=25, offset=8) + self.assertEqual(file_contents, "aabbbbbbbbbbccccccccccddd") + + file_contents = file_item.read(size=1, offset=47) + self.assertEqual(file_contents, "e") + + def test_get_range_out_of_range(self): + file_item = self.env.container.file('man1') + + self.assertRaises(ResponseError, file_item.read, size=7, offset=50) + self.assert_status(416) + + def test_copy(self): + # Adding a new segment, copying the manifest, and then deleting the + # segment proves that the new object is really the concatenated + # segments and not just a manifest. + f_segment = self.env.container.file("%s/seg_lowerf" % + (self.env.segment_prefix)) + f_segment.write('ffffffffff') + try: + man1_item = self.env.container.file('man1') + man1_item.copy(self.env.container.name, "copied-man1") + finally: + # try not to leave this around for other tests to stumble over + f_segment.delete() + + file_item = self.env.container.file('copied-man1') + file_contents = file_item.read() + self.assertEqual( + file_contents, + "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff") + + +class TestDloUTF8(Base2, TestDlo): + set_up = False + + class TestFileComparisonEnv: @classmethod def setUp(cls):