From b4e47007655e97625d1a88dad1a9f5501340658e Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Wed, 20 Feb 2019 14:59:49 -0800 Subject: [PATCH] py3: port some more middleware tests * name_check * quotas * ratelimit * read_only * recon Note that the middlewares themselves seem to be fine. Fix proxy-logging for PEP-0479. Change-Id: If47d09e8e8c09b9f50451f93d5b0803aa58743a7 --- swift/common/middleware/proxy_logging.py | 2 + .../unit/common/middleware/test_name_check.py | 14 ++-- test/unit/common/middleware/test_quotas.py | 16 ++--- test/unit/common/middleware/test_ratelimit.py | 28 ++++---- test/unit/common/middleware/test_read_only.py | 23 ++++--- test/unit/common/middleware/test_recon.py | 68 ++++++++++--------- tox.ini | 5 ++ 7 files changed, 85 insertions(+), 71 deletions(-) diff --git a/swift/common/middleware/proxy_logging.py b/swift/common/middleware/proxy_logging.py index cf001f067a..61c3b956d0 100644 --- a/swift/common/middleware/proxy_logging.py +++ b/swift/common/middleware/proxy_logging.py @@ -316,6 +316,8 @@ class ProxyLoggingMiddleware(object): bytes_sent += len(chunk) yield chunk chunk = next(iterator) + except StopIteration: # iterator was depleted + return except GeneratorExit: # generator was closed before we finished client_disconnect = True raise diff --git a/test/unit/common/middleware/test_name_check.py b/test/unit/common/middleware/test_name_check.py index 3637ac6b32..636d3d6bae 100644 --- a/test/unit/common/middleware/test_name_check.py +++ b/test/unit/common/middleware/test_name_check.py @@ -50,7 +50,7 @@ class TestNameCheckMiddleware(unittest.TestCase): path = '/V1.0/' + 'c' * (MAX_LENGTH - 6) resp = Request.blank(path, environ={'REQUEST_METHOD': 'PUT'} ).get_response(self.test_check) - self.assertEqual(resp.body, 'OK') + self.assertEqual(resp.body, b'OK') def test_invalid_character(self): for c in self.conf['forbidden_chars']: @@ -61,7 +61,7 @@ class TestNameCheckMiddleware(unittest.TestCase): self.assertEqual( resp.body, ("Object/Container/Account name contains forbidden chars " - "from %s" % self.conf['forbidden_chars'])) + "from %s" % self.conf['forbidden_chars']).encode('utf8')) self.assertEqual(resp.status_int, 400) def test_maximum_length_from_config(self): @@ -73,7 +73,7 @@ class TestNameCheckMiddleware(unittest.TestCase): self.assertEqual( resp.body, ("Object/Container/Account name longer than the allowed " - "maximum 500")) + "maximum 500").encode('utf-8')) self.assertEqual(resp.status_int, 400) # test valid length @@ -81,7 +81,7 @@ class TestNameCheckMiddleware(unittest.TestCase): resp = Request.blank(path, environ={'REQUEST_METHOD': 'PUT'} ).get_response(app) self.assertEqual(resp.status_int, 200) - self.assertEqual(resp.body, 'OK') + self.assertEqual(resp.body, b'OK') def test_invalid_length(self): path = '/V1.0/' + 'c' * (MAX_LENGTH - 5) @@ -90,7 +90,7 @@ class TestNameCheckMiddleware(unittest.TestCase): self.assertEqual( resp.body, ("Object/Container/Account name longer than the allowed maximum %s" - % self.conf['maximum_length'])) + % self.conf['maximum_length']).encode('utf-8')) self.assertEqual(resp.status_int, 400) def test_invalid_regexp(self): @@ -103,7 +103,7 @@ class TestNameCheckMiddleware(unittest.TestCase): resp.body, ("Object/Container/Account name contains a forbidden " "substring from regular expression %s" - % self.conf['forbidden_regexp'])) + % self.conf['forbidden_regexp']).encode('utf-8')) self.assertEqual(resp.status_int, 400) def test_valid_regexp(self): @@ -112,7 +112,7 @@ class TestNameCheckMiddleware(unittest.TestCase): resp = Request.blank( path, environ={'REQUEST_METHOD': 'PUT'}).get_response( self.test_check) - self.assertEqual(resp.body, 'OK') + self.assertEqual(resp.body, b'OK') class TestSwiftInfo(unittest.TestCase): diff --git a/test/unit/common/middleware/test_quotas.py b/test/unit/common/middleware/test_quotas.py index 1ee600cfc1..3a9112d7d0 100644 --- a/test/unit/common/middleware/test_quotas.py +++ b/test/unit/common/middleware/test_quotas.py @@ -94,7 +94,7 @@ class TestContainerQuotas(unittest.TestCase): 'CONTENT_LENGTH': '100'}) res = req.get_response(app) self.assertEqual(res.status_int, 413) - self.assertEqual(res.body, 'Upload exceeds quota.') + self.assertEqual(res.body, b'Upload exceeds quota.') def test_not_exceed_bytes_quota(self): app = container_quotas.ContainerQuotaMiddleware(FakeApp(), {}) @@ -115,7 +115,7 @@ class TestContainerQuotas(unittest.TestCase): 'CONTENT_LENGTH': '100'}) res = req.get_response(app) self.assertEqual(res.status_int, 413) - self.assertEqual(res.body, 'Upload exceeds quota.') + self.assertEqual(res.body, b'Upload exceeds quota.') def test_not_exceed_counts_quota(self): app = container_quotas.ContainerQuotaMiddleware(FakeApp(), {}) @@ -211,7 +211,7 @@ class ContainerQuotaCopyingTestCases(unittest.TestCase): headers={'Destination': '/c/o'}) res = req.get_response(self.copy_filter) self.assertEqual(res.status_int, 413) - self.assertEqual(res.body, 'Upload exceeds quota.') + self.assertEqual(res.body, b'Upload exceeds quota.') def test_not_exceed_bytes_quota_copy_verb(self): self.app.register('GET', '/v1/a/c2/o2', HTTPOk, @@ -235,7 +235,7 @@ class ContainerQuotaCopyingTestCases(unittest.TestCase): headers={'Destination': '/c/o'}) res = req.get_response(self.copy_filter) self.assertEqual(res.status_int, 413) - self.assertEqual(res.body, 'Upload exceeds quota.') + self.assertEqual(res.body, b'Upload exceeds quota.') def test_exceed_counts_quota_copy_cross_account_verb(self): self.app.register('GET', '/v1/a/c2/o2', HTTPOk, {}, 'passed') @@ -252,7 +252,7 @@ class ContainerQuotaCopyingTestCases(unittest.TestCase): 'Destination-Account': 'a2'}) res = req.get_response(self.copy_filter) self.assertEqual(res.status_int, 413) - self.assertEqual(res.body, 'Upload exceeds quota.') + self.assertEqual(res.body, b'Upload exceeds quota.') def test_exceed_counts_quota_copy_cross_account_PUT_verb(self): self.app.register('GET', '/v1/a/c2/o2', HTTPOk, {}, 'passed') @@ -269,7 +269,7 @@ class ContainerQuotaCopyingTestCases(unittest.TestCase): 'X-Copy-From-Account': 'a'}) res = req.get_response(self.copy_filter) self.assertEqual(res.status_int, 413) - self.assertEqual(res.body, 'Upload exceeds quota.') + self.assertEqual(res.body, b'Upload exceeds quota.') def test_exceed_bytes_quota_copy_from(self): self.app.register('GET', '/v1/a/c2/o2', HTTPOk, @@ -282,7 +282,7 @@ class ContainerQuotaCopyingTestCases(unittest.TestCase): headers={'x-copy-from': '/c2/o2'}) res = req.get_response(self.copy_filter) self.assertEqual(res.status_int, 413) - self.assertEqual(res.body, 'Upload exceeds quota.') + self.assertEqual(res.body, b'Upload exceeds quota.') def test_not_exceed_bytes_quota_copy_from(self): self.app.register('GET', '/v1/a/c2/o2', HTTPOk, @@ -328,7 +328,7 @@ class ContainerQuotaCopyingTestCases(unittest.TestCase): headers={'x-copy-from': '/c2/o2'}) res = req.get_response(self.copy_filter) self.assertEqual(res.status_int, 413) - self.assertEqual(res.body, 'Upload exceeds quota.') + self.assertEqual(res.body, b'Upload exceeds quota.') def test_not_exceed_counts_quota_copy_from(self): self.app.register('GET', '/v1/a/c2/o2', HTTPOk, diff --git a/test/unit/common/middleware/test_ratelimit.py b/test/unit/common/middleware/test_ratelimit.py index 3389afc836..2070af2d64 100644 --- a/test/unit/common/middleware/test_ratelimit.py +++ b/test/unit/common/middleware/test_ratelimit.py @@ -74,7 +74,8 @@ class FakeMemcache(object): class FakeApp(object): def __call__(self, env, start_response): - return ['204 No Content'] + start_response('200 OK', []) + return [b'Some Content'] def start_response(*args): @@ -306,7 +307,7 @@ class TestRateLimit(unittest.TestCase): thread.join() the_498s = [ t for t in threads - if ''.join(t.result).startswith('Slow down')] + if b''.join(t.result).startswith(b'Slow down')] self.assertEqual(len(the_498s), 0) self.assertEqual(time_ticker, 0) @@ -348,7 +349,7 @@ class TestRateLimit(unittest.TestCase): thread.join() the_497s = [ t for t in threads - if ''.join(t.result).startswith('Your account')] + if b''.join(t.result).startswith(b'Your account')] self.assertEqual(len(the_497s), 5) self.assertEqual(time_ticker, 0) @@ -374,13 +375,14 @@ class TestRateLimit(unittest.TestCase): r = self.test_ratelimit(req.environ, start_response) mock_sleep(.1) r = self.test_ratelimit(req.environ, start_response) - self.assertEqual(r[0], 'Slow down') + self.assertEqual(r[0], b'Slow down') mock_sleep(.1) r = self.test_ratelimit(req.environ, start_response) - self.assertEqual(r[0], 'Slow down') + self.assertEqual(r[0], b'Slow down') mock_sleep(.1) r = self.test_ratelimit(req.environ, start_response) - self.assertEqual(r[0], '204 No Content') + print(repr(r)) + self.assertEqual(r[0], b'Some Content') def test_ratelimit_max_rate_double_container(self): global time_ticker @@ -407,13 +409,13 @@ class TestRateLimit(unittest.TestCase): r = self.test_ratelimit(req.environ, start_response) mock_sleep(.1) r = self.test_ratelimit(req.environ, start_response) - self.assertEqual(r[0], 'Slow down') + self.assertEqual(r[0], b'Slow down') mock_sleep(.1) r = self.test_ratelimit(req.environ, start_response) - self.assertEqual(r[0], 'Slow down') + self.assertEqual(r[0], b'Slow down') mock_sleep(.1) r = self.test_ratelimit(req.environ, start_response) - self.assertEqual(r[0], '204 No Content') + self.assertEqual(r[0], b'Some Content') def test_ratelimit_max_rate_double_container_listing(self): global time_ticker @@ -440,13 +442,13 @@ class TestRateLimit(unittest.TestCase): r = self.test_ratelimit(req.environ, start_response) mock_sleep(.1) r = self.test_ratelimit(req.environ, start_response) - self.assertEqual(r[0], 'Slow down') + self.assertEqual(r[0], b'Slow down') mock_sleep(.1) r = self.test_ratelimit(req.environ, start_response) - self.assertEqual(r[0], 'Slow down') + self.assertEqual(r[0], b'Slow down') mock_sleep(.1) r = self.test_ratelimit(req.environ, start_response) - self.assertEqual(r[0], '204 No Content') + self.assertEqual(r[0], b'Some Content') mc = self.test_ratelimit.memcache_client try: self.test_ratelimit.memcache_client = None @@ -579,7 +581,7 @@ class TestSwiftInfo(unittest.TestCase): try: swift_info[key] except KeyError as err: - if key not in err: + if key not in str(err): raise test_limits = {'account_ratelimit': 1, diff --git a/test/unit/common/middleware/test_read_only.py b/test/unit/common/middleware/test_read_only.py index 4b6b63c49a..561c511691 100644 --- a/test/unit/common/middleware/test_read_only.py +++ b/test/unit/common/middleware/test_read_only.py @@ -23,7 +23,8 @@ from test.unit import FakeLogger class FakeApp(object): def __call__(self, env, start_response): - return ['204 No Content'] + start_response('200 OK', []) + return [b'Some Content'] def start_response(*args): @@ -32,7 +33,7 @@ def start_response(*args): read_methods = 'GET HEAD'.split() write_methods = 'COPY DELETE POST PUT'.split() -ro_resp = ['Writes are disabled for this account.'] +ro_resp = [b'Writes are disabled for this account.'] class TestReadOnly(unittest.TestCase): @@ -50,7 +51,7 @@ class TestReadOnly(unittest.TestCase): req = Request.blank('/v/a') req.method = method resp = ro(req.environ, start_response) - self.assertTrue(resp[0].startswith('204')) + self.assertEqual(resp, [b'Some Content']) def test_global_read_only_on(self): conf = { @@ -66,7 +67,7 @@ class TestReadOnly(unittest.TestCase): req = Request.blank('/v/a') req.method = method resp = ro(req.environ, start_response) - self.assertTrue(resp[0].startswith('204')) + self.assertEqual(resp, [b'Some Content']) for method in write_methods: req = Request.blank('/v/a') @@ -86,7 +87,7 @@ class TestReadOnly(unittest.TestCase): req = Request.blank('/v/a') req.method = method resp = ro(req.environ, start_response) - self.assertTrue(resp[0].startswith('204')) + self.assertEqual(resp, [b'Some Content']) for method in write_methods: req = Request.blank('/v/a') @@ -106,7 +107,7 @@ class TestReadOnly(unittest.TestCase): req = Request.blank('/v/a') req.method = method resp = ro(req.environ, start_response) - self.assertTrue(resp[0].startswith('204')) + self.assertEqual(resp, [b'Some Content']) def test_global_read_only_on_account_off(self): conf = { @@ -122,7 +123,7 @@ class TestReadOnly(unittest.TestCase): req = Request.blank('/v/a') req.method = method resp = ro(req.environ, start_response) - self.assertTrue(resp[0].startswith('204')) + self.assertEqual(resp, [b'Some Content']) def test_global_read_only_on_allow_deletes(self): conf = { @@ -138,7 +139,7 @@ class TestReadOnly(unittest.TestCase): req = Request.blank('/v/a') req.method = "DELETE" resp = ro(req.environ, start_response) - self.assertTrue(resp[0].startswith('204')) + self.assertEqual(resp, [b'Some Content']) def test_account_read_only_on_allow_deletes(self): conf = { @@ -153,7 +154,7 @@ class TestReadOnly(unittest.TestCase): req = Request.blank('/v/a') req.method = "DELETE" resp = ro(req.environ, start_response) - self.assertTrue(resp[0].startswith('204')) + self.assertEqual(resp, [b'Some Content']) def test_global_read_only_on_destination_account_off_on_copy(self): conf = { @@ -174,7 +175,7 @@ class TestReadOnly(unittest.TestCase): req = Request.blank('/v/a', headers=headers) req.method = "COPY" resp = ro(req.environ, start_response) - self.assertTrue(resp[0].startswith('204')) + self.assertEqual(resp, [b'Some Content']) def test_global_read_only_off_destination_account_on_on_copy(self): conf = {} @@ -214,7 +215,7 @@ class TestReadOnly(unittest.TestCase): req = Request.blank('/v/a', headers=headers) req.method = "COPY" resp = ro(req.environ, start_response) - self.assertTrue(resp[0].startswith('204')) + self.assertEqual(resp, [b'Some Content']) def test_global_read_only_off_src_acct_on_dest_acct_on_on_copy(self): conf = {} diff --git a/test/unit/common/middleware/test_recon.py b/test/unit/common/middleware/test_recon.py index a066bdf821..708ecf5208 100644 --- a/test/unit/common/middleware/test_recon.py +++ b/test/unit/common/middleware/test_recon.py @@ -15,6 +15,7 @@ import array from contextlib import contextmanager +import json import mock import os from posix import stat_result, statvfs_result @@ -45,7 +46,7 @@ def fail_io_open(file_path, open_mode): class FakeApp(object): def __call__(self, env, start_response): - return "FAKE APP" + return b"FAKE APP" def start_response(*args): @@ -76,7 +77,7 @@ class OpenAndReadTester(object): def __iter__(self): return self - def next(self): + def __next__(self): if self.index == self.out_len: raise StopIteration else: @@ -84,6 +85,8 @@ class OpenAndReadTester(object): self.index += 1 return line + next = __next__ + def read(self, *args, **kwargs): self.read_calls.append((args, kwargs)) try: @@ -1138,7 +1141,7 @@ class TestReconMiddleware(unittest.TestCase): self.app.get_time = self.frecon.fake_time def test_recon_get_mem(self): - get_mem_resp = ['{"memtest": "1"}'] + get_mem_resp = [b'{"memtest": "1"}'] req = Request.blank('/recon/mem', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_mem_resp) @@ -1147,29 +1150,30 @@ class TestReconMiddleware(unittest.TestCase): req = Request.blank('/recon/version', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) - self.assertEqual(resp, [utils.json.dumps({'version': swiftver})]) + self.assertEqual(resp, [json.dumps({ + 'version': swiftver}).encode('ascii')]) def test_recon_get_load(self): - get_load_resp = ['{"loadtest": "1"}'] + get_load_resp = [b'{"loadtest": "1"}'] req = Request.blank('/recon/load', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_load_resp) def test_recon_get_async(self): - get_async_resp = ['{"asynctest": "1"}'] + get_async_resp = [b'{"asynctest": "1"}'] req = Request.blank('/recon/async', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_async_resp) def test_get_device_info(self): - get_device_resp = ['{"/srv/1/node": ["sdb1"]}'] + get_device_resp = [b'{"/srv/1/node": ["sdb1"]}'] req = Request.blank('/recon/devices', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_device_resp) def test_recon_get_replication_notype(self): - get_replication_resp = ['{"replicationtest": "1"}'] + get_replication_resp = [b'{"replicationtest": "1"}'] req = Request.blank('/recon/replication', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) @@ -1178,7 +1182,7 @@ class TestReconMiddleware(unittest.TestCase): self.frecon.fake_replication_rtype = None def test_recon_get_replication_all(self): - get_replication_resp = ['{"replicationtest": "1"}'] + get_replication_resp = [b'{"replicationtest": "1"}'] # test account req = Request.blank('/recon/replication/account', environ={'REQUEST_METHOD': 'GET'}) @@ -1202,21 +1206,21 @@ class TestReconMiddleware(unittest.TestCase): self.frecon.fake_replication_rtype = None def test_recon_get_auditor_invalid(self): - get_auditor_resp = ['Invalid path: /recon/auditor/invalid'] + get_auditor_resp = [b'Invalid path: /recon/auditor/invalid'] req = Request.blank('/recon/auditor/invalid', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_auditor_resp) def test_recon_get_auditor_notype(self): - get_auditor_resp = ['Invalid path: /recon/auditor'] + get_auditor_resp = [b'Invalid path: /recon/auditor'] req = Request.blank('/recon/auditor', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_auditor_resp) def test_recon_get_auditor_all(self): - get_auditor_resp = ['{"auditortest": "1"}'] + get_auditor_resp = [b'{"auditortest": "1"}'] req = Request.blank('/recon/auditor/account', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) @@ -1237,21 +1241,21 @@ class TestReconMiddleware(unittest.TestCase): self.frecon.fake_auditor_rtype = None def test_recon_get_updater_invalid(self): - get_updater_resp = ['Invalid path: /recon/updater/invalid'] + get_updater_resp = [b'Invalid path: /recon/updater/invalid'] req = Request.blank('/recon/updater/invalid', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_updater_resp) def test_recon_get_updater_notype(self): - get_updater_resp = ['Invalid path: /recon/updater'] + get_updater_resp = [b'Invalid path: /recon/updater'] req = Request.blank('/recon/updater', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_updater_resp) def test_recon_get_updater(self): - get_updater_resp = ['{"updatertest": "1"}'] + get_updater_resp = [b'{"updatertest": "1"}'] req = Request.blank('/recon/updater/container', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) @@ -1266,21 +1270,21 @@ class TestReconMiddleware(unittest.TestCase): self.frecon.fake_updater_rtype = None def test_recon_get_expirer_invalid(self): - get_updater_resp = ['Invalid path: /recon/expirer/invalid'] + get_updater_resp = [b'Invalid path: /recon/expirer/invalid'] req = Request.blank('/recon/expirer/invalid', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_updater_resp) def test_recon_get_expirer_notype(self): - get_updater_resp = ['Invalid path: /recon/expirer'] + get_updater_resp = [b'Invalid path: /recon/expirer'] req = Request.blank('/recon/expirer', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_updater_resp) def test_recon_get_expirer_object(self): - get_expirer_resp = ['{"expirertest": "1"}'] + get_expirer_resp = [b'{"expirertest": "1"}'] req = Request.blank('/recon/expirer/object', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) @@ -1289,14 +1293,14 @@ class TestReconMiddleware(unittest.TestCase): self.frecon.fake_updater_rtype = None def test_recon_get_mounted(self): - get_mounted_resp = ['{"mountedtest": "1"}'] + get_mounted_resp = [b'{"mountedtest": "1"}'] req = Request.blank('/recon/mounted', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_mounted_resp) def test_recon_get_unmounted(self): - get_unmounted_resp = ['{"unmountedtest": "1"}'] + get_unmounted_resp = [b'{"unmountedtest": "1"}'] self.app.get_unmounted = self.frecon.fake_unmounted req = Request.blank('/recon/unmounted', environ={'REQUEST_METHOD': 'GET'}) @@ -1304,43 +1308,43 @@ class TestReconMiddleware(unittest.TestCase): self.assertEqual(resp, get_unmounted_resp) def test_recon_get_unmounted_empty(self): - get_unmounted_resp = '[]' + get_unmounted_resp = b'[]' self.app.get_unmounted = self.frecon.fake_unmounted_empty req = Request.blank('/recon/unmounted', environ={'REQUEST_METHOD': 'GET'}) - resp = ''.join(self.app(req.environ, start_response)) + resp = b''.join(self.app(req.environ, start_response)) self.assertEqual(resp, get_unmounted_resp) def test_recon_get_diskusage(self): - get_diskusage_resp = ['{"diskusagetest": "1"}'] + get_diskusage_resp = [b'{"diskusagetest": "1"}'] req = Request.blank('/recon/diskusage', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_diskusage_resp) def test_recon_get_ringmd5(self): - get_ringmd5_resp = ['{"ringmd5test": "1"}'] + get_ringmd5_resp = [b'{"ringmd5test": "1"}'] req = Request.blank('/recon/ringmd5', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_ringmd5_resp) def test_recon_get_swiftconfmd5(self): - get_swiftconfmd5_resp = ['{"/etc/swift/swift.conf": "abcdef"}'] + get_swiftconfmd5_resp = [b'{"/etc/swift/swift.conf": "abcdef"}'] req = Request.blank('/recon/swiftconfmd5', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_swiftconfmd5_resp) def test_recon_get_quarantined(self): - get_quarantined_resp = ['{"quarantinedtest": "1"}'] + get_quarantined_resp = [b'{"quarantinedtest": "1"}'] req = Request.blank('/recon/quarantined', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_quarantined_resp) def test_recon_get_sockstat(self): - get_sockstat_resp = ['{"sockstattest": "1"}'] + get_sockstat_resp = [b'{"sockstattest": "1"}'] req = Request.blank('/recon/sockstat', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) @@ -1350,28 +1354,28 @@ class TestReconMiddleware(unittest.TestCase): req = Request.blank('/recon/invalid', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) - self.assertEqual(resp, ['Invalid path: /recon/invalid']) + self.assertEqual(resp, [b'Invalid path: /recon/invalid']) def test_no_content(self): self.app.get_load = self.frecon.nocontent req = Request.blank('/recon/load', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) - self.assertEqual(resp, ['Internal server error.']) + self.assertEqual(resp, [b'Internal server error.']) def test_recon_pass(self): req = Request.blank('/', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) - self.assertEqual(resp, 'FAKE APP') + self.assertEqual(resp, b'FAKE APP') def test_recon_get_driveaudit(self): - get_driveaudit_resp = ['{"driveaudittest": "1"}'] + get_driveaudit_resp = [b'{"driveaudittest": "1"}'] req = Request.blank('/recon/driveaudit', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) self.assertEqual(resp, get_driveaudit_resp) def test_recon_get_time(self): - get_time_resp = ['{"timetest": "1"}'] + get_time_resp = [b'{"timetest": "1"}'] req = Request.blank('/recon/time', environ={'REQUEST_METHOD': 'GET'}) resp = self.app(req.environ, start_response) diff --git a/tox.ini b/tox.ini index 6c6defa384..1a6aabbd33 100644 --- a/tox.ini +++ b/tox.ini @@ -58,7 +58,12 @@ commands = test/unit/common/middleware/test_list_endpoints.py \ test/unit/common/middleware/test_listing_formats.py \ test/unit/common/middleware/test_memcache.py \ + test/unit/common/middleware/test_name_check.py \ test/unit/common/middleware/test_proxy_logging.py \ + test/unit/common/middleware/test_quotas.py \ + test/unit/common/middleware/test_ratelimit.py \ + test/unit/common/middleware/test_read_only.py \ + test/unit/common/middleware/test_recon.py \ test/unit/common/middleware/test_subrequest_logging.py \ test/unit/common/middleware/test_tempauth.py \ test/unit/common/middleware/test_xprofile.py \