From f425762e35957e663eeda3e5bea73a1f93ab90dd Mon Sep 17 00:00:00 2001 From: cyBerta Date: Sun, 31 Jan 2021 18:56:21 +0100 Subject: create scripts to start several emulators for automatted testing --- scripts/installOnAllEmulators.sh | 2 ++ scripts/startEmulators.sh | 58 +++++++++++++++++++++++++++++++ scripts/wait-for-emulator.sh | 73 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100755 scripts/installOnAllEmulators.sh create mode 100755 scripts/startEmulators.sh create mode 100755 scripts/wait-for-emulator.sh (limited to 'scripts') diff --git a/scripts/installOnAllEmulators.sh b/scripts/installOnAllEmulators.sh new file mode 100755 index 00000000..e0ed4c6a --- /dev/null +++ b/scripts/installOnAllEmulators.sh @@ -0,0 +1,2 @@ +#!/bin/bash +adb devices | grep emulator | cut --output-delimiter ' ' -f1 | xargs -I{} adb -s {} install -r $1 diff --git a/scripts/startEmulators.sh b/scripts/startEmulators.sh new file mode 100755 index 00000000..d1bc8292 --- /dev/null +++ b/scripts/startEmulators.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +# init parameters +for ((i=1;i<=$#;i++)); +do + if [[ ${!i} = "-n" ]] + then + ((i++)) + N=${!i} + elif [[ ${!i} = "-h" ]] + then + echo -e " + -n start first N available emulators from alphabetically order + -h print help + " + exit + fi +done + +if [[ -z ${N} ]] +then + N=1 +fi + +err() { + echo "$@" + exit 1 +} +sec=0 +timeout=30 +waitForAdbDevices() { + while true; do + if [[ $sec -ge $timeout ]]; then + err "Timeout ($timeout seconds) reached - adb devices didn't find all emulators" + fi + out=$(adb devices | grep -v List | awk '$2{print $1}' | wc -l) + if [[ "$out" == "$N" ]]; then + break + fi + let "r = sec % 5" + if [[ $r -eq 0 ]]; then + echo "Waiting for adb devices to start: $out / $N" + fi + sleep 1 + let "sec++" + done +} + +#start first N avd images +avdmanager list avd | grep Name: | cut -d ':' -f2 | head -n $N | xargs -I{} -P$N -n1 emulator -no-snapshot -avd {} & +waitForAdbDevices +echo "adb found all emulators..." + +#wait for each emulator that booting completed +adb devices | grep -v List | awk '$2{print $1}' | xargs -I{} .gitlab/wait-for-emulator.sh -s {} +echo "all emulators successfully booted" + + diff --git a/scripts/wait-for-emulator.sh b/scripts/wait-for-emulator.sh new file mode 100755 index 00000000..1bc1975e --- /dev/null +++ b/scripts/wait-for-emulator.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +# from https://gitlab.com/fdroid/fdroidclient +# changes by cyberta + +sec=0 +timeout=360 + +for ((i=1;i<=$#;i++)); +do + if [[ ${!i} = "-s" ]] + then + ((i++)) + SERIAL=${!i} + elif [[ ${!i} = "-h" ]] + then + echo -e " + -s serial identifier of the emulator + -h print help + " + exit + fi +done + +if [[ -z $SERIAL ]] +then + DEFAULTEMULATOR=true + echo "using default emulator" +fi + +err() { + echo "$@" + exit 1 +} + +explain() { + if [[ "$1" =~ "not found" ]]; then + printf "device not found" + elif [[ "$1" =~ "offline" ]]; then + printf "device offline" + elif [[ "$1" =~ "running" ]]; then + printf "booting" + else + printf "$1" + fi +} + + +while true; do + if [[ $sec -ge $timeout ]]; then + err "Timeout ($timeout seconds) reached - Failed to start emulator" + fi + if [[ ! -z $SERIAL ]] + then + out=$(adb -s $SERIAL shell getprop init.svc.bootanim 2>&1 | grep -v '^\*') + else + out=$(adb -e shell getprop init.svc.bootanim 2>&1 | grep -v '^\*') + fi + if [[ "$out" =~ "command not found" ]]; then + err "$out" + fi + if [[ "$out" =~ "stopped" ]]; then + break + fi + let "r = sec % 5" + if [[ $r -eq 0 ]]; then + echo "Waiting for emulator $SERIAL to start: $(explain "$out")" + fi + sleep 1 + let "sec++" +done + +echo "Emulator $SERIAL is ready" -- cgit v1.2.3