| #!/usr/bin/env bash | |
| # Copyright 2014 The Flutter Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # This script has been adapted from: | |
| # https://github.com/flutter/engine/blob/master/testing/fuchsia/run_tests.sh | |
| # Any modifications made to this file might be applicable there as well. | |
| # This expects the device to be in zedboot mode, with a zedboot that is | |
| # is compatible with the Fuchsia system image provided. | |
| # | |
| # The first and only parameter should be the path to the Fuchsia system image | |
| # tarball, e.g. `./run_fuchsia_tests.sh generic-x64.tgz`. | |
| # | |
| # This script expects `pm`, `device-finder`, and `fuchsia_ctl` to all be in the | |
| # same directory as the script. | |
| # | |
| # This script also expects a private key available at: | |
| # "/etc/botanist/keys/id_rsa_infra". | |
| set -Eex | |
| script_dir=$(dirname "$(readlink -f "$0")") | |
| # Bot key to pave and ssh the device. | |
| pkey="/etc/botanist/keys/id_rsa_infra" | |
| # This is longer than the test timeout as dumping the | |
| # logs can sometimes take longer. | |
| ssh_timeout_seconds=360 | |
| # The nodes are named blah-blah--four-word-fuchsia-id | |
| device_name=${SWARMING_BOT_ID#*--} | |
| if [ -z "$device_name" ] | |
| then | |
| echo "No device found. Aborting." | |
| exit 1 | |
| else | |
| echo "Connecting to device $device_name" | |
| fi | |
| # Wrapper function to pass common args to fuchsia_ctl. | |
| fuchsia_ctl() { | |
| $script_dir/fuchsia_ctl -d $device_name \ | |
| --device-finder-path $script_dir/device-finder "$@" | |
| } | |
| reboot() { | |
| echo "$(date) START:DEVICE_LOGS ------------------------------------------" | |
| fuchsia_ctl ssh \ | |
| --timeout-seconds $ssh_timeout_seconds \ | |
| --identity-file $pkey \ | |
| -c "log_listener --dump_logs yes --file /tmp/log.txt" | |
| # As we are not using recipes we don't have a way to know the location | |
| # to upload the log to isolated. We are saving the log to a file to avoid dart | |
| # hanging when running the process and then just using printing the content to | |
| # the console. | |
| fuchsia_ctl ssh \ | |
| --timeout-seconds $ssh_timeout_seconds \ | |
| --identity-file $pkey \ | |
| -c "cat /tmp/log.txt" | |
| echo "$(date) END:DEVICE_LOGS ------------------------------------------" | |
| echo "$(date) START:REBOOT ------------------------------------------" | |
| # note: this will set an exit code of 255, which we can ignore. | |
| fuchsia_ctl ssh \ | |
| --identity-file $pkey \ | |
| -c "dm reboot-recovery" || true | |
| echo "$(date) END:REBOOT --------------------------------------------" | |
| } | |
| trap reboot EXIT | |
| echo "$(date) START:PAVING ------------------------------------------" | |
| ssh-keygen -y -f $pkey > key.pub | |
| fuchsia_ctl pave -i $1 --public-key "key.pub" | |
| echo "$(date) END:PAVING --------------------------------------------" | |
| echo "$(date) START:WAIT_DEVICE_READY -------------------------------" | |
| for i in {1..10}; do | |
| fuchsia_ctl ssh \ | |
| --identity-file $pkey \ | |
| -c "echo up" && break || sleep 15; | |
| done | |
| echo "$(date) END:WAIT_DEVICE_READY ---------------------------------" | |
| echo "$(date) START:PUSH_PACKAGES -------------------------------" | |
| fuchsia_ctl push-packages \ | |
| --identity-file $pkey \ | |
| --repoArchive generic-x64.tar.gz \ | |
| -p tiles -p tiles_ctl | |
| echo "$(date) END:PUSH_PACKAGES ---------------------------------" | |
| # set fuchsia ssh config | |
| cat > $script_dir/fuchsia_ssh_config << EOF | |
| Host * | |
| CheckHostIP no | |
| StrictHostKeyChecking no | |
| ForwardAgent no | |
| ForwardX11 no | |
| GSSAPIDelegateCredentials no | |
| UserKnownHostsFile /dev/null | |
| User fuchsia | |
| IdentitiesOnly yes | |
| IdentityFile $pkey | |
| ControlPersist yes | |
| ControlMaster auto | |
| ControlPath /tmp/fuchsia--%r@%h:%p | |
| ConnectTimeout 10 | |
| ServerAliveInterval 1 | |
| ServerAliveCountMax 10 | |
| LogLevel ERROR | |
| EOF | |
| export FUCHSIA_SSH_CONFIG=$script_dir/fuchsia_ssh_config | |
| # Run the driver test | |
| echo "$(date) START:DRIVER_TEST -------------------------------------" | |
| flutter_dir=$script_dir/flutter | |
| flutter_bin=$flutter_dir/bin/flutter | |
| # remove all out dated .packages references | |
| find $flutter_dir -name ".packages" | xargs rm | |
| cd $flutter_dir/dev/benchmarks/test_apps/stocks/ | |
| $flutter_bin pub get | |
| $flutter_bin drive -v -d $device_name --target=test_driver/stock_view.dart | |
| echo "$(date) END:DRIVER_TEST ---------------------------------------" |