31 lines
1.7 KiB
Bash
Executable File
31 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
: "${JELLYFIN_API_KEY:?}"
|
|
IMAGE=${IMAGE:-pretranscode:test}
|
|
NETWORK=${MEDIA_NETWORK:-media-internal}
|
|
JELLYFIN_URL=${JELLYFIN_URL:-http://jellyfin:8096}
|
|
ROOT=$(mktemp -d)
|
|
trap 'rm -rf "$ROOT"' EXIT
|
|
mkdir -p "$ROOT"/{source/movies/Test,view,cache,state}
|
|
touch "$ROOT/cache/.pretranscode-cache"
|
|
|
|
docker build -q -t "$IMAGE" . >/dev/null
|
|
docker run --rm --entrypoint ffmpeg -v "$ROOT/source:/source" "$IMAGE" \
|
|
-hide_banner -loglevel error -f lavfi -i testsrc2=size=1280x720:rate=24 \
|
|
-t 6 -c:v libx265 -pix_fmt yuv420p10le -an /source/movies/Test/Test.mkv
|
|
|
|
docker run --rm --network "$NETWORK" --entrypoint python3 \
|
|
-e SOURCE_ROOT=/source -e VIEW_ROOT=/view -e CACHE_ROOT=/cache -e STATE_ROOT=/state \
|
|
-e JELLYFIN_URL="$JELLYFIN_URL" -e JELLYFIN_API_KEY \
|
|
-e JELLYFIN_LIBRARY_ROOT=/data/library -e JELLYFIN_ORIGINAL_ROOT=/data/original \
|
|
-e JELLYFIN_CACHE_ROOT=/data/cache \
|
|
-v "$ROOT/source:/source:ro" -v "$ROOT/view:/view" -v "$ROOT/cache:/cache" -v "$ROOT/state:/state" \
|
|
"$IMAGE" -c 'import importlib.machinery; m=importlib.machinery.SourceFileLoader("p","/app/pretranscode").load_module(); x=m.Manager(); assert x.read_sessions(); x.scan_inventory(); x.sync_view(); assert x.encode("movies/Test/Test.mkv",False)=="completed"'
|
|
|
|
OUTPUT=$(find "$ROOT/cache/files" -name '*.mkv' ! -name '*.partial' | head -1)
|
|
docker run --rm --entrypoint ffprobe -v "$ROOT/cache:/cache:ro" "$IMAGE" \
|
|
-v error -select_streams v:0 -show_entries stream=codec_name,pix_fmt \
|
|
-of default=nw=1 "/cache/files/$(basename "$OUTPUT")" | grep -qx 'codec_name=h264'
|
|
test "$(readlink "$ROOT/view/movies/Test/Test.mkv")" = "/data/cache/files/$(basename "$OUTPUT")"
|
|
echo "integration test passed"
|