| @ -0,0 +1,100 @@ | |||||
| import mock | |||||
| import unittest2 | |||||
| import urllib3.exceptions | |||||
| from riakcached import exceptions | |||||
| from riakcached.pools import Urllib3Pool | |||||
| class TestUrllib3Pool(unittest2.TestCase): | |||||
| def setUp(self): | |||||
| self.patched_connection_from_url = mock.patch("urllib3.connection_from_url") | |||||
| self.connection_from_url = self.patched_connection_from_url.start() | |||||
| def tearDown(self): | |||||
| self.connection_from_url = self.patched_connection_from_url.stop() | |||||
| def test_connect_sets_up_pool(self): | |||||
| pool = Urllib3Pool() | |||||
| self.assertTrue(pool.pool) | |||||
| self.connection_from_url.assert_called() | |||||
| self.connection_from_url.assert_called_with("http://127.0.0.1:8098") | |||||
| def test_connect_with_different_url(self): | |||||
| pool = Urllib3Pool(base_url="http://example.org:8098") | |||||
| self.assertEqual(pool.url, "http://example.org:8098") | |||||
| self.connection_from_url.assert_called() | |||||
| self.connection_from_url.assert_called_with("http://example.org:8098") | |||||
| def test_connect_auto_connect_doesnt_call_connect(self): | |||||
| Urllib3Pool(auto_connect=False) | |||||
| self.connection_from_url.assert_not_called() | |||||
| def test_close_calls_pool_close(self): | |||||
| pool = Urllib3Pool() | |||||
| pool.close() | |||||
| pool.pool.assert_called() | |||||
| def test_request_calls_pool_urlopen(self): | |||||
| pool = Urllib3Pool() | |||||
| result = mock.Mock() | |||||
| result.status = 200 | |||||
| result.data = "" | |||||
| result.getheaders = lambda: {} | |||||
| pool.pool.urlopen.return_value = result | |||||
| self.assertEqual(pool.request("GET", "http://127.0.0.1:8098/stats"), (200, "", {})) | |||||
| pool.pool.urlopen.assert_called_with( | |||||
| method="GET", | |||||
| url="http://127.0.0.1:8098/stats", | |||||
| body=None, | |||||
| headers=None, | |||||
| timeout=2, | |||||
| redirect=False, | |||||
| ) | |||||
| def test_request_urlopen_with_headers_and_body(self): | |||||
| pool = Urllib3Pool() | |||||
| result = mock.Mock() | |||||
| result.status = 200 | |||||
| result.data = "" | |||||
| result.getheaders = lambda: {} | |||||
| pool.pool.urlopen.return_value = result | |||||
| self.assertEqual( | |||||
| pool.request( | |||||
| "POST", "http://127.0.0.1:8098/stats", body="test", | |||||
| headers={"Content-Type": "application/test"} | |||||
| ), | |||||
| (200, "", {}) | |||||
| ) | |||||
| pool.pool.urlopen.assert_called_with( | |||||
| method="POST", | |||||
| url="http://127.0.0.1:8098/stats", | |||||
| body="test", | |||||
| headers={ | |||||
| "Content-Type": "application/test", | |||||
| }, | |||||
| timeout=2, | |||||
| redirect=False, | |||||
| ) | |||||
| def test_request_raise_timeout_error(self): | |||||
| pool = Urllib3Pool() | |||||
| timeout_error = urllib3.exceptions.TimeoutError(pool.pool, "http://127.0.0.1:8098/stats", "timeout") | |||||
| pool.pool.urlopen.side_effect = timeout_error | |||||
| self.assertRaises( | |||||
| exceptions.RiakcachedTimeout, | |||||
| pool.request, | |||||
| "GET", | |||||
| "http://127.0.0.1:8098/stats", | |||||
| ) | |||||
| def test_request_raise_connections_error(self): | |||||
| pool = Urllib3Pool() | |||||
| http_error = urllib3.exceptions.HTTPError(pool.pool, "http://127.0.0.1:8098/stats", "error") | |||||
| pool.pool.urlopen.side_effect = http_error | |||||
| self.assertRaises( | |||||
| exceptions.RiakcachedConnectionError, | |||||
| pool.request, | |||||
| "GET", | |||||
| "http://127.0.0.1:8098/stats", | |||||
| ) | |||||