diff --git a/e2e-test-server/app.yaml b/e2e-test-server/app.yaml deleted file mode 100644 index ffb36c73..00000000 --- a/e2e-test-server/app.yaml +++ /dev/null @@ -1,3 +0,0 @@ -runtime: python311 -# Start the app directly instead of using gunicorn, same as we do in the Dockerfile -entrypoint: python main.py diff --git a/e2e-test-server/e2e_test_server/server.py b/e2e-test-server/e2e_test_server/server.py index 52105630..f61ac761 100644 --- a/e2e-test-server/e2e_test_server/server.py +++ b/e2e-test-server/e2e_test_server/server.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import json import logging from typing import Literal @@ -20,6 +21,9 @@ from google.cloud import pubsub_v1 from google.cloud.pubsub_v1.subscriber.message import Message from google.rpc import code_pb2 +from flask import Flask, Response, request +from waitress import serve + from . import scenarios, types from .constants import ( @@ -146,16 +150,21 @@ def pubsub_callback(message: Message) -> None: streaming_pull_future.result() -def pubsub_push() -> None: - """Start a web server listening for incoming pub/sub push message""" - from flask import Flask, Response, request - from waitress import serve - +def create_flask_app() -> Flask: app = Flask(__name__) responder = _Responder() @app.route("/", methods=["POST"]) def index() -> Response: + print( + json.dumps( + { + "message": f"got request {request=}", + "request": request, + "is_json": request.is_json, + } + ) + ) if not request.is_json: return Response("Expected a JSON payload", status=400) payload = types.PubsubPushPayload(**request.json) @@ -168,6 +177,12 @@ def index() -> Response: else: return Response(status=400) + return app + + +def pubsub_push() -> None: + """Start a web server listening for incoming pub/sub push message""" + app = create_flask_app() serve(app, port=PUSH_PORT) diff --git a/e2e-test-server/main.py b/e2e-test-server/main.py index 7c0d65a5..d79a1313 100644 --- a/e2e-test-server/main.py +++ b/e2e-test-server/main.py @@ -18,6 +18,8 @@ from e2e_test_server.server import cloud_functions_handler from e2e_test_server.constants import SUBSCRIPTION_MODE, SubscriptionMode +app = None + if __name__ == "__main__": logging.basicConfig(level=logging.INFO) @@ -26,5 +28,9 @@ elif SUBSCRIPTION_MODE is SubscriptionMode.PUSH: server.pubsub_push() +else: + # being started by gunicorn + app = server.create_flask_app() + # Expose handler to functions-framework -__all__ = ["cloud_functions_handler"] +__all__ = ["app", "cloud_functions_handler"]