Checkbox Remote

It is possible to run Checkbox tests on a device that you don’t or cannot have traditional control over (mouse/keyboard).

By using Checkbox Remote facilities you can use Checkbox on one device (the controller) to control Checkbox running on a different device (the agent).

This is especially useful on headless devices.

Comparison with SSH

Although it is possible to connect to a device using SSH and run Checkbox locally on it, if the device doesn’t offer screen-like functionality then the Checkbox session might have to be started over if the connection to the device is lost.

When a UI is drawn a lot of data is transmitted through the network. Checkbox Remote sends lean data only.

Nomenclature

Checkbox Agent

See Checkbox Agent in the glossary.

Checkbox Controller

See Checkbox Controller in the glossary.

Invocation

Agent

checkbox-cli run-agent

Controller

checkbox-cli control HOST [/PATH/TO/LAUNCHER]

HOST can be an IP or a hostname that the controller can resolve.

LAUNCHER (optional) a launcher file to use that exists somewhere on the machine you are using as the controller.

Example:

checkbox-cli control dut8.local /home/ubuntu/testplans/sutton-client

Custom port

By default, the Agent listens on port 18871. To change that --port option can be used. The same option used on the Controller specifies which port to connect to.

Examples:

checkbox-cli run-agent --port 10101

checkbox-cli control dut8.local --port 10101

Session control

While Controller is connected, sending SIGINT (pressing Ctrl-C) to the application invokes the interrupt screen which provides the following choices:

Nothing, continue testing (ESC)

As the name implies, it returns to the session. You can press the Esc key to get the same result.

Stop the test case in progress and move on to the next

Skip current test case and move to the next.

Pause the test session and disconnect from the agent (CTRL+C)

Leave the session on the Agent running but let the Controller exit. Pressing Ctrl-C a second time will have the same effect. It is possible to reconnect to the Agent later on and resume the testing session.

Exit and stop the Checkbox service on the agent at 127.0.0.1

Stop the current test session and terminate the Checkbox Agent. In addition, stop the Controller.

End this test session preserving its data and launch a new one

Stop the current session on the Agent and mark it so it is not possible to resume it, then immediately start a new one. The Controller will be greeted with the test plan selection screen unless a launcher was used to bypass the selection screens, in which case a similar test session is immediately started.

Automatic session resume

When the agent starts, it checks if there is a previous session that was not abandoned. If there is, and the session was a non-interactive one it resumes it. Otherwise, it waits for a Controller to connect and chose what to do.

The outcome of the job that was last running before the session was interrupted is decided on the type of job it was running.

The jobs marked with a noreturn flag are marked as passing, while other jobs are considered to have crashed (due to the interruption of the session like a reboot or a system stall).

        graph TD;

process("agent process starts")
  load("load previous session")
  resume("resume the previous session")
  resume_crashed("resume the previous session")
  interactive{"last session interactive?"}
  mark_pass("mark last running job as passing")
  mark_crash("mark last running job as crashing")
  idle("go into idle state")
  listen("listen for a controller")
  process --> load
  last_job{"last job ``noreturn``?"}
  load -->last_job
  last_job-->|yes| resume
  resume --> mark_pass

  last_job-->|no| interactive
  interactive-->|yes| idle
  idle --> listen
  mark_pass --> listen

  interactive-->|no| resume_crashed
  resume_crashed --> mark_crash
  mark_crash --> listen
    

Remote session characteristics

Differences between a remote session and a local one are:

  • Unless the session is explicitly abandoned, Checkbox Agent always resumes the last session.

  • After testing is done, Checkbox Agent starts a new session

  • Submission is done from the Controller by default (use local_submission = No in launcher or config to change this).

  • When the Controller reconnects mid interactive test, the test is restarted.

  • Hitting Ctrl+C on the Controller does not interrupt the running test.