| # Host-target interaction tests |
| |
| For the purposes of this doc "target" is the machine running a version of |
| Fuchsia being tested, and "host" is the machine running some stable OS. A |
| host-target interaction test runs on the host and interacts with the target. |
| |
| ## Declaration in GN |
| |
| To declare a host-target interaction test in GN: |
| |
| 1. Declare a test executable. |
| 2. Specify one or more [environments][environments] that include Fuchsia |
| (target) devices. |
| 3. Add a dependency between a [tests bundle][tests-bundle] and the test |
| executable, *specifying `host_toolchain`*. |
| |
| For example: |
| |
| ```gn |
| # Doesn't have to be go_test. This is just an example. |
| go_test("an_hti_test") { |
| ... |
| # Declares that Fuchsia should be running in an emulator before this test |
| # starts on the host. |
| environments = [emu_env] |
| ... |
| } |
| |
| # This should be included in the transitive deps of some tests bundle. |
| group("tests") { |
| testonly = true |
| # Anything that depends on ":tests" will build the test as a host test. |
| public_deps = [":an_hti_test($host_toolchain)"] |
| } |
| ``` |
| |
| ## Host test API |
| |
| The continuous integration infrastructure (AKA "infra") and `fx test` start the |
| target and then invoke the test on the host. |
| |
| [SL4F][sl4f] is one way for the host to interact with the target. The SL4F host |
| libraries take responsibility for establishing a |
| connection with the target. |
| |
| Tests that don't want to use SL4F can parse these environment variables and |
| handle their own communication with the host: |
| |
| * `FUCHSIA_IPV4_ADDR`: IPv4 address. |
| * `FUCHSIA_IPV6_ADDR`: IPv6 address. |
| * `FUCHSIA_SSH_KEY`: SSH key file path. |
| |
| <!-- Reference links --> |
| |
| [environments]: /docs/contribute/testing/environments.md |
| [tests-bundle]: /docs/development/build/build_system/bundles.md |
| [sl4f]: /docs/development/testing/sl4f.md |