Fuchsia gtest binaries are deployed and executed via scripts that are automatically generated by the test() GN target. The binaries can deploy to either emulators started by the runner script, an existing emulator instance, or a physical device. To build a gtest binary, check this documentation.
For the sake of this example, we will be using base_unittests as the package we wish to install and/or execute.
The test script brings up an emulator, runs the tests on it, and shuts the emulator down when finished.
$ out/fuchsia/bin/run_base_unittests
The flag --custom-image can be used to specify the Fuchsia boot image used by the emulator. For instance, setting --custom-image=workstation.qemu-x64-release would run the test on a workstation image.
Note the -d flag, which is an alias for --device.
$ out/fuchsia/bin/run_base_unittests -d
Make sure that the CPU architecture of your Chromium output directory matches the architecture of the Fuchsia output directory (x64==x64, arm64==arm64, etc.).
$ out/fuchsia/bin/run_base_unittests -d --fuchsia-out-dir=/path/to/fuchsia/outdir
If you are frequently deploying to Fuchsia built from source, you might want to add the following entry to your args.gn:
default_fuchsia_build_dir_for_installation = "/path/to/fuchsia/outdir"
With this flag in place, the --fuchsia-out-dir flag will automatically be used whenever you run_ or install_ Fuchsia packages, making your command lines much shorter:
$ out/fuchsia/bin/run_base_unittests -d
$ out/fuchsia/bin/install_base_unittests --fuchsia-out-dir=/path/to/fuchsia/outdir
You will need to run the package manually on your device. In this case, run the following from your Fuchsia directory:
$ fx shell run fuchsia-pkg://fuchsia.com/base_unittests#meta/base_unittests.cmx
Note the --ssh-config flag, which should point to the config file used to set up the connection between the host and the remote device.
$ out/fuchsia/bin/run_base_unittests -d --host=localhost --ssh-config=/path/to/ssh/config
To troubleshoot a specific test, consider a combination of the following arguments to the test runner script:
--gtest_filter="[TestSuite.TestName]" to only run a specific test, or a comma-separated list to run a set of tests. Wildcards can also be used to run a set of tests or an entire test suite, e.g. --gtest_filter="[TestSuite.*]".--test-launcher-jobs=1 to only have one batch of tests running at a time. This bypasses the test launcher buffering of test log output, making it possible to access the log output from successful test runs.--single-process-tests to run all the tests in the same process. Unlike the above option, this will run the tests directly in the test launcher process, making it easier to attach a debugger.--gtest_repeat=[number] --gtest_break_on_failure to run a test or test suite a certain number of times until it fails. This is useful to investigate flaky tests.