def test_firebase_db_event_to_cloud_event_missing_domain(
        firebase_db_background_input, firebase_db_cloud_event_output):
    del firebase_db_background_input["domain"]
    req = flask.Request.from_values(json=firebase_db_background_input)

    with pytest.raises(EventConversionException) as exc_info:
        event_conversion.background_event_to_cloud_event(req)

    assert ("Invalid FirebaseDB event payload: missing 'domain'"
            in exc_info.value.args[0])
Exemple #2
0
    def view_func(path):
        ce_exception = None
        event = None
        try:
            event = from_http(request.headers, request.get_data())
        except (
                cloud_exceptions.MissingRequiredFields,
                cloud_exceptions.InvalidRequiredFields,
        ) as e:
            ce_exception = e

        if not ce_exception:
            function(event)
            return "OK"

        # Not a CloudEvent. Try converting to a CloudEvent.
        try:
            function(event_conversion.background_event_to_cloud_event(request))
        except EventConversionException as e:
            flask.abort(
                400,
                description=
                ("Function was defined with FUNCTION_SIGNATURE_TYPE=cloudevent but"
                 " parsing CloudEvent failed and converting from background event to"
                 f" CloudEvent also failed.\nGot HTTP headers: {request.headers}\nGot"
                 f" data: {request.get_data()}\nGot CloudEvent exception: {repr(ce_exception)}"
                 f"\nGot background event conversion exception: {repr(e)}"),
            )
        return "OK"
def test_firebase_auth_event_to_cloud_event_no_metadata(
        firebase_auth_background_input, firebase_auth_cloud_event_output):
    # Remove metadata from the events to verify conversion still works.
    del firebase_auth_background_input["data"]["metadata"]
    del firebase_auth_cloud_event_output.data["metadata"]

    req = flask.Request.from_values(json=firebase_auth_background_input)
    cloud_event = event_conversion.background_event_to_cloud_event(req)
    assert cloud_event == firebase_auth_cloud_event_output
def test_pubsub_emulator_request_with_invalid_message(
        raw_pubsub_request, raw_pubsub_cloud_event_output):
    # Create an invalid message payload
    raw_pubsub_request["message"] = None
    req = flask.Request.from_values(json=raw_pubsub_request, path="/")

    with pytest.raises(EventConversionException) as exc_info:
        cloud_event = event_conversion.background_event_to_cloud_event(req)
    assert "Failed to convert Pub/Sub payload to event" in exc_info.value.args[
        0]
def test_firebase_db_event_to_cloud_event_location_subdomain(
        firebase_db_background_input, firebase_db_cloud_event_output):
    firebase_db_background_input[
        "domain"] = "europe-west1.firebasedatabase.app"
    firebase_db_cloud_event_output["source"] = firebase_db_cloud_event_output[
        "source"].replace("us-central1", "europe-west1")

    req = flask.Request.from_values(json=firebase_db_background_input)
    cloud_event = event_conversion.background_event_to_cloud_event(req)
    assert cloud_event == firebase_db_cloud_event_output
def test_firebase_auth_event_to_cloud_event_no_uid(
        firebase_auth_background_input, firebase_auth_cloud_event_output):
    # Remove UIDs from the events to verify conversion still works. The UID is mapped
    # to the subject in the CloudEvent so remove that from the expected CloudEvent.
    del firebase_auth_background_input["data"]["uid"]
    del firebase_auth_cloud_event_output.data["uid"]
    del firebase_auth_cloud_event_output["subject"]

    req = flask.Request.from_values(json=firebase_auth_background_input)
    cloud_event = event_conversion.background_event_to_cloud_event(req)
    assert cloud_event == firebase_auth_cloud_event_output
def test_firebase_auth_event_to_cloud_event_no_metadata_timestamps(
        firebase_auth_background_input, firebase_auth_cloud_event_output):
    # Remove metadata timestamps from the events to verify conversion still works.
    del firebase_auth_background_input["data"]["metadata"]["createdAt"]
    del firebase_auth_background_input["data"]["metadata"]["lastSignedInAt"]
    del firebase_auth_cloud_event_output.data["metadata"]["createTime"]
    del firebase_auth_cloud_event_output.data["metadata"]["lastSignInTime"]

    req = flask.Request.from_values(json=firebase_auth_background_input)
    cloud_event = event_conversion.background_event_to_cloud_event(req)
    assert cloud_event == firebase_auth_cloud_event_output
def test_pubsub_emulator_request_to_cloud_event(raw_pubsub_cloud_event_output,
                                                request_fixture, overrides,
                                                request):
    request_path = overrides.get("request_path", "/")
    payload = request.getfixturevalue(request_fixture)
    req = flask.Request.from_values(
        path=request_path,
        json=payload,
    )
    cloud_event = event_conversion.background_event_to_cloud_event(req)

    # Remove timestamps as they are generated on the fly.
    del raw_pubsub_cloud_event_output["time"]
    del raw_pubsub_cloud_event_output.data["message"]["publishTime"]
    del cloud_event["time"]
    del cloud_event.data["message"]["publishTime"]

    if "source" in overrides:
        # Default to the service name, when the topic is not configured subscription's pushEndpoint.
        raw_pubsub_cloud_event_output["source"] = overrides["source"]

    assert cloud_event == raw_pubsub_cloud_event_output
def test_marshal_background_event_data_bad_request():
    req = pretend.stub(headers={}, get_json=lambda: None)

    with pytest.raises(EventConversionException):
        event_conversion.background_event_to_cloud_event(req)
def test_firebase_db_event_to_cloud_event_default_location(
        firebase_db_background_input, firebase_db_cloud_event_output):
    req = flask.Request.from_values(json=firebase_db_background_input)
    cloud_event = event_conversion.background_event_to_cloud_event(req)
    assert cloud_event == firebase_db_cloud_event_output
def test_firebase_auth_event_to_cloud_event(firebase_auth_background_input,
                                            firebase_auth_cloud_event_output):
    req = flask.Request.from_values(json=firebase_auth_background_input)
    cloud_event = event_conversion.background_event_to_cloud_event(req)
    assert cloud_event == firebase_auth_cloud_event_output
def test_pubsub_event_to_cloud_event(event, pubsub_cloud_event_output):
    req = flask.Request.from_values(json=event)
    cloud_event = event_conversion.background_event_to_cloud_event(req)
    assert cloud_event == pubsub_cloud_event_output