From 7599093d90c5aa27961052c39b332c65daccb1ad Mon Sep 17 00:00:00 2001 From: Arian Nasr Date: Sun, 31 May 2026 08:06:48 -0400 Subject: [PATCH] feat(e2e): add Dockerfile and entrypoint script for testing deb packages Signed-off-by: Arian Nasr --- Dockerfile.test | 36 ++++++++++++++++++++++++++++++++++++ e2e/test-entrypoint.sh | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 Dockerfile.test create mode 100644 e2e/test-entrypoint.sh diff --git a/Dockerfile.test b/Dockerfile.test new file mode 100644 index 0000000..ad4991b --- /dev/null +++ b/Dockerfile.test @@ -0,0 +1,36 @@ +# Navidome-Uploader Dockerfile for testing .deb packages +# Arian Nasr +# May 31, 2026 + +FROM debian:stable + +# Prevent interactive prompts +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y \ + curl \ + python3 \ + python3-venv \ + python3-pip \ + && rm -rf /var/lib/apt/lists/* + +# Copy the built deb package into the container +COPY output/*.deb /tmp/navidrome-uploader.deb + +RUN apt-get update && \ + apt-get install -y -f /tmp/navidrome-uploader.deb && \ + rm -rf /var/lib/apt/lists/* + +RUN mkdir -p /opt/navidrome/music && \ + chown -R navidrome-uploader:navidrome-uploader /opt/navidrome/music + +COPY e2e/ /e2e/ + +RUN python3 -m venv /e2e/venv && \ + /e2e/venv/bin/pip install --no-cache-dir -r /e2e/requirements.txt + +RUN chmod +x /e2e/test-entrypoint.sh + +WORKDIR /e2e + +ENTRYPOINT ["/e2e/test-entrypoint.sh"] \ No newline at end of file diff --git a/e2e/test-entrypoint.sh b/e2e/test-entrypoint.sh new file mode 100644 index 0000000..252f913 --- /dev/null +++ b/e2e/test-entrypoint.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +export NAVIDROME_MUSIC_FOLDER="/opt/navidrome/music" +export BASE_URL="http://127.0.0.1:5001" + +# Start the app manually since systemd isn't running in the container +cd /opt/navidrome-uploader +su -s /bin/sh navidrome-uploader -c "/opt/navidrome-uploader/venv/bin/gunicorn --no-control-socket -c gunicorn.conf.py main:app" & + +APP_PID=$! + +TIMEOUT=30 +SERVICE_UP=0 + +while [ $TIMEOUT -gt 0 ]; do + if curl -s $BASE_URL/ping | grep -q "pong"; then + SERVICE_UP=1 + break + fi + sleep 1 + TIMEOUT=$((TIMEOUT-1)) +done + +if [ $SERVICE_UP -eq 0 ]; then + echo "Error: Service failed to start within the timeout period" + kill $APP_PID + exit 1 +fi + +cd /e2e + +/e2e/venv/bin/pytest unit/api/test_api.py + +# Capture the exit code of pytest +TEST_EXIT_CODE=$? + +kill $APP_PID + +exit $TEST_EXIT_CODE \ No newline at end of file