def test__request(self, http_request_patched):
     '''
     Test error handling.
     '''
     url = 'www.testcase.com'
     handler = APIHandlerHTTP()
     resp = {'status': 200}
     content = '{}'
     http_request_patched.return_value = resp, content
     result = handler._request(url)
     self.assertEqual(result, {})
     # Responded with invalid JSON.
     content = 'invalid JSON'
     http_request_patched.return_value = resp, content
     self.assertRaises(simplejson.JSONDecodeError, handler._request, url)
     content = "{error: 'Server error.'}"
     resp['status'] = 400 # Bad Request
     self.assertRaises(InvalidAPIInputError, handler._request, url)
     resp['status'] = 401 # Unauthorised
     self.assertRaises(APIConnectionError, handler._request, url)
     resp['status'] = 404 # Not Found
     self.assertRaises(NotFoundError, handler._request, url)
     resp['status'] = 500 # Internal Server Error
     self.assertRaises(UnknownAPIError, handler._request, url)
     resp['status'] = 200
     http_request_patched.side_effect = socket.error()
     self.assertRaises(APIConnectionError, handler._request, url)
     http_request_patched.side_effect = httplib2.ServerNotFoundError()
     self.assertRaises(APIConnectionError, handler._request, url)
示例#2
0
    def test__attempt_request(self):
        handler = APIHandlerHTTP(attempts=3)
        handler._request = Mock()
        handler._request.return_value = {}
        self.assertEqual(handler._attempt_request(1, x=2), {})
        handler._request.assert_called_once_with(1, x=2)
        # Raises out Exception if it is raised in every attempt.
        handler._request.side_effect = UnknownAPIError('')
        self.assertRaises(UnknownAPIError, handler._attempt_request, 3)
        self.assertEqual(handler._request.call_args_list, [((1, ), {
            'x': 2
        })] + [((3, ), {})] * 3)
        # Returns value after Exception being raised in earlier attempts.
        return_values = [{}, UnknownAPIError(''), APIConnectionError('')]

        def side_effect(*args, **kwargs):
            elem = return_values.pop()
            if isinstance(elem, APIError):
                raise elem
            else:
                return elem

        handler._request.side_effect = side_effect
        self.assertEqual(handler._attempt_request(4, y=5), {})
        self.assertEqual(handler._request.call_args_list, [((1, ), {
            'x': 2
        })] + [((3, ), {})] * 3 + [((4, ), {
            'y': 5
        })] * 3)
示例#3
0
 def test__request(self, http_request_patched):
     '''
     Test error handling.
     '''
     url = 'www.testcase.com'
     handler = APIHandlerHTTP()
     resp = {'status': 200}
     content = '{}'
     http_request_patched.return_value = resp, content
     result = handler._request(url)
     self.assertEqual(result, {})
     # Responded with invalid JSON.
     content = 'invalid JSON'
     http_request_patched.return_value = resp, content
     self.assertRaises(simplejson.JSONDecodeError, handler._request, url)
     content = "{error: 'Server error.'}"
     resp['status'] = 400  # Bad Request
     self.assertRaises(InvalidAPIInputError, handler._request, url)
     resp['status'] = 401  # Unauthorised
     self.assertRaises(APIConnectionError, handler._request, url)
     resp['status'] = 404  # Not Found
     self.assertRaises(NotFoundError, handler._request, url)
     resp['status'] = 500  # Internal Server Error
     self.assertRaises(UnknownAPIError, handler._request, url)
     resp['status'] = 200
     http_request_patched.side_effect = socket.error()
     self.assertRaises(APIConnectionError, handler._request, url)
     http_request_patched.side_effect = httplib2.ServerNotFoundError()
     self.assertRaises(APIConnectionError, handler._request, url)
示例#4
0
    def test_request(self):
        responses.add(responses.GET,
                      'http://example.com/api/1/valid',
                      json={'data': 'ok'})
        responses.add(responses.GET,
                      'http://example.com/api/1/missing',
                      status=404)
        responses.add(responses.GET,
                      'http://example.com/api/1/unauthorized',
                      status=401)
        responses.add(responses.GET,
                      'http://example.com/api/1/server_error',
                      status=500)
        responses.add(responses.GET,
                      'http://example.com/api/1/decode_error',
                      status=200,
                      body='{"invalid"}',
                      content_type='application/json')

        handler = APIHandlerHTTP()

        self.assertEqual(handler.request('http://example.com/api/1/valid'),
                         {'data': 'ok'})
        self.assertRaises(NotFoundError, handler.request,
                          'http://example.com/api/1/missing')
        self.assertRaises(APIError, handler.request,
                          'http://example.com/api/1/unauthorized')
        self.assertRaises(APIError, handler.request,
                          'http://example.com/api/1/server_error')
        self.assertRaises(APIError, handler.request,
                          'http://example.com/api/1/decode_error')
    def test_request(self):
        responses.add(responses.GET, 'http://example.com/api/1/valid', json={'data': 'ok'})
        responses.add(responses.GET, 'http://example.com/api/1/missing', status=404)
        responses.add(responses.GET, 'http://example.com/api/1/unauthorized', status=401)
        responses.add(responses.GET, 'http://example.com/api/1/server_error', status=500)
        responses.add(responses.GET, 'http://example.com/api/1/decode_error', status=200,
                      body='{"invalid"}', content_type='application/json')

        handler = APIHandlerHTTP()

        self.assertEqual(handler.request('http://example.com/api/1/valid'), {'data': 'ok'})
        self.assertRaises(NotFoundError, handler.request, 'http://example.com/api/1/missing')
        self.assertRaises(APIError, handler.request, 'http://example.com/api/1/unauthorized')
        self.assertRaises(APIError, handler.request, 'http://example.com/api/1/server_error')
        self.assertRaises(APIError, handler.request, 'http://example.com/api/1/decode_error')
 def test__attempt_request(self):
     handler = APIHandlerHTTP(attempts=3)
     handler._request = Mock()
     handler._request.return_value = {}
     self.assertEqual(handler._attempt_request(1, x=2), {})
     handler._request.assert_called_once_with(1, x=2)
     # Raises out Exception if it is raised in every attempt.
     handler._request.side_effect = UnknownAPIError('')
     self.assertRaises(UnknownAPIError, handler._attempt_request, 3)
     self.assertEqual(handler._request.call_args_list,
                      [((1,), {'x': 2})] + [((3,), {})] * 3)
     # Returns value after Exception being raised in earlier attempts.
     return_values = [{}, UnknownAPIError(''), APIConnectionError('')]
     def side_effect(*args, **kwargs):
         elem = return_values.pop()
         if isinstance(elem, APIError):
             raise elem
         else:
             return elem
     handler._request.side_effect = side_effect
     self.assertEqual(handler._attempt_request(4, y=5), {})
     self.assertEqual(handler._request.call_args_list,
             [((1,), {'x': 2})] + [((3,), {})] * 3 + [((4,), {'y': 5})] * 3)