예제 #1
0
def delete_flavor_test(app, flavor_id):
    accept = XML_MIMETYPE

    response = app.delete("/v1/flavors/{0}".format(flavor_id), headers={"accept": accept}, follow_redirects=True)
    assert response.status_code == 204

    response = app.delete("/v1/flavors/{0}".format(flavor_id), headers={"accept": accept}, follow_redirects=True)
    assert response.status_code == 404

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_exception_validator()
    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    accept = JSON_MIMETYPE

    response = app.delete("/v1/flavors/{0}".format(flavor_id), headers={"accept": accept}, follow_redirects=True)
    assert response.status_code == 404

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_exception_validator()
    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False
예제 #2
0
def unregister_infrastucture_test(app):
    accept = XML_MIMETYPE

    response = app.delete("/v1/infrastructures/Isengard", headers={"accept": accept}, follow_redirects=True)
    assert response.status_code == 404

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_exception_validator()
    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    accept = JSON_MIMETYPE

    response = app.delete("/v1/infrastructures/Isengard", headers={"accept": accept}, follow_redirects=True)
    assert response.status_code == 404

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_exception_validator()
    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    response = app.delete("/v1/infrastructures/Mordor", headers={"accept": accept}, follow_redirects=True)
    assert response.status_code == 204
예제 #3
0
def list_all_flavors_json_test(app, flavor_id=None):
    accept = JSON_MIMETYPE
    response = app.get("/v1/flavors", headers={"accept": accept}, follow_redirects=True)

    assert response.status_code == 200

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_flavor_collection_validator()

    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    if flavor_id:
        exists = False
        flavors = json.loads(response_body)
        for flavor in flavors["flavors"]:
            if flavor_id in flavor["id"]:
                exists = True
                isinstalled = "Mordor" in flavor["nodes"]
                break
        assert exists
        assert isinstalled
예제 #4
0
def install_flavor_json_test(app):
    content_type = JSON_MIMETYPE
    accept = JSON_MIMETYPE

    fake_flavor_id = _create_fake_infrastructure_and_flavor()

    request_body = util.load_json_example_as_string("flavor_installation_request.json")
    response = app.put(
        "/v1/flavors/{0}".format(fake_flavor_id),
        data=request_body,
        content_type=content_type,
        headers={"accept": accept},
        follow_redirects=True,
    )

    assert response.status_code == 200

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_flavor_validator()

    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    return fake_flavor_id
def validate_xml_flavor_publication_payload(self):
    payload = util.load_xml_example_as_string("flavor_publication_request.xml")
    payload = util.remove_xml_header(payload)
    payload = util.remove_non_usable_characters(payload)
    factory = factory_selector.get_factory(util.XML_MIMETYPE)
    validator = factory.create_flavor_modification_request_validator()

    _validate_payload(payload, validator, XMLSyntaxError)
def validate_xml_infrastructure_payload(self):
    payload = util.load_xml_example_as_string("infrastructure_response.xml")
    payload = util.remove_xml_header(payload)
    payload = util.remove_non_usable_characters(payload)
    factory = factory_selector.get_factory(util.XML_MIMETYPE)
    validator = factory.create_infrastructure_validator()

    _validate_payload(payload, validator, XMLSyntaxError)
예제 #7
0
def publish_flavor_json_test(app, flavor_id):
    content_type = JSON_MIMETYPE
    accept = JSON_MIMETYPE

    request_body = util.load_json_example_as_string("flavor_publication_bad_request.json")
    response = app.put(
        "/v1/flavors/{0}".format(flavor_id),
        data=request_body,
        content_type=content_type,
        headers={"accept": accept},
        follow_redirects=True,
    )

    assert response.status_code == 400

    request_body = util.load_json_example_as_string("flavor_publication_request.json")
    response = app.put(
        "/v1/flavors/idontexist".format(flavor_id),
        data=request_body,
        content_type=content_type,
        headers={"accept": accept},
        follow_redirects=True,
    )

    assert response.status_code == 404

    response = app.put(
        "/v1/flavors/{0}".format(flavor_id),
        data=request_body,
        content_type=content_type,
        headers={"accept": accept},
        follow_redirects=True,
    )

    assert response.status_code == 200

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_flavor_validator()

    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    request_body = util.load_json_example_as_string("flavor_unpublication_request.json")
    response = app.put(
        "/v1/flavors/{0}".format(flavor_id),
        data=request_body,
        content_type=content_type,
        headers={"accept": accept},
        follow_redirects=True,
    )

    assert response.status_code == 409
