From e32ee479a5900ff8d29a55dc0f8d8524b2992b44 Mon Sep 17 00:00:00 2001 From: ChillerDragon Date: Tue, 20 Feb 2024 11:23:40 +0800 Subject: [PATCH] Play with failing CI --- .github/workflows/integration-docker.yml | 15 +++++++ .github/workflows/integration.yml | 39 +++++++----------- integration_test/Dockerfile | 52 ++++++++++++++++++++++++ integration_test/run.sh | 9 ++++ 4 files changed, 91 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/integration-docker.yml create mode 100644 integration_test/Dockerfile diff --git a/.github/workflows/integration-docker.yml b/.github/workflows/integration-docker.yml new file mode 100644 index 0000000..eafbbf8 --- /dev/null +++ b/.github/workflows/integration-docker.yml @@ -0,0 +1,15 @@ +# name: Integration tests dockerized + +# on: +# push: +# branches: [ "master" ] +# pull_request: +# branches: [ "master" ] + +# jobs: +# docker: +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v3 +# - name: Run integration tests in docker +# run: docker build . --file integration_test/Dockerfile --tag teeworlds_network-integration-tests:$(date +%s) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 6e080d4..651066e 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -58,27 +58,18 @@ jobs: ./integration_test/run.sh client/rcon.rb - name: '[SERVER] Test connect' run: | - sudo tcpdump -i lo "port 8377" -w dump.pcap & - tcpdump_pid=$! - fail=0 - if ! ./integration_test/run.sh server/connect.rb - then - fail=1 - fi - kill $tcpdump_pid - sleep 1 - tcpdump -r dump.pcap -nX || true - [[ "$fail" == "1" ]] && exit 1 - - name: '[SERVER] Test chat' - run: | - sudo tcpdump -i lo "port 8377" -w dump.pcap & - tcpdump_pid=$! - fail=0 - if ! ./integration_test/run.sh server/chat.rb - then - fail=1 - fi - kill $tcpdump_pid - sleep 1 - tcpdump -r dump.pcap -nX || true - [[ "$fail" == "1" ]] && exit 1 + ./integration_test/run.sh server/connect.rb + # - name: '[SERVER] Test chat' + # run: | + # sudo tcpdump -i lo "port 8377" -w dump.pcap & + # tcpdump_pid=$! + # fail=0 + # if ! ./integration_test/run.sh server/chat.rb + # then + # fail=1 + # fi + # kill -SIGINT $tcpdump_pid + # sleep 1 + # file dump.pcap + # tcpdump -r dump.pcap -nX || true + # [[ "$fail" == "1" ]] && exit 1 diff --git a/integration_test/Dockerfile b/integration_test/Dockerfile new file mode 100644 index 0000000..faa6924 --- /dev/null +++ b/integration_test/Dockerfile @@ -0,0 +1,52 @@ +FROM ubuntu:24.04 + +RUN apt-get update -y && apt-get install -y sudo +RUN sudo apt-get install -y ruby ruby-dev +RUN sudo apt-get install -y tcpdump tshark +RUN sudo apt-get install -y shellcheck teeworlds-server teeworlds teeworlds-data +RUN sudo apt install -y build-essential glslang-tools libavcodec-extra libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libcurl4-openssl-dev libfreetype6-dev libglew-dev libnotify-dev libogg-dev libopus-dev libopusfile-dev libpng-dev libsdl2-dev libsqlite3-dev libssl-dev libvulkan-dev libwavpack-dev libx264-dev +RUN sudo apt-get install -y wget + +RUN wget https://github.com/ChillerDragon/teeworlds/releases/download/v0.7.5-headless/teeworlds-0.7.5-linux_x86_64.tar.gz +RUN tar -xvzf teeworlds-0.7.5-linux_x86_64.tar.gz +RUN sudo mkdir -p /usr/local/bin/ +RUN sudo mv teeworlds-0.7.5-linux_x86_64/teeworlds /usr/local/bin/teeworlds-headless +RUN rm -rf teeworlds-0.7.5-linux_x86_64* + +RUN wget https://github.com/ChillerDragon/ddnet/releases/download/v16.5-headless/DDNet-headless.zip +RUN unzip DDNet-headless.zip +RUN sudo mv DDNet-headless /usr/local/bin +RUN rm DDNet-headless.zip + +RUN wget https://github.com/ChillerDragon/ddnet/releases/download/v17.4.2-headless-0.7/DDNet7-headless-ubuntu24.zip +RUN unzip DDNet7-headless-ubuntu24.zip +RUN chmod +x DDNet7-headless +RUN sudo mv DDNet7-headless /usr/local/bin +RUN rm DDNet7-headless-ubuntu24.zip + +RUN echo 'TODO: remove this ugly hack!' +RUN mkdir -p ~/.teeworlds/downloadedmaps +RUN cd ~/.teeworlds/downloadedmaps && wget https://heinrich5991.de/teeworlds/maps/maps/dm1_64548818.map + +RUN gem install bundler +RUN gem install rubocop:1.31.2 + +USER 1000 + +WORKDIR /teeworlds_network +COPY . . + +RUN bundle install --jobs 4 --retry 3 + + +RUN echo '[CLIENT] Test sending chat messages' +RUN ./integration_test/run.sh client/chat.rb +RUN echo '[CLIENT] Test reconnect' +RUN ./integration_test/run.sh client/reconnect.rb +RUN echo '[CLIENT] Test rcon' +RUN ./integration_test/run.sh client/rcon.rb +RUN echo '[SERVER] Test connect' +RUN ./integration_test/run.sh server/connect.rb +RUN echo '[SERVER] Test chat' +RUN ./integration_test/run.sh server/chat.rb + diff --git a/integration_test/run.sh b/integration_test/run.sh index 907d3ce..a122428 100755 --- a/integration_test/run.sh +++ b/integration_test/run.sh @@ -17,6 +17,8 @@ ruby_logfile_err=ruby_client_stderr.txt _client_pid='' _kill_pids=() +[[ -d tmp ]] && rm -rf tmp + mkdir -p logs mkdir -p tmp @@ -32,6 +34,10 @@ start_tw_server() { then teeworlds-srv "$srvcfg" &> "$logdir/server.txt" tw_srv_bin='teeworlds-srv' + elif [ -f /usr/games/teeworlds-server ] # needed for docker ubuntu:24.04 + then + /usr/games/teeworlds-server "$srvcfg" &> "$logdir/server.txt" + tw_srv_bin='/usr/games/teeworlds-server' else echo "Error: please install a teeworlds_srv" exit 1 @@ -220,6 +226,9 @@ fifo() { local cmd="$1" local fifo_file="$2" echo "[*] $cmd >> $fifo_file" + local cmd_slug + cmd_slug="${cmd//[^a-zA-Z0-9]/_}" + echo "echo \"FIFO: $cmd_slug\"" >> "$fifo_file" echo "$cmd" >> "$fifo_file" } assert_in_log() {