def test_call_query_id(self, m_req): m_res = m_req.return_value m_json = m_res.json.return_value m_res.headers = {"X-OVH-QUERYID": "FR.test1"} api = Client(ENDPOINT, APPLICATION_KEY, APPLICATION_SECRET) _run(api.init()) m_res.status = 99 self.assertRaises(APIError, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) try: _run(api.call(FAKE_METHOD, FAKE_PATH, None, False)) self.assertEqual(0, 1) # should fail as method have to raise APIError except APIError as e: self.assertEqual(e.query_id, "FR.test1")
def test_call_signature(self, m_time_delta, m_req): m_res = m_req.return_value m_json = m_res.json.return_value m_time_delta.return_value = 42 api = Client(ENDPOINT, APPLICATION_KEY, APPLICATION_SECRET, CONSUMER_KEY) _run(api.init()) # nominal m_res.status = 200 self.assertEqual(m_json, _run(api.call(FAKE_METHOD, FAKE_PATH, None, True))) m_time_delta.assert_called_once_with() m_req.assert_called_once_with( FAKE_METHOD, BASE_URL+'/unit/test', headers={ 'X-Ovh-Consumer': CONSUMER_KEY, 'X-Ovh-Application': APPLICATION_KEY, 'X-Ovh-Signature': '$1$16ae5ba8c63841b1951575be905867991d5f49dc', 'X-Ovh-Timestamp': '1404395931', }, data='', timeout=TIMEOUT ) m_time_delta.reset_mock() m_req.reset_mock() # data, nominal data = OrderedDict([('some', 'random'), ('data', 42)]) m_res.status = 200 self.assertEqual(m_json, _run(api.call(FAKE_METHOD, FAKE_PATH, data, True))) m_time_delta.assert_called_once_with() m_req.assert_called_once_with( FAKE_METHOD, BASE_URL+'/unit/test', headers={ 'X-Ovh-Consumer': CONSUMER_KEY, 'X-Ovh-Application': APPLICATION_KEY, 'Content-type': 'application/json', 'X-Ovh-Timestamp': '1404395931', 'X-Ovh-Signature': '$1$9acb1ac0120006d16261a635aed788e83ab172d2', }, data=json.dumps(data), timeout=TIMEOUT ) m_time_delta.reset_mock() m_req.reset_mock() # Overwrite configuration to avoid interfering with any local config from asyncovh.client import config try: from ConfigParser import RawConfigParser except ImportError: # Python 3 from configparser import RawConfigParser self._orig_config = config.config config.config = RawConfigParser() # errors try: api = Client(ENDPOINT, APPLICATION_KEY, None, CONSUMER_KEY) _run(api.init()) self.assertRaises(InvalidKey, _run, api.call(FAKE_METHOD, FAKE_PATH, None, True)) api = Client(ENDPOINT, APPLICATION_KEY, APPLICATION_SECRET, None) _run(api.init()) self.assertRaises(InvalidKey, _run, api.call(FAKE_METHOD, FAKE_PATH, None, True)) finally: # Restore configuration config.config = self._orig_config
def test_call_no_sign(self, m_req): m_res = m_req.return_value m_json = m_res.json.return_value api = Client(ENDPOINT, APPLICATION_KEY, APPLICATION_SECRET) _run(api.init()) # nominal m_res.status = 200 self.assertEqual(m_json, _run(api.call(FAKE_METHOD, FAKE_PATH, None, False))) m_req.assert_called_once_with( FAKE_METHOD, BASE_URL+'/unit/test', headers={'X-Ovh-Application': APPLICATION_KEY}, data='', timeout=TIMEOUT ) m_req.reset_mock() # data, nominal m_res.status = 200 data = {'key': 'value'} j_data = json.dumps(data) self.assertEqual(m_json, _run(api.call(FAKE_METHOD, FAKE_PATH, data, False))) m_req.assert_called_once_with( FAKE_METHOD, BASE_URL+'/unit/test', headers={ 'X-Ovh-Application': APPLICATION_KEY, 'Content-type': 'application/json', }, data=j_data, timeout=TIMEOUT ) m_req.reset_mock() # request fails, somehow m_req.side_effect = ClientError self.assertRaises(HTTPError, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_req.side_effect = None # response decoding fails m_res.json.side_effect = ValueError self.assertRaises(InvalidResponse, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.json.side_effect = None # HTTP errors m_res.status = 404 self.assertRaises(ResourceNotFoundError, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 403 m_res.json.return_value = {'errorCode': "NOT_GRANTED_CALL"} self.assertRaises(NotGrantedCall, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 403 m_res.json.return_value = {'errorCode': "NOT_CREDENTIAL"} self.assertRaises(NotCredential, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 403 m_res.json.return_value = {'errorCode': "INVALID_KEY"} self.assertRaises(InvalidKey, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 403 m_res.json.return_value = {'errorCode': "INVALID_CREDENTIAL"} self.assertRaises(InvalidCredential, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 403 m_res.json.return_value = {'errorCode': "FORBIDDEN"} self.assertRaises(Forbidden, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 400 self.assertRaises(BadParametersError, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 409 self.assertRaises(ResourceConflictError, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 460 self.assertRaises(ResourceExpiredError, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 0 self.assertRaises(NetworkError, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 99 self.assertRaises(APIError, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False)) m_res.status = 306 self.assertRaises(APIError, _run, api.call(FAKE_METHOD, FAKE_PATH, None, False))