def validate_empty_xml_flavor_collection_payload(self):
    payload = '<?xml version="1.0" encoding="UTF-8"?>'
    payload += "<flavors/>"
    payload = util.remove_xml_header(payload)
    payload = util.remove_non_usable_characters(payload)
    factory = factory_selector.get_factory(util.XML_MIMETYPE)
    validator = factory.create_flavor_collection_validator()

    _validate_payload(payload, validator, XMLSyntaxError)
예제 #9
0
def register_infrastructure():
    body = util.remove_non_usable_characters(
                        util.remove_xml_header(request.data.decode("utf-8")))
    content_type = request.content_type
    
    validator_factory = factory_selector.get_factory(content_type)
    validator = validator_factory.create_infrastructure_request_validator()
    validator.validate(body)
    
    infrastructure = Infrastructure.deserialize(content_type, body)
    
    manager = FlavorSynchronizer()
    manager.register_infrastructure(infrastructure)
    
    response_body = infrastructure.serialize(request.accept_mimetypes)
    
    return Response(response_body, status=201, mimetype=request.accept_mimetypes[0][0])
예제 #10
0
def create_flavor():
    body = util.remove_non_usable_characters(
                        util.remove_xml_header(request.data.decode("utf-8")))
    content_type = request.content_type
    
    validator_factory = factory_selector.get_factory(content_type)
    validator = validator_factory.create_flavor_request_validator()
    validator.validate(body)
    
    flavor = Flavor.deserialize(content_type, body)
    
    manager = FlavorSynchronizer()
    created_flavor = manager.create_flavor(flavor)
    
    response_body = created_flavor.serialize(request.accept_mimetypes)
    
    return Response(response_body, status=201, mimetype=request.accept_mimetypes[0][0])
예제 #11
0
def register_new_infrastucture_json_test(app):
    content_type = JSON_MIMETYPE
    accept = JSON_MIMETYPE

    request_body = util.load_json_example_as_string("infrastructure_bad_request.json")
    response = app.post(
        "/v1/infrastructures",
        data=request_body,
        content_type=content_type,
        headers={"accept": accept},
        follow_redirects=True,
    )

    assert response.status_code == 400

    request_body = util.load_json_example_as_string("infrastructure_request.json")
    response = app.post(
        "/v1/infrastructures",
        data=request_body,
        content_type=content_type,
        headers={"accept": accept},
        follow_redirects=True,
    )

    assert response.status_code == 201

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_infrastructure_validator()

    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    response = app.post(
        "/v1/infrastructures",
        data=request_body,
        content_type=content_type,
        headers={"accept": accept},
        follow_redirects=True,
    )
    assert response.status_code == 409
예제 #12
0
def publish_or_promote_flavor(flavor_id):
    body = util.remove_non_usable_characters(
                        util.remove_xml_header(request.data.decode("utf-8")))
    content_type = request.content_type
    
    validator_factory = factory_selector.get_factory(content_type)
    validator = validator_factory.create_flavor_modification_request_validator()
    validator.validate(body)
    
    modified_flavor = Flavor.deserialize(content_type, request.data)
    manager = FlavorSynchronizer()
    
    if not modified_flavor.nodes:
        modified_flavor = manager.publish_or_promote_flavor(flavor_id, modified_flavor)
    else:
        modified_flavor = manager.add_node_to_flavor(flavor_id, modified_flavor)
    
    response_body = modified_flavor.serialize(request.accept_mimetypes)
    
    return Response(response_body, mimetype=request.accept_mimetypes[0][0])
