| #!/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. | |
| set -e | |
| # The tests to run on Firebase Test Lab. | |
| # Currently, the test consists on building an Android App Bundle and ensuring | |
| # that the app doesn't crash upon startup. | |
| # | |
| # When adding a test, ensure that there's at least a `print()` statement under lib/*.dart. | |
| # | |
| # The first and only parameter should be the path to an integration test. | |
| # The devices where the tests are run. | |
| # | |
| # To get the full list of devices available, run: | |
| # gcloud firebase test android models list | |
| devices=( | |
| # Pixel 3 | |
| "model=blueline,version=28" | |
| # Pixel 4 | |
| "model=flame,version=29" | |
| # Moto Z XT1650 | |
| "model=griffin,version=24" | |
| ) | |
| GIT_REVISION=$(git rev-parse HEAD) | |
| DEVICE_FLAG="" | |
| for device in ${devices[*]}; do | |
| DEVICE_FLAG+="--device $device " | |
| done | |
| # If running tests locally, the key env var needs to be set. | |
| if [[ -z $GCLOUD_FIREBASE_TESTLAB_KEY ]]; then | |
| echo "Not running firebase test lab tests because GCLOUD_FIREBASE_TESTLAB_KEY isn't set." | |
| exit 0 | |
| fi | |
| # New contributors will not have permissions to run this test - they won't be | |
| # able to access the service account information. We should just mark the test | |
| # as passed - it will run fine on post submit, where it will still catch | |
| # failures. | |
| # We can also still make sure that building a release app bundle still works. | |
| if [[ $GCLOUD_FIREBASE_TESTLAB_KEY == ENCRYPTED* ]]; then | |
| echo "This user does not have permission to run this test." | |
| exit 0 | |
| fi | |
| echo $GCLOUD_FIREBASE_TESTLAB_KEY > ${HOME}/gcloud-service-key.json | |
| gcloud auth activate-service-account --key-file=${HOME}/gcloud-service-key.json | |
| gcloud --quiet config set project flutter-infra | |
| function test_app_bundle() { | |
| pushd "$@" | |
| ../../../bin/flutter build appbundle --target-platform android-arm,android-arm64 | |
| aab="build/app/outputs/bundle/release/app-release.aab" | |
| # If the app bundle doesn't exist, then exit with code 1. | |
| if [ ! -f "$aab" ]; then | |
| exit 1 | |
| fi | |
| # Run the test. | |
| gcloud firebase test android run \ | |
| --type robo \ | |
| --app "$aab" \ | |
| --timeout 2m \ | |
| --results-bucket=gs://flutter_firebase_testlab \ | |
| --results-dir="$@"/"$GIT_REVISION"/"$CIRRUS_BUILD_ID" \ | |
| $DEVICE_FLAG | |
| rm -f /tmp/logcat | |
| gsutil cat gs://flutter_firebase_testlab/"$@"/"$GIT_REVISION"/"$CIRRUS_BUILD_ID"/*/logcat > /tmp/logcat | |
| # Check logcat for "E/flutter" - if it's there, something's wrong. | |
| ! grep "E/flutter" /tmp/logcat || false | |
| # Check logcat for "I/flutter" - This is in the log if there's a print statement under lib/*.dart. | |
| grep "I/flutter" /tmp/logcat | |
| popd | |
| } | |
| test_app_bundle "$1" |