Standard test job for QEMU - Stretch amd64

The first standard job to look at is a small step on from the first example job:

# Standard Stretch amd64 JOB definition for QEMU
device_type: qemu
job_name: qemu amd64 standard build, Debian Stretch

timeouts:
  job:
    minutes: 10
  action:
    minutes: 2
  connection:
    minutes: 2
priority: medium
visibility: public

Download / view full job definition

Context

Some device types can support multiple types of deployment in the template and the job context variable is used in the test job submission to dictate how the test job is executed. The first example test job included the use of context and the standard test job for QEMU extends this:

context:
  arch: amd64
  # comment out or change to user if the dispatcher does not support bridging.
  netdevice: tap

arch

The context variable arch dictates which QEMU binary is used to execute the test job. The value needs to match the architecture of the files which QEMU is expected to execute. In this case, amd64 means that qemu-system-x86_64 will be used to run this test job.

netdevice

The context variable netdevice is used by the jinja template to instruct QEMU to use the tap device on the command line. This support expects that the dispatcher has a working network bridge available. (Setting up a network bridge is beyond the scope of this documentation.) The purpose of the tap device is to allow the virtual machine to be visible for external connections like reverse DNS and SSH. If your local instance does not support the tap device, the netdevice option should be commented out so that QEMU can use the default user networking support.

Deploy

This is also familiar from the first job. The addition here is that the standard image build exports the SHA256sum of the prepared files to allow the checksum to be passed to LAVA to verify that the download is the correct file:

actions:
# DEPLOY_BLOCK
- deploy:
    timeout:
      minutes: 4
    to: tmpfs
    images:
        rootfs:
          image_arg: -drive format=raw,file={rootfs}
          url: http://example.com/stretch.img.gz
          sha256sum: b5cdb3b9e65fec2d3654a05dcdf507281f408b624535b33375170d1e852b982c
          compression: gz

Boot

Here is another small change from the first example job. The standard build also outputs details of the prompts which will be output by the image upon boot. This information is then used in the test job submission:

- boot:
    method: qemu
    media: tmpfs
    timeout:
      minutes: 2
    prompts:
    - "root@debian:"
    auto_login:
      login_prompt: "login:"
      username: root

Test

The standard QEMU test job for stretch adds an inline test definition as the only change from the example first job:

- test:
    timeout:
      minutes: 5
    definitions:
    - repository:
        metadata:
          format: Lava-Test Test Definition 1.0
          name: smoke-tests-basic
          description: "Basic system test command for Debian images"
        run:
          steps:
          - printenv
      from: inline
      name: env-dut-inline
      path: inline/env-dut.yaml
    - repository: http://git.linaro.org/lava-team/lava-functional-tests.git
      from: git
      path: lava-test-shell/smoke-tests-basic.yaml
      name: smoke-tests
    - repository: http://git.linaro.org/lava-team/lava-functional-tests.git
      from: git
      path: lava-test-shell/single-node/singlenode03.yaml
      name: singlenode-advanced

Next steps

Before moving on to the next standard test jobs for non-emulated devices like the beaglebone-black and cubietruck, consider spending some time developing the standard QEMU test job:

  • Add more commands to the inline test definition
  • Follow the link from the metadata and use the instructions to rebuild the image.
    • Modify the metadata to point at your build information
    • Modify the SHA256sum and the URL in the deploy action.
  • Write a new test definition using version control and make it available publicly, then add that definition to your test job based on this first standard test job.