xref: /aosp_15_r20/external/aws-crt-java/src/test/android/testapp/instrumentedTestSpec.yml (revision 3c7ae9de214676c52d19f01067dc1a404272dc11)
1*3c7ae9deSAndroid Build Coastguard Workerversion: 0.1
2*3c7ae9deSAndroid Build Coastguard Worker
3*3c7ae9deSAndroid Build Coastguard Worker# Phases are collection of commands that get executed on Device Farm.
4*3c7ae9deSAndroid Build Coastguard Workerphases:
5*3c7ae9deSAndroid Build Coastguard Worker  # The install phase includes commands that install dependencies that your tests use.
6*3c7ae9deSAndroid Build Coastguard Worker  # Default dependencies for testing frameworks supported on Device Farm are already installed.
7*3c7ae9deSAndroid Build Coastguard Worker  install:
8*3c7ae9deSAndroid Build Coastguard Worker    commands:
9*3c7ae9deSAndroid Build Coastguard Worker
10*3c7ae9deSAndroid Build Coastguard Worker  # The pre-test phase includes commands that setup your test environment.
11*3c7ae9deSAndroid Build Coastguard Worker  pre_test:
12*3c7ae9deSAndroid Build Coastguard Worker    commands:
13*3c7ae9deSAndroid Build Coastguard Worker
14*3c7ae9deSAndroid Build Coastguard Worker  # The test phase includes commands that run your test suite execution.
15*3c7ae9deSAndroid Build Coastguard Worker  test:
16*3c7ae9deSAndroid Build Coastguard Worker    commands:
17*3c7ae9deSAndroid Build Coastguard Worker      # By default, the following ADB command is used by Device Farm to run your Instrumentation test.
18*3c7ae9deSAndroid Build Coastguard Worker      # Alternatively, you may specify a customized command.
19*3c7ae9deSAndroid Build Coastguard Worker      # Please refer to Android's documentation (https://developer.android.com/studio/test/command-line#run-tests-with-adb)
20*3c7ae9deSAndroid Build Coastguard Worker      # for more options on running instrumentation tests from the command line.
21*3c7ae9deSAndroid Build Coastguard Worker      - echo "Start Instrumentation test"
22*3c7ae9deSAndroid Build Coastguard Worker      - |
23*3c7ae9deSAndroid Build Coastguard Worker        adb -s $DEVICEFARM_DEVICE_UDID shell "am instrument -r -w --no-window-animation \
24*3c7ae9deSAndroid Build Coastguard Worker        $DEVICEFARM_TEST_PACKAGE_NAME/$DEVICEFARM_TEST_PACKAGE_RUNNER 2>&1 || echo \": -1\"" |
25*3c7ae9deSAndroid Build Coastguard Worker        tee $DEVICEFARM_LOG_DIR/instrument.log
26*3c7ae9deSAndroid Build Coastguard Worker
27*3c7ae9deSAndroid Build Coastguard Worker      # Parse the output of JUnit4 instrumentation tests, and check how many tests experienced each possible status code
28*3c7ae9deSAndroid Build Coastguard Worker      # Note that this parsing is designed for the AndroidJUnitRunner, and thus different test runners may require customized
29*3c7ae9deSAndroid Build Coastguard Worker      # parsing code specific to those runners specific test reporting output.
30*3c7ae9deSAndroid Build Coastguard Worker      # For more information on instrumentation status codes, please see https://android.googlesource.com/platform/tools/base/+/refs/tags/android-mainline-12.0.0_r58/ddmlib/src/main/java/com/android/ddmlib/testrunner/InstrumentationResultParser.java#49
31*3c7ae9deSAndroid Build Coastguard Worker      # as well as https://android.googlesource.com/platform/tools/base/+/refs/tags/android-mainline-12.0.0_r58/ddmlib/src/main/java/com/android/ddmlib/testrunner/InstrumentationResultParser.java#100
32*3c7ae9deSAndroid Build Coastguard Worker      # Note that tests that give the "Ignored" (-3) and "Assumption Failure" (-4) status coded are treated as "passed"
33*3c7ae9deSAndroid Build Coastguard Worker      # but you can change this behavior for your tests by modifying the "if" statement below.
34*3c7ae9deSAndroid Build Coastguard Worker      - |-
35*3c7ae9deSAndroid Build Coastguard Worker        DID_ANY_TESTS_START=$(grep "INSTRUMENTATION_STATUS_CODE: 1" $DEVICEFARM_LOG_DIR/instrument.log | wc -l);
36*3c7ae9deSAndroid Build Coastguard Worker        TESTS_PASSED=$(grep "INSTRUMENTATION_STATUS_CODE: 0" $DEVICEFARM_LOG_DIR/instrument.log | wc -l);
37*3c7ae9deSAndroid Build Coastguard Worker        TESTS_ERRORED=$(grep "INSTRUMENTATION_STATUS_CODE: -1" $DEVICEFARM_LOG_DIR/instrument.log | wc -l);
38*3c7ae9deSAndroid Build Coastguard Worker        TESTS_FAILED=$(grep "INSTRUMENTATION_STATUS_CODE: -2" $DEVICEFARM_LOG_DIR/instrument.log | wc -l);
39*3c7ae9deSAndroid Build Coastguard Worker        TESTS_IGNORED=$(grep "INSTRUMENTATION_STATUS_CODE: -3" $DEVICEFARM_LOG_DIR/instrument.log | wc -l);
40*3c7ae9deSAndroid Build Coastguard Worker        TESTS_ASSUMPTION_FAILED=$(grep "INSTRUMENTATION_STATUS_CODE: -4" $DEVICEFARM_LOG_DIR/instrument.log | wc -l);
41*3c7ae9deSAndroid Build Coastguard Worker        TESTS_PROCESSES_CRASHED=$(grep "INSTRUMENTATION_RESULT: shortMsg=Process crashed." $DEVICEFARM_LOG_DIR/instrument.log | wc -l);
42*3c7ae9deSAndroid Build Coastguard Worker
43*3c7ae9deSAndroid Build Coastguard Worker      - >-
44*3c7ae9deSAndroid Build Coastguard Worker        echo "\n\nFrom your instrumentation output, it appears \n
45*3c7ae9deSAndroid Build Coastguard Worker        $TESTS_PASSED tests PASSED \n
46*3c7ae9deSAndroid Build Coastguard Worker        $TESTS_ASSUMPTION_FAILED tests were SKIPPED \n
47*3c7ae9deSAndroid Build Coastguard Worker        $TESTS_FAILED tests FAILED \n
48*3c7ae9deSAndroid Build Coastguard Worker        $TESTS_ERRORED tests ERRORED \n
49*3c7ae9deSAndroid Build Coastguard Worker        $TESTS_IGNORED tests were IGNORED";
50*3c7ae9deSAndroid Build Coastguard Worker
51*3c7ae9deSAndroid Build Coastguard Worker        echo "These counts are calculated directly from the raw instrumentation output, thus any
52*3c7ae9deSAndroid Build Coastguard Worker        redundant lines of output (e.g. a test case that was retried multiple times) could cause
53*3c7ae9deSAndroid Build Coastguard Worker        the numbers to not align exactly with your expected number of test cases.";
54*3c7ae9deSAndroid Build Coastguard Worker
55*3c7ae9deSAndroid Build Coastguard Worker      - |
56*3c7ae9deSAndroid Build Coastguard Worker        if [ $DID_ANY_TESTS_START -eq 0 ];
57*3c7ae9deSAndroid Build Coastguard Worker        then
58*3c7ae9deSAndroid Build Coastguard Worker          echo "Marking the test suite as failed because no tests started!";
59*3c7ae9deSAndroid Build Coastguard Worker          false;
60*3c7ae9deSAndroid Build Coastguard Worker        elif [ $TESTS_FAILED -ne 0 ];
61*3c7ae9deSAndroid Build Coastguard Worker        then
62*3c7ae9deSAndroid Build Coastguard Worker          echo "Marking the test suite as failed because $TESTS_FAILED tests failed!";
63*3c7ae9deSAndroid Build Coastguard Worker          false;
64*3c7ae9deSAndroid Build Coastguard Worker        elif [ $TESTS_ERRORED -ne 0 ];
65*3c7ae9deSAndroid Build Coastguard Worker        then
66*3c7ae9deSAndroid Build Coastguard Worker          echo "Marking the test suite as failed because $TESTS_ERRORED tests errored!";
67*3c7ae9deSAndroid Build Coastguard Worker          false;
68*3c7ae9deSAndroid Build Coastguard Worker        elif [ $TESTS_PROCESSES_CRASHED -ne 0 ];
69*3c7ae9deSAndroid Build Coastguard Worker        then
70*3c7ae9deSAndroid Build Coastguard Worker          echo "Marking the test suite as failed because the application-under-test crashed during the test!";
71*3c7ae9deSAndroid Build Coastguard Worker          false;
72*3c7ae9deSAndroid Build Coastguard Worker        else
73*3c7ae9deSAndroid Build Coastguard Worker          echo "Passed with $TESTS_PASSED tests passed and $TESTS_ASSUMPTION_FAILED tests skipped!";
74*3c7ae9deSAndroid Build Coastguard Worker        fi;
75*3c7ae9deSAndroid Build Coastguard Worker
76*3c7ae9deSAndroid Build Coastguard Worker      # # To run your tests using "Android Test Orchestrator", you can use the following commands instead.
77*3c7ae9deSAndroid Build Coastguard Worker      # # Note: you will need to include the orchestrator APK and test services APK as auxiliary apps with your ScheduleRun request.
78*3c7ae9deSAndroid Build Coastguard Worker      # # For more information, please see the Android Test Orchestrator documentation: https://developer.android.com/training/testing/instrumented-tests/androidx-test-libraries/runner#use-android
79*3c7ae9deSAndroid Build Coastguard Worker      # - |
80*3c7ae9deSAndroid Build Coastguard Worker      #   adb -s $DEVICEFARM_DEVICE_UDID shell "CLASSPATH=\$(pm path androidx.test.services) app_process / \
81*3c7ae9deSAndroid Build Coastguard Worker      #   androidx.test.services.shellexecutor.ShellMain am instrument -w --no-window-animation -e clearPackageData true \
82*3c7ae9deSAndroid Build Coastguard Worker      #   -e targetInstrumentation $DEVICEFARM_TEST_PACKAGE_NAME/$DEVICEFARM_TEST_PACKAGE_RUNNER \
83*3c7ae9deSAndroid Build Coastguard Worker      #   androidx.test.orchestrator/.AndroidTestOrchestrator || echo \"FAILURES...\"" 2>&1 | tee $DEVICEFARM_LOG_DIR/instrument.log
84*3c7ae9deSAndroid Build Coastguard Worker      #
85*3c7ae9deSAndroid Build Coastguard Worker      # # If Android Test Orchestrator produces any reports on the device, they will be pulled
86*3c7ae9deSAndroid Build Coastguard Worker      # # into your customer artifacts directory using the following commands
87*3c7ae9deSAndroid Build Coastguard Worker      # - |
88*3c7ae9deSAndroid Build Coastguard Worker      #   adb -s $DEVICEFARM_DEVICE_UDID pull /sdcard/odo >/dev/null &&
89*3c7ae9deSAndroid Build Coastguard Worker      #   mv odo/* $DEVICEFARM_LOG_DIR || true
90*3c7ae9deSAndroid Build Coastguard Worker      #
91*3c7ae9deSAndroid Build Coastguard Worker      # # The below command is used to detect if any of the Orchestrator tests have failed
92*3c7ae9deSAndroid Build Coastguard Worker      # - |
93*3c7ae9deSAndroid Build Coastguard Worker      #   if [ $(cat $DEVICEFARM_LOG_DIR/instrument.log | egrep "^(FAILURES...|INSTRUMENTATION_RESULT: shortMsg=Process crashed.)$" | wc -l) -ge 1 ];
94*3c7ae9deSAndroid Build Coastguard Worker      #   then
95*3c7ae9deSAndroid Build Coastguard Worker      #       echo "Marking the test suite as failed because Android Orchestrator found that some of the tests failed";
96*3c7ae9deSAndroid Build Coastguard Worker      #       false;
97*3c7ae9deSAndroid Build Coastguard Worker      #   fi;
98*3c7ae9deSAndroid Build Coastguard Worker
99*3c7ae9deSAndroid Build Coastguard Worker  # The post test phase includes are commands that are run after your tests are executed.
100*3c7ae9deSAndroid Build Coastguard Worker  post_test:
101*3c7ae9deSAndroid Build Coastguard Worker    commands:
102*3c7ae9deSAndroid Build Coastguard Worker
103*3c7ae9deSAndroid Build Coastguard Worker# The artifacts phase lets you specify the location where your tests logs, device logs will be stored.
104*3c7ae9deSAndroid Build Coastguard Worker# And also let you specify the location of your test logs and artifacts which you want to be collected by Device Farm.
105*3c7ae9deSAndroid Build Coastguard Worker# These logs and artifacts will be available through ListArtifacts API in Device Farm.
106*3c7ae9deSAndroid Build Coastguard Workerartifacts:
107*3c7ae9deSAndroid Build Coastguard Worker  # By default, Device Farm will collect your artifacts from following directories
108*3c7ae9deSAndroid Build Coastguard Worker  - $DEVICEFARM_LOG_DIR