1*bb4ee6a4SAndroid Build Coastguard Worker# Crosvm End to End Tests 2*bb4ee6a4SAndroid Build Coastguard Worker 3*bb4ee6a4SAndroid Build Coastguard WorkerThese tests run a crosvm VM on the host to verify end to end behavior. They use a prebuilt guest 4*bb4ee6a4SAndroid Build Coastguard Workerkernel and rootfs, which is downloaded from google cloud storage. 5*bb4ee6a4SAndroid Build Coastguard Worker 6*bb4ee6a4SAndroid Build Coastguard WorkerThe e2e_tests can be executed by: 7*bb4ee6a4SAndroid Build Coastguard Worker 8*bb4ee6a4SAndroid Build Coastguard Worker```sh 9*bb4ee6a4SAndroid Build Coastguard Worker$ ./tools/run_tests --dut=vm -E 'rdeps(e2e_tests)' 10*bb4ee6a4SAndroid Build Coastguard Worker``` 11*bb4ee6a4SAndroid Build Coastguard Worker 12*bb4ee6a4SAndroid Build Coastguard Worker## Running with locally built kernel/rootfs 13*bb4ee6a4SAndroid Build Coastguard Worker 14*bb4ee6a4SAndroid Build Coastguard WorkerIf you want to make changes to the kernel or rootfs, you have to specify the environment variables 15*bb4ee6a4SAndroid Build Coastguard Worker`CROSVM_CARGO_TEST_KERNEL_IMAGE` and `CROSVM_CARGO_TEST_ROOTFS_IMAGE` to point to the right files 16*bb4ee6a4SAndroid Build Coastguard Workerand then run `cargo test`. 17*bb4ee6a4SAndroid Build Coastguard Worker 18*bb4ee6a4SAndroid Build Coastguard WorkerWith use_local_build.sh script, e2e_tests can be executed with custom kernel/rootfs as follows: 19*bb4ee6a4SAndroid Build Coastguard Worker 20*bb4ee6a4SAndroid Build Coastguard Worker```sh 21*bb4ee6a4SAndroid Build Coastguard Worker$ cd /path/to/crosvm 22*bb4ee6a4SAndroid Build Coastguard Worker$ cd e2e_tests 23*bb4ee6a4SAndroid Build Coastguard Worker$ source guest_under_test/use_local_build.sh 24*bb4ee6a4SAndroid Build Coastguard Worker$ cargo test 25*bb4ee6a4SAndroid Build Coastguard Worker``` 26*bb4ee6a4SAndroid Build Coastguard Worker 27*bb4ee6a4SAndroid Build Coastguard WorkerUnsetting the variables will bring back you to the original behavior. 28*bb4ee6a4SAndroid Build Coastguard Worker 29*bb4ee6a4SAndroid Build Coastguard Worker```sh 30*bb4ee6a4SAndroid Build Coastguard Workerunset CROSVM_CARGO_TEST_KERNEL_IMAGE 31*bb4ee6a4SAndroid Build Coastguard Workerunset CROSVM_CARGO_TEST_ROOTFS_IMAGE 32*bb4ee6a4SAndroid Build Coastguard Worker``` 33*bb4ee6a4SAndroid Build Coastguard Worker 34*bb4ee6a4SAndroid Build Coastguard WorkerNote: The custom images cannot be used with `tools/run_tests`. 35*bb4ee6a4SAndroid Build Coastguard Worker 36*bb4ee6a4SAndroid Build Coastguard Worker## Uploading prebuilts 37*bb4ee6a4SAndroid Build Coastguard Worker 38*bb4ee6a4SAndroid Build Coastguard WorkerNote: Only Googlers with access to the crosvm-testing cloud storage bin can upload prebuilts. 39*bb4ee6a4SAndroid Build Coastguard Worker 40*bb4ee6a4SAndroid Build Coastguard WorkerTo upload the modified rootfs, you will have to uprev the `PREBUILT_VERSION` variable in: 41*bb4ee6a4SAndroid Build Coastguard Worker 42*bb4ee6a4SAndroid Build Coastguard Worker- `./guest_under_test/PREBUILT_VERSION` 43*bb4ee6a4SAndroid Build Coastguard Worker 44*bb4ee6a4SAndroid Build Coastguard Workerand [request a permission](http://go/crosvm/infra.md?cl=head#access-on-demand-to-upload-artifacts) 45*bb4ee6a4SAndroid Build Coastguard Workerto become a member of the `crosvm-policy-uploader` group. 46*bb4ee6a4SAndroid Build Coastguard Worker 47*bb4ee6a4SAndroid Build Coastguard WorkerThen run the upload script to build and upload the new prebuilts. 48*bb4ee6a4SAndroid Build Coastguard Worker 49*bb4ee6a4SAndroid Build Coastguard Worker```sh 50*bb4ee6a4SAndroid Build Coastguard Worker# Install QEMU-user-static to build aarch64 images 51*bb4ee6a4SAndroid Build Coastguard Worker$ sudo apt install binfmt-support qemu-user-static 52*bb4ee6a4SAndroid Build Coastguard Worker# Register binfmt_misc entries 53*bb4ee6a4SAndroid Build Coastguard Worker$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 54*bb4ee6a4SAndroid Build Coastguard Worker# Build and upload the new artifacts 55*bb4ee6a4SAndroid Build Coastguard Worker$ ./guest_under_test/upload_prebuilts.sh 56*bb4ee6a4SAndroid Build Coastguard Worker``` 57*bb4ee6a4SAndroid Build Coastguard Worker 58*bb4ee6a4SAndroid Build Coastguard Worker**Never** try to modify an existing prebuilt as the new images may break tests in older versions. 59