def test_error_with_retry_after(self): # 503 Service Unavailable may include Retry-After header resp_mock = self.mock_response(503, {"Retry-After": "300"}) try: Response(resp_mock, mock.MagicMock()) except BaseHTTPError as e: self.assertIn("retry-after", e.headers) self.assertEqual(e.headers["retry-after"], "300") else: # We should have got an exception self.fail("HTTP Status 503 response didn't raised an exception")
def test_gzip_encoding(self): original_data = 'foo bar ponies, wooo gzip' if PY3: from io import BytesIO string_io = BytesIO() else: string_io = StringIO() stream = gzip.GzipFile(fileobj=string_io, mode='w') stream.write(b(original_data)) stream.close() compressed_data = string_io.getvalue() self._mock_response.read.return_value = compressed_data self._mock_response.getheaders.return_value = \ {'Content-Encoding': 'gzip'} response = Response(response=self._mock_response, connection=self._mock_connection) body = response.parse_body() self.assertEqual(body, original_data) self._mock_response.getheaders.return_value = \ {'Content-Encoding': 'x-gzip'} response = Response(response=self._mock_response, connection=self._mock_connection) body = response.parse_body() self.assertEqual(body, original_data)
def test_error_with_retry_after_http_date_format(self, time_mock): retry_after = "Sat, 03 Jan 2009 18:20:05 -0000" # 503 Service Unavailable may include Retry-After header resp_mock = self.mock_response(503, {"Retry-After": retry_after}) try: Response(resp_mock, mock.MagicMock()) except BaseHTTPError as e: self.assertIn("retry-after", e.headers) # HTTP-date got translated to delay-secs self.assertEqual(e.headers["retry-after"], "300") else: # We should have got an exception self.fail("HTTP Status 503 response didn't raised an exception")
def test_rate_limit_response(self): resp_mock = self.mock_response(429, {"Retry-After": "120"}) try: Response(resp_mock, mock.MagicMock()) except RateLimitReachedError as e: self.assertEqual(e.retry_after, 120) except Exception: # We should have got a RateLimitReachedError self.fail( "Catched exception should have been RateLimitReachedError") else: # We should have got an exception self.fail("HTTP Status 429 response didn't raised an exception")
def test_rate_limit_error(self): sock = Mock() con = Connection() try: with patch('libcloud.utils.py3.httplib.HTTPResponse.getheaders', MagicMock(return_value=CONFLICT_RESPONSE_STATUS)): with patch( 'libcloud.utils.py3.httplib.HTTPResponse._read_status', MagicMock(return_value=SIMPLE_RESPONSE_STATUS)): with tempfile.TemporaryFile(mode='w+b') as f: f.write('HTTP/1.1 429 CONFLICT\n'.encode()) f.flush() sock.makefile = Mock(return_value=f) mock_obj = httplib.HTTPResponse(sock) mock_obj.begin() Response(mock_obj, con) except RateLimitReachedError: pass except Exception: self.fail('Failed to raise Rate Limit exception')
def test_deflate_encoding(self): original_data = 'foo bar ponies, wooo zlib' compressed_data = zlib.compress(b(original_data)) self._mock_response.read.return_value = compressed_data self._mock_response.getheaders.return_value = \ {'Content-Encoding': 'deflate'} response = Response(response=self._mock_response, connection=self._mock_connection) body = response.parse_body() self.assertEqual(body, original_data) self._mock_response.getheaders.return_value = \ {'Content-Encoding': 'zlib'} response = Response(response=self._mock_response, connection=self._mock_connection) body = response.parse_body() self.assertEqual(body, original_data)
def test_base_response(self): Response(MockResponse(status=200, body='foo'), ConnectionKey('foo'))
def make_response(status=200, headers={}, connection=None): response = requests.Response() response.status_code = status response.headers = headers return Response(response, connection)
def test_base_response(self): Response(MockResponse(status=200, body='foo'))