Drop testtools from test-requirements.txt

My understanding is that it was mainly being used so we could have sane
testing on py26.  With py26 support being dropped, we no longer need it.

Also drop discover from test-requirements.txt, as we don't seem to
actually use it.

Change-Id: Iee04c42890596d3b483c1473169480a3ae19aac8
Related-Change: I37116731db11449d0c374a6a83a3a43789a19d5f
This commit is contained in:
Tim Burke 2015-12-04 11:28:05 -08:00
parent a6f171437d
commit bed6bbd5ef
9 changed files with 114 additions and 123 deletions

View File

@ -1,10 +1,8 @@
hacking>=0.10.0,<0.11 hacking>=0.10.0,<0.11
coverage>=3.6 coverage>=3.6
discover
mock>=1.2 mock>=1.2
oslosphinx oslosphinx
python-keystoneclient>=0.7.0 python-keystoneclient>=0.7.0
sphinx>=1.1.2,<1.2 sphinx>=1.1.2,<1.2
testrepository>=0.0.18 testrepository>=0.0.18
testtools>=0.9.34

View File

@ -14,7 +14,7 @@
# limitations under the License. # limitations under the License.
import os import os
import testtools import unittest
import time import time
from io import BytesIO from io import BytesIO
@ -23,7 +23,7 @@ from six.moves import configparser
import swiftclient import swiftclient
class TestFunctional(testtools.TestCase): class TestFunctional(unittest.TestCase):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(TestFunctional, self).__init__(*args, **kwargs) super(TestFunctional, self).__init__(*args, **kwargs)

View File

@ -15,13 +15,13 @@
import mock import mock
from six import StringIO from six import StringIO
import testtools import unittest
from swiftclient import command_helpers as h from swiftclient import command_helpers as h
from swiftclient.multithreading import OutputManager from swiftclient.multithreading import OutputManager
class TestStatHelpers(testtools.TestCase): class TestStatHelpers(unittest.TestCase):
def setUp(self): def setUp(self):
super(TestStatHelpers, self).setUp() super(TestStatHelpers, self).setUp()

View File

@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import sys import sys
import testtools import unittest
import threading import threading
import six import six
@ -25,7 +25,7 @@ from swiftclient import multithreading as mt
from .utils import CaptureStream from .utils import CaptureStream
class ThreadTestCase(testtools.TestCase): class ThreadTestCase(unittest.TestCase):
def setUp(self): def setUp(self):
super(ThreadTestCase, self).setUp() super(ThreadTestCase, self).setUp()
self.got_items = Queue() self.got_items = Queue()
@ -163,7 +163,7 @@ class TestConnectionThreadPoolExecutor(ThreadTestCase):
) )
class TestOutputManager(testtools.TestCase): class TestOutputManager(unittest.TestCase):
def test_instantiation(self): def test_instantiation(self):
output_manager = mt.OutputManager() output_manager = mt.OutputManager()

View File

@ -18,7 +18,7 @@ import mock
import os import os
import six import six
import tempfile import tempfile
import testtools import unittest
import time import time
from concurrent.futures import Future from concurrent.futures import Future
@ -49,7 +49,7 @@ else:
import builtins import builtins
class TestSwiftPostObject(testtools.TestCase): class TestSwiftPostObject(unittest.TestCase):
def setUp(self): def setUp(self):
super(TestSwiftPostObject, self).setUp() super(TestSwiftPostObject, self).setUp()
@ -69,7 +69,7 @@ class TestSwiftPostObject(testtools.TestCase):
self.assertRaises(SwiftError, self.spo, 1) self.assertRaises(SwiftError, self.spo, 1)
class TestSwiftReader(testtools.TestCase): class TestSwiftReader(unittest.TestCase):
def setUp(self): def setUp(self):
super(TestSwiftReader, self).setUp() super(TestSwiftReader, self).setUp()
@ -152,25 +152,7 @@ class TestSwiftReader(testtools.TestCase):
'97ac82a5b825239e782d0339e2d7b910') '97ac82a5b825239e782d0339e2d7b910')
class _TestServiceBase(testtools.TestCase): class _TestServiceBase(unittest.TestCase):
def _assertDictEqual(self, a, b, m=None):
# assertDictEqual is not available in py2.6 so use a shallow check
# instead
if not m:
m = '{0} != {1}'.format(a, b)
if hasattr(self, 'assertDictEqual'):
self.assertDictEqual(a, b, m)
else:
self.assertIsInstance(a, dict,
'First argument is not a dictionary')
self.assertIsInstance(b, dict,
'Second argument is not a dictionary')
self.assertEqual(len(a), len(b), m)
for k, v in a.items():
self.assertIn(k, b, m)
self.assertEqual(b[k], v, m)
def _get_mock_connection(self, attempts=2): def _get_mock_connection(self, attempts=2):
m = Mock(spec=Connection) m = Mock(spec=Connection)
type(m).attempts = PropertyMock(return_value=attempts) type(m).attempts = PropertyMock(return_value=attempts)
@ -223,8 +205,8 @@ class TestServiceDelete(_TestServiceBase):
mock_conn.delete_object.assert_called_once_with( mock_conn.delete_object.assert_called_once_with(
'test_c', 'test_s', response_dict={} 'test_c', 'test_s', response_dict={}
) )
self._assertDictEqual(expected_r, r) self.assertEqual(expected_r, r)
self._assertDictEqual(expected_r, self._get_queue(mock_q)) self.assertEqual(expected_r, self._get_queue(mock_q))
def test_delete_segment_exception(self): def test_delete_segment_exception(self):
mock_q = Queue() mock_q = Queue()
@ -246,8 +228,8 @@ class TestServiceDelete(_TestServiceBase):
mock_conn.delete_object.assert_called_once_with( mock_conn.delete_object.assert_called_once_with(
'test_c', 'test_s', response_dict={} 'test_c', 'test_s', response_dict={}
) )
self._assertDictEqual(expected_r, r) self.assertEqual(expected_r, r)
self._assertDictEqual(expected_r, self._get_queue(mock_q)) self.assertEqual(expected_r, self._get_queue(mock_q))
self.assertGreaterEqual(r['error_timestamp'], before) self.assertGreaterEqual(r['error_timestamp'], before)
self.assertLessEqual(r['error_timestamp'], after) self.assertLessEqual(r['error_timestamp'], after)
self.assertIn('Traceback', r['traceback']) self.assertIn('Traceback', r['traceback'])
@ -268,7 +250,7 @@ class TestServiceDelete(_TestServiceBase):
mock_conn.delete_object.assert_called_once_with( mock_conn.delete_object.assert_called_once_with(
'test_c', 'test_o', query_string=None, response_dict={} 'test_c', 'test_o', query_string=None, response_dict={}
) )
self._assertDictEqual(expected_r, r) self.assertEqual(expected_r, r)
def test_delete_object_exception(self): def test_delete_object_exception(self):
mock_q = Queue() mock_q = Queue()
@ -294,7 +276,7 @@ class TestServiceDelete(_TestServiceBase):
mock_conn.delete_object.assert_called_once_with( mock_conn.delete_object.assert_called_once_with(
'test_c', 'test_o', query_string=None, response_dict={} 'test_c', 'test_o', query_string=None, response_dict={}
) )
self._assertDictEqual(expected_r, r) self.assertEqual(expected_r, r)
self.assertGreaterEqual(r['error_timestamp'], before) self.assertGreaterEqual(r['error_timestamp'], before)
self.assertLessEqual(r['error_timestamp'], after) self.assertLessEqual(r['error_timestamp'], after)
self.assertIn('Traceback', r['traceback']) self.assertIn('Traceback', r['traceback'])
@ -321,7 +303,7 @@ class TestServiceDelete(_TestServiceBase):
query_string='multipart-manifest=delete', query_string='multipart-manifest=delete',
response_dict={} response_dict={}
) )
self._assertDictEqual(expected_r, r) self.assertEqual(expected_r, r)
def test_delete_object_dlo_support(self): def test_delete_object_dlo_support(self):
mock_q = Queue() mock_q = Queue()
@ -352,7 +334,7 @@ class TestServiceDelete(_TestServiceBase):
mock_conn, 'test_c', 'test_o', self.opts, mock_q mock_conn, 'test_c', 'test_o', self.opts, mock_q
) )
self._assertDictEqual(expected_r, r) self.assertEqual(expected_r, r)
expected = [ expected = [
mock.call('test_c', 'test_o', query_string=None, response_dict={}), mock.call('test_c', 'test_o', query_string=None, response_dict={}),
mock.call('manifest_c', 'test_seg_1', response_dict={}), mock.call('manifest_c', 'test_seg_1', response_dict={}),
@ -372,7 +354,7 @@ class TestServiceDelete(_TestServiceBase):
mock_conn.delete_container.assert_called_once_with( mock_conn.delete_container.assert_called_once_with(
'test_c', response_dict={} 'test_c', response_dict={}
) )
self._assertDictEqual(expected_r, r) self.assertEqual(expected_r, r)
def test_delete_empty_container_exception(self): def test_delete_empty_container_exception(self):
mock_conn = self._get_mock_connection() mock_conn = self._get_mock_connection()
@ -394,13 +376,13 @@ class TestServiceDelete(_TestServiceBase):
mock_conn.delete_container.assert_called_once_with( mock_conn.delete_container.assert_called_once_with(
'test_c', response_dict={} 'test_c', response_dict={}
) )
self._assertDictEqual(expected_r, r) self.assertEqual(expected_r, r)
self.assertGreaterEqual(r['error_timestamp'], before) self.assertGreaterEqual(r['error_timestamp'], before)
self.assertLessEqual(r['error_timestamp'], after) self.assertLessEqual(r['error_timestamp'], after)
self.assertIn('Traceback', r['traceback']) self.assertIn('Traceback', r['traceback'])
class TestSwiftError(testtools.TestCase): class TestSwiftError(unittest.TestCase):
def test_is_exception(self): def test_is_exception(self):
se = SwiftError(5) se = SwiftError(5)
@ -430,7 +412,7 @@ class TestSwiftError(testtools.TestCase):
self.assertEqual(str(se), '5 container:con object:obj segment:seg') self.assertEqual(str(se), '5 container:con object:obj segment:seg')
class TestServiceUtils(testtools.TestCase): class TestServiceUtils(unittest.TestCase):
def setUp(self): def setUp(self):
super(TestServiceUtils, self).setUp() super(TestServiceUtils, self).setUp()
@ -525,7 +507,7 @@ class TestServiceUtils(testtools.TestCase):
mock_headers) mock_headers)
class TestSwiftUploadObject(testtools.TestCase): class TestSwiftUploadObject(unittest.TestCase):
def setUp(self): def setUp(self):
self.suo = swiftclient.service.SwiftUploadObject self.suo = swiftclient.service.SwiftUploadObject
@ -614,7 +596,7 @@ class TestServiceList(_TestServiceBase):
SwiftService._list_account_job( SwiftService._list_account_job(
mock_conn, self.opts, mock_q mock_conn, self.opts, mock_q
) )
self._assertDictEqual(expected_r, self._get_queue(mock_q)) self.assertEqual(expected_r, self._get_queue(mock_q))
self.assertIsNone(self._get_queue(mock_q)) self.assertIsNone(self._get_queue(mock_q))
long_opts = dict(self.opts, **{'long': True}) long_opts = dict(self.opts, **{'long': True})
@ -635,7 +617,7 @@ class TestServiceList(_TestServiceBase):
SwiftService._list_account_job( SwiftService._list_account_job(
mock_conn, long_opts, mock_q mock_conn, long_opts, mock_q
) )
self._assertDictEqual(expected_r_long, self._get_queue(mock_q)) self.assertEqual(expected_r_long, self._get_queue(mock_q))
self.assertIsNone(self._get_queue(mock_q)) self.assertIsNone(self._get_queue(mock_q))
def test_list_account_exception(self): def test_list_account_exception(self):
@ -657,7 +639,7 @@ class TestServiceList(_TestServiceBase):
mock_conn.get_account.assert_called_once_with( mock_conn.get_account.assert_called_once_with(
marker='', prefix=None marker='', prefix=None
) )
self._assertDictEqual(expected_r, self._get_queue(mock_q)) self.assertEqual(expected_r, self._get_queue(mock_q))
self.assertIsNone(self._get_queue(mock_q)) self.assertIsNone(self._get_queue(mock_q))
def test_list_container(self): def test_list_container(self):
@ -680,7 +662,7 @@ class TestServiceList(_TestServiceBase):
SwiftService._list_container_job( SwiftService._list_container_job(
mock_conn, 'test_c', self.opts, mock_q mock_conn, 'test_c', self.opts, mock_q
) )
self._assertDictEqual(expected_r, self._get_queue(mock_q)) self.assertEqual(expected_r, self._get_queue(mock_q))
self.assertIsNone(self._get_queue(mock_q)) self.assertIsNone(self._get_queue(mock_q))
long_opts = dict(self.opts, **{'long': True}) long_opts = dict(self.opts, **{'long': True})
@ -702,7 +684,7 @@ class TestServiceList(_TestServiceBase):
SwiftService._list_container_job( SwiftService._list_container_job(
mock_conn, 'test_c', long_opts, mock_q mock_conn, 'test_c', long_opts, mock_q
) )
self._assertDictEqual(expected_r_long, self._get_queue(mock_q)) self.assertEqual(expected_r_long, self._get_queue(mock_q))
self.assertIsNone(self._get_queue(mock_q)) self.assertIsNone(self._get_queue(mock_q))
def test_list_container_exception(self): def test_list_container_exception(self):
@ -726,7 +708,7 @@ class TestServiceList(_TestServiceBase):
mock_conn.get_container.assert_called_once_with( mock_conn.get_container.assert_called_once_with(
'test_c', marker='', delimiter='', prefix=None 'test_c', marker='', delimiter='', prefix=None
) )
self._assertDictEqual(expected_r, self._get_queue(mock_q)) self.assertEqual(expected_r, self._get_queue(mock_q))
self.assertIsNone(self._get_queue(mock_q)) self.assertIsNone(self._get_queue(mock_q))
@mock.patch('swiftclient.service.get_conn') @mock.patch('swiftclient.service.get_conn')
@ -805,7 +787,7 @@ class TestServiceList(_TestServiceBase):
self.assertEqual(observed_listing, expected_listing) self.assertEqual(observed_listing, expected_listing)
class TestService(testtools.TestCase): class TestService(unittest.TestCase):
def test_upload_with_bad_segment_size(self): def test_upload_with_bad_segment_size(self):
for bad in ('ten', '1234X', '100.3'): for bad in ('ten', '1234X', '100.3'):
@ -913,7 +895,7 @@ class TestServiceUpload(_TestServiceBase):
self.assertEqual(r['path'], f.name) self.assertEqual(r['path'], f.name)
del r['path'] del r['path']
self._assertDictEqual(r, expected_r) self.assertEqual(r, expected_r)
self.assertEqual(mock_conn.put_object.call_count, 1) self.assertEqual(mock_conn.put_object.call_count, 1)
mock_conn.put_object.assert_called_with('test_c', 'テスト/dummy.dat', mock_conn.put_object.assert_called_with('test_c', 'テスト/dummy.dat',
'', '',
@ -960,7 +942,7 @@ class TestServiceUpload(_TestServiceBase):
options={'segment_container': None, options={'segment_container': None,
'checksum': True}) 'checksum': True})
self._assertDictEqual(r, expected_r) self.assertEqual(r, expected_r)
self.assertEqual(mock_conn.put_object.call_count, 1) self.assertEqual(mock_conn.put_object.call_count, 1)
mock_conn.put_object.assert_called_with('test_c_segments', mock_conn.put_object.assert_called_with('test_c_segments',
@ -1098,7 +1080,7 @@ class TestServiceUpload(_TestServiceBase):
self.assertEqual(r['path'], f.name) self.assertEqual(r['path'], f.name)
del r['path'] del r['path']
self._assertDictEqual(r, expected_r) self.assertEqual(r, expected_r)
self.assertEqual(mock_conn.put_object.call_count, 1) self.assertEqual(mock_conn.put_object.call_count, 1)
mock_conn.put_object.assert_called_with('test_c', 'test_o', mock_conn.put_object.assert_called_with('test_c', 'test_o',
mock.ANY, mock.ANY,
@ -1155,7 +1137,7 @@ class TestServiceUpload(_TestServiceBase):
self.assertEqual(mtime, expected_mtime) self.assertEqual(mtime, expected_mtime)
del r['headers']['x-object-meta-mtime'] del r['headers']['x-object-meta-mtime']
self._assertDictEqual(r, expected_r) self.assertEqual(r, expected_r)
self.assertEqual(mock_conn.put_object.call_count, 1) self.assertEqual(mock_conn.put_object.call_count, 1)
mock_conn.put_object.assert_called_with('test_c', 'test_o', mock_conn.put_object.assert_called_with('test_c', 'test_o',
mock.ANY, mock.ANY,
@ -1559,7 +1541,7 @@ class TestServiceDownload(_TestServiceBase):
'test_c', 'test_o', resp_chunk_size=65536, headers={}, 'test_c', 'test_o', resp_chunk_size=65536, headers={},
response_dict={} response_dict={}
) )
self._assertDictEqual(expected_r, actual_r) self.assertEqual(expected_r, actual_r)
def test_download_object_job_with_mtime(self): def test_download_object_job_with_mtime(self):
mock_conn = self._get_mock_connection() mock_conn = self._get_mock_connection()
@ -1605,7 +1587,7 @@ class TestServiceDownload(_TestServiceBase):
'test_c', 'test_o', resp_chunk_size=65536, headers={}, 'test_c', 'test_o', resp_chunk_size=65536, headers={},
response_dict={} response_dict={}
) )
self._assertDictEqual(expected_r, actual_r) self.assertEqual(expected_r, actual_r)
def test_download_object_job_bad_mtime(self): def test_download_object_job_bad_mtime(self):
mock_conn = self._get_mock_connection() mock_conn = self._get_mock_connection()
@ -1650,7 +1632,7 @@ class TestServiceDownload(_TestServiceBase):
'test_c', 'test_o', resp_chunk_size=65536, headers={}, 'test_c', 'test_o', resp_chunk_size=65536, headers={},
response_dict={} response_dict={}
) )
self._assertDictEqual(expected_r, actual_r) self.assertEqual(expected_r, actual_r)
def test_download_object_job_exception(self): def test_download_object_job_exception(self):
mock_conn = self._get_mock_connection() mock_conn = self._get_mock_connection()
@ -1670,7 +1652,7 @@ class TestServiceDownload(_TestServiceBase):
'test_c', 'test_o', resp_chunk_size=65536, headers={}, 'test_c', 'test_o', resp_chunk_size=65536, headers={},
response_dict={} response_dict={}
) )
self._assertDictEqual(expected_r, actual_r) self.assertEqual(expected_r, actual_r)
def test_download(self): def test_download(self):
service = SwiftService() service = SwiftService()
@ -1814,7 +1796,7 @@ class TestServiceDownload(_TestServiceBase):
'header': {}, 'header': {},
'yes_all': False, 'yes_all': False,
'skip_identical': True}) 'skip_identical': True})
self._assertDictEqual(r, expected_r) self.assertEqual(r, expected_r)
self.assertEqual(mock_conn.get_object.call_count, 1) self.assertEqual(mock_conn.get_object.call_count, 1)
mock_conn.get_object.assert_called_with( mock_conn.get_object.assert_called_with(
@ -1876,7 +1858,7 @@ class TestServiceDownload(_TestServiceBase):
self.assertEqual("Large object is identical", err.msg) self.assertEqual("Large object is identical", err.msg)
self.assertEqual(304, err.http_status) self.assertEqual(304, err.http_status)
self._assertDictEqual(r, expected_r) self.assertEqual(r, expected_r)
self.assertEqual(mock_conn.get_object.call_count, 1) self.assertEqual(mock_conn.get_object.call_count, 1)
mock_conn.get_object.assert_called_with( mock_conn.get_object.assert_called_with(
@ -1959,7 +1941,7 @@ class TestServiceDownload(_TestServiceBase):
self.assertEqual("Large object is identical", err.msg) self.assertEqual("Large object is identical", err.msg)
self.assertEqual(304, err.http_status) self.assertEqual(304, err.http_status)
self._assertDictEqual(r, expected_r) self.assertEqual(r, expected_r)
self.assertEqual(mock_conn.get_object.mock_calls, [ self.assertEqual(mock_conn.get_object.mock_calls, [
mock.call('test_c', mock.call('test_c',
'test_o', 'test_o',
@ -2025,7 +2007,7 @@ class TestServiceDownload(_TestServiceBase):
obj='test_o', obj='test_o',
options=options) options=options)
self._assertDictEqual(r, expected_r) self.assertEqual(r, expected_r)
self.assertEqual(mock_conn.get_container.mock_calls, [ self.assertEqual(mock_conn.get_container.mock_calls, [
mock.call('test_c_segments', mock.call('test_c_segments',
@ -2116,7 +2098,7 @@ class TestServiceDownload(_TestServiceBase):
obj='test_o', obj='test_o',
options=options) options=options)
self._assertDictEqual(r, expected_r) self.assertEqual(r, expected_r)
self.assertEqual(mock_conn.get_object.mock_calls, [ self.assertEqual(mock_conn.get_object.mock_calls, [
mock.call('test_c', mock.call('test_c',
'test_o', 'test_o',

View File

@ -20,9 +20,8 @@ import logging
import mock import mock
import os import os
import tempfile import tempfile
import testtools import unittest
import textwrap import textwrap
from testtools import ExpectedException
import six import six
@ -106,7 +105,7 @@ def _make_cmd(cmd, opts, os_opts, use_env=False, flags=None, cmd_args=None):
@mock.patch.dict(os.environ, mocked_os_environ) @mock.patch.dict(os.environ, mocked_os_environ)
class TestShell(testtools.TestCase): class TestShell(unittest.TestCase):
def setUp(self): def setUp(self):
super(TestShell, self).setUp() super(TestShell, self).setUp()
tmpfile = tempfile.NamedTemporaryFile(delete=False) tmpfile = tempfile.NamedTemporaryFile(delete=False)
@ -1076,7 +1075,7 @@ class TestShell(testtools.TestCase):
swiftclient.ClientException('bad auth') swiftclient.ClientException('bad auth')
with CaptureOutput() as output: with CaptureOutput() as output:
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, 'bad auth\n') self.assertEqual(output.err, 'bad auth\n')
@ -1088,7 +1087,7 @@ class TestShell(testtools.TestCase):
swiftclient.ClientException('test', http_status=404) swiftclient.ClientException('test', http_status=404)
with CaptureOutput() as output: with CaptureOutput() as output:
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, 'Account not found\n') self.assertEqual(output.err, 'Account not found\n')
@ -1107,7 +1106,7 @@ class TestShell(testtools.TestCase):
swiftclient.ClientException('bad auth') swiftclient.ClientException('bad auth')
with CaptureOutput() as output: with CaptureOutput() as output:
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, 'bad auth\n') self.assertEqual(output.err, 'bad auth\n')
@ -1125,7 +1124,7 @@ class TestShell(testtools.TestCase):
argv = ["", "post", "conta/iner"] argv = ["", "post", "conta/iner"]
with CaptureOutput() as output: with CaptureOutput() as output:
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertTrue(output.err != '') self.assertTrue(output.err != '')
self.assertTrue(output.err.startswith('WARNING: / in')) self.assertTrue(output.err.startswith('WARNING: / in'))
@ -1165,7 +1164,7 @@ class TestShell(testtools.TestCase):
swiftclient.ClientException("bad auth") swiftclient.ClientException("bad auth")
with CaptureOutput() as output: with CaptureOutput() as output:
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, 'bad auth\n') self.assertEqual(output.err, 'bad auth\n')
@ -1174,7 +1173,7 @@ class TestShell(testtools.TestCase):
argv = ["", "post", "container", "object", "bad_arg"] argv = ["", "post", "container", "object", "bad_arg"]
with CaptureOutput() as output: with CaptureOutput() as output:
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertTrue(output.err != '') self.assertTrue(output.err != '')
@ -1235,49 +1234,49 @@ class TestShell(testtools.TestCase):
_check_expected(mock_swift, 12345) _check_expected(mock_swift, 12345)
with CaptureOutput() as output: with CaptureOutput() as output:
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
# Test invalid states # Test invalid states
argv = ["", "upload", "-S", "1234X", "container", "object"] argv = ["", "upload", "-S", "1234X", "container", "object"]
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, "Invalid segment size\n") self.assertEqual(output.err, "Invalid segment size\n")
output.clear() output.clear()
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
argv = ["", "upload", "-S", "K1234", "container", "object"] argv = ["", "upload", "-S", "K1234", "container", "object"]
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, "Invalid segment size\n") self.assertEqual(output.err, "Invalid segment size\n")
output.clear() output.clear()
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
argv = ["", "upload", "-S", "K", "container", "object"] argv = ["", "upload", "-S", "K", "container", "object"]
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, "Invalid segment size\n") self.assertEqual(output.err, "Invalid segment size\n")
def test_negative_upload_segment_size(self): def test_negative_upload_segment_size(self):
with CaptureOutput() as output: with CaptureOutput() as output:
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
argv = ["", "upload", "-S", "-40", "container", "object"] argv = ["", "upload", "-S", "-40", "container", "object"]
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, "segment-size should be positive\n") self.assertEqual(output.err, "segment-size should be positive\n")
output.clear() output.clear()
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
argv = ["", "upload", "-S", "-40K", "container", "object"] argv = ["", "upload", "-S", "-40K", "container", "object"]
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, "segment-size should be positive\n") self.assertEqual(output.err, "segment-size should be positive\n")
output.clear() output.clear()
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
argv = ["", "upload", "-S", "-40M", "container", "object"] argv = ["", "upload", "-S", "-40M", "container", "object"]
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, "segment-size should be positive\n") self.assertEqual(output.err, "segment-size should be positive\n")
output.clear() output.clear()
with ExpectedException(SystemExit): with self.assertRaises(SystemExit):
argv = ["", "upload", "-S", "-40G", "container", "object"] argv = ["", "upload", "-S", "-40G", "container", "object"]
swiftclient.shell.main(argv) swiftclient.shell.main(argv)
self.assertEqual(output.err, "segment-size should be positive\n") self.assertEqual(output.err, "segment-size should be positive\n")
output.clear() output.clear()
class TestSubcommandHelp(testtools.TestCase): class TestSubcommandHelp(unittest.TestCase):
def test_subcommand_help(self): def test_subcommand_help(self):
for command in swiftclient.shell.commands: for command in swiftclient.shell.commands:
@ -1298,7 +1297,7 @@ class TestSubcommandHelp(testtools.TestCase):
@mock.patch.dict(os.environ, mocked_os_environ) @mock.patch.dict(os.environ, mocked_os_environ)
class TestDebugAndInfoOptions(testtools.TestCase): class TestDebugAndInfoOptions(unittest.TestCase):
@mock.patch('logging.basicConfig') @mock.patch('logging.basicConfig')
@mock.patch('swiftclient.service.Connection') @mock.patch('swiftclient.service.Connection')
def test_option_after_posarg(self, connection, mock_logging): def test_option_after_posarg(self, connection, mock_logging):
@ -1329,7 +1328,7 @@ class TestDebugAndInfoOptions(testtools.TestCase):
% (mock_logging.call_args_list, argv)) % (mock_logging.call_args_list, argv))
class TestBase(testtools.TestCase): class TestBase(unittest.TestCase):
""" """
Provide some common methods to subclasses Provide some common methods to subclasses
""" """

View File

@ -18,7 +18,7 @@ import mock
import six import six
import socket import socket
import string import string
import testtools import unittest
import warnings import warnings
import tempfile import tempfile
from hashlib import md5 from hashlib import md5
@ -34,7 +34,7 @@ import swiftclient.utils
import swiftclient import swiftclient
class TestClientException(testtools.TestCase): class TestClientException(unittest.TestCase):
def test_is_exception(self): def test_is_exception(self):
self.assertTrue(issubclass(c.ClientException, Exception)) self.assertTrue(issubclass(c.ClientException, Exception))
@ -251,12 +251,12 @@ class TestGetAuth(MockHttpTest):
self.assertEqual(url, 'storageURL') self.assertEqual(url, 'storageURL')
self.assertEqual(token, 'someauthtoken') self.assertEqual(token, 'someauthtoken')
e = self.assertRaises(c.ClientException, c.get_auth, with self.assertRaises(c.ClientException) as exc_context:
'http://www.test.com/invalid_cert', c.get_auth('http://www.test.com/invalid_cert',
'asdf', 'asdf', auth_version='1.0') 'asdf', 'asdf', auth_version='1.0')
# TODO: this test is really on validating the mock and not the # TODO: this test is really on validating the mock and not the
# the full plumbing into the requests's 'verify' option # the full plumbing into the requests's 'verify' option
self.assertIn('invalid_certificate', str(e)) self.assertIn('invalid_certificate', str(exc_context.exception))
def test_auth_v1_timeout(self): def test_auth_v1_timeout(self):
# this test has some overlap with # this test has some overlap with
@ -583,8 +583,9 @@ class TestHeadAccount(MockHttpTest):
def test_server_error(self): def test_server_error(self):
body = 'c' * 65 body = 'c' * 65
c.http_connection = self.fake_http_connection(500, body=body) c.http_connection = self.fake_http_connection(500, body=body)
e = self.assertRaises(c.ClientException, c.head_account, with self.assertRaises(c.ClientException) as exc_context:
'http://www.tests.com', 'asdf') c.head_account('http://www.tests.com', 'asdf')
e = exc_context.exception
self.assertEqual(e.http_response_content, body) self.assertEqual(e.http_response_content, body)
self.assertEqual(e.http_status, 500) self.assertEqual(e.http_status, 500)
self.assertRequests([ self.assertRequests([
@ -617,17 +618,17 @@ class TestPostAccount(MockHttpTest):
def test_server_error(self): def test_server_error(self):
body = 'c' * 65 body = 'c' * 65
c.http_connection = self.fake_http_connection(500, body=body) c.http_connection = self.fake_http_connection(500, body=body)
e = self.assertRaises(c.ClientException, c.post_account, with self.assertRaises(c.ClientException) as exc_mgr:
'http://www.tests.com', 'asdf', {}) c.post_account('http://www.tests.com', 'asdf', {})
self.assertEqual(e.http_response_content, body) self.assertEqual(exc_mgr.exception.http_response_content, body)
self.assertEqual(e.http_status, 500) self.assertEqual(exc_mgr.exception.http_status, 500)
self.assertRequests([ self.assertRequests([
('POST', 'http://www.tests.com', None, {'x-auth-token': 'asdf'}) ('POST', 'http://www.tests.com', None, {'x-auth-token': 'asdf'})
]) ])
# TODO: this is a fairly brittle test of the __repr__ on the # TODO: this is a fairly brittle test of the __repr__ on the
# ClientException which should probably be in a targeted test # ClientException which should probably be in a targeted test
new_body = "[first 60 chars of response] " + body[0:60] new_body = "[first 60 chars of response] " + body[0:60]
self.assertEqual(e.__str__()[-89:], new_body) self.assertEqual(exc_mgr.exception.__str__()[-89:], new_body)
class TestGetContainer(MockHttpTest): class TestGetContainer(MockHttpTest):
@ -741,8 +742,9 @@ class TestHeadContainer(MockHttpTest):
def test_server_error(self): def test_server_error(self):
body = 'c' * 60 body = 'c' * 60
c.http_connection = self.fake_http_connection(500, body=body) c.http_connection = self.fake_http_connection(500, body=body)
e = self.assertRaises(c.ClientException, c.head_container, with self.assertRaises(c.ClientException) as exc_context:
'http://www.test.com', 'asdf', 'container') c.head_container('http://www.test.com', 'asdf', 'container')
e = exc_context.exception
self.assertRequests([ self.assertRequests([
('HEAD', '/container', '', {'x-auth-token': 'asdf'}), ('HEAD', '/container', '', {'x-auth-token': 'asdf'}),
]) ])
@ -765,9 +767,9 @@ class TestPutContainer(MockHttpTest):
def test_server_error(self): def test_server_error(self):
body = 'c' * 60 body = 'c' * 60
c.http_connection = self.fake_http_connection(500, body=body) c.http_connection = self.fake_http_connection(500, body=body)
e = self.assertRaises(c.ClientException, c.put_container, with self.assertRaises(c.ClientException) as exc_context:
'http://www.test.com', 'token', 'container') c.put_container('http://www.test.com', 'token', 'container')
self.assertEqual(e.http_response_content, body) self.assertEqual(exc_context.exception.http_response_content, body)
self.assertRequests([ self.assertRequests([
('PUT', '/container', '', { ('PUT', '/container', '', {
'x-auth-token': 'token', 'x-auth-token': 'token',
@ -972,7 +974,9 @@ class TestPutObject(MockHttpTest):
body = 'c' * 60 body = 'c' * 60
c.http_connection = self.fake_http_connection(500, body=body) c.http_connection = self.fake_http_connection(500, body=body)
args = ('http://www.test.com', 'asdf', 'asdf', 'asdf', 'asdf') args = ('http://www.test.com', 'asdf', 'asdf', 'asdf', 'asdf')
e = self.assertRaises(c.ClientException, c.put_object, *args) with self.assertRaises(c.ClientException) as exc_context:
c.put_object(*args)
e = exc_context.exception
self.assertEqual(e.http_response_content, body) self.assertEqual(e.http_response_content, body)
self.assertEqual(e.http_status, 500) self.assertEqual(e.http_status, 500)
self.assertRequests([ self.assertRequests([
@ -1192,8 +1196,9 @@ class TestPostObject(MockHttpTest):
body = 'c' * 60 body = 'c' * 60
c.http_connection = self.fake_http_connection(500, body=body) c.http_connection = self.fake_http_connection(500, body=body)
args = ('http://www.test.com', 'token', 'container', 'obj', {}) args = ('http://www.test.com', 'token', 'container', 'obj', {})
e = self.assertRaises(c.ClientException, c.post_object, *args) with self.assertRaises(c.ClientException) as exc_context:
self.assertEqual(e.http_response_content, body) c.post_object(*args)
self.assertEqual(exc_context.exception.http_response_content, body)
self.assertRequests([ self.assertRequests([
('POST', 'http://www.test.com/container/obj', '', { ('POST', 'http://www.test.com/container/obj', '', {
'x-auth-token': 'token', 'x-auth-token': 'token',
@ -1347,17 +1352,23 @@ class TestHTTPConnection(MockHttpTest):
def test_bad_url_scheme(self): def test_bad_url_scheme(self):
url = u'www.test.com' url = u'www.test.com'
exc = self.assertRaises(c.ClientException, c.http_connection, url) with self.assertRaises(c.ClientException) as exc_context:
c.http_connection(url)
exc = exc_context.exception
expected = u'Unsupported scheme "" in url "www.test.com"' expected = u'Unsupported scheme "" in url "www.test.com"'
self.assertEqual(expected, str(exc)) self.assertEqual(expected, str(exc))
url = u'://www.test.com' url = u'://www.test.com'
exc = self.assertRaises(c.ClientException, c.http_connection, url) with self.assertRaises(c.ClientException) as exc_context:
c.http_connection(url)
exc = exc_context.exception
expected = u'Unsupported scheme "" in url "://www.test.com"' expected = u'Unsupported scheme "" in url "://www.test.com"'
self.assertEqual(expected, str(exc)) self.assertEqual(expected, str(exc))
url = u'blah://www.test.com' url = u'blah://www.test.com'
exc = self.assertRaises(c.ClientException, c.http_connection, url) with self.assertRaises(c.ClientException) as exc_context:
c.http_connection(url)
exc = exc_context.exception
expected = u'Unsupported scheme "blah" in url "blah://www.test.com"' expected = u'Unsupported scheme "blah" in url "blah://www.test.com"'
self.assertEqual(expected, str(exc)) self.assertEqual(expected, str(exc))
@ -1524,8 +1535,9 @@ class TestConnection(MockHttpTest):
} }
c.http_connection = self.fake_http_connection( c.http_connection = self.fake_http_connection(
*code_iter, headers=auth_resp_headers) *code_iter, headers=auth_resp_headers)
e = self.assertRaises(c.ClientException, conn.head_account) with self.assertRaises(c.ClientException) as exc_context:
self.assertIn('Account HEAD failed', str(e)) conn.head_account()
self.assertIn('Account HEAD failed', str(exc_context.exception))
self.assertEqual(conn.attempts, conn.retries + 1) self.assertEqual(conn.attempts, conn.retries + 1)
# test default no-retry # test default no-retry
@ -1533,8 +1545,9 @@ class TestConnection(MockHttpTest):
200, 498, 200, 498,
headers=auth_resp_headers) headers=auth_resp_headers)
conn = c.Connection('http://www.test.com/auth/v1.0', 'asdf', 'asdf') conn = c.Connection('http://www.test.com/auth/v1.0', 'asdf', 'asdf')
e = self.assertRaises(c.ClientException, conn.head_account) with self.assertRaises(c.ClientException) as exc_context:
self.assertIn('Account HEAD failed', str(e)) conn.head_account()
self.assertIn('Account HEAD failed', str(exc_context.exception))
self.assertEqual(conn.attempts, 1) self.assertEqual(conn.attempts, 1)
def test_resp_read_on_server_error(self): def test_resp_read_on_server_error(self):
@ -2132,9 +2145,9 @@ class TestLogging(MockHttpTest):
def test_get_error(self): def test_get_error(self):
c.http_connection = self.fake_http_connection(404) c.http_connection = self.fake_http_connection(404)
e = self.assertRaises(c.ClientException, c.get_object, with self.assertRaises(c.ClientException) as exc_context:
'http://www.test.com', 'asdf', 'asdf', 'asdf') c.get_object('http://www.test.com', 'asdf', 'asdf', 'asdf')
self.assertEqual(e.http_status, 404) self.assertEqual(exc_context.exception.http_status, 404)
class TestCloseConnection(MockHttpTest): class TestCloseConnection(MockHttpTest):

View File

@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import testtools import unittest
import mock import mock
import six import six
import tempfile import tempfile
@ -22,7 +22,7 @@ from hashlib import md5
from swiftclient import utils as u from swiftclient import utils as u
class TestConfigTrueValue(testtools.TestCase): class TestConfigTrueValue(unittest.TestCase):
def test_TRUE_VALUES(self): def test_TRUE_VALUES(self):
for v in u.TRUE_VALUES: for v in u.TRUE_VALUES:
@ -37,7 +37,7 @@ class TestConfigTrueValue(testtools.TestCase):
self.assertIs(u.config_true_value(False), False) self.assertIs(u.config_true_value(False), False)
class TestPrtBytes(testtools.TestCase): class TestPrtBytes(unittest.TestCase):
def test_zero_bytes(self): def test_zero_bytes(self):
bytes_ = 0 bytes_ = 0
@ -119,7 +119,7 @@ class TestPrtBytes(testtools.TestCase):
self.assertEqual('1024Y', u.prt_bytes(bytes_, True).lstrip()) self.assertEqual('1024Y', u.prt_bytes(bytes_, True).lstrip())
class TestTempURL(testtools.TestCase): class TestTempURL(unittest.TestCase):
def setUp(self): def setUp(self):
super(TestTempURL, self).setUp() super(TestTempURL, self).setUp()
@ -164,7 +164,7 @@ class TestTempURL(testtools.TestCase):
self.method) self.method)
class TestReadableToIterable(testtools.TestCase): class TestReadableToIterable(unittest.TestCase):
def test_iter(self): def test_iter(self):
chunk_size = 4 chunk_size = 4
@ -216,7 +216,7 @@ class TestReadableToIterable(testtools.TestCase):
self.assertEqual(actual_md5sum, data.get_md5sum()) self.assertEqual(actual_md5sum, data.get_md5sum())
class TestLengthWrapper(testtools.TestCase): class TestLengthWrapper(unittest.TestCase):
def test_stringio(self): def test_stringio(self):
contents = six.StringIO(u'a' * 50 + u'b' * 50) contents = six.StringIO(u'a' * 50 + u'b' * 50)
@ -292,7 +292,7 @@ class TestLengthWrapper(testtools.TestCase):
self.assertEqual(md5(s).hexdigest(), data.get_md5sum()) self.assertEqual(md5(s).hexdigest(), data.get_md5sum())
class TestGroupers(testtools.TestCase): class TestGroupers(unittest.TestCase):
def test_n_at_a_time(self): def test_n_at_a_time(self):
result = list(u.n_at_a_time(range(100), 9)) result = list(u.n_at_a_time(range(100), 9))
self.assertEqual([9] * 11 + [1], list(map(len, result))) self.assertEqual([9] * 11 + [1], list(map(len, result)))

View File

@ -18,7 +18,6 @@ from requests import RequestException
from requests.structures import CaseInsensitiveDict from requests.structures import CaseInsensitiveDict
from time import sleep from time import sleep
import unittest import unittest
import testtools
import mock import mock
import six import six
from six.moves import reload_module from six.moves import reload_module
@ -189,7 +188,7 @@ def fake_http_connect(*code_iter, **kwargs):
return connect return connect
class MockHttpTest(testtools.TestCase): class MockHttpTest(unittest.TestCase):
def setUp(self): def setUp(self):
super(MockHttpTest, self).setUp() super(MockHttpTest, self).setUp()