def test_create_on_service(): clean_plugins() service = {'name': 'service-%s' % uuid.uuid4(), 'host': 'localhost'} request = ServiceRequest('Create', service) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] service_id = response['PhysicalResourceId'] plugin = {'name': 'http-log', 'service': {'id': service_id}, 'config': {'http_endpoint': 'http://log-forwarder:4443'}} request = Request('Create', plugin) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] url = '%s/plugins?service_id=%s&id=%s' % (request.admin_url, service_id, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) request = Request('Delete', plugin, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/plugins/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 404, 'url %s, return %s' % (url, response.text)
def test_create(): username = '******' % uuid.uuid4() consumer = {'username': username} request = Request('Create', consumer) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] # duplicate key error failed_response = handler(request, {}) assert failed_response['Status'] == 'FAILED', response['Reason'] url = '%s/consumers/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) assert response.json()['username'] == username request = Request('Delete', consumer, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/consumers/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 404, 'url %s, return %s' % (url, response.text)
def test_update(): plugin = {'name': 'datadog'} request = Request('Create', plugin) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] plugin = {'name': 'datadog', 'config': {'host': 'docker0'}} request = Request('Update', plugin, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/plugins/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) retrieved_plugin = response.json() assert 'config' in retrieved_plugin assert 'host' in retrieved_plugin['config'] assert retrieved_plugin['config']['host'] == 'docker0' request = Request('Delete', plugin, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason']
def test_create(): clean_plugins() plugin = {'name': 'datadog'} request = Request('Create', plugin) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] # duplicate key error failed_response = handler(request, {}) assert failed_response['Status'] == 'FAILED', response['Reason'] url = '%s/plugins/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) request = Request('Delete', plugin, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/plugins/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 404, 'url %s, return %s' % (url, response.text)
def test_update(): service = {'name': 'service-%s' % uuid.uuid4(), 'host': 'localhost'} request = Request('Create', service) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] service2 = service.copy() service2['name'] = 'new-%s' % service['name'] service2['port'] = 443 service2['host'] = 'httpbin.org' service2['protocol'] = 'https' service2['read_timeout'] = 600 service2['write_timeout'] = 500 service2['connect_timeout'] = 400 service2['retries'] = 0 request = Request('Update', service2, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/services/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) svc = response.json() for k in service2: assert service2[k] == svc[k] request = Request('Delete', service2, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason']
def test_update(): username = '******' % uuid.uuid4() consumer = {'username': username} request = Request('Create', consumer) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] new_username = '******' % username consumer = {'username': new_username} request = Request('Update', consumer, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/consumers/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) retrieved_consumer = response.json() assert retrieved_consumer['username'] == new_username request = Request('Delete', consumer, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason']
def test_create(): api = { 'name': 'api-%s' % uuid.uuid4(), 'uris': ['/headers'], 'upstream_url': 'https://httpbin.org/headers' } request = Request('Create', api) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] # duplicate key error failed_response = handler(request, {}) assert failed_response['Status'] == 'FAILED', response['Reason'] url = '%s/apis/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) request = Request('Delete', api, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/apis/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 404, 'url %s, return %s' % (url, response.text) url = '%s/apis/%s' % (request.admin_url, api['name']) response = requests.get(url) assert response.status_code == 404, 'url %s, return %s' % (url, response.text)
def test_update(): api = { 'name': 'api-%s' % uuid.uuid4(), 'uris': ['/headers'], 'upstream_url': 'https://httpbin.org/headers' } request = Request('Create', api) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] api2 = api.copy() api2['name'] = 'new-%s' % api['name'] request = Request('Update', api2, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/apis/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) assert response.json()['name'] == api2['name'], 'expected updated name' request = Request('Delete', api2, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason']
def test_crud_credentials(): username = '******' % uuid.uuid4() consumer = {'username': username} request = Request('Create', consumer) request['ResourceType'] = 'Custom::KongConsumer' request['ResourceProperties']['Consumer'] = request['ResourceProperties'][ 'Credential'] del request['ResourceProperties']['Credential'] response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] consumer_id = response['PhysicalResourceId'] cred = {'consumer': {'id': str(consumer_id)}, 'key': username} request = Request('Create', cred) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] cred_id = response['PhysicalResourceId'] url = '%s/consumers/%s/key-auth' % (request.admin_url, consumer_id) r = requests.get(url) assert r.status_code == 200, r.text assert r.json()['data'][0]['key'] == username cred = {'consumer': {'id': str(consumer_id)}, 'key': 'bah-%s' % username} request = Request('Update', cred, cred_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/consumers/%s/key-auth' % (request.admin_url, consumer_id) r = requests.get(url) assert r.status_code == 200, r.text assert r.json()['data'][0]['key'] == 'bah-%s' % username cred = {'consumer': {'id': str(consumer_id)}} request = Request('Delete', cred, cred_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/consumers/%s/key-auth' % (request.admin_url, consumer_id) r = requests.get(url) assert r.status_code == 200, r.text assert not r.json()['data'], r.text
def test_crud(): username = '******' % uuid.uuid4() consumer = {'username': username} request = Request('Create', consumer) request['ResourceType'] = 'Custom::KongConsumer' request['ResourceProperties']['Consumer'] = request['ResourceProperties'][ 'ACL'] del request['ResourceProperties']['ACL'] response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] consumer_id = response['PhysicalResourceId'] acl = {'consumer': {'id': str(consumer_id)}, 'group': 'binx.io'} request = Request('Create', acl) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] acl_id = response['PhysicalResourceId'] url = '%s/consumers/%s/acls/%s' % (request.admin_url, consumer_id, acl_id) r = requests.get(url) assert r.status_code == 200, r.text assert r.json()['group'] == 'binx.io' acl = {'consumer': {'id': str(consumer_id)}, 'group': 'xebia'} request = Request('Update', acl, acl_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/consumers/%s/acls/%s' % (request.admin_url, consumer_id, acl_id) r = requests.get(url) assert r.status_code == 200, r.text assert r.json()['group'] == 'xebia' acl = {'consumer': {'id': str(consumer_id)}, 'group': 'xebia'} request = Request('Delete', acl, acl_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/consumers/%s/acls/%s' % (request.admin_url, consumer_id, acl_id) r = requests.get(url) assert r.status_code == 404, r.text
def test_create_on_api(): clean_plugins() api = { 'name': 'api-%s' % uuid.uuid4(), 'uris': ['/headers'], 'upstream_url': 'https://httpbin.org/headers' } request = ApiRequest('Create', api) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] api_id = response['PhysicalResourceId'] plugin = { 'name': 'http-log', 'api_id': api_id, 'config': { 'http_endpoint': 'http://log-forwarder:4443' } } request = Request('Create', plugin) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] url = '%s/apis/%s/plugins/%s' % (request.admin_url, api_id, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) request = Request('Delete', plugin, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/plugins/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 404, 'url %s, return %s' % (url, response.text)
def test_create(): service_id = create_service() route = {'service': {'id': service_id}, 'paths': ['/put']} request = Request('Create', route) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] url = '%s/routes/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) rt = response.json() assert rt['paths'] == route['paths'] request = Request('Delete', route, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/routes/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 404, 'url %s, return %s' % (url, response.text)
def test_create(): service = {'name': 'service-%s' % uuid.uuid4(), 'host': 'localhost'} request = Request('Create', service) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert 'PhysicalResourceId' in response physical_resource_id = response['PhysicalResourceId'] # duplicate key error failed_response = handler(request, {}) assert failed_response['Status'] == 'FAILED', response['Reason'] url = '%s/services/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 200, 'url %s, return %s' % (url, response.text) svc = response.json() assert service['name'] == svc['name'] assert 'localhost' == svc['host'] assert 'http' == svc['protocol'] assert 80 == svc['port'] assert 5 == svc['retries'] assert 60000 == svc['connect_timeout'] assert 60000 == svc['read_timeout'] assert 60000 == svc['write_timeout'] assert 'path' not in svc or svc['path'] is None request = Request('Delete', service, physical_resource_id) response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] url = '%s/services/%s' % (request.admin_url, physical_resource_id) response = requests.get(url) assert response.status_code == 404, 'url %s, return %s' % (url, response.text) url = '%s/services/%s' % (request.admin_url, service['name']) response = requests.get(url) assert response.status_code == 404, 'url %s, return %s' % (url, response.text)
def test_with_jwt(): name = 'service-%s' % uuid.uuid4() admin_url, jwt_config = create_secure_admin_service(name) # create service without JWT service = {'name': 'service-%s' % uuid.uuid4(), 'host': 'localhost'} request = Request('Create', service) request.admin_url = admin_url response = handler(request, {}) assert response['Status'] == 'FAILED', response['Reason'] assert 'Unauthorized' in response['Reason'] # create service with JWT request = Request('Create', service) request['ResourceProperties']['JWT'] = jwt_config request.admin_url = admin_url response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] physical_resource_id = response['PhysicalResourceId'] # check create url = 'http://localhost:8001/services/%s' % physical_resource_id service_response = requests.get(url) assert service_response.status_code == 200, url assert service_response.json()['name'] == service['name'] # update the JWT token service['retries'] = 100 request = Request('Update', service, physical_resource_id) request.admin_url = admin_url request['ResourceProperties']['JWT'] = jwt_config response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] # check update url = 'http://localhost:8001/services/%s' % physical_resource_id service_response = requests.get(url) assert service_response.status_code == 200 assert service_response.json()['retries'] == 100 # delete the Service request = Request('Delete', service, physical_resource_id) request['ResourceProperties']['JWT'] = jwt_config response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] # check delete url = 'http://localhost:8001/services/%s' % physical_resource_id service_response = requests.get(url) assert service_response.status_code == 404 # check bad private key request = Request('Create', service) request['ResourceProperties']['JWT'] = { 'Issuer': 'Admin', 'PrivateKeyParameterName': 'does-not-exist' } response = handler(request, {}) assert response['Status'] == 'FAILED', response['Reason'] assert response['Reason'].startswith('could not get private key') # check bad AdminURL request = Request('Create', service) request['ResourceProperties'][ 'AdminURL'] = 'http://does-not-resolve-does-it' response = handler(request, {}) assert response['Status'] == 'FAILED', response['Reason'] remove_secure_admin_service(name, jwt_config)
def test_bad_delete(): request = Request('Delete', {}, "NotaUUidClearly") response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] assert response['Reason'] != ''
def test_with_jwt(): name = 'api-%s' % uuid.uuid4() admin_url, jwt_config = create_secure_admin_api(name) # create api without JWT api = {'name': 'api-%s' % uuid.uuid4(), 'uris': ['/headers'], 'upstream_url': 'https://httpbin.org/headers'} request = Request('Create', api) request.admin_url = admin_url response = handler(request, {}) assert response['Status'] == 'FAILED', response['Reason'] # create api with JWT request = Request('Create', api) request['ResourceProperties']['JWT'] = jwt_config request.admin_url = admin_url response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] physical_resource_id = response['PhysicalResourceId'] # check create url = 'http://localhost:8001/apis/%s' % physical_resource_id api_response = requests.get(url) assert api_response.status_code == 200, url assert api_response.json()['name'] == api['name'] # update the JWT token api['retries'] = 100 request = Request('Update', api, physical_resource_id) request.admin_url = admin_url request['ResourceProperties']['JWT'] = jwt_config response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] # check update url = 'http://localhost:8001/apis/%s' % physical_resource_id api_response = requests.get(url) assert api_response.status_code == 200 assert api_response.json()['retries'] == 100 # delete the API request = Request('Delete', api, physical_resource_id) request['ResourceProperties']['JWT'] = jwt_config response = handler(request, {}) assert response['Status'] == 'SUCCESS', response['Reason'] # check delete url = 'http://localhost:8001/apis/%s' % physical_resource_id api_response = requests.get(url) assert api_response.status_code == 404 # check bad private key request = Request('Create', api) request['ResourceProperties']['JWT'] = {'Issuer': 'Admin', 'PrivateKeyParameterName': 'does-not-exist'} response = handler(request, {}) assert response['Status'] == 'FAILED', response['Reason'] assert response['Reason'].startswith('could not get private key') # check bad AdminURL request = Request('Create', api) request['ResourceProperties']['AdminURL'] = 'http://does-not-resolve-does-it' response = handler(request, {}) assert response['Status'] == 'FAILED', response['Reason'] remove_secure_admin_api(name, jwt_config)