This doc describes how to set up a Linux VM and how to run ART tests on it.
Use script art/build/buildbot-vm.sh. It has various commands (actions) described below. First, set up some environment variables used by the script (change as you see fit):
export ART_TEST_SSH_USER=ubuntu export ART_TEST_SSH_HOST=localhost export ART_TEST_SSH_PORT=10001
Create the VM (download it and do some initial setup):
art/tools/buildbot-vm.sh create
Boot the VM (login is $ART_TEST_SSH_USER
, password is ubuntu
):
art/tools/buildbot-vm.sh boot
Configure SSH (enter yes
to add VM to known_hosts
and then the password):
art/tools/buildbot-vm.sh setup-ssh
Now you have the shell (no need to enter password every time):
art/tools/buildbot-vm.sh connect
To power off the VM, do:
art/tools/buildbot-vm.sh quit
To speed up SSH access, set UseDNS no
in /etc/ssh/sshd_config on the VM (and apply other tweaks described in https://jrs-s.net/2017/07/01/slow-ssh-logins).
This is done in the same way as you would run tests in chroot on device (except for a few extra environment variables): export ANDROID_SERIAL=nonexistent export ART_TEST_SSH_USER=ubuntu export ART_TEST_SSH_HOST=localhost export ART_TEST_SSH_PORT=10001 export ART_TEST_ON_VM=true . ./build/envsetup.sh lunch armv8-eng # or aosp_riscv64-userdebug, etc. art/tools/buildbot-build.sh --target # --installclean art/tools/buildbot-cleanup-device.sh # The following two steps can be skipped for faster iteration, but it doesn't # always track and update dependencies correctly (e.g. if only an assembly file # has been modified). art/tools/buildbot-setup-device.sh art/tools/buildbot-sync.sh art/test/run-test --chroot $ART_TEST_CHROOT --64 --interpreter -O 001-HelloWorld art/test.py --target -r --ndebug --no-image --64 --interpreter # specify tests art/tools/run-gtests.sh art/tools/buildbot-cleanup-device.sh
Both test.py and run-test scripts can be used. Tweak options as necessary.
Limitations are mostly related to the absence of system properties on the Linux. They are not really needed for ART tests, but they are used for test-related things, e.g. to find out if the tests should run in debug configuration (option ro.debuggable
). Therefore debug configuration is currently broken.