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)
Esempio n. 2
0
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']
Esempio n. 7
0
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)
Esempio n. 8
0
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']
Esempio n. 9
0
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)
Esempio n. 14
0
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'] != ''
Esempio n. 16
0
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)