def _error_callback(exc): if isinstance(exc, qpid.messaging.exceptions.Empty): LOG.exception(_('Timed out waiting for RPC response: %s') % str(exc)) raise rpc_common.Timeout() else: LOG.exception(_('Failed to consume message from queue: %s') % str(exc))
def _error_callback(exc): if isinstance(exc, socket.timeout): LOG.exception( _('Timed out waiting for RPC response: %s') % str(exc)) raise rpc_common.Timeout() else: LOG.exception( _('Failed to consume message from queue: %s') % str(exc)) info['do_consume'] = True
def call(self, context, version, method, args, timeout): done = eventlet.event.Event() def _inner(): ctxt = RpcContext.from_dict(context.to_dict()) try: rval = self.proxy.dispatch(context, version, method, **args) res = [] # Caller might have called ctxt.reply() manually for (reply, failure) in ctxt._response: if failure: raise failure[0], failure[1], failure[2] res.append(reply) # if ending not 'sent'...we might have more data to # return from the function itself if not ctxt._done: if inspect.isgenerator(rval): for val in rval: res.append(val) else: res.append(rval) done.send(res) except rpc_common.ClientException as e: done.send_exception(e._exc_info[1]) except Exception as e: done.send_exception(e) thread = eventlet.greenthread.spawn(_inner) if timeout: start_time = time.time() while not done.ready(): eventlet.greenthread.sleep(1) cur_time = time.time() if (cur_time - start_time) > timeout: thread.kill() raise rpc_common.Timeout() return done.wait()
class ApiV1RecordsTest(ApiV1Test): __test__ = True def setUp(self): super(ApiV1RecordsTest, self).setUp() self.domain = self.create_domain() def test_create_record(self): fixture = self.get_record_fixture(self.domain['name'], 0) # Create a record response = self.post('domains/%s/records' % self.domain['id'], data=fixture) self.assertIn('id', response.json) self.assertIn('name', response.json) self.assertEqual(response.json['name'], fixture['name']) def test_create_record_junk(self): fixture = self.get_record_fixture(self.domain['name'], 0) # Add a junk property fixture['junk'] = 'Junk Field' # Create a record, Ensuring it fails with a 400 self.post('domains/%s/records' % self.domain['id'], data=fixture, status_code=400) @patch.object(central_service.Service, 'create_record', side_effect=rpc_common.Timeout()) def test_create_domain_timeout(self, _): fixture = self.get_record_fixture(self.domain['name'], 0) # Create a record self.post('domains/%s/records' % self.domain['id'], data=fixture, status_code=504) def test_create_wildcard_record(self): # Prepare a record fixture = self.get_record_fixture(self.domain['name'], 0) fixture['name'] = '*.%s' % fixture['name'] # Create a record response = self.post('domains/%s/records' % self.domain['id'], data=fixture) self.assertIn('id', response.json) self.assertIn('name', response.json) self.assertEqual(response.json['name'], fixture['name']) def test_create_srv_record(self): # Prepare a record fixture = self.get_record_fixture(self.domain['name'], 0) fixture['type'] = 'SRV' fixture['name'] = '_sip._udp.%s' % fixture['name'] fixture['priority'] = 10 fixture['data'] = '0 5060 sip.%s' % self.domain['name'] # Create a record response = self.post('domains/%s/records' % self.domain['id'], data=fixture) self.assertIn('id', response.json) self.assertEqual(response.json['type'], fixture['type']) self.assertEqual(response.json['name'], fixture['name']) self.assertEqual(response.json['priority'], fixture['priority']) self.assertEqual(response.json['data'], fixture['data']) def test_create_invalid_data_srv_record(self): # Prepare a record fixture = self.get_record_fixture(self.domain['name'], 0) fixture['type'] = 'SRV' fixture['name'] = '_sip._udp.%s' % fixture['name'] fixture['priority'] = 10 invalid_datas = [ 'I 5060 sip.%s' % self.domain['name'], '5060 sip.%s' % self.domain['name'], '5060 I sip.%s' % self.domain['name'], '0 5060 sip', 'sip', 'sip.%s' % self.domain['name'], ] for invalid_data in invalid_datas: fixture['data'] = invalid_data # Attempt to create the record self.post('domains/%s/records' % self.domain['id'], data=fixture, status_code=400) def test_create_invalid_name_srv_record(self): # Prepare a record fixture = self.get_record_fixture(self.domain['name'], 0) fixture['type'] = 'SRV' fixture['priority'] = 10 fixture['data'] = '0 5060 sip.%s' % self.domain['name'] invalid_names = [ '%s' % fixture['name'], '_udp.%s' % fixture['name'], 'sip._udp.%s' % fixture['name'], '_sip.udp.%s' % fixture['name'], ] for invalid_name in invalid_names: fixture['name'] = invalid_name # Attempt to create the record self.post('domains/%s/records' % self.domain['id'], data=fixture, status_code=400) def test_create_invalid_name(self): # Prepare a record fixture = self.get_record_fixture(self.domain['name'], 0) invalid_names = [ 'org', 'example.org', '$$.example.org', '*example.org.', '*.*.example.org.', 'abc.*.example.org.', ] for invalid_name in invalid_names: fixture['name'] = invalid_name # Create a record response = self.post('domains/%s/records' % self.domain['id'], data=fixture, status_code=400) self.assertNotIn('id', response.json) def test_get_records(self): response = self.get('domains/%s/records' % self.domain['id']) self.assertIn('records', response.json) self.assertEqual(0, len(response.json['records'])) # Create a record self.create_record(self.domain) response = self.get('domains/%s/records' % self.domain['id']) self.assertIn('records', response.json) self.assertEqual(1, len(response.json['records'])) # Create a second record self.create_record(self.domain, fixture=1) response = self.get('domains/%s/records' % self.domain['id']) self.assertIn('records', response.json) self.assertEqual(2, len(response.json['records'])) @patch.object(central_service.Service, 'get_records', side_effect=rpc_common.Timeout()) def test_get_records_timeout(self, _): self.get('domains/%s/records' % self.domain['id'], status_code=504) def test_get_records_missing_domain(self): self.get('domains/2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980/records', status_code=404) def test_get_record(self): # Create a record record = self.create_record(self.domain) response = self.get('domains/%s/records/%s' % (self.domain['id'], record['id'])) self.assertIn('id', response.json) self.assertEqual(response.json['id'], record['id']) def test_update_record(self): # Create a record record = self.create_record(self.domain) data = {'name': 'prefix-%s' % record['name']} response = self.put('domains/%s/records/%s' % (self.domain['id'], record['id']), data=data) self.assertIn('id', response.json) self.assertEqual(response.json['id'], record['id']) self.assertIn('name', response.json) self.assertEqual(response.json['name'], 'prefix-%s' % record['name']) def test_update_record_junk(self): # Create a record record = self.create_record(self.domain) data = {'name': 'prefix-%s' % record['name'], 'junk': 'Junk Field'} self.put('domains/%s/records/%s' % (self.domain['id'], record['id']), data=data, status_code=400) def test_update_record_outside_domain_fail(self): # Create a record record = self.create_record(self.domain) data = {'name': 'test.someotherdomain.com'} self.put('domains/%s/records/%s' % (self.domain['id'], record['id']), data=data, status_code=400) @patch.object(central_service.Service, 'update_record', side_effect=rpc_common.Timeout()) def test_update_record_timeout(self, _): # Create a record record = self.create_record(self.domain) data = {'name': 'test.example.org.'} self.put('domains/%s/records/%s' % (self.domain['id'], record['id']), data=data, status_code=504) def test_update_record_missing(self): data = {'name': 'test.example.org.'} self.put('domains/%s/records/2fdadfb1-cf96-4259-ac6b-' 'bb7b6d2ff980' % self.domain['id'], data=data, status_code=404) def test_update_record_missing_domain(self): data = {'name': 'test.example.org.'} self.put( 'domains/2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980/records/' '2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980', data=data, status_code=404) def test_delete_record(self): # Create a record record = self.create_record(self.domain) self.delete('domains/%s/records/%s' % (self.domain['id'], record['id'])) # Esnure we can no longer fetch the record self.get('domains/%s/records/%s' % (self.domain['id'], record['id']), status_code=404) @patch.object(central_service.Service, 'delete_record', side_effect=rpc_common.Timeout()) def test_delete_record_timeout(self, _): # Create a record record = self.create_record(self.domain) self.delete('domains/%s/records/%s' % (self.domain['id'], record['id']), status_code=504) def test_delete_record_missing(self): self.delete('domains/%s/records/2fdadfb1-cf96-4259-ac6b-' 'bb7b6d2ff980' % self.domain['id'], status_code=404) def test_delete_record_missing_domain(self): self.delete( 'domains/2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980/records/' '2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980', status_code=404)
class ApiV1DomainsTest(ApiV1Test): __test__ = True def test_create_domain(self): # Create a server self.create_server() # Create a domain fixture = self.get_domain_fixture(0) response = self.post('domains', data=fixture) self.assertIn('id', response.json) self.assertIn('name', response.json) self.assertEqual(response.json['name'], fixture['name']) def test_create_domain_junk(self): # Create a server self.create_server() # Create a domain fixture = self.get_domain_fixture(0) # Add a junk property fixture['junk'] = 'Junk Field' # Ensure it fails with a 400 self.post('domains', data=fixture, status_code=400) def test_create_domain_no_servers(self): # Create a domain fixture = self.get_domain_fixture(0) self.post('domains', data=fixture, status_code=500) @patch.object(central_service.Service, 'create_domain', side_effect=rpc_common.Timeout()) def test_create_domain_timeout(self, _): # Create a domain fixture = self.get_domain_fixture(0) self.post('domains', data=fixture, status_code=504) @patch.object(central_service.Service, 'create_domain', side_effect=exceptions.DuplicateDomain()) def test_create_domain_duplicate(self, _): # Create a domain fixture = self.get_domain_fixture(0) self.post('domains', data=fixture, status_code=409) def test_create_domain_null_ttl(self): # Create a domain fixture = self.get_domain_fixture(0) fixture['ttl'] = None self.post('domains', data=fixture, status_code=400) def test_get_domains(self): response = self.get('domains') self.assertIn('domains', response.json) self.assertEqual(0, len(response.json['domains'])) # Create a domain self.create_domain() response = self.get('domains') self.assertIn('domains', response.json) self.assertEqual(1, len(response.json['domains'])) # Create a second domain self.create_domain(fixture=1) response = self.get('domains') self.assertIn('domains', response.json) self.assertEqual(2, len(response.json['domains'])) @patch.object(central_service.Service, 'get_domains', side_effect=rpc_common.Timeout()) def test_get_domains_timeout(self, _): self.get('domains', status_code=504) def test_create_invalid_name(self): # Prepare a domain fixture = self.get_domain_fixture(0) invalid_names = [ 'org', 'example.org', 'example.321', ] for invalid_name in invalid_names: fixture['name'] = invalid_name # Create a record response = self.post('domains', data=fixture, status_code=400) self.assertNotIn('id', response.json) def test_create_invalid_email(self): # Prepare a domain fixture = self.get_domain_fixture(0) invalid_emails = [ 'org', 'example.org', 'bla.example.org', 'org.', 'example.org.', 'bla.example.org.', 'bla.example.org.', ] for invalid_email in invalid_emails: fixture['email'] = invalid_email # Create a record response = self.post('domains', data=fixture, status_code=400) self.assertNotIn('id', response.json) def test_get_domain(self): # Create a domain domain = self.create_domain() response = self.get('domains/%s' % domain['id']) self.assertIn('id', response.json) self.assertEqual(response.json['id'], domain['id']) @patch.object(central_service.Service, 'get_domain', side_effect=rpc_common.Timeout()) def test_get_domain_timeout(self, _): # Create a domain domain = self.create_domain() self.get('domains/%s' % domain['id'], status_code=504) def test_get_domain_missing(self): self.get('domains/2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980', status_code=404) def test_update_domain(self): # Create a domain domain = self.create_domain() data = {'email': 'prefix-%s' % domain['email']} response = self.put('domains/%s' % domain['id'], data=data) self.assertIn('id', response.json) self.assertEqual(response.json['id'], domain['id']) self.assertIn('email', response.json) self.assertEqual(response.json['email'], 'prefix-%s' % domain['email']) def test_update_domain_junk(self): # Create a domain domain = self.create_domain() data = {'email': 'prefix-%s' % domain['email'], 'junk': 'Junk Field'} self.put('domains/%s' % domain['id'], data=data, status_code=400) def test_update_domain_name_fail(self): # Create a domain domain = self.create_domain() data = {'name': 'renamed.com.'} self.put('domains/%s' % domain['id'], data=data, status_code=400) def test_update_domain_null_ttl(self): # Create a domain domain = self.create_domain() data = {'ttl': None} self.put('domains/%s' % domain['id'], data=data, status_code=400) @patch.object(central_service.Service, 'update_domain', side_effect=rpc_common.Timeout()) def test_update_domain_timeout(self, _): # Create a domain domain = self.create_domain() data = {'email': 'prefix-%s' % domain['email']} self.put('domains/%s' % domain['id'], data=data, status_code=504) @patch.object(central_service.Service, 'update_domain', side_effect=exceptions.DuplicateDomain()) def test_update_domain_duplicate(self, _): # Create a domain domain = self.create_domain() data = {'email': 'prefix-%s' % domain['email']} self.put('domains/%s' % domain['id'], data=data, status_code=409) def test_update_domain_missing(self): data = {'email': '*****@*****.**'} self.put('domains/2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980', data=data, status_code=404) def test_delete_domain(self): # Create a domain domain = self.create_domain() self.delete('domains/%s' % domain['id']) # Esnure we can no longer fetch the domain self.get('domains/%s' % domain['id'], status_code=404) @patch.object(central_service.Service, 'delete_domain', side_effect=rpc_common.Timeout()) def test_delete_domain_timeout(self, _): # Create a domain domain = self.create_domain() self.delete('domains/%s' % domain['id'], status_code=504) def test_delete_domain_missing(self): self.delete('domains/2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980', status_code=404)
class ApiV1ServersTest(ApiV1Test): __test__ = True def test_create_server(self): # Create a server fixture = self.get_server_fixture(0) response = self.post('servers', data=fixture) self.assertIn('id', response.json) self.assertIn('name', response.json) self.assertEqual(response.json['name'], fixture['name']) def test_create_server_junk(self): # Create a server fixture = self.get_server_fixture(0) # Add a junk property fixture['junk'] = 'Junk Field' # Ensure it fails with a 400 self.post('servers', data=fixture, status_code=400) @patch.object(central_service.Service, 'create_server', side_effect=rpc_common.Timeout()) def test_create_server_timeout(self, _): # Create a server fixture = self.get_server_fixture(0) self.post('servers', data=fixture, status_code=504) @patch.object(central_service.Service, 'create_server', side_effect=exceptions.DuplicateServer()) def test_create_server_duplicate(self, _): # Create a server fixture = self.get_server_fixture(0) self.post('servers', data=fixture, status_code=409) def test_get_servers(self): response = self.get('servers') self.assertIn('servers', response.json) self.assertEqual(0, len(response.json['servers'])) # Create a server self.create_server() response = self.get('servers') self.assertIn('servers', response.json) self.assertEqual(1, len(response.json['servers'])) # Create a second server self.create_server(fixture=1) response = self.get('servers') self.assertIn('servers', response.json) self.assertEqual(2, len(response.json['servers'])) @patch.object(central_service.Service, 'get_servers', side_effect=rpc_common.Timeout()) def test_get_servers_timeout(self, _): self.get('servers', status_code=504) def test_get_server(self): # Create a server server = self.create_server() response = self.get('servers/%s' % server['id']) self.assertIn('id', response.json) self.assertEqual(response.json['id'], server['id']) @patch.object(central_service.Service, 'get_server', side_effect=rpc_common.Timeout()) def test_get_server_timeout(self, _): # Create a server server = self.create_server() self.get('servers/%s' % server['id'], status_code=504) def test_get_server_missing(self): self.get('servers/2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980', status_code=404) def test_update_server(self): # Create a server server = self.create_server() data = {'name': 'test.example.org.'} response = self.put('servers/%s' % server['id'], data=data) self.assertIn('id', response.json) self.assertEqual(response.json['id'], server['id']) self.assertIn('name', response.json) self.assertEqual(response.json['name'], 'test.example.org.') def test_update_server_junk(self): # Create a server server = self.create_server() data = {'name': 'test.example.org.', 'junk': 'Junk Field'} self.put('servers/%s' % server['id'], data=data, status_code=400) @patch.object(central_service.Service, 'update_server', side_effect=rpc_common.Timeout()) def test_update_server_timeout(self, _): # Create a server server = self.create_server() data = {'name': 'test.example.org.'} self.put('servers/%s' % server['id'], data=data, status_code=504) @patch.object(central_service.Service, 'update_server', side_effect=exceptions.DuplicateServer()) def test_update_server_duplicate(self, _): server = self.create_server() data = {'name': 'test.example.org.'} self.put('servers/%s' % server['id'], data=data, status_code=409) def test_update_server_missing(self): data = {'name': 'test.example.org.'} self.get('servers/2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980', data=data, status_code=404) def test_delete_server(self): # Create a server server = self.create_server() self.delete('servers/%s' % server['id']) # Esnure we can no longer fetch the server self.get('servers/%s' % server['id'], status_code=404) @patch.object(central_service.Service, 'delete_server', side_effect=rpc_common.Timeout()) def test_delete_server_timeout(self, _): # Create a server server = self.create_server() self.delete('servers/%s' % server['id'], status_code=504) def test_delete_server_missing(self): self.delete('servers/2fdadfb1-cf96-4259-ac6b-bb7b6d2ff980', status_code=404)