Tue 25 April 2023

Introducing Our New Open-Source Tool: Quality Assurance Daemon

Codethink works on many projects where testing is a bottleneck in the development process. Our dream is to enable automated hardware testing for all our clients, and we're releasing a new open source tool named Q.A.D. that brings this a step closer.

Introducing Q.A.D.

Q.A.D. (Quality Assurance Daemon) provides remote interaction with a device in place of having to physically interact with it. It's a remote control for your test rig.

In effect, it's a daemon that provides a REST API. You can trigger simulated input events via HTTP requests, and you can also fetch screenshots of any display the host device is connected to.

This both eliminates the need to physically interact with hardware and allows tests to be completely automated.

Q.A.D. is a free software tool licensed under the MIT licence. It has minimal dependencies, and can be compiled into a single binary that will use libraries already existing on your device. When running, Q.A.D. is as light-weight as possible to avoid slowing down tests.

Why we developed Q.A.D.

We like openQA a lot. openQA simulates user interactions using emulated keyboard, mouse and touch input devices, and captures display output using the VNC screensharing protocol. We've also used openQA with LAVA, which works nicely for running desktop Linux on development boards, using the VNC screensharing protocol to simulate input events and capture display output.

For our customers in the automotive and embedded Linux spaces, it's not practical to use VNC. We want everyone to enjoy the benefits of openQA, and our answer to that is Q.A.D.

Q.A.D. Architecture

Q.A.D. Architecture

The above picture shows Q.A.D. architecture at version 0.0.3. In short, Q.A.D. receives requests from a caller and then simulates human input via its input backend, or takes a screenshot via its screen backend and send it back.

For further architecture details, please refer to Q.A.D. documentation.

How to use Q.A.D.

As mentioned previously, Q.A.D. is interacted with via HTTP POST requests, or a GET request in the case of screenshotting. These requests are directed at end points and have their parameters described in JSON. The currently supported endpoints are: /screen, /touch, /swipe, and /button.

Here we only show one example to avoid a lengthy post, but you can always read more about this on Q.A.D. documentation.

/touch

curl -X POST -d '{"x": <int>, "y": <int>, "duration": <int>, "event": <int>}' http://<rig-ip>:<port>/touch

The touch endpoint lets you touch the screen at any given position. You can also specify the duration of how long you want to touch the screen, this lets you mimic long presses. There is then also the event parameter, this lets you specify the input device; useful when you have a mouse and touchscreen connected.

Q.A.D. and openQA

One great use case for Q.A.D. is having it work in tandem with openQA. openQA lets you automate testing, primarily in emulation. Combining it with Q.A.D., you can automate testing on actual hardware. You can automate the testing of the entire boot process of a system on physical hardware, without even being in the same country.

To allow openQA to talk to Q.A.D., there have been a few additions made to the arguments you can pass when starting an openQA test.

QAD_SERVER_ADDRESS=http://<qad-device-ip:qad_port>

QAD_SCREEN=<screen-number>

XRES=<screen-x-resolution>

YRES=<screen-y-resolution>

QAD_TOUCH_DEVICE_NO=<touch-input-device-number>

Setting these parameters appropriately will let you continue to use openQA just as you normally would.

You can get further detail about this in our Q.A.D. documentation.

Conclusion

We developed a new tool for end-user blackbox testing: Q.A.D. The tool is lightweight and makes test engineers' lives easier by allowing remote interaction with hardware via local network access, which is particularly useful for automotive/embedded device companies.

Although we have done our best to make Q.A.D. as easy-to-use as possible, integrating it into your company's unique purpose or process could still require work. Codethink has a lot of talented engineers, and we are happy to help you. Please contact us at sales@codethink.co.uk if you are interested.

Other Content

Get in touch to find out how Codethink can help you

sales@codethink.co.uk +44 161 660 9930

Contact us