def create_json_ivalidator_test():
    factory = factory_selector.get_factory(util.JSON_MIMETYPE)

    validator = factory.create_flavor_collection_validator()
    assert type(validator) is JSONValidator

    validator = factory.create_flavor_modification_request_validator()
    assert type(validator) is JSONValidator

    validator = factory.create_flavor_request_validator()
    assert type(validator) is JSONValidator

    validator = factory.create_flavor_validator()
    assert type(validator) is JSONValidator

    validator = factory.create_infrastructure_request_validator()
    assert type(validator) is JSONValidator

    validator = factory.create_infrastructure_validator()
    assert type(validator) is JSONValidator
예제 #14
0
def list_all_flavors_xml_test(app, flavor_id=None):
    accept = XML_MIMETYPE
    response = app.get("/v1/flavors", headers={"accept": accept}, follow_redirects=True)

    assert response.status_code == 200

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_flavor_collection_validator()

    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    if flavor_id:
        flavors = objectify.fromstring(response_body)
        n_ocurrences = len(flavors.xpath("flavor[@id='{0}']".format(flavor_id)))
        assert n_ocurrences == 1
        assert flavors.xpath("flavor[@id='{0}']/node='Mordor'".format(flavor_id))
def create_wrong_mimetype_ivalidator_test():
    factory = factory_selector.get_factory(util.WRONG_MIMETYPE)

    try:
        factory.create_flavor_collection_validator()
        assert False
    except UnsupportedMediaTypeError as e:
        assert True

    try:
        factory.create_flavor_modification_request_validator()
        assert False
    except UnsupportedMediaTypeError as e:
        assert True

    try:
        factory.create_flavor_request_validator()
        assert False
    except UnsupportedMediaTypeError as e:
        assert True

    try:
        factory.create_flavor_validator()
        assert False
    except UnsupportedMediaTypeError as e:
        assert True

    try:
        factory.create_infrastructure_request_validator()
        assert False
    except UnsupportedMediaTypeError as e:
        assert True

    try:
        factory.create_infrastructure_validator()
        assert False
    except UnsupportedMediaTypeError as e:
        assert True
예제 #16
0
def modify_promotedflavor(flavor_id):
    #TODO To be decided how to update promoted flavors.
    #Only the users with the appropiate roles could manage the promoted flavors.
    authorization()
    body = util.remove_non_usable_characters(
                        util.remove_xml_header(request.data.decode("utf-8")))
    content_type = request.content_type
    
    validator_factory = factory_selector.get_factory(content_type)
    validator = validator_factory.create_flavor_modification_request_validator()
    validator.validate(body)
    
    modified_flavor = Flavor.deserialize(content_type, request.data)
    manager = FlavorSynchronizer()
    
    if not modified_flavor.nodes:
        modified_flavor = manager.publish_or_promote_flavor(flavor_id, modified_flavor)
    else:
        return Response("The method specified in the Request-Line is not allowed for the node list of infrastructures.", status=405)
    
    response_body = modified_flavor.serialize(request.accept_mimetypes)
    
    return Response(response_body, mimetype=request.accept_mimetypes[0][0])
예제 #17
0
def create_region_flavor(region_name):

    if not manager.is_node_included(region_name):
        return _create_not_found_region_response(region_name)

    body = util.remove_non_usable_characters(
                        util.remove_xml_header(request.data.decode("utf-8")))
    content_type = request.content_type
    
    validator_factory = factory_selector.get_factory(content_type)
    validator = validator_factory.create_flavor_request_validator()
    validator.validate(body)
    
    flavor = Flavor.deserialize(content_type, body)
    flavor.promoted =  False
    flavor.public = False
    
    manager = FlavorSynchronizer()
    created_flavor = manager.create_region_flavor(region_name, flavor)
    
    response_body = created_flavor.serialize(request.accept_mimetypes)
    
    return Response(response_body, status=201, mimetype=request.accept_mimetypes[0][0])
예제 #18
0
def create_new_flavor_xml_test(app):
    content_type = XML_MIMETYPE
    accept = XML_MIMETYPE

    request_body = util.load_xml_example_as_string("flavor_creation_bad_request.xml")
    response = app.post(
        "/v1/flavors", data=request_body, content_type=content_type, headers={"accept": accept}, follow_redirects=True
    )

    assert response.status_code == 400

    request_body = util.load_xml_example_as_string("flavor_creation_request.xml")
    response = app.post(
        "/v1/flavors", data=request_body, content_type=content_type, headers={"accept": accept}, follow_redirects=True
    )

    assert response.status_code == 201

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_flavor_validator()

    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    response = app.post(
        "/v1/flavors", data=request_body, content_type=content_type, headers={"accept": accept}, follow_redirects=True
    )

    assert response.status_code == 409

    xml = objectify.fromstring(response_body)
    return xml.values()[0]
