diff --git a/keystone/common/utils.py b/keystone/common/utils.py index b5dc85b384..402f8a2c55 100644 --- a/keystone/common/utils.py +++ b/keystone/common/utils.py @@ -290,7 +290,12 @@ class LimitingReader(object): yield chunk def read(self, i=None): - result = self.data.read(i) + # NOTE(jamielennox): We can't simply provide the default to the read() + # call as the expected default differs between mod_wsgi and eventlet + if i is None: + result = self.data.read() + else: + result = self.data.read(i) self.bytes_read += len(result) if self.bytes_read > self.limit: raise exception.RequestTooLarge() diff --git a/keystone/tests/test_utils.py b/keystone/tests/test_utils.py index c28ca502ff..a71ec690cd 100644 --- a/keystone/tests/test_utils.py +++ b/keystone/tests/test_utils.py @@ -105,3 +105,26 @@ class UtilsTestCase(tests.TestCase): for d in ['+0', '-11', '-8', '-5', '+5', '+8', '+14']: TZ = 'UTC' + d _test_unixtime() + + +class LimitingReaderTests(tests.TestCase): + + def test_read_default_value(self): + + class FakeData(object): + def read(self, *args, **kwargs): + self.read_args = args + self.read_kwargs = kwargs + return 'helloworld' + + data = FakeData() + utils.LimitingReader(data, 100) + + self.assertEqual(data.read(), 'helloworld') + self.assertEqual(len(data.read_args), 0) + self.assertEqual(len(data.read_kwargs), 0) + + self.assertEqual(data.read(10), 'helloworld') + self.assertEqual(len(data.read_args), 1) + self.assertEqual(len(data.read_kwargs), 0) + self.assertEqual(data.read_args[0], 10)