tree: 7cef0d7f68ec954a3e8774428bcab37da4bca7f0 [path history] [tgz]
  1. cli/
  2. service/
  3. state-machine/
  4. cros_fw_provision_test.go
  5. main.go
  6. OWNERS
  7. README.md
src/go.chromium.org/chromiumos/test/provision/v2/cros-fw-provision/README.md

cros-fw-provision

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.

Launching

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.

Building locally

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

Dependencies

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.

Testing

Run the test with fast_build.sh:

~/chromiumos/src/platform/dev/fast_build.sh -t chromiumos/test/provision/v2/cros-fw-provision

Generate coverage report

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