diff options
| author | Tim Burke <tim.burke@gmail.com> | 2018-06-07 16:40:58 -0700 |
|---|---|---|
| committer | Dean Troyer <dtroyer@gmail.com> | 2019-04-10 14:34:40 -0500 |
| commit | 415b48056d9d021e04ec972029040a89a6b13928 (patch) | |
| tree | a381db90ad1dc0fff823587ca4121775ae8c0878 /openstackclient/tests/unit/object | |
| parent | c53de3214ed74ffd5b53e6d1cf8a0c0fa73dac99 (diff) | |
| download | python-openstackclient-415b48056d9d021e04ec972029040a89a6b13928.tar.gz | |
Before writing object data to stdout, re-open it in binary mode
Otherwise, you can hit TypeErrors on Python3.
Change-Id: I9a891508886feddac3982ce593bd95130392e035
Closes-Bug: 1775482
Diffstat (limited to 'openstackclient/tests/unit/object')
| -rw-r--r-- | openstackclient/tests/unit/object/v1/test_object_all.py | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/openstackclient/tests/unit/object/v1/test_object_all.py b/openstackclient/tests/unit/object/v1/test_object_all.py index 363f2ea2..08a7534d 100644 --- a/openstackclient/tests/unit/object/v1/test_object_all.py +++ b/openstackclient/tests/unit/object/v1/test_object_all.py @@ -241,7 +241,25 @@ class TestObjectSave(TestObjectAll): parsed_args = self.check_parser(self.cmd, arglist, verifylist) - with mock.patch('sys.stdout', new=six.BytesIO()) as fake_stdout: + class FakeStdout(six.BytesIO): + def __init__(self): + six.BytesIO.__init__(self) + self.context_manager_calls = [] + + def __enter__(self): + self.context_manager_calls.append('__enter__') + return self + + def __exit__(self, *a): + self.context_manager_calls.append('__exit__') + + with mock.patch('sys.stdout') as fake_stdout, mock.patch( + 'os.fdopen', return_value=FakeStdout()) as fake_fdopen: + fake_stdout.fileno.return_value = 123 self.cmd.take_action(parsed_args) - self.assertEqual(fake_stdout.getvalue(), object_fakes.object_1_content) + self.assertEqual(fake_fdopen.return_value.getvalue(), + object_fakes.object_1_content) + self.assertEqual(fake_fdopen.mock_calls, [mock.call(123, 'wb')]) + self.assertEqual(fake_fdopen.return_value.context_manager_calls, + ['__enter__', '__exit__']) |
