diff --git a/.github/test.sh b/.github/test.sh new file mode 100755 index 00000000..85683b91 --- /dev/null +++ b/.github/test.sh @@ -0,0 +1,73 @@ +#!/bin/bash +set -e + +# thx: https://stackoverflow.com/a/27601038 +waitport() { + ATTEMPTS=50 + while [ $((ATTEMPTS-=1)) -gt 0 ] && ! nc -z localhost $1; do + sleep 0.1 + done + + [ "$ATTEMPTS" != 0 ] || exit 1 +} + +test_api() { + waitport 3000 + curl -m 3 http://localhost:3000/api/serverInfo + API_RESPONSE=$(curl -m 3 http://localhost:3000/api/json \ + -X POST \ + -H "Accept: application/json" \ + -H "Content-Type: application/json" \ + -d '{"url":"https://www.youtube.com/watch?v=jNQXAC9IVRw"}') + + echo "$API_RESPONSE" + STATUS=$(echo "$API_RESPONSE" | jq -r .status) + STREAM_URL=$(echo "$API_RESPONSE" | jq -r .url) + [ "$STATUS" = stream ] || exit 1; + + CONTENT_LENGTH=$(curl -I -m 3 "$STREAM_URL" \ + | grep -i content-length \ + | cut -d' ' -f2 \ + | tr -d '\r') + + echo "$CONTENT_LENGTH" + [ "$CONTENT_LENGTH" = 0 ] && exit 1 + if [ "$CONTENT_LENGTH" -lt 512 ]; then + exit 1 + fi +} + +test_web() { + waitport 3001 + curl -m 3 http://127.0.0.1:3001/onDemand?blockId=0 \ + | grep -q '"status":"success"' +} + +setup_api() { + export API_PORT=3000 + export API_URL=http://localhost:3000 + timeout 10 npm run start +} + +setup_web() { + export WEB_PORT=3001 + export WEB_URL=http://localhost:3001 + export API_URL=http://localhost:3000 + timeout 5 npm run start +} + +cd "$(git rev-parse --show-toplevel)" +npm i + +if [ "$1" = "api" ]; then + setup_api & + test_api +elif [ "$1" = "web" ]; then + setup_web & + test_web +else + echo "usage: $0 " >&2 + exit 1 +fi + +wait || exit $? \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..1a02c125 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,25 @@ +name: Run tests + +on: + pull_request: + push: + branches: [ current ] + +jobs: + test-web: + name: web sanity check + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Run test script + run: .github/test.sh web + + test-api: + name: api sanity check + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Run test script + run: .github/test.sh api \ No newline at end of file