improve stream testing script (#2549)

* merge testContent.sh into ocContent.sh

* detect ffmpeg

ffmpeg or ffmpeg.exe in path, current dir, or parent dir

* use ocTestStream in api test

* enable verbose logging for api tests

* log ffmpeg version

* change ffmpeg lookup order

* set path properly for using the local ffmpeg

* rm double space from transcoder error logs

* update tests for new video stream

do not test bitrate

* set test stream target to 127.0.0.1

* log ffmpeg path

* update ffmpeg to v4.4.1

* improve logs

* fix ffmpeg installer script

* fix api test runner

* fix logs

* install fonts

* cleanup

* use ocTestStream.sh for all automated tests

* cleanup ocTestStream.sh

* cleanup test/automated/hls/run.sh

* Fix misspell

* fix ffmpeg installer in automated test runners

* spell fix

* cleanup script

* rev quick api tests

* cleanup tmp paths properly in automated tests

* rm unused ffmpeg package

* cleanup

* fix s3 test

* cache ffmpeg bin for automated tests

* shellcheck allow source

* rm missplaced file if backup fails

* use ffmpeg full path

* set lookup path for shellcheck
This commit is contained in:
Meisam
2023-01-11 03:50:32 +01:00
committed by GitHub
parent 6e82dbf16f
commit 64d3c37fb2
12 changed files with 166 additions and 125 deletions

View File

@@ -374,10 +374,9 @@ test('verify updated config values', async (done) => {
test('verify admin stream details', async (done) => {
const res = await getAdminResponse('status');
expect(res.body.broadcaster.streamDetails.width).toBe(320);
expect(res.body.broadcaster.streamDetails.height).toBe(180);
expect(res.body.broadcaster.streamDetails.framerate).toBe(24);
expect(res.body.broadcaster.streamDetails.videoBitrate).toBe(1269);
expect(res.body.broadcaster.streamDetails.width).toBe(1280);
expect(res.body.broadcaster.streamDetails.height).toBe(720);
expect(res.body.broadcaster.streamDetails.framerate).toBe(60);
expect(res.body.broadcaster.streamDetails.videoCodec).toBe('H.264');
expect(res.body.broadcaster.streamDetails.audioCodec).toBe('AAC');
expect(res.body.online).toBe(true);

View File

@@ -1,19 +1,13 @@
#!/bin/bash
source ../tools.sh
TEMP_DB=$(mktemp)
# Install the node test framework
npm install --quiet --no-progress
# Download a specific version of ffmpeg
if [ ! -d "ffmpeg" ]; then
mkdir ffmpeg
pushd ffmpeg >/dev/null || exit
curl -sL https://github.com/vot/ffbinaries-prebuilt/releases/download/v4.2.1/ffmpeg-4.2.1-linux-64.zip --output ffmpeg.zip >/dev/null
unzip -o ffmpeg.zip >/dev/null
PATH=$PATH:$(pwd)
popd >/dev/null || exit
fi
ffmpegInstall
pushd ../../.. >/dev/null || exit
@@ -27,12 +21,12 @@ sleep 5
# Start streaming the test file over RTMP to
# the local owncast instance.
ffmpeg -hide_banner -loglevel panic -stream_loop -1 -re -i ../test.mp4 -vcodec libx264 -profile:v main -sc_threshold 0 -b:v 1300k -acodec copy -f flv rtmp://127.0.0.1/live/abc123 &
../../ocTestStream.sh &
FFMPEG_PID=$!
function finish {
rm "$TEMP_DB"
kill $SERVER_PID $FFMPEG_PID
rm -fr "$TEMP_DB" "$FFMPEG_PATH"
}
trap finish EXIT

View File

@@ -3,6 +3,8 @@
set -o errexit
set -o pipefail
source ../tools.sh
TEMP_DB=$(mktemp)
BUILD_ID=$((RANDOM % 7200 + 600))
BROWSER="electron" # Default. Will try to use Google Chrome.
@@ -38,16 +40,7 @@ fi
set -o nounset
# Download a specific version of ffmpeg
if [ ! -d "ffmpeg" ]; then
echo "Downloading ffmpeg..."
mkdir -p /tmp/ffmpeg
pushd /tmp/ffmpeg >/dev/null
curl -sL --fail https://github.com/vot/ffbinaries-prebuilt/releases/download/v4.2.1/ffmpeg-4.2.1-linux-64.zip --output ffmpeg.zip
unzip -o ffmpeg.zip >/dev/null
PATH=$PATH:$(pwd)
popd >/dev/null
fi
ffmpegInstall
# Build and run owncast from source
echo "Building owncast..."
@@ -67,13 +60,13 @@ npx cypress run --browser "$BROWSER" --group "mobile-offline" --ci-build-id $BUI
# Start streaming the test file over RTMP to
# the local owncast instance.
echo "Waiting for stream to start..."
ffmpeg -hide_banner -loglevel panic -stream_loop -1 -re -i ../test.mp4 -vcodec libx264 -profile:v main -sc_threshold 0 -b:v 1300k -acodec copy -f flv rtmp://127.0.0.1/live/abc123 &
../../ocTestStream.sh &
STREAMING_CLIENT=$!
function finish {
echo "Cleaning up..."
rm "$TEMP_DB"
kill $SERVER_PID $STREAMING_CLIENT
rm -fr "$TEMP_DB" "$FFMPEG_PATH"
}
trap finish EXIT SIGHUP SIGINT SIGTERM SIGQUIT SIGABRT SIGTERM

View File

@@ -2,12 +2,7 @@
set -e
function start_stream() {
# Start streaming the test file over RTMP to
# the local owncast instance.
ffmpeg -hide_banner -loglevel panic -stream_loop -1 -re -i ../test.mp4 -vcodec libx264 -profile:v main -sc_threshold 0 -b:v 1300k -acodec copy -f flv rtmp://127.0.0.1/live/abc123 &
STREAMING_CLIENT=$!
}
source ../tools.sh
function update_storage_config() {
echo "Configuring external storage to use ${S3_BUCKET}..."
@@ -23,15 +18,7 @@ TEMP_DB=$(mktemp)
# Install the node test framework
npm install --silent >/dev/null
# Download a specific version of ffmpeg
if [ ! -d "ffmpeg" ]; then
mkdir ffmpeg
pushd ffmpeg >/dev/null
curl -sL https://github.com/vot/ffbinaries-prebuilt/releases/download/v4.2.1/ffmpeg-4.2.1-linux-64.zip --output ffmpeg.zip >/dev/null
unzip -o ffmpeg.zip >/dev/null
PATH=$PATH:$(pwd)
popd >/dev/null
fi
ffmpegInstall
pushd ../../.. >/dev/null
@@ -40,18 +27,19 @@ go build -o owncast main.go
./owncast -database "$TEMP_DB" &
SERVER_PID=$!
function finish {
echo "Cleaning up..."
rm "$TEMP_DB"
kill $SERVER_PID $STREAMING_CLIENT
}
trap finish EXIT
popd >/dev/null
sleep 5
# Start the stream.
start_stream
../../ocTestStream.sh &
STREAMING_CLIENT=$!
function finish {
echo "Cleaning up..."
kill $SERVER_PID $STREAMING_CLIENT
rm -fr "$TEMP_DB" "$FFMPEG_PATH"
}
trap finish EXIT
echo "Waiting..."
sleep 13
@@ -73,7 +61,9 @@ sleep 5
update_storage_config
# start the stream.
start_stream
../../ocTestStream.sh &
STREAMING_CLIENT=$!
echo "Waiting..."
sleep 13

Binary file not shown.

33
test/automated/tools.sh Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/bash
ffmpegInstall(){
# install a specific version of ffmpeg
FFMPEG_VER="4.4.1"
FFMPEG_PATH="$(pwd)/ffmpeg-$FFMPEG_VER"
if ! [[ -d "$FFMPEG_PATH" ]]; then
mkdir "$FFMPEG_PATH"
fi
pushd "$FFMPEG_PATH" >/dev/null || exit
if [[ -x "$FFMPEG_PATH/ffmpeg" ]]; then
ffmpeg_version=$("$FFMPEG_PATH/ffmpeg" -version | awk -F 'ffmpeg version' '{print $2}' | awk 'NR==1{print $1}')
if [[ "$ffmpeg_version" == "$FFMPEG_VER-static" ]]; then
return 0
else
mv "$FFMPEG_PATH/ffmpeg" "$FFMPEG_PATH/ffmpeg.bk" || rm -f "$FFMPEG_PATH/ffmpeg"
fi
fi
rm -f ffmpeg.zip
curl -sL --fail https://github.com/ffbinaries/ffbinaries-prebuilt/releases/download/v${FFMPEG_VER}/ffmpeg-${FFMPEG_VER}-linux-64.zip --output ffmpeg.zip >/dev/null
unzip -o ffmpeg.zip >/dev/null && rm -f ffmpeg.zip
chmod +x ffmpeg
PATH=$FFMPEG_PATH:$PATH
popd >/dev/null || exit
}