This directory contains cros-fw-provision: a service for preparing devices-under-test with specific application processor (“AP”) and embedded controller (“EC”) firmware (“fw”) builds. Preparing devices with specific builds is called “provisioning”.
See go/cft-fw-provision-v2 for background.
A prebuilt cros-fw-provision will be available in the chroot. To launch it, execute, cros-fw-provision server
or cros-fw-provision cli
. server
spins up a service and waits for a gRPC request to come over the network before provisioning starts. cli
immediately executes the request, which is required to be passed in during launch.
See also go/cft-fw-provision-local-guide.
To build and run locally:
These example assume some vars are set in your shell:
BOARD=myBoard MODEL=myModel D=192.168.0.0 FW_IMAGE=$(gsutil ls -l gs://chromeos-image-archive/firmware-{brya,glados,oak,${BOARD?}}*-branch/*/${BOARD?}/firmware_from_source.tar.bz2 | grep -v TOTAL | sort -k2 | tail -1 | awk '{print $3}')
Outside chroot
cd ~/chromiumos cros workon --host start local-cft && cros_sdk -- sudo emerge local-cft ./chroot/usr/bin/local-cft -board ${BOARD?} -host ${D?} -stayalive -port cros-dut=8123 -port cache-server=8082 # If you made changes in another service like cros-dut run # ./chroot/usr/bin/local-cft -board ${BOARD?} -host ${D?} -stayalive -port cros-dut=8123 -port cache-server=8082 --chroot ~/chromiumos/chroot --localservices cros-dut
To test detailed request via ssh
YOUR_IP_ADDRESS=192.168.100.1 cat >/tmp/startup.json <<STARTUP { "dut": { "chromeos": { "dut_model": { "build_target": "${BOARD?}", "model_name": "${MODEL?}" } } }, "dut_server": { "address": "localhost", "port": 8123 }, "metadata": { "@type": "chromiumos.test.api.FirmwareProvisionStartupMetadata", "cache_server_address": { "address": "${YOUR_IP_ADDRESS?}", "port": 8082 } } } STARTUP cat >/tmp/install.json <<INSTALL { "metadata": { "@type": "chromiumos.test.api.FirmwareProvisionInstallMetadata", "firmware_config": { "mainRoPayload": { "firmwareImagePath": { "hostType": "GS", "path": "${FW_IMAGE?}" } }, "ecRoPayload": { "firmwareImagePath": { "hostType": "GS", "path": "${FW_IMAGE?}" } } } } } INSTALL ~/chromiumos/src/platform/dev/fast_build.sh -b chromiumos/test/provision/v2/cros-fw-provision \ -o ~/go/bin/cros-fw-provision && \ ~/go/bin/cros-fw-provision cli -startup /tmp/startup.json -install /tmp/install.json
cros-fw-provision expects cros-cache, and either cros-dut or cros-servod, to be running.
In the lab, the cache server should already be up. Local runs of cros-fw-provision will need the cache server started.
cros-dut
is needed if provisioning directly.
cros-servod
is needed if provisioning over servo.
Run the test with fast_build.sh:
~/chromiumos/src/platform/dev/fast_build.sh -t chromiumos/test/provision/v2/cros-fw-provision
Build the ebuild with coverage enabled:
cros workon --host start cros-fw-provision sudo USE="coverage" FEATURES="test noclean" emerge cros-fw-provision
Then open the html file at /var/lib/chromeos/package-artifacts/dev-util/cros-fw-provision-9999/cros-artifacts/coverage_logs/cros-fw-provision.html