diff --git a/test/functional/test_dlo.py b/test/functional/test_dlo.py index 4d26ed6898..942b770f98 100644 --- a/test/functional/test_dlo.py +++ b/test/functional/test_dlo.py @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import unittest +from swift.common.swob import str_to_wsgi import test.functional as tf from test.functional.tests import Utils, Base, Base2, BaseEnv from test.functional.swift_test_client import Connection, ResponseError @@ -86,25 +86,25 @@ class TestDlo(Base): file_contents = file_item.read() self.assertEqual( file_contents, - "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee") + b"aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee") file_item = self.env.container.file('man2') file_contents = file_item.read() self.assertEqual( file_contents, - "AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE") + b"AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE") file_item = self.env.container.file('manall') file_contents = file_item.read() self.assertEqual( file_contents, - ("aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee" + - "AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE")) + (b"aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee" + + b"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") + self.assertEqual(file_contents, b"man1-contents") self.assertEqual(file_item.info()['x_object_manifest'], "%s/%s/seg_lower" % (self.env.container.name, self.env.segment_prefix)) @@ -112,10 +112,10 @@ class TestDlo(Base): 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") + self.assertEqual(file_contents, b"aabbbbbbbbbbccccccccccddd") file_contents = file_item.read(size=1, offset=47) - self.assertEqual(file_contents, "e") + self.assertEqual(file_contents, b"e") def test_get_range_out_of_range(self): file_item = self.env.container.file('man1') @@ -130,7 +130,7 @@ class TestDlo(Base): # segments and not just a manifest. f_segment = self.env.container.file("%s/seg_lowerf" % (self.env.segment_prefix)) - f_segment.write('ffffffffff') + f_segment.write(b'ffffffffff') try: man1_item = self.env.container.file('man1') man1_item.copy(self.env.container.name, "copied-man1") @@ -142,7 +142,7 @@ class TestDlo(Base): file_contents = file_item.read() self.assertEqual( file_contents, - "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff") + b"aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff") # The copied object must not have X-Object-Manifest self.assertNotIn("x_object_manifest", file_item.info()) @@ -154,7 +154,7 @@ class TestDlo(Base): # segments and not just a manifest. f_segment = self.env.container.file("%s/seg_lowerf" % (self.env.segment_prefix)) - f_segment.write('ffffffffff') + f_segment.write(b'ffffffffff') try: man1_item = self.env.container.file('man1') man1_item.copy_account(acct, @@ -168,7 +168,7 @@ class TestDlo(Base): file_contents = file_item.read() self.assertEqual( file_contents, - "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff") + b"aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff") # The copied object must not have X-Object-Manifest self.assertNotIn("x_object_manifest", file_item.info()) @@ -182,12 +182,12 @@ class TestDlo(Base): copied = self.env.container.file("copied-man1") copied_contents = copied.read(parms={'multipart-manifest': 'get'}) - self.assertEqual(copied_contents, "man1-contents") + self.assertEqual(copied_contents, b"man1-contents") copied_contents = copied.read() self.assertEqual( copied_contents, - "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee") + b"aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee") self.assertEqual(man1_item.info()['x_object_manifest'], copied.info()['x_object_manifest']) finally: @@ -239,8 +239,9 @@ class TestDlo(Base): manifest.info(hdrs={'If-None-Match': "not-%s" % etag}) self.assert_status(200) - @unittest.skipIf('username3' not in tf.config, "Requires user 3") def test_dlo_referer_on_segment_container(self): + if 'username3' not in tf.config: + raise tf.SkipTest('Requires user 3') # First the account2 (test3) should fail config2 = tf.config.copy() config2['username'] = tf.config['username3'] @@ -268,7 +269,7 @@ class TestDlo(Base): contents = dlo_file.read(hdrs=headers) self.assertEqual( contents, - "ffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj") + b"ffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj") def test_dlo_post_with_manifest_header(self): # verify that performing a POST to a DLO manifest @@ -278,12 +279,13 @@ class TestDlo(Base): # create a new manifest for this test to avoid test coupling. x_o_m = self.env.container.file('man1').info()['x_object_manifest'] file_item = self.env.container.file(Utils.create_name()) - file_item.write('manifest-contents', hdrs={"X-Object-Manifest": x_o_m}) + file_item.write(b'manifest-contents', + hdrs={"X-Object-Manifest": x_o_m}) # sanity checks manifest_contents = file_item.read(parms={'multipart-manifest': 'get'}) - self.assertEqual('manifest-contents', manifest_contents) - expected_contents = ''.join([(c * 10) for c in 'abcde']) + self.assertEqual(b'manifest-contents', manifest_contents) + expected_contents = ''.join((c * 10) for c in 'abcde').encode('ascii') contents = file_item.read(parms={}) self.assertEqual(expected_contents, contents) @@ -294,16 +296,18 @@ class TestDlo(Base): # verify that x-object-manifest was updated file_item.info() - resp_headers = file_item.conn.response.getheaders() - self.assertIn(('x-object-manifest', new_x_o_m), resp_headers) + resp_headers = [(h.lower(), v) + for h, v in file_item.conn.response.getheaders()] + self.assertIn(('x-object-manifest', str_to_wsgi(new_x_o_m)), + resp_headers) self.assertIn(('x-object-meta-foo', 'bar'), resp_headers) # verify that manifest content was not changed manifest_contents = file_item.read(parms={'multipart-manifest': 'get'}) - self.assertEqual('manifest-contents', manifest_contents) + self.assertEqual(b'manifest-contents', manifest_contents) # verify that updated manifest points to new content - expected_contents = ''.join([(c * 10) for c in 'ABCDE']) + expected_contents = ''.join((c * 10) for c in 'ABCDE').encode('ascii') contents = file_item.read(parms={}) self.assertEqual(expected_contents, contents) @@ -319,10 +323,10 @@ class TestDlo(Base): # verify that manifest content was not changed manifest_contents = file_item.read(parms={'multipart-manifest': 'get'}) - self.assertEqual('manifest-contents', manifest_contents) + self.assertEqual(b'manifest-contents', manifest_contents) # verify that updated manifest points new content - expected_contents = ''.join([(c * 10) for c in 'abcde']) + expected_contents = ''.join((c * 10) for c in 'abcde').encode('ascii') contents = file_item.read(parms={}) self.assertEqual(expected_contents, contents) @@ -334,12 +338,13 @@ class TestDlo(Base): # create a new manifest for this test to avoid test coupling. x_o_m = self.env.container.file('man1').info()['x_object_manifest'] file_item = self.env.container.file(Utils.create_name()) - file_item.write('manifest-contents', hdrs={"X-Object-Manifest": x_o_m}) + file_item.write(b'manifest-contents', + hdrs={"X-Object-Manifest": x_o_m}) # sanity checks manifest_contents = file_item.read(parms={'multipart-manifest': 'get'}) - self.assertEqual('manifest-contents', manifest_contents) - expected_contents = ''.join([(c * 10) for c in 'abcde']) + self.assertEqual(b'manifest-contents', manifest_contents) + expected_contents = ''.join((c * 10) for c in 'abcde').encode('ascii') contents = file_item.read(parms={}) self.assertEqual(expected_contents, contents) @@ -352,11 +357,11 @@ class TestDlo(Base): # verify that object content was not changed manifest_contents = file_item.read(parms={'multipart-manifest': 'get'}) - self.assertEqual('manifest-contents', manifest_contents) + self.assertEqual(b'manifest-contents', manifest_contents) # verify that object is no longer a manifest contents = file_item.read(parms={}) - self.assertEqual('manifest-contents', contents) + self.assertEqual(b'manifest-contents', contents) def test_dlo_post_with_manifest_regular_object(self): # verify that performing a POST to a regular object @@ -364,11 +369,11 @@ class TestDlo(Base): # Put a regular object file_item = self.env.container.file(Utils.create_name()) - file_item.write('file contents', hdrs={}) + file_item.write(b'file contents', hdrs={}) # sanity checks file_contents = file_item.read(parms={}) - self.assertEqual('file contents', file_contents) + self.assertEqual(b'file contents', file_contents) # get the path associated with man1 x_o_m = self.env.container.file('man1').info()['x_object_manifest'] @@ -378,13 +383,14 @@ class TestDlo(Base): # verify that the file is now a manifest manifest_contents = file_item.read(parms={'multipart-manifest': 'get'}) - self.assertEqual('file contents', manifest_contents) - expected_contents = ''.join([(c * 10) for c in 'abcde']) + self.assertEqual(b'file contents', manifest_contents) + expected_contents = ''.join([(c * 10) for c in 'abcde']).encode() contents = file_item.read(parms={}) self.assertEqual(expected_contents, contents) file_item.info() - resp_headers = file_item.conn.response.getheaders() - self.assertIn(('x-object-manifest', x_o_m), resp_headers) + resp_headers = [(h.lower(), v) + for h, v in file_item.conn.response.getheaders()] + self.assertIn(('x-object-manifest', str_to_wsgi(x_o_m)), resp_headers) class TestDloUTF8(Base2, TestDlo): diff --git a/tox.ini b/tox.ini index da3a068ba7..7bbfdbd444 100644 --- a/tox.ini +++ b/tox.ini @@ -55,6 +55,7 @@ commands = test/functional/s3api/test_presigned.py \ test/functional/s3api/test_service.py \ test/functional/test_access_control.py \ + test/functional/test_dlo.py \ test/functional/test_domain_remap.py \ test/functional/test_object.py \ test/functional/test_staticweb.py \