Document remote testing
This commit is contained in:
parent
2b3522a840
commit
d56a31f73c
|
|
@ -147,10 +147,81 @@ the Docker image, run it, build Rust within the image, and run the tests.
|
||||||
[src/ci/docker]: https://github.com/rust-lang/rust/tree/master/src/ci/docker
|
[src/ci/docker]: https://github.com/rust-lang/rust/tree/master/src/ci/docker
|
||||||
[src/ci/docker/run.sh]: https://github.com/rust-lang/rust/blob/master/src/ci/docker/run.sh
|
[src/ci/docker/run.sh]: https://github.com/rust-lang/rust/blob/master/src/ci/docker/run.sh
|
||||||
|
|
||||||
|
## Running tests on a remote machine
|
||||||
|
|
||||||
|
Tests may be run on a remote machine (e.g. to test builds for a different
|
||||||
|
architecture). This is done using `remote-test-client` on the build machine
|
||||||
|
to send test programs to `remote-test-server` running on the remote machine.
|
||||||
|
`remote-test-server` executes the test programs and sends the results back to
|
||||||
|
the build machine. `remote-test-server` provides *unauthenticated remote code
|
||||||
|
execution* so be careful where it is used.
|
||||||
|
|
||||||
|
To do this, first build `remote-test-server` for the remote
|
||||||
|
machine, e.g. for RISC-V
|
||||||
|
```sh
|
||||||
|
./x.py build src/tools/remote-test-server --target riscv64gc-unknown-linux-gnu
|
||||||
|
```
|
||||||
|
|
||||||
|
The binary will be created at
|
||||||
|
`./build/$HOST_ARCH/stage2-tools/$TARGET_ARCH/release/remote-test-server`. Copy
|
||||||
|
this over to the remote machine.
|
||||||
|
|
||||||
|
On the remote machine, run the `remote-test-server` with the `remote` argument
|
||||||
|
(and optionally `-v` for verbose output). Output should look like this:
|
||||||
|
```sh
|
||||||
|
$ ./remote-test-server -v remote
|
||||||
|
starting test server
|
||||||
|
listening on 0.0.0.0:12345!
|
||||||
|
```
|
||||||
|
|
||||||
|
You can test if the `remote-test-server` is working by connecting to it and
|
||||||
|
sending `ping\n`. It should reply `pong`:
|
||||||
|
```sh
|
||||||
|
$ nc $REMOTE_IP 12345
|
||||||
|
ping
|
||||||
|
pong
|
||||||
|
```
|
||||||
|
|
||||||
|
To run tests using the remote runner, set the `TEST_DEVICE_ADDR` environment
|
||||||
|
variable then use `x.py` as usual. For example, to run `ui` tests for a RISC-V
|
||||||
|
machine with the IP address `1.2.3.4` use
|
||||||
|
```sh
|
||||||
|
export TEST_DEVICE_ADDR="1.2.3.4:12345"
|
||||||
|
./x.py test src/test/ui --target riscv64gc-unknown-linux-gnu
|
||||||
|
```
|
||||||
|
|
||||||
|
If `remote-test-server` was run with the verbose flag, output on the test machine
|
||||||
|
may look something like
|
||||||
|
```
|
||||||
|
[...]
|
||||||
|
run "/tmp/work/test1007/a"
|
||||||
|
run "/tmp/work/test1008/a"
|
||||||
|
run "/tmp/work/test1009/a"
|
||||||
|
run "/tmp/work/test1010/a"
|
||||||
|
run "/tmp/work/test1011/a"
|
||||||
|
run "/tmp/work/test1012/a"
|
||||||
|
run "/tmp/work/test1013/a"
|
||||||
|
run "/tmp/work/test1014/a"
|
||||||
|
run "/tmp/work/test1015/a"
|
||||||
|
run "/tmp/work/test1016/a"
|
||||||
|
run "/tmp/work/test1017/a"
|
||||||
|
run "/tmp/work/test1018/a"
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
Tests are built on the machine running `x.py` not on the remote machine. Tests
|
||||||
|
which fail to build unexpectedly (or `ui` tests producing incorrect build
|
||||||
|
output) may fail without ever running on the remote machine.
|
||||||
|
|
||||||
## Testing on emulators
|
## Testing on emulators
|
||||||
|
|
||||||
Some platforms are tested via an emulator for architectures that aren't
|
Some platforms are tested via an emulator for architectures that aren't
|
||||||
readily available. There is a set of tools for orchestrating running the
|
readily available. For architectures where the standard library is well
|
||||||
|
supported and the host operating system supports TCP/IP networking, see the
|
||||||
|
above instructions for testing on a remote machine (in this case the
|
||||||
|
remote machine is emulated).
|
||||||
|
|
||||||
|
There is also a set of tools for orchestrating running the
|
||||||
tests within the emulator. Platforms such as `arm-android` and
|
tests within the emulator. Platforms such as `arm-android` and
|
||||||
`arm-unknown-linux-gnueabihf` are set up to automatically run the tests under
|
`arm-unknown-linux-gnueabihf` are set up to automatically run the tests under
|
||||||
emulation on Travis. The following will take a look at how a target's tests
|
emulation on Travis. The following will take a look at how a target's tests
|
||||||
|
|
@ -165,15 +236,8 @@ reading the results. The Docker image is set up to launch
|
||||||
communicate with the server to coordinate running tests (see
|
communicate with the server to coordinate running tests (see
|
||||||
[src/bootstrap/test.rs]).
|
[src/bootstrap/test.rs]).
|
||||||
|
|
||||||
> TODO: What are the steps for manually running tests within an emulator?
|
> TODO:
|
||||||
> `./src/ci/docker/run.sh armhf-gnu` will do everything, but takes hours to
|
> Is there any support for using an iOS emulator?
|
||||||
> run and doesn't offer much help with interacting within the emulator.
|
|
||||||
>
|
|
||||||
> Is there any support for emulating other (non-Android) platforms, such as
|
|
||||||
> running on an iOS emulator?
|
|
||||||
>
|
|
||||||
> Is there anything else interesting that can be said here about running tests
|
|
||||||
> remotely on real hardware?
|
|
||||||
>
|
>
|
||||||
> It's also unclear to me how the wasm or asm.js tests are run.
|
> It's also unclear to me how the wasm or asm.js tests are run.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue