diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-01-10 03:42:45 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-01-10 03:42:45 +0000 |
commit | 7709fea51e71084163cf56c4d11a280ca4388357 (patch) | |
tree | 5c82df0b10612ce416a26e7110a6f074ccc00c13 | |
parent | 488272ee590364128741af3e5f84eebc0db4b19b (diff) | |
parent | 68f271aae2c45cd65d5a93659a812f9b8e823212 (diff) | |
download | python-swiftclient-7709fea51e71084163cf56c4d11a280ca4388357.tar.gz |
Merge "Check that content_type header exists before using"
-rw-r--r-- | swiftclient/service.py | 3 | ||||
-rw-r--r-- | tests/unit/test_shell.py | 28 |
2 files changed, 30 insertions, 1 deletions
diff --git a/swiftclient/service.py b/swiftclient/service.py index dddb7db..df1ffb3 100644 --- a/swiftclient/service.py +++ b/swiftclient/service.py @@ -1012,7 +1012,8 @@ class SwiftService(object): try: no_file = options['no_download'] content_type = headers.get('content-type') - if content_type.split(';', 1)[0] == 'text/directory': + if (content_type and + content_type.split(';', 1)[0] == 'text/directory'): make_dir = not no_file and out_file != "-" if make_dir and not isdir(path): mkdirs(path) diff --git a/tests/unit/test_shell.py b/tests/unit/test_shell.py index 34c1e76..6513263 100644 --- a/tests/unit/test_shell.py +++ b/tests/unit/test_shell.py @@ -326,6 +326,34 @@ class TestShell(unittest.TestCase): response_dict={}) mock_open.assert_called_with('object', 'wb') + @mock.patch('swiftclient.service.Connection') + def test_download_no_content_type(self, connection): + connection.return_value.get_object.return_value = [ + {'etag': 'd41d8cd98f00b204e9800998ecf8427e'}, + ''] + + # Test downloading whole container + connection.return_value.get_container.side_effect = [ + [None, [{'name': 'object'}]], + [None, [{'name': 'pseudo/'}]], + [None, []], + ] + connection.return_value.auth_end_time = 0 + connection.return_value.attempts = 0 + + with mock.patch(BUILTIN_OPEN) as mock_open: + argv = ["", "download", "container"] + swiftclient.shell.main(argv) + calls = [mock.call('container', 'object', + headers={}, resp_chunk_size=65536, + response_dict={}), + mock.call('container', 'pseudo/', + headers={}, resp_chunk_size=65536, + response_dict={})] + connection.return_value.get_object.assert_has_calls( + calls, any_order=True) + mock_open.assert_called_once_with('object', 'wb') + @mock.patch('swiftclient.shell.walk') @mock.patch('swiftclient.service.Connection') def test_upload(self, connection, walk): |