예제 #19
0
def create_new_flavor_json_test(app):
    content_type = JSON_MIMETYPE
    accept = JSON_MIMETYPE

    request_body = util.load_json_example_as_string("flavor_creation_bad_request.json")
    response = app.post(
        "/v1/flavors", data=request_body, content_type=content_type, headers={"accept": accept}, follow_redirects=True
    )

    assert response.status_code == 400

    request_body = util.load_json_example_as_string("flavor_creation_request.json")
    response = app.post(
        "/v1/flavors", data=request_body, content_type=content_type, headers={"accept": accept}, follow_redirects=True
    )

    assert response.status_code == 201

    response_body = response.data.decode("utf-8")

    validator_factory = factory_selector.get_factory(accept)
    validator = validator_factory.create_flavor_validator()

    try:
        validator.validate(response_body)
        assert True
    except ValidationError:
        assert False

    response = app.post(
        "/v1/flavors", data=request_body, content_type=content_type, headers={"accept": accept}, follow_redirects=True
    )

    assert response.status_code == 409

    flavor = json.loads(response_body)
    return flavor["flavor"]["id"]
예제 #20
0
def create_promotedflavor():
    #Only the users with the appropiate roles could manage the promoted flavors.
    authorization()
    #if the user has the correct roles, they can manage the promoted flavors
    body = util.remove_non_usable_characters(
                        util.remove_xml_header(request.data.decode("utf-8")))
    content_type = request.content_type
    
    validator_factory = factory_selector.get_factory(content_type)
    validator = validator_factory.create_flavor_request_validator()
    validator.validate(body)
    
    flavor = Flavor.deserialize(content_type, body)
    flavor.promoted =  True
    flavor.public = True
    
    manager = FlavorSynchronizer()
    created_flavor = manager.create_promoted_flavor(flavor)
    print ("request.accept_mimetypes")
    print (request.accept_mimetypes)
    
    response_body = created_flavor.serialize(request.accept_mimetypes)
    
    return Response(response_body, status=201, mimetype=request.accept_mimetypes[0][0])
def create_json_validator_factory_test():
    factory = factory_selector.get_factory(util.JSON_MIMETYPE)
    assert type(factory) is JSONValidatorFactory
def create_xml_validator_factory_test():
    factory = factory_selector.get_factory(util.XML_MIMETYPE)
    assert type(factory) is XMLValidatorFactory
def validate_json_infrastructure_payload(self):
    payload = util.load_json_example_as_string("infrastructure_response.json")
    factory = factory_selector.get_factory(util.JSON_MIMETYPE)
    validator = factory.create_infrastructure_validator()

    _validate_payload(payload, validator, ValidationError)
def validate_json_flavor_publication_payload(self):
    payload = util.load_json_example_as_string("flavor_publication_request.json")
    factory = factory_selector.get_factory(util.JSON_MIMETYPE)
    validator = factory.create_flavor_modification_request_validator()

    _validate_payload(payload, validator, ValidationError)
def create_wrong_mimetype_validator_factory_test():
    factory = factory_selector.get_factory(util.WRONG_MIMETYPE)
    assert type(factory) is ValidatorFactory
def validate_empty_json_flavor_collection_payload(self):
    payload = '{"flavors":[]}'
    factory = factory_selector.get_factory(util.JSON_MIMETYPE)
    validator = factory.create_flavor_collection_validator()

    _validate_payload(payload, validator, ValidationError)
def validate_json_flavor_collection_payload(self):
    payload = util.load_json_example_as_string("flavor_collection_response.json")
    factory = factory_selector.get_factory(util.JSON_MIMETYPE)
    validator = factory.create_flavor_collection_validator()

    _validate_payload(payload, validator, ValidationError)