Internet of Things Certified Hardware Coverage for Ubuntu Core 26 / Ubuntu 26.04¶
Introduction¶
This document lists the coverage for certification of Internet of Things (IoT) devices with Ubuntu images. IoT devices can be certified with the following image types:
Ubuntu Core 26
Ubuntu Server 26.04 LTS
Ubuntu Desktop 26.04 LTS
The guide applies to devices submitted to Canonical through one of the following programmes:
IoT Devices Enablement Programme with Certification
IoT ODM Partner Programme
For each test job, one of the following certification statuses is specified:
- Blocking
Features that are required for certification. If any of the blocking tests fails, the certification will fail.
- Non-blocking
Features that are tested but not mandatory for certification. Failure in non-blocking tests will not prevent certification. However, a note will be added to the certificate to inform potential customers or users.
Note
Only categories of hardware are tested and not specific types of hardware. For example, tests are run to verify USB controllers work, but the type of peripheral(s) used during those tests are not specified.
Coverage is flexible based on customer requirements (for example, if a device’s use cases don’t require LEDs, then LEDs can be non-blocking)
Certain test jobs are designed to validate specific hardware capabilities, such as camera and audio playback functionality. To ensure that the required hardware capabilities are present and properly recognised on the machine under test, these features are explicitly defined in manifest entries and linked to the relevant test jobs. This prevents test jobs from being skipped due to system deficiencies in automated detection.
Full test descriptions can be found in Canonical certification site for partners:
client-cert-iot-ubuntucore-26¶
Note
The certification tests presented in this document are validated by Checkbox version 7.3.0.dev42.
Blocking¶
Audio tests¶
The following test units are covered in this category:
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check if sound that is ‘hearable’ by capture device. This test is intended mostly for devices without internal speakers/microphones, but with a line-in and a line-out ports to which a loopback cable can be connected. |
| After-suspend: | True |
| Environment variable: | ALSADEVICE, ALSA_CONFIG_PATH, LD_LIBRARY_PATH |
| Plugin: | shell |
| Requires: | manifest.has_audio_loopback_connector == ‘True’ |
has_audio_loopback_connector.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check if sound is played through ALSA on the default output |
| Steps: |
|
| Verification: | Did you hear the sound? |
| After-suspend: | True |
| Environment variable: | ALSADEVICE, ALSA_CONFIG_PATH |
| Plugin: | user-interact-verify |
Bluetooth tests¶
The following test units are covered in this category:
| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check the High Fidelity Playback (A2DP) capability of your Bluetooth device, to see if you can hear audio from it. |
| Steps: |
|
| Verification: | Did you hear the tone? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_bt_smart.bluetooth/audio_record_playbackVerify Bluetooth HSP/HFP profile capability for recording and playback.
| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check the Headset Head Unit (HSP/HFP) capability of your Bluetooth device, to check if you can record sounds. |
| Steps: |
|
| Verification: | Did you hear your speech played back? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_bt_smart.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable |
| After-suspend: | True |
| Environment variable: | BTDEVADDR, PLAINBOX_PROVIDER_DATA |
| Plugin: | shell |
| Requires: | package.name == ‘bluez’ or snap.name == ‘bluez’ executable.name == ‘obexftp’ and executable.name == ‘hcitool’ device.category == ‘BLUETOOTH’ manifest.has_bt_obex_support == ‘True’ |
has_bt_obex_support.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_bt_adapter == ‘True’ |
has_bt_adapter.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | Automated test to store Bluetooth device information in the Checkbox report |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | package.name == ‘bluez’ or snap.name == ‘bluez’ device.category == ‘BLUETOOTH’ |
| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check that you can use a HID Over GATT Profile (HOGP) with your Bluetooth Smart keyboard. |
| Steps: |
|
| Verification: | Did the Bluetooth Smart keyboard work as expected? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name == ‘bluez’ |
has_bt_smart.CPU tests¶
The following test units are covered in this category:
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Uses the Firmware Test Suite (fwts) to test the power saving states of the CPU. |
| Environment variable: | LD_LIBRARY_PATH, PLAINBOX_SESSION_SHARE, SNAP |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ cpuinfo.platform not in (“aarch64”, “armv7l”, “ppc64el”, “ppc64le”, “s390x”) |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Use the Firmware Test Suite (fwts cpufreq) to ensure that the CPU can run at its maximum frequency. |
| Environment variable: | LD_LIBRARY_PATH, SNAP |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ cpuinfo.platform in (“i386”, “x86_64”) |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | Attempts to offline each core in a multicore system. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | cpu_offlining.state == ‘supported’ |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Use Firmware Test Suite (fwts cpufreq) to test the scaling capabilities of the CPU. |
| Environment variable: | LD_LIBRARY_PATH, PLAINBOX_SESSION_SHARE, SNAP |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ ‘userspace’ in cpuinfo.governors cpuinfo.platform not in (“ppc64el”, “ppc64le”, “s390x”) |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Parses information about CPU topology provided by proc and sysfs and checks that they are consistent. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | int(cpuinfo.count) > 1 and (cpuinfo.platform == ‘i386’ or cpuinfo.platform == ‘x86_64’) |
Disk tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | disk |
| Status: | Blocking |
| Purpose: | Verify that disk storage performs at or above baseline performance |
| After-suspend: | True |
| From template: | disk/read_performance_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Unit type: | template |
| Category ID: | disk |
| Status: | Blocking |
| Purpose: | Take the path of the storage device and test if it is a block device. |
| After-suspend: | True |
| From template: | disk/storage_device_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Category ID: | disk |
| Status: | Blocking |
| Purpose: | This test will check if the connection of a Thunderbolt 3 HDD could be detected, then performs read/write operations on the attached Thunderbolt 3 HDD storage and checks if the removal of the Thunderbolt 3 HDD can be detected. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | manifest.has_thunderbolt3 == ‘True’ |
has_thunderbolt3.Ethernet Device tests¶
The following test units are covered in this category:
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Test to detect and return information about available network controllers on the system under test. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_ethernet_adapter == ‘True’ |
has_ethernet_adapter.| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Check that hotplugging works on port {{ interface }} |
| After-suspend: | True |
| From template: | ethernet/hotplug-interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | This test uses iperf3 to ensure network devices pass data at an acceptable minimum percentage of advertised speed (Reverse). |
| From template: | ethernet/iperf3_reverse_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | This test uses iperf3 to ensure network devices pass data at an acceptable minimum percentage of advertised speed. |
| From template: | ethernet/iperf3_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Check any of the cable Ethernet ports available on the system can ping its default gateway. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | device.category == ‘NETWORK’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Check Ethernet works by pinging another machine |
| After-suspend: | True |
| From template: | ethernet/ping_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
I²C (Inter-Integrated Circuit)¶
The following test units are covered in this category:
| Category ID: | i2c |
| Status: | Blocking |
| Purpose: | If an expected number of I²C buses is provided, the job will verify the detected number is correct. If the expected number of buses is not provided, the job will pass if at least one I²C bus is detected. |
| Environment variable: | I2C_BUS_NUMBER |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_i2c == ‘True’ |
has_i2c.Media Card tests¶
The following test units are covered in this category:
| Category ID: | mediacard |
| Status: | Blocking |
| Purpose: | This test will check that the system’s media card reader can detect the insertion of a UNLOCKED Secure Digital High-Capacity (SDHC) media card Then it performs a read and write test on the SDHC card. Finally, it checks that the system detects the removal of the SDHC card. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | manifest.has_card_reader == ‘True’ |
has_card_reader.Memory tests¶
The following test units are covered in this category:
Miscellaneous tests¶
The following test units are covered in this category:
Monitor tests¶
The following test units are covered in this category:
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the DisplayPort port and the ability to do hotplugging. |
| Steps: | Skip this test if your system does not have a DisplayPort port. 1. If a display is already connected, unplug it. 2. (Re-)Connect a display to the DisplayPort port on your system |
| Verification: | Was the interface displayed correctly on the screen? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dp == ‘True’ |
has_dp.monitor/dviCheck DVI port functionality by connecting a display and verifying different display modes.
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your DVI port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the DVI-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dvi == ‘True’ |
has_dvi.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your HDMI port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the HDMI-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_hdmi == ‘True’ |
has_hdmi.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the HDMI port and the ability to do hotplugging. |
| Steps: | Skip this test if your system does not have a HDMI port. 1. If a display is already connected, unplug it. 2. (Re-)Connect a display to the HDMI port on your system |
| Verification: | Was the interface displayed correctly on the screen? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_hdmi == ‘True’ |
has_hdmi.Non-device specific networking tests¶
The following test units are covered in this category:
| Category ID: | networking |
| Status: | Blocking |
| Purpose: | Tests whether the system has a working Internet connection. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | networking |
| Status: | Blocking |
| Purpose: | This test will check the network device {__index__} ({interface}) |
| After-suspend: | True |
| From template: | networking/info_device__index___interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ |
Power Management tests¶
The following test units are covered in this category:
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | This test powers off the system and then powers it on using RTC |
| Environment variable: | COLD_REBOOT_DELAY, RTC_DEVICE_FILE |
| User: | root |
| Plugin: | shell |
| Requires: | rtc.state == ‘supported’ rtc.wakealarm == ‘supported’ |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Test ACPI Wakealarm (fwts wakealarm) |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Check there are no failed services after the cold reboot |
| User: | root |
| Plugin: | shell |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Check there are no failed services after the warm reboot |
| User: | root |
| Plugin: | shell |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Verify that the Real-time clock (RTC) device functions properly, if present. |
| After-suspend: | True |
| Environment variable: | RTC_DEVICE_FILE |
| User: | root |
| Plugin: | shell |
| Requires: | rtc.state == ‘supported’ cpuinfo.other != ‘emulated by qemu’ |
Serial Port¶
The following test units are covered in this category:
Suspend tests¶
The following test units are covered in this category:
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Verify that all CPUs are online after resuming. |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Verify that all memory is available after resuming from suspend. |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Test the network after resuming. |
| User: | root |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Run Firmware Test Suite (fwts) oops tests after suspend. |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Query sysfs and debugfs for the amount of times the system was suspended. We expect the count in /sys/power/suspend_stats/success and suscess in /sys/kernel/debugfs/suspend_stats to be non zero |
| User: | root |
| Plugin: | shell |
Touchscreen tests¶
The following test units are covered in this category:
touchscreen/evdev/2-touch-tap-product_slugValidate proper detection of a 2-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that 2-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/2-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
touchscreen/evdev/3-touch-tap-product_slugValidate proper detection of a 3-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that 3-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/3-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
touchscreen/evdev/4-touch-tap-product_slugValidate the detection of a 4-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that 4-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/4-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
touchscreen/evdev/single-touch-tap-product_slugValidate the detection of a single-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that single-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/single-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
TPM 2.0 (Trusted Platform Module)¶
The following test units are covered in this category:
clevis-encrypt-tpm2/detect-ecc-capabilitiesEnsure the TPM has required capabilities for clevis ECC test
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
clevis-encrypt-tpm2/detect-rsa-capabilitiesEnsure the TPM has required capabilities for clevis RSA test
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_tpm2_chip == ‘True’ executable.name == ‘clevis-encrypt-tpm2’ |
has_tpm2_chip.USB tests¶
The following test units are covered in this category:
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | This test will check if system detects network interface of the Type-C to ethernet adapter. |
| Steps: |
|
| Verification: | <missing verification> |
| After-suspend: | True |
| Plugin: | user-interact |
| Requires: | manifest.has_usbc_data == ‘True’ |
has_usbc_data.| Category ID: | usb |
| Status: | Blocking |
| Purpose: | This test will check that the system correctly detects the insertion of a USB 3.0 storage device in a USB Type-C connector. Then it performs a read and write test on the device. Finally, it checks that the system correctly detects the removal of the USB 3 storage. NOTE: Make sure the USB 3 storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | usb.usb3 == ‘supported’ manifest.has_usbc_data == ‘True’ |
has_usbc_data.| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Detects and shows USB devices attached to this system. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | cpuinfo.platform != ‘s390x’ |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Check USB input device works |
| Steps: |
|
| Verification: | What was just input is displayed correctly |
| After-suspend: | True |
| Plugin: | manual |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_usb_storage == ‘True’ |
has_usb_storage.| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Check system can detect insertion of a USB 2.0 storage device. Then it performs a read and write test on the USB 2.0. Finally, it checks that the system correctly detects the removal of the USB 2.0. NOTE: Make sure the USB storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
usb/storage-preinserted-symlink_uuidTest USB storage on 2.0 or 1.1 ports detected by udev ({symlink_uuid})
| Unit type: | template |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on randomly created data. It requires that a USB stick is plugged into an available USB port before running the certification suite. |
| After-suspend: | True |
| From template: | usb/storage-preinserted-symlink_uuid |
| Template resource: | removable_partition |
| Template filter: | “usb” in removable_partition.bus |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Check system can detect insertion of a USB 3.0 storage device. Then it performs a read and write test on the USB 3.0. Finally, it checks that the system correctly detects the removal of the USB 3.0. NOTE: Make sure the USB storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | usb.usb3 == ‘supported’ |
Wireless networking tests¶
The following test units are covered in this category:
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_wlan_adapter == ‘True’ |
has_wlan_adapter.wireless/wireless_connection_open_ac_nm_interfaceConnect to unencrypted 802.11ac Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ac AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ac_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_ac_np_interfaceConnect to unencrypted 802.11ac Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ac AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ac_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_ax_nm_interfaceConnect to unencrypted 802.11ax Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ax AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ax_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_ax_np_interfaceConnect to unencrypted 802.11ax Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ax AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ax_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_be_nm_interfaceConnect to unencrypted 802.11be Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11be AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_be_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_be_np_interfaceConnect to unencrypted 802.11be Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11be AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_be_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_bg_nm_interfaceConnect to an unencrypted 802.11b/g Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check the system can connect to an insecure 802.11b/g AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_bg_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_bg_np_interfaceConnect to unencrypted 802.11b/g Wi-Fi network on {{ interface }} using netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check the system can connect to an unsecured 802.11b/g access point using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_bg_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_n_nm_interfaceConnect to an unencrypted 802.11n Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check if the system can connect to an unsecured 802.11n access point. |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_n_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_n_np_interfaceConnect to unencrypted 802.11n Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11n AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_n_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_ax_nm_interfaceConnect to WPA3-encrypted 802.11ax Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa3 security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_ax_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_ax_np_interfaceConnect to WPA3-encrypted 802.11ax Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa3 security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_ax_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_be_nm_interfaceConnect to WPA3-encrypted 802.11be Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa3 security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_be_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_be_np_interfaceConnect to WPA3-encrypted 802.11be Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa3 security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_be_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ac_nm_interfaceConnect to WPA-encrypted 802.11ac Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ac AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ac_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ac_np_interfaceConnect to WPA-encrypted 802.11ac Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ac AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ac_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ax_nm_interfaceConnect to WPA-encrypted 802.11ax Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ax_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ax_np_interfaceConnect to WPA-encrypted 802.11ax Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ax_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_be_nm_interfaceConnect to WPA-encrypted 802.11be Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_be_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_be_np_interfaceConnect to WPA-encrypted 802.11be Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_be_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_bg_nm_interfaceConnect to WPA-encrypted 802.11b/g Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11b/g AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_bg_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_bg_np_interfaceConnect to WPA-encrypted 802.11b/g Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11b/g AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_bg_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_n_nm_interfaceConnect to a WPA-encrypted 802.11n Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check if the system can connect to an 802.11n AP with WPA security. |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_n_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_n_np_interfaceConnect to a WPA-encrypted 802.11n Wi-Fi network on {{ interface }} using netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check if the system can connect to an 802.11n AP with WPA security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_n_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can find a wireless network AP nearby |
| After-suspend: | True |
| From template: | wireless/wireless_scanning_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
Wireless Wide Area Network¶
The following test units are covered in this category:
wwan/check-sim-present-manufacturer-model-hw_id-autoCheck if a SIM card is present in a slot connected to the modem
| Unit type: | template |
| Category ID: | wwan |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Check if a SIM card is present in a slot connected to the modem |
| After-suspend: | True |
| From template: | wwan/check-sim-present-manufacturer-model-hw_id-auto |
| Template resource: | wwan_resource |
| Category ID: | wwan |
| Status: | Blocking |
| Purpose: | Tests that there is a WWAN module present and indicates that testing of it should follow. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_wwan_module == ‘True’ snap.name == ‘modem-manager’ or package.name == ‘modemmanager’ |
has_wwan_module.wwan/gsm-connection-manufacturer-model-hw_id-autoVerify a GSM broadband modem can create a data connection multiple times
| Unit type: | template |
| Category ID: | wwan |
| Status: | Blocking |
| Purpose: | Any modems discovered by the resource job that list GSM support will be tested to ensure a data connection can be made. |
| After-suspend: | True |
| From template: | wwan/gsm-connection-manufacturer-model-hw_id-auto |
| Template resource: | wwan_resource |
Non-blocking¶
Advanced Configuration and Power Interface¶
The following test units are covered in this category:
Audio tests¶
The following test units are covered in this category:
| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_audio_capture == ‘True’ |
has_audio_capture.| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_audio_playback == ‘True’ |
has_audio_playback.Bluetooth - BlueZ Self Tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | Runs a specific test from the bnep test suite. |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-bnep-tests_bluez-internal-bnep-test |
| Template resource: | bluez-internal-bnep-tests |
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Runs a specific test from the hci test suite |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-hci-tests_bluez-internal-hci-test |
| Template resource: | bluez-internal-hci-tests |
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | Runs a specific test from the rfcomm test suite |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-rfcomm-tests_bluez-internal-rfcomm-test |
| Template resource: | bluez-internal-rfcomm-tests |
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | Runs a specific test from the user channel test suite |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-uc-tests_bluez-internal-uc-test |
| Template resource: | bluez-internal-uc-tests |
Bluetooth tests¶
The following test units are covered in this category:
| Category ID: | bluetooth |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | package.name == ‘bluez’ or snap.name == ‘bluez’ environment.CHECKBOX_RUNNING_STRICT_SNAP != “1” or (connections.slot == ‘bluez:service’ and connections.plug == ‘{{ __system_env__[“SNAP_NAME”] }}:bluez’) |
bluetooth4/beacon_eddystone_url_interfaceTest system can get beacon EddyStone URL advertisements on the {{ interface }} adapter
| Unit type: | template |
| Category ID: | bluetooth |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | bluetooth4/beacon_eddystone_url_interface |
| Template resource: | device |
| Template filter: | device.category == ‘BLUETOOTH’ |
Camera tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | Uses an image of the camera to get the quality based on a No-Reference image quality assessment algorithm called BRISQUE. This test will timeout and fail if the quality has not been computed within 120 seconds. |
| From template: | camera/camera-quality-rpi_name |
| Template resource: | device |
| Template filter: | device.category == ‘MMAL’ and device.name != ‘’ |
camera/multiple-resolution-images-rpi-attachment_nameAttach an image from the multiple resolution images test on rpi
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | This test will attach one of the images used for the multiple resolution images test on rpi. |
| From template: | camera/multiple-resolution-images-rpi-attachment_name |
| Template resource: | device |
| Template filter: | device.category == ‘MMAL’ and device.name != ‘’ |
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | Takes multiple pictures based on the resolutions supported by the camera and validates their size and that they are of a valid format. |
| From template: | camera/multiple-resolution-images-rpi_name |
| Template resource: | device |
| Template filter: | device.category == ‘MMAL’ and device.name != ‘’ |
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | Takes multiple pictures based on the resolutions supported by the camera and validates their size and that they are of a valid format. |
| After-suspend: | True |
| From template: | camera/multiple-resolution-images_name |
| Template resource: | device |
| Template filter: | device.category == ‘CAPTURE’ and device.name != ‘’ |
CPU tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Validate that the Floating Point Unit is running on {platform} device. |
| From template: | cpu/arm64_vfp_support_platform |
| Template resource: | cpuinfo |
| Template filter: | cpuinfo.platform == ‘aarch64’ |
cpu/armhf_vfp_support_platformValidate that the Vector Floating Point Unit is running on {platform} device
| Unit type: | template |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Validate that the Vector Floating Point Unit is running on {platform} device. |
| From template: | cpu/armhf_vfp_support_platform |
| Template resource: | cpuinfo |
| Template filter: | cpuinfo.platform == ‘armv7l’ |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | Runs a test for clock jitter on SMP machines. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | cpuinfo.platform not in (“s390x”) |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the FWTS desktop diagnosis results log to the submission. |
| Plugin: | attachment |
| Requires: | cpuinfo.platform not in (“aarch64”, “armv7l”, “s390x”) |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | Attaches the log generated by cpu/maxfreq_test to the results submission. |
| Plugin: | attachment |
DesignWare Core SuperSpeed USB 3.0 Controller¶
The following test units are covered in this category:
| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_usb_dwc3_controller == ‘True’ |
has_usb_dwc3_controller.| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | Check that after connecting the device under test (DUT) to another device (host), DUT can be detected as mass storage device by the host. |
| Steps: |
|
| Verification: | The host detects and mounts a mass storage device. It has read and write permissions on it. |
| User: | root |
| Plugin: | user-interact-verify |
| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_usb_dwc3_controller == ‘True’ |
has_usb_dwc3_controller.Disk tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | disk/apste_support_on_name |
| Template resource: | device |
| Template filter: | device.driver == ‘nvme’ and device.category == ‘OTHER’ |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Examine the system to detect Software RAID devices are created and the RAID mode are expected the SOFTWARE_RAID_LEVEL variable is needed for this tests. e.g. SOFTWARE_RAID_LEVEL=”raid0 raid1 raid5” |
| Environment variable: | SOFTWARE_RAID_LEVEL |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘mdadm’ manifest.has_md_raid == ‘True’ |
has_md_raid.| Unit type: | template |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | Disk stress-ng test for {product_slug} |
| From template: | disk/disk_stress_ng_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | The device partition is encrypted using TPM master key. To unseal the master key from TPM, PCR7 (Platform Configuration Register 7) needs to be identical to the value it had when the master key was sealed into TPM. Every time the device boots, it checks PCR7 to unseal TPM and retrieves master key from TPM to decrypt its data partition. If TPM PCR7 is modified (e.g. by flashing the BIOS), the device won’t be able to get the master key and decrypt its data partition. This test verifies the system’s resilience against unauthorized modifications by ensuring it cannot boot if the PCR7 value is altered. |
| Steps: | NOTE: YOU’LL HAVE TO RE-INSTALL THE IMAGE AFTER THIS TEST. 1. Install the image and make sure it boots and you can log in. 2. Ensure the BIOS is set up correctly (e.g., TPM enabled, UEFI boot mode). 3. Depending on the DUT, choose one of these methods to clean TPM: a. Turn the device off and upgrade/downgrade the BIOS or modify Secure Boot state. b. Clean TPM via BIOS menu. c. Install checkbox, execute “checkbox-[project name].checkbox-cli run com.canonical.certification::tpm2.0_3.0.4/tpm2_takeownership”. 4. Start or reboot the device. |
| Verification: | Mark this test as “Passed” if the device cannot boot anymore. |
| Plugin: | manual |
| Requires: | manifest.has_fde == ‘True’ |
has_fde.| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | Examine the system to detect if one of the standard full disk encryption implementations is in use |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘lsblk’ executable.name == ‘dmsetup’ executable.name == ‘cryptsetup’ manifest.has_fde == ‘True’ |
has_fde.| Unit type: | template |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | This test checks disk stats, generates some activity and rechecks stats to verify they’ve changed. It also verifies that disks appear in the various files they’re supposed to. . This test will inspect the following disk: . product name: {product_slug} sysfs path: {path} device node path: /dev/{name} |
| After-suspend: | True |
| From template: | disk/stats_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ and device.name != ‘’ |
Docker containers¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/build-single_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/commit_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/compose-and-basic_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/compose-restart_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/compose-single_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/copy_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/deploy-registry_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/diff_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/export-and-import_arch |
| Template resource: | docker_resource |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| User: | root |
| Requires: | executable.name == ‘docker’ |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/inspect_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/interative_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/kill_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/restart-always_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/restart-on-failure_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/run_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/save-and-load_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/start-stop_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/update_arch |
| Template resource: | docker_resource |
Eeprom¶
The following test units are covered in this category:
| Category ID: | eeprom |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_eeprom == ‘True’ |
has_eeprom.Error Detection And Correction (EDAC) Memory Controllers¶
The following test units are covered in this category:
| Category ID: | edac |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | attachment |
| Requires: | executable.name == ‘edac-util’ manifest.has_edac_module == ‘True’ |
has_edac_module.| Category ID: | edac |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| Requires: | executable.name == ‘edac-util’ manifest.has_edac_module == ‘True’ |
has_edac_module.Ethernet Device tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Non-blocking |
| Purpose: | Check that another system can wake the System Under Test (SUT) up from S3 using the Ethernet port {interface}’s WOL function. |
| From template: | ethernet/wol_S3_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.mac != ‘UNKNOWN’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Non-blocking |
| Purpose: | Check that another system can wake up from S4 the System Under Test (SUT) using ethernet port {interface} Wake-on-LAN (WOL) function. |
| From template: | ethernet/wol_S4_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.mac != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Non-blocking |
| Purpose: | Check that another system can wake the System Under Test (SUT) from S5 using the Ethernet port {interface} WOL function. |
| From template: | ethernet/wol_S5_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.mac != ‘UNKNOWN’ |
Firmware tests¶
The following test units are covered in this category:
| Category ID: | firmware |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Run Firmware Test Suite (fwts) QA-concerned desktop-specific diagnosis tests. |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
| Category ID: | firmware |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the FWTS desktop diagnosis results log to the submission |
| Plugin: | attachment |
Gathers information about the DUT¶
The following test units are covered in this category:
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates a list of plug and slot connections on the device |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Gets info on the version of dpkg installed |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates resource info based on /proc/meminfo |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates a list of packages |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Queries the snapd REST API for serial assertions present on the device. |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates a list of snap packages |
| Plugin: | resource |
General Purpose I/O¶
The following test units are covered in this category:
gpio/gpiomem_loopback_pairs_modelTest GPIO lines exposed on headers can be controlled via /dev/gpiomem
| Unit type: | template |
| Category ID: | gpio |
| Status: | Non-blocking |
| Purpose: | Ensure GPIO lines exposed on headers are controllable via /dev/gpiomem using the RPi python module for specific models. |
| After-suspend: | True |
| From template: | gpio/gpiomem_loopback_pairs_model |
| Template resource: | com.canonical.certification::model_assertion |
| Template filter: | model_assertion.model in (“pi2”, “pi3”, “ubuntu-core-18-pi2”, “ubuntu-core-18-pi3”) |
| Unit type: | template |
| Category ID: | gpio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | gpio/sysfs_loopback_pairs_model |
| Template resource: | com.canonical.certification::model_assertion |
| Template filter: | model_assertion.model in (“pi2”, “pi3”, “ubuntu-core-18-pi2”, “ubuntu-core-18-pi3”) |
gpio/sysfs_loopback_pairs_vendor_productTest GPIO lines exposed on headers can be controlled via sysfs
| Unit type: | template |
| Category ID: | gpio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | gpio/sysfs_loopback_pairs_vendor_product |
| Template resource: | dmi |
| Template filter: | dmi.category == ‘SYSTEM’ and dmi.vendor == ‘AAEON’ and dmi.product in (‘UPX-TGL01’, ‘UPN-EHL01’) |
Hardware video acceleration¶
The following test units are covered in this category:
| Category ID: | va-api |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | package.name == ‘vainfo’ cpuinfo.platform == ‘x86_64’ manifest.has_va_api == ‘True’ |
has_va_api.Image verification tests¶
The following test units are covered in this category:
| Category ID: | image |
| Status: | Non-blocking |
| Purpose: | Images with the ‘dangerous’ grade (the lowest of all available grades) results in certain security measures being relaxed. Images that require strict security-related implementations must have the model grade set to non-dangerous grades - either the highest grade of ‘secured’, or a grade passed to Checkbox for checking via the MODEL_GRADE configuration variable. |
| Plugin: | shell |
| Requires: | lsb.distributor_id == “Ubuntu Core” and int(lsb.release) >= 20 manifest._dangerous_grade_core_image == ‘False’ |
_dangerous_grade_core_image.Informational tests¶
The following test units are covered in this category:
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the contents of /proc/acpi/sleep if it exists. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a report of installed codecs for Intel HDA |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a report of CPU information |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches json dumps of installed dkms package information. |
| Plugin: | attachment |
| Requires: | package.name == ‘dkms’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a copy of /var/log/dmesg or the current dmesg buffer to the test results |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches info on DMI |
| Plugin: | attachment |
| Requires: | dmi_present.state == ‘supported’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches dmidecode output |
| User: | root |
| Plugin: | attachment |
| Requires: | executable.name == ‘dmidecode’ dmi_present.state == ‘supported’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attach system debian packages status |
| Plugin: | attachment |
| Requires: | executable.name == ‘dpkg’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the firmware version |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the buildstamp identifier for the OS |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches information about disk partitions |
| User: | root |
| Plugin: | attachment |
| Unit type: | template |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | info/hdparm_name.txt |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Checks the value of the CONFIG_INTEL_IOMMU_DEFAULT_ON flag in the kernel configuration |
| Plugin: | shell |
| Requires: | cpuinfo.platform in (“i386”, “x86_64”) |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Output whether secure boot is enabled or disabled |
| Plugin: | attachment |
| Requires: | package.name == ‘mokutil’ manifest.has_secure_boot == ‘True’ |
has_secure_boot.| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | This job prints a tree of the time-critical chain of SystemD units. |
| Plugin: | shell |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Returns the name, driver name and driver version of any touchpad discovered on the system. |
| Plugin: | attachment |
| Requires: | device.category == ‘TOUCHPAD’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the installer debug log if it exists. |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the kernel command line used to boot |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a list of the currently running kernel modules. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches very verbose lspci output. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a hex dump of the standard part of the PCI configuration space for all PCI devices. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the system topology as presented by the lstopo command |
| Plugin: | attachment |
| Requires: | executable.name == ‘lstopo’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a list of detected USB devices. |
| After-suspend: | True |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | This job loads the hardware manifest and exposes it as a resource. |
| Plugin: | resource |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches info on system memory as seen in /proc/meminfo. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches modinfo information for all currently loaded modules |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the contents of the various modprobe conf files. |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the contents of the /etc/modules file. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Allows logging of debug info and errors by the associated resource job |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Environment variable: | CHECKBOX_RUNTIME, SNAP |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the contents of various sysctl config files. |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches a report of sysfs attributes. |
| Plugin: | attachment |
| Requires: | cpuinfo.platform not in (“aarch64”) |
Intel Integrated Sensor Hub Transport Protocol (ISHTP)¶
The following test units are covered in this category:
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_eclite == ‘True’ |
has_eclite.eclite/temperature-reading-from-thermal-acpitzRead the temperature of acpitz to ensure Eclite is functional
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | For testing the feature of Eclite, one way is to monitor the temperature of acpitz thermal. |
| User: | root |
| Plugin: | shell |
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_ishtp == ‘True’ |
has_ishtp.Intel Management Engine Interface (MEI)¶
The following test units are covered in this category:
| Category ID: | mei |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | cpuinfo.platform in (“i386”, “x86_64”) manifest.has_mei == ‘True’ |
has_mei.| Category ID: | mei |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | cpuinfo.platform in (“i386”, “x86_64”) manifest.has_mei == ‘True’ |
has_mei.Kernel snap tests¶
The following test units are covered in this category:
kernel-snap/booted-kernel-matches-current-nameThe booted kernel image matches the image in the current kernel snap
| Unit type: | template |
| Category ID: | kernel-snap |
| Status: | Non-blocking |
| Purpose: | On some Ubuntu Core devices, it is necessary for the kernel image to be extracted from the kernel snap and placed in the boot partition (notably devices using full disk encryption). This checks the images are in sync. |
| From template: | kernel-snap/booted-kernel-matches-current-name |
| Template resource: | bootloader |
| Template filter: | bootloader.booted_kernel_path != ‘unknown’ |
LED tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | led |
| Status: | Non-blocking |
| Purpose: | Check that {name} LED turns on and off. |
| After-suspend: | True |
| From template: | led-indicator/gpio-controller-leds-name |
| Template resource: | led-indicator/gpio-controller-leds |
| Unit type: | template |
| Category ID: | led |
| Status: | Non-blocking |
| Purpose: | Check that {name} LED turns on and off. |
| After-suspend: | True |
| From template: | led-indicator/gpio-leds-name |
| Template resource: | led-indicator/gpio-leds |
| Unit type: | template |
| Category ID: | led |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Automated check that {name} LED turns on and off. |
| After-suspend: | True |
| From template: | led-indicator/sysfs-leds-automated |
| Template resource: | led-indicator/sysfs-leds |
| Unit type: | template |
| Category ID: | led |
| Status: | Non-blocking |
| Purpose: | Check that {name} LED turns on and off. |
| After-suspend: | True |
| From template: | led-indicator/sysfs-leds-manual |
| Template resource: | led-indicator/sysfs-leds |
| Category ID: | led |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | validate the format of SYS_LEDS environment variable is correct. |
| Environment variable: | SYS_LEDS |
| Plugin: | shell |
| Requires: | manifest.has_sysfs_led == ‘True’ |
has_sysfs_led.Media Card tests¶
The following test units are covered in this category:
| Category ID: | mediacard |
| Status: | Non-blocking |
| Purpose: | This test will check that the system’s media card reader can detect the insertion of a Secure Digital Extended Capacity (SDXC) media card Then it performs a read and write test on the SDXC card. Finally, it checks that the system detects the removal of the SDXC card. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| User: | root |
| Plugin: | user-interact |
| Requires: | manifest.has_card_reader == ‘True’ |
has_card_reader.mediacard/storage-preinserted-symlink_uuidAutomated test of SD Card reading & writing ({symlink_uuid})
| Unit type: | template |
| Category ID: | mediacard |
| Status: | Non-blocking |
| Purpose: | This is a fully automated version of mediacard/sd-automated and assumes that the system under test has a memory card device plugged in prior to checkbox execution. |
| After-suspend: | True |
| From template: | mediacard/storage-preinserted-symlink_uuid |
| Template resource: | removable_partition |
| Template filter: | removable_partition.bus == ‘mediacard’ |
Miscellaneous tests¶
The following test units are covered in this category:
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | Device check |
| Steps: |
|
| Verification: | Do the devices reported by udev match the devices on the Manifest? |
| Plugin: | user-interact-verify |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | Attaches the FWTS oops results log to the submission |
| Plugin: | attachment |
miscellanea/secure_boot_mode_gadgetTest that {gadget} Ubuntu Core system booted with Secure Boot active
| Unit type: | template |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | Test to verify that the system booted with Secure Boot active. |
| From template: | miscellanea/secure_boot_mode_gadget |
| Template resource: | model_assertion |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | A meta-job that verifies the data necessary for a complete result submission are present. Failure indicates that the results are incomplete and may be rejected. |
| Plugin: | shell |
Monitor tests¶
The following test units are covered in this category:
| Category ID: | monitor |
| Status: | Non-blocking |
| Purpose: | Check output to display through VGA adaptor on DVI port |
| Steps: |
|
| Verification: | Output to display works |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dvi == ‘True’ |
has_dvi.| Category ID: | monitor |
| Status: | Non-blocking |
| Purpose: | Check output to display through VGA adaptor on HDMI port |
| Steps: |
|
| Verification: | Output to display works |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_hdmi == ‘True’ |
has_hdmi.| Category ID: | monitor |
| Status: | Non-blocking |
| Purpose: | Check output to display through VGA port |
| Steps: |
|
| Verification: | Output to display works |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_vga == ‘True’ |
has_vga.Non-device specific networking tests¶
The following test units are covered in this category:
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | Test if the running kernel supports IPv6. |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| After-suspend: | True |
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest._ignore_disconnected_ethernet_interfaces == ‘True’ |
_ignore_disconnected_ethernet_interfaces.| Unit type: | template |
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | ipv6_link_local_address_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | Verify that all network interfaces have predictable names. |
| Plugin: | shell |
| Requires: | environment.CHECKBOX_RUNNING_STRICT_SNAP != “1” or lsb.release >= ‘20’ environment.CHECKBOX_RUNNING_STRICT_SNAP != “1” or model_assertion.gadget != “pi” environment.CHECKBOX_RUNNING_STRICT_SNAP == “1” or lsb.release >= ‘18’ |
Power Management tests¶
The following test units are covered in this category:
| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | Attach log from fwts wakealarm test |
| Plugin: | attachment |
| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| Requires: | manifest.has_hardware_watchdog == ‘True’ |
has_hardware_watchdog.| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | Check there are no failed services after the watchdog triggered |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_hardware_watchdog == ‘True’ |
has_hardware_watchdog.| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| Requires: | manifest.has_hardware_watchdog == ‘True’ |
has_hardware_watchdog.Quadrature Encoder Peripherals¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | qep |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Checks that the device exists in lspci and that the device driver associated is correct. Device ID should be 8086:{qep-device} and the driver is always intel_qep. |
| From template: | qep/qep-device-driver-for-qep-device |
| Template resource: | qep/qep-devices |
Real Time Clock (RTC)¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | rtc_category |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | rtc/rtc_alarm_rtc |
| Template resource: | rtc_list |
| Unit type: | template |
| Category ID: | rtc_category |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | rtc/rtc_clock_rtc |
| Template resource: | rtc_list |
Snapd¶
The following test units are covered in this category:
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | The store should contain the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap. The test makes sure this can be downloaded and installed on the system. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | If snap list command is working then should at least find the ubuntu-core package. |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | The test will install the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap from the stable channel and then refreshes it to the edge channel and compares the revision before and after the refresh. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | After having installed the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap, check it can be removed. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Checks that the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap can be refreshed after removal of the blacklisted revision. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Checks if the edge channel {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap is reverted back to the one from stable. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | If snap find command is working then should find {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} in the store. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Test all the snaps’ confinement, devmode, revision. Make sure the confinement is “strict”, devmode is “False”, and revision should not be sideloaded. |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | The image can be tied to using a particular store for the OEM. This tests the store for the image is as expected. |
| From template: | snappy/test-store-config-store |
| Template resource: | com.canonical.certification::model_assertion |
| Template filter: | model_assertion.store not in (‘unknown’) |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Test the snappy install command is able to install and remove snap in beta channel store. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Test the snappy install command is able to install a snap in the edge channel store. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
SocketCAN interface tests¶
The following test units are covered in this category:
socketcan/send_packet_local_eff_virtualVirtual CAN device support test (Local test with raw socket and EFF)
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test that the kernel supports CAN networking by sending packets to a virtual device using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket, this is only a local test as the broadcast packet is received on the same device. |
| After-suspend: | True |
| From template: | socketcan/send_packet_local_eff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test that the kernel supports CAN networking by sending packets to a virtual device using a raw socket; this is only a local test as the broadcast packet is received on the same device. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_socket_can_fd == ‘True’ |
has_socket_can_fd.| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| From template: | socketcan/send_packet_local_fd_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test that the kernel supports CAN networking by sending packets to a virtual device using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| From template: | socketcan/send_packet_local_sff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket to a remote device. As a prerequisite the remote device should have can-echo-server installed so as to return the predicted packet. |
| After-suspend: | True |
| From template: | socketcan/send_packet_remote_eff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket to a remote device. As a prerequisite, the remote device should have can-echo-server installed so as to return the predicted packet. |
| After-suspend: | True |
| From template: | socketcan/send_packet_remote_fd_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket to a remote device. As a prerequisite, the remote device should have can-echo-server installed so as to return the predicted packet. |
| After-suspend: | True |
| From template: | socketcan/send_packet_remote_sff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
Suspend tests¶
The following test units are covered in this category:
| Category ID: | suspend |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | If the DUT suspended successfully, /sys/power/suspend_stats/fail* and fail* in /sys/kernel/debug/suspend_stats will be zero. If a device failed /sys/power/suspend_stats/last_failed_dev and last_failed_dev in /sys/kernel/debug/suspend_stats will show the failed device |
| User: | root |
| Plugin: | shell |
TPM 2.0 (Trusted Platform Module)¶
The following test units are covered in this category:
| Category ID: | tpm2 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | The information in the TPM Event Log can be useful in debugging problems with TPM command support and adherance to standards. This can be of particular help when checking whether a device can support Ubuntu Core Full Disk Encryption. |
| User: | root |
| Plugin: | attachment |
| Requires: | manifest.has_tpm2_chip == ‘True’ executable.name == ‘fwts’ |
has_tpm2_chip.Ubuntu Core OS feature tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | ubuntucore |
| Status: | Non-blocking |
| Purpose: | Check if the system will rollback to the previous (functional) kernel |
| From template: | ubuntucore/kernel-failboot-kernel |
| Template resource: | model_assertion |
| Unit type: | template |
| Category ID: | ubuntucore |
| Status: | Non-blocking |
| Purpose: | Check the system will rollback to the original core snap if it fails to boot the updated one. |
| From template: | ubuntucore/os-fail-boot-description |
| Template resource: | lsb |
| Template filter: | lsb.distributor_id == ‘Ubuntu Core’ |
ubuntucore/os-recovery-modeReboot into recovery mode and log into the system using prior credentials.
| Category ID: | ubuntucore |
| Status: | Non-blocking |
| Purpose: | Check if the system will reboot to recovery mode successfully |
| Steps: |
|
| Verification: | Check if kernel cmdline when the system is in recovery mode includes: ‘snapd_recovery_mode=recover’ Check if kernel cmdline when the system is in normal run mode includes: ‘snapd_recovery_mode=run’ |
| Plugin: | manual |
| Requires: | lsb.release >= ‘20’ |
| Category ID: | ubuntucore |
| Status: | Non-blocking |
| Purpose: | Check if the system will reboot to reinstall mode and reinitialize the device with a fresh factory reset. |
| Steps: | WARNING: ALL EXISTING DATA ON THIS DEVICE WILL BE WIPED!! 1. Check the current serial-assertion device-key $ ls /var/lib/snapd/save/device/private-keys-v1 2. Clear TPM first if this device has enabled secure boot & FDE For x86-based platforms: $ sudo su $ echo 5 > /sys/class/tpm/tpm0/ppi/request For ARM-based platforms: There is no generic command for ARM-based platforms, please refer to the device user manual. 3. Reboot the system to reinstall mode $ sudo snap reboot –install 4. The system should respond to the command and reboot itself. 5. Wait until the system completes the installation and initialization process. 6. Check the serial-assertion device-key after installation completes. $ ls /var/lib/snapd/save/device/private-keys-v1 |
| Verification: | Check if a new serial-assertion device-key got generated after reinstallation completes. |
| Plugin: | manual |
| Requires: | lsb.release >= ‘20’ |
| Category ID: | ubuntucore |
| Status: | Non-blocking |
| Purpose: | Check if a user can access the system through SSH from another machine |
| Steps: |
|
| Verification: | Can log into the system through SSH from another machine |
| Plugin: | manual |
USB tests¶
The following test units are covered in this category:
| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: |
|
| Verification: | The host and DUT can ping each other. |
| Description: | <missing description> |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | Check that after connecting the device under test (DUT) to another device (host), the DUT can be detected as a mass storage device by the host. |
| Steps: |
|
| Verification: | The host detects and mounts the mass storage device. It has read and write permissions on it. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | Check if USB OTG can work as a serial port. |
| Steps: |
|
| Verification: | Does string send and receive function correctly? |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | This test will check that you can use a USB HID device plugged in a USB Type-C port using a “USB Type-C to Type-A” adapter |
| Steps: |
|
| Verification: | Did the device work as expected? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_usbc_data == ‘True’ |
has_usbc_data.usb-c/c-to-a-adapter/storage-manualTest USB 3 storage device insertion + read/write + removal using a “Type-C to Type-A” adapter.
| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | This test will check that the system correctly detects the insertion of a USB 3 storage device in a USB Type-C connector using a “Type-C to Type-A” adapter. Then it performs a read and write test on the device. Finally, it checks that the system correctly detects the removal of the USB 3 storage. NOTE: Make sure the USB 3 storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | usb.usb3 == ‘supported’ manifest.has_usbc_data == ‘True’ |
has_usbc_data.Wi-Fi access point¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | wireless/nmcli_wifi_ap_a_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/nmcli_wifi_ap_bg_interfaceCreate 802.11b/g Wi-Fi AP on {{ interface }} using NetworkManager
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Create an 802.11b/g Wi-Fi access point on a specified interface using NetworkManager command-line tools. |
| After-suspend: | True |
| From template: | wireless/nmcli_wifi_ap_bg_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_b_no_sta_interface_autoCreate open 802.11b Wi-Fi AP on {interface} with no STA
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11b Access Point without any STA connection on {interface} by configuring the system using wifi-ap snap and then checking status of the interface using iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_b_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_b_no_sta_interface_manualCreate open 802.11b Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11b Access Point without any STA connection |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_b_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_g_no_sta_interface_autoCreate an open 802.11g Wi-Fi AP on {interface} with no STA connected.
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11g Access Point without any Station (STA) connection on {interface} by configuring the system using the wifi-ap snap and then checking the status of the interface using the iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_g_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_g_no_sta_interface_manualCreate open 802.11g Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11g Access Point without any STA connection |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_g_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_setup_wizard_interface_autoCreate Access Point on {interface} using wifi-ap.setup-wizard
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create a WPA2 802.11g Access Point using wifi-ap.setup-wizard command on {interface}. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_setup_wizard_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11b Access Point without any STA connection on {interface} by configuring the system using wifi-ap snap and then checking the status of the interface using iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_b_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_b_no_sta_interface_manualCreate WPA2 802.11b Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create a WPA2 802.11b Access Point without any STA connected |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_b_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_b_with_sta_interface_autoCreate a WPA2 802.11b Wi-Fi Access Point on {interface} with active STA
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_b_with_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11g Access Point without any Station (STA) connection on {interface} by configuring the system using the wifi-ap snap and then checking the status of the interface using the iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_g_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_g_no_sta_interface_manualCreate WPA2 802.11g Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create a WPA2 802.11g Access Point without any STA connection |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_g_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_g_with_sta_interface_autoCreate WPA2 802.11g Wi-Fi Access Point on {interface} with active STA
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_g_with_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
Wireless networking tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | wireless |
| Status: | Non-blocking |
| Purpose: | Ensure no crashes have occurred in the iwlwifi microcode. |
| After-suspend: | True |
| From template: | wireless/check_iwlwifi_microcode_crash_interface |
| Template resource: | device |
| Template filter: | device.driver == ‘iwlwifi’ |
| Unit type: | template |
| Category ID: | wireless |
| Status: | Non-blocking |
| Purpose: | Check if the DUT supports Wi-Fi 7 features like Multi-Link-Operation |
| After-suspend: | True |
| From template: | wireless/wifi7_mlo_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
Wireless Wide Area Network¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | wwan |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Scan for available 3GPP networks with the target modem |
| After-suspend: | True |
| From template: | wwan/3gpp-scan-manufacturer-model-hw_id-auto |
| Template resource: | wwan_resource |
Manifest Entries¶
The following manifest entries are required for certification:
_dangerous_grade_core_imageImage is using ‘dangerous’ grade (should be set to ‘No’ unless you’re doing SRU testing)
| Value type: | bool |
| Prompt: | Does this setup have the following configuration? |
has_audio_captureAudio capture: Machine can record sound. (For example, a desktop PC probably requires a microphone connected to it)
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
has_audio_playbackAudio playback: Machine can emit sound. (For example, a desktop PC probably requires speakers connected to it)
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following LED indicators? |
client-cert-iot-server-26-04¶
Note
The certification tests presented in this document are validated by Checkbox version 7.3.0.dev42.
Blocking¶
Audio tests¶
Output needs to be undistorted between 0%-100%. Output lines tested:
Internal speakers
3.5mm headphones
HDMI audio output
DisplayPort audio output
Input needs to be recorded undistorted between 0%-100%. Input lines tested:
Internal microphone
3.5mm microphone
Plug detection: when a new audio line input or output is plugged in the system, it needs to be recognized.
The following test units are covered in this category:
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check if sound that is ‘hearable’ by capture device. This test is intended mostly for devices without internal speakers/microphones, but with a line-in and a line-out ports to which a loopback cable can be connected. |
| After-suspend: | True |
| Environment variable: | ALSADEVICE, ALSA_CONFIG_PATH, LD_LIBRARY_PATH |
| Plugin: | shell |
| Requires: | manifest.has_audio_loopback_connector == ‘True’ |
has_audio_loopback_connector.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check if sound is played through ALSA on the default output |
| Steps: |
|
| Verification: | Did you hear the sound? |
| After-suspend: | True |
| Environment variable: | ALSADEVICE, ALSA_CONFIG_PATH |
| Plugin: | user-interact-verify |
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | DisplayPort audio interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the DisplayPort device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_dp == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_dp, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | HDMI audio interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the HDMI device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_hdmi == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_hdmi, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Thunderbolt audio interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the Thunderbolt device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_thunderbolt3 == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_thunderbolt3, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | DisplayPort audio via USB Type-C port interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the DisplayPort device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_video == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_usbc_video, has_audio_playback.audio/playback_type-c_hdmiVerify HDMI audio playback through the USB Type-C port using a “USB Type-C to HDMI” adapter and confirm sound output.
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | HDMI audio via USB Type-C port interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the HDMI device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_video == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_usbc_video, has_audio_playback.Bluetooth tests¶
Bluetooth LE (Smart and Smart Ready) is tested for device scanning and pairing. Apart from pairing, several profiles are specifically tested and required:
Eddystone Beacon
HID Over GATT Profile (HOGP), Low-Energy keyboard or mouse with basic functionality
The following test units are covered in this category:
| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check the High Fidelity Playback (A2DP) capability of your Bluetooth device, to see if you can hear audio from it. |
| Steps: |
|
| Verification: | Did you hear the tone? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_bt_smart.bluetooth/audio_record_playbackVerify Bluetooth HSP/HFP profile capability for recording and playback.
| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check the Headset Head Unit (HSP/HFP) capability of your Bluetooth device, to check if you can record sounds. |
| Steps: |
|
| Verification: | Did you hear your speech played back? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_bt_smart.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable |
| After-suspend: | True |
| Environment variable: | BTDEVADDR, PLAINBOX_PROVIDER_DATA |
| Plugin: | shell |
| Requires: | package.name == ‘bluez’ or snap.name == ‘bluez’ executable.name == ‘obexftp’ and executable.name == ‘hcitool’ device.category == ‘BLUETOOTH’ manifest.has_bt_obex_support == ‘True’ |
has_bt_obex_support.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_bt_adapter == ‘True’ |
has_bt_adapter.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | Automated test to store Bluetooth device information in the Checkbox report |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | package.name == ‘bluez’ or snap.name == ‘bluez’ device.category == ‘BLUETOOTH’ |
| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check that you can use a HID Over GATT Profile (HOGP) with your Bluetooth Smart keyboard. |
| Steps: |
|
| Verification: | Did the Bluetooth Smart keyboard work as expected? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name == ‘bluez’ |
has_bt_smart.CPU tests¶
x86_64 and ARM processors are tested to ensure proper functionality. We will test specific features as:
CPU’s performance states (frequency up and down in runtime)
CPU’s sleep states (cpu on and off in runtime)
Running CPU at its maximum frequency
We will also include a general stress test performed for 120 minutes to verify that the system can handle a sustained high load for a period of time. This test uses the tool “stress-ng” available in the Universe repositories.
For Intel CPU’s, the IPDT (Intel Processor Diagnostic Tool) test suite will be run. The diagnostic checks for brand identification, verifies the processor operating frequency, tests specific processor features, and performs a stress test on the processor.
The following test units are covered in this category:
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Uses the Firmware Test Suite (fwts) to test the power saving states of the CPU. |
| Environment variable: | LD_LIBRARY_PATH, PLAINBOX_SESSION_SHARE, SNAP |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ cpuinfo.platform not in (“aarch64”, “armv7l”, “ppc64el”, “ppc64le”, “s390x”) |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Use the Firmware Test Suite (fwts cpufreq) to ensure that the CPU can run at its maximum frequency. |
| Environment variable: | LD_LIBRARY_PATH, SNAP |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ cpuinfo.platform in (“i386”, “x86_64”) |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | Attempts to offline each core in a multicore system. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | cpu_offlining.state == ‘supported’ |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Use Firmware Test Suite (fwts cpufreq) to test the scaling capabilities of the CPU. |
| Environment variable: | LD_LIBRARY_PATH, PLAINBOX_SESSION_SHARE, SNAP |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ ‘userspace’ in cpuinfo.governors cpuinfo.platform not in (“ppc64el”, “ppc64le”, “s390x”) |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Parses information about CPU topology provided by proc and sysfs and checks that they are consistent. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | int(cpuinfo.count) > 1 and (cpuinfo.platform == ‘i386’ or cpuinfo.platform == ‘x86_64’) |
Disk tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | disk |
| Status: | Blocking |
| Purpose: | Verify that disk storage performs at or above baseline performance |
| After-suspend: | True |
| From template: | disk/read_performance_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Unit type: | template |
| Category ID: | disk |
| Status: | Blocking |
| Purpose: | Take the path of the storage device and test if it is a block device. |
| After-suspend: | True |
| From template: | disk/storage_device_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Category ID: | disk |
| Status: | Blocking |
| Purpose: | This test will check if your system can support daisy-chaining of a storage and a monitor over Thunderbolt 3 port |
| Steps: |
|
| Verification: |
|
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_thunderbolt3 == ‘True’ |
has_thunderbolt3.| Category ID: | disk |
| Status: | Blocking |
| Purpose: | This test will check if the connection of a Thunderbolt 3 HDD could be detected, then performs read/write operations on the attached Thunderbolt 3 HDD storage and checks if the removal of the Thunderbolt 3 HDD can be detected. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | manifest.has_thunderbolt3 == ‘True’ |
has_thunderbolt3.Ethernet Device tests¶
Connections are tested for functionality, but not for performance.
The following test units are covered in this category:
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Test to detect and return information about available network controllers on the system under test. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_ethernet_adapter == ‘True’ |
has_ethernet_adapter.| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Check that hotplugging works on port {{ interface }} |
| After-suspend: | True |
| From template: | ethernet/hotplug-interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | This test uses iperf3 to ensure network devices pass data at an acceptable minimum percentage of advertised speed (Reverse). |
| From template: | ethernet/iperf3_reverse_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | This test uses iperf3 to ensure network devices pass data at an acceptable minimum percentage of advertised speed. |
| From template: | ethernet/iperf3_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Check any of the cable Ethernet ports available on the system can ping its default gateway. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | device.category == ‘NETWORK’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Check Ethernet works by pinging another machine |
| After-suspend: | True |
| From template: | ethernet/ping_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
Graphics tests¶
The following test units are covered in this category:
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test cycles through the detected video modes for the graphics card |
| Steps: |
|
| Verification: | Did the screen appear to be working for each mode? |
| After-suspend: | True |
| Environment variable: | XDG_CURRENT_DESKTOP, XDG_SESSION_TYPE |
| Plugin: | user-interact-verify |
| Requires: | package.name == ‘xorg’ |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test will verify the maximum supported resolution on the primary graphics card. |
| Steps: |
|
| Verification: | Is this the maximum resolution for the display connected to the graphics card? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | device.category == ‘VIDEO’ |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test will test display rotation on the graphics card |
| Steps: |
|
| Verification: | Did the display rotation take place without permanent screen corruption? |
| After-suspend: | True |
| Environment variable: | XDG_CURRENT_DESKTOP, XDG_SESSION_TYPE |
| Plugin: | user-interact-verify |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test will test the default display with a sample video |
| Steps: |
|
| Verification: | Do you see color bars and static? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ |
graphics/index_valid_glxgears_fullscreen_product_slugTest that glxgears works in full screen mode for {vendor} {product} (manual)
| Unit type: | template |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test tests the basic fullscreen 3D capabilities of your {vendor} {product} video card |
| After-suspend: | True |
| From template: | graphics/index_valid_glxgears_fullscreen_product_slug |
| Template resource: | graphics_card |
| Unit type: | template |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test tests the basic 3D capabilities of your {vendor} {product} video card |
| After-suspend: | True |
| From template: | graphics/index_valid_glxgears_product_slug |
| Template resource: | graphics_card |
I²C (Inter-Integrated Circuit)¶
All devices attached to the I2C bus must be detectable. This includes:
Temperature sensors
Humidity sensors
Accelerometers
The following test units are covered in this category:
| Category ID: | i2c |
| Status: | Blocking |
| Purpose: | If an expected number of I²C buses is provided, the job will verify the detected number is correct. If the expected number of buses is not provided, the job will pass if at least one I²C bus is detected. |
| Environment variable: | I2C_BUS_NUMBER |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_i2c == ‘True’ |
has_i2c.Media Card tests¶
Media Card readers are tested for read and write for the following type of cards:
CF
MMC
MS
MSP
SD
SDHC
SDXC
XD
The following test units are covered in this category:
| Category ID: | mediacard |
| Status: | Blocking |
| Purpose: | This test will check that the system’s media card reader can detect the insertion of a UNLOCKED Secure Digital High-Capacity (SDHC) media card Then it performs a read and write test on the SDHC card. Finally, it checks that the system detects the removal of the SDHC card. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | manifest.has_card_reader == ‘True’ |
has_card_reader.Memory tests¶
Proper detection of the amount of memory installed is required (the amount of memory installed is the memory seen by the OS).
The following test units are covered in this category:
Miscellaneous tests¶
The following test units are covered in this category:
| Category ID: | miscellanea |
| Status: | Blocking |
| Purpose: | Test to verify that the system uses production, rather than pre-release, versions of the kernel and the OS. |
| Plugin: | shell |
| Requires: | “Ubuntu Core” not in lsb.description |
| Category ID: | miscellanea |
| Status: | Blocking |
| Purpose: | Verify installed Debian package files against MD5 checksum lists from /var/lib/dpkg/info/*.md5sums. |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘debsums’ |
miscellanea/grub_file_checkCheck if the file core.efi exists to make sure shim and grub can be upgraded
| Category ID: | miscellanea |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | “Ubuntu Core” not in lsb.description cpuinfo.platform in (“x86_64”, “aarch64”, “armhf”) bootloader.name == “grub” |
| Category ID: | miscellanea |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Run Firmware Test Suite (FWTS) oops tests. |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
Monitor tests¶
Each of the available external video ports (supported ports are HDMI, DisplayPort, DVI) are tested one by one. Output to the display must work i.e. a console is presented.
The following test units are covered in this category:
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check changes to screen brightness. |
| Steps: |
|
| Verification: | Was your screen dimmed approximately to half of the maximum brightness? |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | dmi.display_type == “integrated” |
monitor/displayportTest the DisplayPort port functionality with mirrored, extended, external, or onboard display modes.
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your DisplayPort port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the DisplayPort-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dp == ‘True’ |
has_dp.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the DisplayPort port and the ability to do hotplugging. |
| Steps: | Skip this test if your system does not have a DisplayPort port. 1. If a display is already connected, unplug it. 2. (Re-)Connect a display to the DisplayPort port on your system |
| Verification: | Was the interface displayed correctly on the screen? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dp == ‘True’ |
has_dp.monitor/dviCheck DVI port functionality by connecting a display and verifying different display modes.
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your DVI port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the DVI-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dvi == ‘True’ |
has_dvi.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your HDMI port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the HDMI-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_hdmi == ‘True’ |
has_hdmi.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the HDMI port and the ability to do hotplugging. |
| Steps: | Skip this test if your system does not have a HDMI port. 1. If a display is already connected, unplug it. 2. (Re-)Connect a display to the HDMI port on your system |
| Verification: | Was the interface displayed correctly on the screen? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_hdmi == ‘True’ |
has_hdmi.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your monitor power saving capabilities |
| Steps: |
|
| Verification: | Did the monitor go blank and turn on again after a few seconds? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your Thunderbolt 3 port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the Thunderbolt-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_thunderbolt3 == ‘True’ |
has_thunderbolt3.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the connection of a screen using a “USB Type-C to DisplayPort” adapter. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the screen connected using a “USB Type-C to DisplayPort” adapter in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_usbc_video == ‘True’ |
has_usbc_video.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the connection of a display using a “USB Type-C to HDMI” adapter. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the screen connected using a “USB Type-C to HDMI” adapter in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_usbc_video == ‘True’ |
has_usbc_video.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the connection of a screen using a “USB Type-C to VGA” adapter. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the screen connected using a “USB Type-C to VGA” adapter in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_usbc_video == ‘True’ |
has_usbc_video.Non-device specific networking tests¶
The following test units are covered in this category:
| Category ID: | networking |
| Status: | Blocking |
| Purpose: | Tests whether the system has a working Internet connection. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | networking |
| Status: | Blocking |
| Purpose: | This test will check the network device {__index__} ({interface}) |
| After-suspend: | True |
| From template: | networking/info_device__index___interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ |
Power Management tests¶
Warm reboot is tested such that the system must be able to perform the reboot command and services must be restarted such that systemctl does not identify a failed state.
Cold reboot is performed where an RTC is available (see next section). The wakealarm is used to reboot the system after a period of rest and services must be restarted such that systemctl does not identify a failed state.
The following test units are covered in this category:
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | This test powers off the system and then powers it on using RTC |
| Environment variable: | COLD_REBOOT_DELAY, RTC_DEVICE_FILE |
| User: | root |
| Plugin: | shell |
| Requires: | rtc.state == ‘supported’ rtc.wakealarm == ‘supported’ |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Test ACPI Wakealarm (fwts wakealarm) |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Check there are no failed services after the cold reboot |
| User: | root |
| Plugin: | shell |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Check there are no failed services after the warm reboot |
| User: | root |
| Plugin: | shell |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Verify that the Real-time clock (RTC) device functions properly, if present. |
| After-suspend: | True |
| Environment variable: | RTC_DEVICE_FILE |
| User: | root |
| Plugin: | shell |
| Requires: | rtc.state == ‘supported’ cpuinfo.other != ‘emulated by qemu’ |
Serial Port¶
Tests are carried out on ports that provide access via the Linux tty layer. The exact tests performed depend on the physical characteristics of the driver/receiver hardware. The possible tests include:
Ensure expected number of devices are available
Looped tests:
RS232 Ports: perform loopback test to ensure RX/TX
RS422/485 Ports: connect together to ensure RX/TX
Machine to Machine tests: confirm that a connection can be made to another PC device and RX/TX is operational
The following test units are covered in this category:
Suspend tests¶
The following test units are covered in this category:
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Verify that mixer settings after suspend are the same as before suspend. |
| Plugin: | shell |
| Requires: | manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_audio_playback.| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_audio_playback.| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Verify that all CPUs are online after resuming. |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
suspend/display_after_suspendVerify if the display functions normally after a suspend and resume cycle.
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | This test will check that the display is correct after suspend and resume |
| Steps: |
|
| Verification: | Does the display work normally after resuming from suspend? |
| Plugin: | manual |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Verify that all memory is available after resuming from suspend. |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Test the network after resuming. |
| User: | root |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Run Firmware Test Suite (fwts) oops tests after suspend. |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Query sysfs and debugfs for the amount of times the system was suspended. We expect the count in /sys/power/suspend_stats/success and suscess in /sys/kernel/debugfs/suspend_stats to be non zero |
| User: | root |
| Plugin: | shell |
Touchscreen tests¶
The following test units are covered in this category:
touchscreen/evdev/2-touch-tap-product_slugValidate proper detection of a 2-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that 2-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/2-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
touchscreen/evdev/3-touch-tap-product_slugValidate proper detection of a 3-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that 3-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/3-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
touchscreen/evdev/4-touch-tap-product_slugValidate the detection of a 4-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that 4-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/4-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
touchscreen/evdev/single-touch-tap-product_slugValidate the detection of a single-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that single-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/single-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
TPM 2.0 (Trusted Platform Module)¶
On Intel and AMD x86 platforms that include TPM 2.0 compliant modules, it is required that all commands necessary to support Ubuntu’s Full Disk Encryption functionality are supported.
The following test units are covered in this category:
clevis-encrypt-tpm2/detect-ecc-capabilitiesEnsure the TPM has required capabilities for clevis ECC test
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
clevis-encrypt-tpm2/detect-rsa-capabilitiesEnsure the TPM has required capabilities for clevis RSA test
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_tpm2_chip == ‘True’ executable.name == ‘clevis-encrypt-tpm2’ |
has_tpm2_chip.USB tests¶
USB 2.0¶
USB storage devices must work on all available USB ports. USB Human Interface Devices (HID), specifically keyboard or mouse, should be working properly on any USB port.
USB 3.0¶
USB storage devices must work on all available USB ports. USB Human Interface Devices (HID), specifically keyboard or mouse, should be working properly on any USB port.
USB Type C (USB 3.1)¶
USB Type C (USB 3.1) supports various types of devices (e.g. Video, Power) through the use of adapters or peripherals. The following adapters/peripherals should work:
Storage devices
Keyboard or mouse (basic functionality)
When DisplayPort over USB Type-C is advertised:
- Display hot plugging and the following display are required to work:
mirrored, extended, internal only, external only.
Audio output needs to be undistorted over this port.
The following test units are covered in this category:
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | This test will check if system detects network interface of the Type-C to ethernet adapter. |
| Steps: |
|
| Verification: | <missing verification> |
| After-suspend: | True |
| Plugin: | user-interact |
| Requires: | manifest.has_usbc_data == ‘True’ |
has_usbc_data.| Category ID: | usb |
| Status: | Blocking |
| Purpose: | This test will check that the system correctly detects the insertion of a USB 3.0 storage device in a USB Type-C connector. Then it performs a read and write test on the device. Finally, it checks that the system correctly detects the removal of the USB 3 storage. NOTE: Make sure the USB 3 storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | usb.usb3 == ‘supported’ manifest.has_usbc_data == ‘True’ |
has_usbc_data.| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Detects and shows USB devices attached to this system. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | cpuinfo.platform != ‘s390x’ |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Check USB input device works |
| Steps: |
|
| Verification: | What was just input is displayed correctly |
| After-suspend: | True |
| Plugin: | manual |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_usb_storage == ‘True’ |
has_usb_storage.| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Check system can detect insertion of a USB 2.0 storage device. Then it performs a read and write test on the USB 2.0. Finally, it checks that the system correctly detects the removal of the USB 2.0. NOTE: Make sure the USB storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
usb/storage-preinserted-symlink_uuidTest USB storage on 2.0 or 1.1 ports detected by udev ({symlink_uuid})
| Unit type: | template |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on randomly created data. It requires that a USB stick is plugged into an available USB port before running the certification suite. |
| After-suspend: | True |
| From template: | usb/storage-preinserted-symlink_uuid |
| Template resource: | removable_partition |
| Template filter: | “usb” in removable_partition.bus |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Check system can detect insertion of a USB 3.0 storage device. Then it performs a read and write test on the USB 3.0. Finally, it checks that the system correctly detects the removal of the USB 3.0. NOTE: Make sure the USB storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | usb.usb3 == ‘supported’ |
Wireless networking tests¶
Wi-Fi interfaces are tested for connection to access points configured for 802.11 b/g/n/ac/ax protocols.
The following test units are covered in this category:
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_wlan_adapter == ‘True’ |
has_wlan_adapter.wireless/wireless_connection_open_ac_nm_interfaceConnect to unencrypted 802.11ac Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ac AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ac_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_ac_np_interfaceConnect to unencrypted 802.11ac Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ac AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ac_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_ax_nm_interfaceConnect to unencrypted 802.11ax Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ax AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ax_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_ax_np_interfaceConnect to unencrypted 802.11ax Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ax AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ax_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_be_nm_interfaceConnect to unencrypted 802.11be Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11be AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_be_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_be_np_interfaceConnect to unencrypted 802.11be Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11be AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_be_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_bg_nm_interfaceConnect to an unencrypted 802.11b/g Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check the system can connect to an insecure 802.11b/g AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_bg_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_bg_np_interfaceConnect to unencrypted 802.11b/g Wi-Fi network on {{ interface }} using netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check the system can connect to an unsecured 802.11b/g access point using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_bg_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_n_nm_interfaceConnect to an unencrypted 802.11n Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check if the system can connect to an unsecured 802.11n access point. |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_n_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_n_np_interfaceConnect to unencrypted 802.11n Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11n AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_n_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_ax_nm_interfaceConnect to WPA3-encrypted 802.11ax Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa3 security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_ax_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_ax_np_interfaceConnect to WPA3-encrypted 802.11ax Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa3 security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_ax_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_be_nm_interfaceConnect to WPA3-encrypted 802.11be Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa3 security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_be_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_be_np_interfaceConnect to WPA3-encrypted 802.11be Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa3 security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_be_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ac_nm_interfaceConnect to WPA-encrypted 802.11ac Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ac AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ac_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ac_np_interfaceConnect to WPA-encrypted 802.11ac Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ac AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ac_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ax_nm_interfaceConnect to WPA-encrypted 802.11ax Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ax_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ax_np_interfaceConnect to WPA-encrypted 802.11ax Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ax_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_be_nm_interfaceConnect to WPA-encrypted 802.11be Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_be_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_be_np_interfaceConnect to WPA-encrypted 802.11be Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_be_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_bg_nm_interfaceConnect to WPA-encrypted 802.11b/g Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11b/g AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_bg_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_bg_np_interfaceConnect to WPA-encrypted 802.11b/g Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11b/g AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_bg_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_n_nm_interfaceConnect to a WPA-encrypted 802.11n Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check if the system can connect to an 802.11n AP with WPA security. |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_n_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_n_np_interfaceConnect to a WPA-encrypted 802.11n Wi-Fi network on {{ interface }} using netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check if the system can connect to an 802.11n AP with WPA security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_n_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can find a wireless network AP nearby |
| After-suspend: | True |
| From template: | wireless/wireless_scanning_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
Wireless Wide Area Network¶
WWAN interfaces are tested for connection to 3G/4G/LTE services.
The following test units are covered in this category:
wwan/check-sim-present-manufacturer-model-hw_id-autoCheck if a SIM card is present in a slot connected to the modem
| Unit type: | template |
| Category ID: | wwan |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Check if a SIM card is present in a slot connected to the modem |
| After-suspend: | True |
| From template: | wwan/check-sim-present-manufacturer-model-hw_id-auto |
| Template resource: | wwan_resource |
| Category ID: | wwan |
| Status: | Blocking |
| Purpose: | Tests that there is a WWAN module present and indicates that testing of it should follow. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_wwan_module == ‘True’ snap.name == ‘modem-manager’ or package.name == ‘modemmanager’ |
has_wwan_module.wwan/gsm-connection-manufacturer-model-hw_id-autoVerify a GSM broadband modem can create a data connection multiple times
| Unit type: | template |
| Category ID: | wwan |
| Status: | Blocking |
| Purpose: | Any modems discovered by the resource job that list GSM support will be tested to ensure a data connection can be made. |
| After-suspend: | True |
| From template: | wwan/gsm-connection-manufacturer-model-hw_id-auto |
| Template resource: | wwan_resource |
Non-blocking¶
Advanced Configuration and Power Interface¶
The following test units are covered in this category:
Audio tests¶
The following test units are covered in this category:
| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_audio_capture == ‘True’ |
has_audio_capture.| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_audio_playback == ‘True’ |
has_audio_playback.Bluetooth - BlueZ Self Tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | Runs a specific test from the bnep test suite. |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-bnep-tests_bluez-internal-bnep-test |
| Template resource: | bluez-internal-bnep-tests |
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Runs a specific test from the hci test suite |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-hci-tests_bluez-internal-hci-test |
| Template resource: | bluez-internal-hci-tests |
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | Runs a specific test from the rfcomm test suite |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-rfcomm-tests_bluez-internal-rfcomm-test |
| Template resource: | bluez-internal-rfcomm-tests |
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | Runs a specific test from the user channel test suite |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-uc-tests_bluez-internal-uc-test |
| Template resource: | bluez-internal-uc-tests |
Bluetooth tests¶
The following test units are covered in this category:
| Category ID: | bluetooth |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | package.name == ‘bluez’ or snap.name == ‘bluez’ environment.CHECKBOX_RUNNING_STRICT_SNAP != “1” or (connections.slot == ‘bluez:service’ and connections.plug == ‘{{ __system_env__[“SNAP_NAME”] }}:bluez’) |
bluetooth4/beacon_eddystone_url_interfaceTest system can get beacon EddyStone URL advertisements on the {{ interface }} adapter
| Unit type: | template |
| Category ID: | bluetooth |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | bluetooth4/beacon_eddystone_url_interface |
| Template resource: | device |
| Template filter: | device.category == ‘BLUETOOTH’ |
Camera tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | Uses an image of the camera to get the quality based on a No-Reference image quality assessment algorithm called BRISQUE. This test will timeout and fail if the quality has not been computed within 120 seconds. |
| From template: | camera/camera-quality-rpi_name |
| Template resource: | device |
| Template filter: | device.category == ‘MMAL’ and device.name != ‘’ |
camera/multiple-resolution-images-rpi-attachment_nameAttach an image from the multiple resolution images test on rpi
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | This test will attach one of the images used for the multiple resolution images test on rpi. |
| From template: | camera/multiple-resolution-images-rpi-attachment_name |
| Template resource: | device |
| Template filter: | device.category == ‘MMAL’ and device.name != ‘’ |
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | Takes multiple pictures based on the resolutions supported by the camera and validates their size and that they are of a valid format. |
| From template: | camera/multiple-resolution-images-rpi_name |
| Template resource: | device |
| Template filter: | device.category == ‘MMAL’ and device.name != ‘’ |
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | Takes multiple pictures based on the resolutions supported by the camera and validates their size and that they are of a valid format. |
| After-suspend: | True |
| From template: | camera/multiple-resolution-images_name |
| Template resource: | device |
| Template filter: | device.category == ‘CAPTURE’ and device.name != ‘’ |
CPU tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Validate that the Floating Point Unit is running on {platform} device. |
| From template: | cpu/arm64_vfp_support_platform |
| Template resource: | cpuinfo |
| Template filter: | cpuinfo.platform == ‘aarch64’ |
cpu/armhf_vfp_support_platformValidate that the Vector Floating Point Unit is running on {platform} device
| Unit type: | template |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Validate that the Vector Floating Point Unit is running on {platform} device. |
| From template: | cpu/armhf_vfp_support_platform |
| Template resource: | cpuinfo |
| Template filter: | cpuinfo.platform == ‘armv7l’ |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | Runs a test for clock jitter on SMP machines. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | cpuinfo.platform not in (“s390x”) |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the FWTS desktop diagnosis results log to the submission. |
| Plugin: | attachment |
| Requires: | cpuinfo.platform not in (“aarch64”, “armv7l”, “s390x”) |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | Attaches the log generated by cpu/maxfreq_test to the results submission. |
| Plugin: | attachment |
DesignWare Core SuperSpeed USB 3.0 Controller¶
The following test units are covered in this category:
| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_usb_dwc3_controller == ‘True’ |
has_usb_dwc3_controller.| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | Check that after connecting the device under test (DUT) to another device (host), DUT can be detected as mass storage device by the host. |
| Steps: |
|
| Verification: | The host detects and mounts a mass storage device. It has read and write permissions on it. |
| User: | root |
| Plugin: | user-interact-verify |
| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_usb_dwc3_controller == ‘True’ |
has_usb_dwc3_controller.Disk tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | disk/apste_support_on_name |
| Template resource: | device |
| Template filter: | device.driver == ‘nvme’ and device.category == ‘OTHER’ |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Examine the system to detect Software RAID devices are created and the RAID mode are expected the SOFTWARE_RAID_LEVEL variable is needed for this tests. e.g. SOFTWARE_RAID_LEVEL=”raid0 raid1 raid5” |
| Environment variable: | SOFTWARE_RAID_LEVEL |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘mdadm’ manifest.has_md_raid == ‘True’ |
has_md_raid.| Unit type: | template |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | Disk stress-ng test for {product_slug} |
| From template: | disk/disk_stress_ng_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Unit type: | template |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | This test checks disk stats, generates some activity and rechecks stats to verify they’ve changed. It also verifies that disks appear in the various files they’re supposed to. . This test will inspect the following disk: . product name: {product_slug} sysfs path: {path} device node path: /dev/{name} |
| After-suspend: | True |
| From template: | disk/stats_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ and device.name != ‘’ |
Docker containers¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/build-single_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/commit_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/compose-and-basic_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/compose-restart_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/compose-single_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/copy_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/deploy-registry_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/diff_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/export-and-import_arch |
| Template resource: | docker_resource |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| User: | root |
| Requires: | executable.name == ‘docker’ |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/inspect_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/interative_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/kill_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/restart-always_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/restart-on-failure_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/run_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/save-and-load_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/start-stop_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/update_arch |
| Template resource: | docker_resource |
Eeprom¶
The following test units are covered in this category:
| Category ID: | eeprom |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_eeprom == ‘True’ |
has_eeprom.Error Detection And Correction (EDAC) Memory Controllers¶
The following test units are covered in this category:
| Category ID: | edac |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | attachment |
| Requires: | executable.name == ‘edac-util’ manifest.has_edac_module == ‘True’ |
has_edac_module.| Category ID: | edac |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| Requires: | executable.name == ‘edac-util’ manifest.has_edac_module == ‘True’ |
has_edac_module.Ethernet Device tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Non-blocking |
| Purpose: | Check that another system can wake the System Under Test (SUT) up from S3 using the Ethernet port {interface}’s WOL function. |
| From template: | ethernet/wol_S3_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.mac != ‘UNKNOWN’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Non-blocking |
| Purpose: | Check that another system can wake up from S4 the System Under Test (SUT) using ethernet port {interface} Wake-on-LAN (WOL) function. |
| From template: | ethernet/wol_S4_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.mac != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Non-blocking |
| Purpose: | Check that another system can wake the System Under Test (SUT) from S5 using the Ethernet port {interface} WOL function. |
| From template: | ethernet/wol_S5_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.mac != ‘UNKNOWN’ |
Firmware tests¶
The following test units are covered in this category:
| Category ID: | firmware |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Run Firmware Test Suite (fwts) QA-concerned desktop-specific diagnosis tests. |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
| Category ID: | firmware |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the FWTS desktop diagnosis results log to the submission |
| Plugin: | attachment |
| Category ID: | firmware |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | attachment |
Gathers information about the DUT¶
The following test units are covered in this category:
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Gets CPU resource info from /proc/cpuinfo |
| User: | root |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Gets info on the version of dpkg installed |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates a list of interface declarations on the device |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates release info based on /etc/os-release |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates resource info based on /proc/meminfo |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates a list of packages |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates a list of snap packages |
| Plugin: | resource |
General Purpose I/O¶
The following test units are covered in this category:
gpio/gpiomem_loopback_pairs_modelTest GPIO lines exposed on headers can be controlled via /dev/gpiomem
| Unit type: | template |
| Category ID: | gpio |
| Status: | Non-blocking |
| Purpose: | Ensure GPIO lines exposed on headers are controllable via /dev/gpiomem using the RPi python module for specific models. |
| After-suspend: | True |
| From template: | gpio/gpiomem_loopback_pairs_model |
| Template resource: | com.canonical.certification::model_assertion |
| Template filter: | model_assertion.model in (“pi2”, “pi3”, “ubuntu-core-18-pi2”, “ubuntu-core-18-pi3”) |
| Unit type: | template |
| Category ID: | gpio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | gpio/sysfs_loopback_pairs_model |
| Template resource: | com.canonical.certification::model_assertion |
| Template filter: | model_assertion.model in (“pi2”, “pi3”, “ubuntu-core-18-pi2”, “ubuntu-core-18-pi3”) |
gpio/sysfs_loopback_pairs_vendor_productTest GPIO lines exposed on headers can be controlled via sysfs
| Unit type: | template |
| Category ID: | gpio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | gpio/sysfs_loopback_pairs_vendor_product |
| Template resource: | dmi |
| Template filter: | dmi.category == ‘SYSTEM’ and dmi.vendor == ‘AAEON’ and dmi.product in (‘UPX-TGL01’, ‘UPN-EHL01’) |
Hardware video acceleration¶
The following test units are covered in this category:
| Category ID: | va-api |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | package.name == ‘vainfo’ cpuinfo.platform == ‘x86_64’ manifest.has_va_api == ‘True’ |
has_va_api.Informational tests¶
The following test units are covered in this category:
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the contents of /proc/acpi/sleep if it exists. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a report of installed codecs for Intel HDA |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a report of CPU information |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches json dumps of installed dkms package information. |
| Plugin: | attachment |
| Requires: | package.name == ‘dkms’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a copy of /var/log/dmesg or the current dmesg buffer to the test results |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches info on DMI |
| Plugin: | attachment |
| Requires: | dmi_present.state == ‘supported’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches dmidecode output |
| User: | root |
| Plugin: | attachment |
| Requires: | executable.name == ‘dmidecode’ dmi_present.state == ‘supported’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attach system debian packages status |
| Plugin: | attachment |
| Requires: | executable.name == ‘dpkg’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the firmware version |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the buildstamp identifier for the OS |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches information about disk partitions |
| User: | root |
| Plugin: | attachment |
| Unit type: | template |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | info/hdparm_name.txt |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Checks the value of the CONFIG_INTEL_IOMMU_DEFAULT_ON flag in the kernel configuration |
| Plugin: | shell |
| Requires: | cpuinfo.platform in (“i386”, “x86_64”) |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Output whether secure boot is enabled or disabled |
| Plugin: | attachment |
| Requires: | package.name == ‘mokutil’ manifest.has_secure_boot == ‘True’ |
has_secure_boot.| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | This job prints a tree of the time-critical chain of SystemD units. |
| Plugin: | shell |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Returns the name, driver name and driver version of any touchpad discovered on the system. |
| Plugin: | attachment |
| Requires: | device.category == ‘TOUCHPAD’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the installer debug log if it exists. |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the kernel command line used to boot |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a list of the currently running kernel modules. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches very verbose lspci output. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a hex dump of the standard part of the PCI configuration space for all PCI devices. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the system topology as presented by the lstopo command |
| Plugin: | attachment |
| Requires: | executable.name == ‘lstopo’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a list of detected USB devices. |
| After-suspend: | True |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | This job loads the hardware manifest and exposes it as a resource. |
| Plugin: | resource |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches info on system memory as seen in /proc/meminfo. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches modinfo information for all currently loaded modules |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the contents of the various modprobe conf files. |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the contents of the /etc/modules file. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the contents of various sysctl config files. |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches a report of sysfs attributes. |
| Plugin: | attachment |
| Requires: | cpuinfo.platform not in (“aarch64”) |
Intel Integrated Sensor Hub Transport Protocol (ISHTP)¶
The following test units are covered in this category:
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_eclite == ‘True’ |
has_eclite.eclite/temperature-reading-from-thermal-acpitzRead the temperature of acpitz to ensure Eclite is functional
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | For testing the feature of Eclite, one way is to monitor the temperature of acpitz thermal. |
| User: | root |
| Plugin: | shell |
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_ishtp == ‘True’ |
has_ishtp.Intel Management Engine Interface (MEI)¶
The following test units are covered in this category:
| Category ID: | mei |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | cpuinfo.platform in (“i386”, “x86_64”) manifest.has_mei == ‘True’ |
has_mei.| Category ID: | mei |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | cpuinfo.platform in (“i386”, “x86_64”) manifest.has_mei == ‘True’ |
has_mei.LED tests¶
The following LEDS will be tested for functionality:
Cloud LED
Wireless LED
Bluetooth LED
WWAN LED
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | led |
| Status: | Non-blocking |
| Purpose: | Check that {name} LED turns on and off. |
| After-suspend: | True |
| From template: | led-indicator/gpio-controller-leds-name |
| Template resource: | led-indicator/gpio-controller-leds |
| Unit type: | template |
| Category ID: | led |
| Status: | Non-blocking |
| Purpose: | Check that {name} LED turns on and off. |
| After-suspend: | True |
| From template: | led-indicator/gpio-leds-name |
| Template resource: | led-indicator/gpio-leds |
Media Card tests¶
The following test units are covered in this category:
| Category ID: | mediacard |
| Status: | Non-blocking |
| Purpose: | This test will check that the system’s media card reader can detect the insertion of a Secure Digital Extended Capacity (SDXC) media card Then it performs a read and write test on the SDXC card. Finally, it checks that the system detects the removal of the SDXC card. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| User: | root |
| Plugin: | user-interact |
| Requires: | manifest.has_card_reader == ‘True’ |
has_card_reader.mediacard/storage-preinserted-symlink_uuidAutomated test of SD Card reading & writing ({symlink_uuid})
| Unit type: | template |
| Category ID: | mediacard |
| Status: | Non-blocking |
| Purpose: | This is a fully automated version of mediacard/sd-automated and assumes that the system under test has a memory card device plugged in prior to checkbox execution. |
| After-suspend: | True |
| From template: | mediacard/storage-preinserted-symlink_uuid |
| Template resource: | removable_partition |
| Template filter: | removable_partition.bus == ‘mediacard’ |
Miscellaneous tests¶
The following test units are covered in this category:
install/apt-get-gets-updatesEnsure apt can access repositories and get updates without installing them, to aid in recovery from broken updates.
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | Tests to see that apt can access repositories and get updates (does not install updates). This is done to confirm that you could recover from an incomplete or broken update. |
| User: | root |
| Plugin: | shell |
| Requires: | package.name == ‘apt’ |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | Device check |
| Steps: |
|
| Verification: | Do the devices reported by udev match the devices on the Manifest? |
| Plugin: | user-interact-verify |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | Attaches the FWTS oops results log to the submission |
| Plugin: | attachment |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | A meta-job that verifies the data necessary for a complete result submission are present. Failure indicates that the results are incomplete and may be rejected. |
| Plugin: | shell |
Monitor tests¶
The following test units are covered in this category:
| Category ID: | monitor |
| Status: | Non-blocking |
| Purpose: | Check output to display through VGA adaptor on DVI port |
| Steps: |
|
| Verification: | Output to display works |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dvi == ‘True’ |
has_dvi.| Category ID: | monitor |
| Status: | Non-blocking |
| Purpose: | Check output to display through VGA adaptor on HDMI port |
| Steps: |
|
| Verification: | Output to display works |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_hdmi == ‘True’ |
has_hdmi.| Category ID: | monitor |
| Status: | Non-blocking |
| Purpose: | Check output to display through VGA port |
| Steps: |
|
| Verification: | Output to display works |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_vga == ‘True’ |
has_vga.Non-device specific networking tests¶
The following test units are covered in this category:
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | Test if the running kernel supports IPv6. |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| After-suspend: | True |
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest._ignore_disconnected_ethernet_interfaces == ‘True’ |
_ignore_disconnected_ethernet_interfaces.| Unit type: | template |
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | ipv6_link_local_address_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | Verify that all network interfaces have predictable names. |
| Plugin: | shell |
| Requires: | environment.CHECKBOX_RUNNING_STRICT_SNAP != “1” or lsb.release >= ‘20’ environment.CHECKBOX_RUNNING_STRICT_SNAP != “1” or model_assertion.gadget != “pi” environment.CHECKBOX_RUNNING_STRICT_SNAP == “1” or lsb.release >= ‘18’ |
Power Management tests¶
Suspend/Resume¶
For x86 devices, a 30 cycle suspend/resume stress test is performed using the FWTS. The suspend mode (e.g. S3, S2Idle) used during the test will be the default for the system under test. The test is passed if all 30 cycles complete without failure. Any errors reported in the fwts log for the 30 cycle suspend/resume stress test are informational only and do not affect the outcome of the test, however, we do recommend examining and fixing any failures noted, as they indicate firmware non-compliance with standards.
In addition a single suspend is performed across which the following features and devices are tested:
CPU
Memory
Networking (Wifi, Ethernet)
Audio
Bluetooth
USB controllers
Input devices
Mediacards
The following test units are covered in this category:
| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | Attach log from fwts wakealarm test |
| Plugin: | attachment |
| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| Requires: | manifest.has_hardware_watchdog == ‘True’ |
has_hardware_watchdog.| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | Check there are no failed services after the watchdog triggered |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_hardware_watchdog == ‘True’ |
has_hardware_watchdog.| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| Requires: | manifest.has_hardware_watchdog == ‘True’ |
has_hardware_watchdog.Quadrature Encoder Peripherals¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | qep |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Checks that the device exists in lspci and that the device driver associated is correct. Device ID should be 8086:{qep-device} and the driver is always intel_qep. |
| From template: | qep/qep-device-driver-for-qep-device |
| Template resource: | qep/qep-devices |
Real Time Clock (RTC)¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | rtc_category |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | rtc/rtc_alarm_rtc |
| Template resource: | rtc_list |
| Unit type: | template |
| Category ID: | rtc_category |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | rtc/rtc_clock_rtc |
| Template resource: | rtc_list |
Snapd¶
The following test units are covered in this category:
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | The store should contain the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap. The test makes sure this can be downloaded and installed on the system. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | If snap list command is working then should at least find the ubuntu-core package. |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | The test will install the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap from the stable channel and then refreshes it to the edge channel and compares the revision before and after the refresh. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | After having installed the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap, check it can be removed. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Checks that the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap can be refreshed after removal of the blacklisted revision. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Checks if the edge channel {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap is reverted back to the one from stable. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | If snap find command is working then should find {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} in the store. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Test all the snaps’ confinement, devmode, revision. Make sure the confinement is “strict”, devmode is “False”, and revision should not be sideloaded. |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | The image can be tied to using a particular store for the OEM. This tests the store for the image is as expected. |
| From template: | snappy/test-store-config-store |
| Template resource: | com.canonical.certification::model_assertion |
| Template filter: | model_assertion.store not in (‘unknown’) |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Test the snappy install command is able to install and remove snap in beta channel store. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Test the snappy install command is able to install a snap in the edge channel store. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
SocketCAN interface tests¶
Devices that support the SocketCAN standard are tested to ensure that the adapter is present and can be communicated with via CANBus configuration commands.
The following test units are covered in this category:
socketcan/send_packet_local_eff_virtualVirtual CAN device support test (Local test with raw socket and EFF)
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test that the kernel supports CAN networking by sending packets to a virtual device using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket, this is only a local test as the broadcast packet is received on the same device. |
| After-suspend: | True |
| From template: | socketcan/send_packet_local_eff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test that the kernel supports CAN networking by sending packets to a virtual device using a raw socket; this is only a local test as the broadcast packet is received on the same device. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_socket_can_fd == ‘True’ |
has_socket_can_fd.| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| From template: | socketcan/send_packet_local_fd_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test that the kernel supports CAN networking by sending packets to a virtual device using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| From template: | socketcan/send_packet_local_sff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket to a remote device. As a prerequisite the remote device should have can-echo-server installed so as to return the predicted packet. |
| After-suspend: | True |
| From template: | socketcan/send_packet_remote_eff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket to a remote device. As a prerequisite, the remote device should have can-echo-server installed so as to return the predicted packet. |
| After-suspend: | True |
| From template: | socketcan/send_packet_remote_fd_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket to a remote device. As a prerequisite, the remote device should have can-echo-server installed so as to return the predicted packet. |
| After-suspend: | True |
| From template: | socketcan/send_packet_remote_sff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
Suspend tests¶
The following test units are covered in this category:
| Category ID: | suspend |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | If the DUT suspended successfully, /sys/power/suspend_stats/fail* and fail* in /sys/kernel/debug/suspend_stats will be zero. If a device failed /sys/power/suspend_stats/last_failed_dev and last_failed_dev in /sys/kernel/debug/suspend_stats will show the failed device |
| User: | root |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Non-blocking |
| Purpose: | Attaches the FWTS oops results log to the submission after suspend |
| Plugin: | attachment |
suspend/xrandr_screens_after_suspend_primaryAttach screenshots from suspend/cycle resolutions after suspend test to results.
| Category ID: | suspend |
| Status: | Non-blocking |
| Purpose: | This attaches screenshots from the suspend/cycle_resolutions_after_suspend test to the results submission. |
| Plugin: | attachment |
TPM 2.0 (Trusted Platform Module)¶
The following test units are covered in this category:
| Category ID: | tpm2 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | The information in the TPM Event Log can be useful in debugging problems with TPM command support and adherance to standards. This can be of particular help when checking whether a device can support Ubuntu Core Full Disk Encryption. |
| User: | root |
| Plugin: | attachment |
| Requires: | manifest.has_tpm2_chip == ‘True’ executable.name == ‘fwts’ |
has_tpm2_chip.USB tests¶
The following test units are covered in this category:
| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: |
|
| Verification: | The host and DUT can ping each other. |
| Description: | <missing description> |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | Check that after connecting the device under test (DUT) to another device (host), the DUT can be detected as a mass storage device by the host. |
| Steps: |
|
| Verification: | The host detects and mounts the mass storage device. It has read and write permissions on it. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | Check if USB OTG can work as a serial port. |
| Steps: |
|
| Verification: | Does string send and receive function correctly? |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | This test will check that you can use a USB HID device plugged in a USB Type-C port using a “USB Type-C to Type-A” adapter |
| Steps: |
|
| Verification: | Did the device work as expected? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_usbc_data == ‘True’ |
has_usbc_data.usb-c/c-to-a-adapter/storage-manualTest USB 3 storage device insertion + read/write + removal using a “Type-C to Type-A” adapter.
| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | This test will check that the system correctly detects the insertion of a USB 3 storage device in a USB Type-C connector using a “Type-C to Type-A” adapter. Then it performs a read and write test on the device. Finally, it checks that the system correctly detects the removal of the USB 3 storage. NOTE: Make sure the USB 3 storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | usb.usb3 == ‘supported’ manifest.has_usbc_data == ‘True’ |
has_usbc_data.Wi-Fi access point¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | wireless/nmcli_wifi_ap_a_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/nmcli_wifi_ap_bg_interfaceCreate 802.11b/g Wi-Fi AP on {{ interface }} using NetworkManager
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Create an 802.11b/g Wi-Fi access point on a specified interface using NetworkManager command-line tools. |
| After-suspend: | True |
| From template: | wireless/nmcli_wifi_ap_bg_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_b_no_sta_interface_autoCreate open 802.11b Wi-Fi AP on {interface} with no STA
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11b Access Point without any STA connection on {interface} by configuring the system using wifi-ap snap and then checking status of the interface using iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_b_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_b_no_sta_interface_manualCreate open 802.11b Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11b Access Point without any STA connection |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_b_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_g_no_sta_interface_autoCreate an open 802.11g Wi-Fi AP on {interface} with no STA connected.
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11g Access Point without any Station (STA) connection on {interface} by configuring the system using the wifi-ap snap and then checking the status of the interface using the iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_g_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_g_no_sta_interface_manualCreate open 802.11g Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11g Access Point without any STA connection |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_g_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_setup_wizard_interface_autoCreate Access Point on {interface} using wifi-ap.setup-wizard
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create a WPA2 802.11g Access Point using wifi-ap.setup-wizard command on {interface}. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_setup_wizard_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11b Access Point without any STA connection on {interface} by configuring the system using wifi-ap snap and then checking the status of the interface using iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_b_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_b_no_sta_interface_manualCreate WPA2 802.11b Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create a WPA2 802.11b Access Point without any STA connected |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_b_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_b_with_sta_interface_autoCreate a WPA2 802.11b Wi-Fi Access Point on {interface} with active STA
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_b_with_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11g Access Point without any Station (STA) connection on {interface} by configuring the system using the wifi-ap snap and then checking the status of the interface using the iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_g_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_g_no_sta_interface_manualCreate WPA2 802.11g Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create a WPA2 802.11g Access Point without any STA connection |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_g_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_g_with_sta_interface_autoCreate WPA2 802.11g Wi-Fi Access Point on {interface} with active STA
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_g_with_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
Wireless networking tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | wireless |
| Status: | Non-blocking |
| Purpose: | Ensure no crashes have occurred in the iwlwifi microcode. |
| After-suspend: | True |
| From template: | wireless/check_iwlwifi_microcode_crash_interface |
| Template resource: | device |
| Template filter: | device.driver == ‘iwlwifi’ |
| Unit type: | template |
| Category ID: | wireless |
| Status: | Non-blocking |
| Purpose: | Check if the DUT supports Wi-Fi 7 features like Multi-Link-Operation |
| After-suspend: | True |
| From template: | wireless/wifi7_mlo_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
Wireless Wide Area Network¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | wwan |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Scan for available 3GPP networks with the target modem |
| After-suspend: | True |
| From template: | wwan/3gpp-scan-manufacturer-model-hw_id-auto |
| Template resource: | wwan_resource |
Manifest Entries¶
The following manifest entries are required for certification:
has_audio_captureAudio capture: Machine can record sound. (For example, a desktop PC probably requires a microphone connected to it)
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
has_audio_playbackAudio playback: Machine can emit sound. (For example, a desktop PC probably requires speakers connected to it)
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following LED indicators? |
client-cert-iot-desktop-26-04¶
Note
The certification tests presented in this document are validated by Checkbox version 7.3.0.dev42.
Blocking¶
Audio tests¶
Output needs to be undistorted between 0%-100%. Output lines tested:
Internal speakers
3.5mm headphones
HDMI audio output
DisplayPort audio output
Input needs to be recorded undistorted between 0%-100%. Input lines tested:
Internal microphone
3.5mm microphone
Plug detection: when a new audio line input or output is plugged in the system, it needs to be recognized.
The following test units are covered in this category:
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check if sound that is ‘hearable’ by capture device. This test is intended mostly for devices without internal speakers/microphones, but with a line-in and a line-out ports to which a loopback cable can be connected. |
| After-suspend: | True |
| Environment variable: | ALSADEVICE, ALSA_CONFIG_PATH, LD_LIBRARY_PATH |
| Plugin: | shell |
| Requires: | manifest.has_audio_loopback_connector == ‘True’ |
has_audio_loopback_connector.audio/alsa_record_playback_automatedTest playback and recording functionality on the default audio input and output.
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Play back a sound on the default output and listen for it on the default input. This test is intended mostly for laptops, where the default output will be the internal speakers and the default input will be the internal microphone. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | package.name == ‘python3-gi’ package.name == ‘gir1.2-gstreamer-1.0’ package.name == ‘libgstreamer1.0-0’ package.name == ‘gstreamer1.0-plugins-good’ package.name in [‘gstreamer1.0-pulseaudio’, ‘gstreamer1.0-pipewire’] package.name == ‘alsa-base’ package.name in [‘pulseaudio-utils’, ‘pipewire’] manifest.has_audio_playback == ‘True’ |
has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | This test will check that recording sound using an external microphone works correctly |
| Steps: |
|
| Verification: | Did you hear your speech played back? If the port is a combo jack, your speech must be played back through the same headphones used for recording. |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | (manifest.has_line_in == ‘True’ or manifest.has_headset == ‘True’) manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gstreamer1.0-plugins-good’ or package.name == ‘gstreamer0.10-plugins-good’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_line_in, has_headset, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | This test will check that recording sound using the onboard microphone works correctly |
| Steps: |
|
| Verification: | Did you hear your speech played back? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_audio_playback == ‘True’ manifest.has_audio_capture == ‘True’ manifest.has_internal_microphone == ‘True’ package.name == ‘alsa-base’ package.name == ‘gstreamer1.0-plugins-good’ or package.name == ‘gstreamer0.10-plugins-good’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_audio_playback, has_audio_capture, has_internal_microphone.audio/channelsVerify that all audio channels are functioning correctly by hearing a voice clearly from them.
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check that the various audio channels are working properly |
| Steps: |
|
| Verification: | You should clearly hear a voice from the different audio channels |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_internal_speakers == ‘True’ |
has_internal_speakers.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Test to detect if there are available sinks |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | package.name in [‘pulseaudio-utils’, ‘pipewire’] manifest.has_audio_playback == ‘True’ |
has_audio_playback.audio/external-lineinVerify external line-in connection functionality by recording and playback testing.
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check that external line-in connection works correctly |
| Steps: |
|
| Verification: | Did you hear your recording? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_line_in == ‘True’ dmi.sane_product == “non-portable” manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gstreamer1.0-plugins-good’ or package.name == ‘gstreamer0.10-plugins-good’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_line_in, has_audio_playback.audio/external-lineoutVerify external line out connection functionality by inserting a cable to speakers, selecting ‘Line Out’ in system sound preferences, and testing sound channels.
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check that external line out connection works correctly |
| Steps: |
|
| Verification: |
|
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_line_out == ‘True’ dmi.sane_product == “non-portable” |
has_line_out.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check that system detects a microphone being plugged in |
| Steps: |
|
| Verification: | Verification is automatic, no action is required. The test times out after 30 seconds (and fails in that case). |
| After-suspend: | True |
| Plugin: | user-interact |
| Requires: | (manifest.has_line_in == ‘True’ or manifest.has_headset == ‘True’) manifest.has_audio_playback == ‘True’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_line_in, has_headset, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | This test will check that internal speakers work correctly |
| Steps: |
|
| Verification: | Did you hear a tone? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_internal_speakers == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_internal_speakers, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | DisplayPort audio interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the DisplayPort device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_dp == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_dp, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | HDMI audio interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the HDMI device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_hdmi == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_hdmi, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | This test will check that the headphones connector works correctly. |
| Steps: |
|
| Verification: | Did you hear a sound through the headphones, and did the sound play without any distortion, clicks, or other strange noises from your headphones? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | (manifest.has_line_in == ‘True’ or manifest.has_headset == ‘True’) manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_line_in, has_headset, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Thunderbolt audio interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the Thunderbolt device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_thunderbolt3 == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_thunderbolt3, has_audio_playback.| Category ID: | audio |
| Status: | Blocking |
| Purpose: | DisplayPort audio via USB Type-C port interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the DisplayPort device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_video == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_usbc_video, has_audio_playback.audio/playback_type-c_hdmiVerify HDMI audio playback through the USB Type-C port using a “USB Type-C to HDMI” adapter and confirm sound output.
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | HDMI audio via USB Type-C port interface verification |
| Steps: |
|
| Verification: | Did you hear the sound from the HDMI device? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_video == ‘True’ manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_usbc_video, has_audio_playback.audio/speaker-headphone-plug-detectionEnsure the system automatically detects when speakers or headphones are plugged in.
| Category ID: | audio |
| Status: | Blocking |
| Purpose: | Check that system detects speakers or headphones being plugged in |
| Steps: |
|
| Verification: | Verification is automatic, no action is required. The test times out after 30 seconds (and fails in that case). |
| After-suspend: | True |
| Plugin: | user-interact |
| Requires: | (manifest.has_line_out == ‘True’ or manifest.has_headset == ‘True’) manifest.has_audio_playback == ‘True’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_line_out, has_headset, has_audio_playback.Bluetooth tests¶
Bluetooth LE (Smart and Smart Ready) is tested for device scanning and pairing. Apart from pairing, several profiles are specifically tested and required:
Eddystone Beacon
HID Over GATT Profile (HOGP), Low-Energy keyboard or mouse with basic functionality
The following test units are covered in this category:
| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check the High Fidelity Playback (A2DP) capability of your Bluetooth device, to see if you can hear audio from it. |
| Steps: |
|
| Verification: | Did you hear the tone? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_bt_smart.bluetooth/audio_record_playbackVerify Bluetooth HSP/HFP profile capability for recording and playback.
| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check the Headset Head Unit (HSP/HFP) capability of your Bluetooth device, to check if you can record sounds. |
| Steps: |
|
| Verification: | Did you hear your speech played back? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_bt_smart.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable |
| After-suspend: | True |
| Environment variable: | BTDEVADDR, PLAINBOX_PROVIDER_DATA |
| Plugin: | shell |
| Requires: | package.name == ‘bluez’ or snap.name == ‘bluez’ executable.name == ‘obexftp’ and executable.name == ‘hcitool’ device.category == ‘BLUETOOTH’ manifest.has_bt_obex_support == ‘True’ |
has_bt_obex_support.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_bt_adapter == ‘True’ |
has_bt_adapter.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | Automated test to store Bluetooth device information in the Checkbox report |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | package.name == ‘bluez’ or snap.name == ‘bluez’ device.category == ‘BLUETOOTH’ |
| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check that you can use a HID Over GATT Profile (HOGP) with your Bluetooth Smart keyboard. |
| Steps: |
|
| Verification: | Did the Bluetooth Smart keyboard work as expected? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name == ‘bluez’ |
has_bt_smart.| Category ID: | bluetooth |
| Status: | Blocking |
| Purpose: | This test will check that you can use a HID Over GATT Profile (HOGP) with your Bluetooth Smart mouse. |
| Steps: |
|
| Verification: | Did the Bluetooth Smart mouse work as expected? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_bt_smart == ‘True’ package.name == ‘bluez’ |
has_bt_smart.CPU tests¶
x86_64 and ARM processors are tested to ensure proper functionality. We will test specific features as:
CPU’s performance states (frequency up and down in runtime)
CPU’s sleep states (cpu on and off in runtime)
Running CPU at its maximum frequency
We will also include a general stress test performed for 120 minutes to verify that the system can handle a sustained high load for a period of time. This test uses the tool “stress-ng” available in the Universe repositories.
For Intel CPU’s, the IPDT (Intel Processor Diagnostic Tool) test suite will be run. The diagnostic checks for brand identification, verifies the processor operating frequency, tests specific processor features, and performs a stress test on the processor.
The following test units are covered in this category:
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Uses the Firmware Test Suite (fwts) to test the power saving states of the CPU. |
| Environment variable: | LD_LIBRARY_PATH, PLAINBOX_SESSION_SHARE, SNAP |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ cpuinfo.platform not in (“aarch64”, “armv7l”, “ppc64el”, “ppc64le”, “s390x”) |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Use the Firmware Test Suite (fwts cpufreq) to ensure that the CPU can run at its maximum frequency. |
| Environment variable: | LD_LIBRARY_PATH, SNAP |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ cpuinfo.platform in (“i386”, “x86_64”) |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | Attempts to offline each core in a multicore system. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | cpu_offlining.state == ‘supported’ |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Use Firmware Test Suite (fwts cpufreq) to test the scaling capabilities of the CPU. |
| Environment variable: | LD_LIBRARY_PATH, PLAINBOX_SESSION_SHARE, SNAP |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ ‘userspace’ in cpuinfo.governors cpuinfo.platform not in (“ppc64el”, “ppc64le”, “s390x”) |
| Category ID: | cpu |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Parses information about CPU topology provided by proc and sysfs and checks that they are consistent. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | int(cpuinfo.count) > 1 and (cpuinfo.platform == ‘i386’ or cpuinfo.platform == ‘x86_64’) |
Disk tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | disk |
| Status: | Blocking |
| Purpose: | Verify that disk storage performs at or above baseline performance |
| After-suspend: | True |
| From template: | disk/read_performance_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Unit type: | template |
| Category ID: | disk |
| Status: | Blocking |
| Purpose: | Take the path of the storage device and test if it is a block device. |
| After-suspend: | True |
| From template: | disk/storage_device_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Category ID: | disk |
| Status: | Blocking |
| Purpose: | This test will check if your system can support daisy-chaining of a storage and a monitor over Thunderbolt 3 port |
| Steps: |
|
| Verification: |
|
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_thunderbolt3 == ‘True’ |
has_thunderbolt3.| Category ID: | disk |
| Status: | Blocking |
| Purpose: | This test will check if the connection of a Thunderbolt 3 HDD could be detected, then performs read/write operations on the attached Thunderbolt 3 HDD storage and checks if the removal of the Thunderbolt 3 HDD can be detected. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | manifest.has_thunderbolt3 == ‘True’ |
has_thunderbolt3.Ethernet Device tests¶
Connections are tested for functionality, but not for performance.
The following test units are covered in this category:
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Test to detect and return information about available network controllers on the system under test. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_ethernet_adapter == ‘True’ |
has_ethernet_adapter.| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Check that hotplugging works on port {{ interface }} |
| After-suspend: | True |
| From template: | ethernet/hotplug-interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | This test uses iperf3 to ensure network devices pass data at an acceptable minimum percentage of advertised speed (Reverse). |
| From template: | ethernet/iperf3_reverse_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | This test uses iperf3 to ensure network devices pass data at an acceptable minimum percentage of advertised speed. |
| From template: | ethernet/iperf3_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Check any of the cable Ethernet ports available on the system can ping its default gateway. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | device.category == ‘NETWORK’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Blocking |
| Purpose: | Check Ethernet works by pinging another machine |
| After-suspend: | True |
| From template: | ethernet/ping_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
Graphics tests¶
The following test units are covered in this category:
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Check that VESA drivers are not in use |
| After-suspend: | True |
| Plugin: | shell |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test cycles through the detected video modes for the graphics card |
| Steps: |
|
| Verification: | Did the screen appear to be working for each mode? |
| After-suspend: | True |
| Environment variable: | XDG_CURRENT_DESKTOP, XDG_SESSION_TYPE |
| Plugin: | user-interact-verify |
| Requires: | package.name == ‘xorg’ |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | Check that hardware is able to run a desktop session (OpenGL) |
| After-suspend: | True |
| Environment variable: | CHECKBOX_RUNTIME |
| User: | root |
| Plugin: | shell |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test will verify the maximum supported resolution on the primary graphics card. |
| Steps: |
|
| Verification: | Is this the maximum resolution for the display connected to the graphics card? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | device.category == ‘VIDEO’ |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test will test display rotation on the graphics card |
| Steps: |
|
| Verification: | Did the display rotation take place without permanent screen corruption? |
| After-suspend: | True |
| Environment variable: | XDG_CURRENT_DESKTOP, XDG_SESSION_TYPE |
| Plugin: | user-interact-verify |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test will test the default display with a sample video |
| Steps: |
|
| Verification: | Do you see color bars and static? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | package.name == ‘gir1.2-gst-plugins-base-0.10’ or package.name == ‘gir1.2-gst-plugins-base-1.0’ |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Run vulkaninfo - api version check |
| Environment variable: | CHECKBOX_EXPECTED_VK_API_VERSION |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘vulkaninfo’ dmi.sane_product in [‘portable’, ‘not-portable’] |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Run vulkaninfo with debug info |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘vulkaninfo’ dmi.sane_product in [‘portable’, ‘not-portable’] |
graphics/index_auto_glxgears_fullscreen_product_slugTest that glxgears works in full screen mode for {vendor} {product} (automated)
| Unit type: | template |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Run glxgears in full screen mode while offloading rendering to the {vendor} {product} GPU and validate the outcome automatically. This test covers all devices with an integrated display, such as laptops and all-in-one (AIO) devices. |
| After-suspend: | True |
| From template: | graphics/index_auto_glxgears_fullscreen_product_slug |
| Template resource: | graphics_card |
graphics/index_auto_glxgears_product_slugTest that glxgears works for {vendor} {product} (automated)
| Unit type: | template |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Run glxgears while offloading rendering to the {vendor} {product} GPU and validate the outcome automatically. This test covers all devices with an integrated display, such as laptops and all-in-one (AIO) devices. |
| After-suspend: | True |
| From template: | graphics/index_auto_glxgears_product_slug |
| Template resource: | graphics_card |
| Unit type: | template |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | Parses Xorg.0.log and discovers the running X driver and version for the {vendor} {product} graphics card |
| After-suspend: | True |
| From template: | graphics/index_driver_version_product_slug |
| Template resource: | graphics_card |
| Template filter: | graphics_card.prime_gpu_offload == ‘Off’ |
graphics/index_minimum_resolution_product_slugTest that {vendor} {product} meets minimum resolution requirement
| Unit type: | template |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | Ensure the current resolution meets or exceeds the recommended minimum resolution (800x600) on the {vendor} {product} graphics card. See here for details: https://help.ubuntu.com/community/Installation/SystemRequirements |
| After-suspend: | True |
| From template: | graphics/index_minimum_resolution_product_slug |
| Template resource: | graphics_card |
| Template filter: | graphics_card.prime_gpu_offload == ‘Off’ |
graphics/index_valid_glxgears_fullscreen_product_slugTest that glxgears works in full screen mode for {vendor} {product} (manual)
| Unit type: | template |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test tests the basic fullscreen 3D capabilities of your {vendor} {product} video card |
| After-suspend: | True |
| From template: | graphics/index_valid_glxgears_fullscreen_product_slug |
| Template resource: | graphics_card |
| Unit type: | template |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | This test tests the basic 3D capabilities of your {vendor} {product} video card |
| After-suspend: | True |
| From template: | graphics/index_valid_glxgears_product_slug |
| Template resource: | graphics_card |
| Unit type: | template |
| Category ID: | graphics |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Run vkcube while offloading rendering to the {vendor} {product} GPU |
| From template: | graphics/index_vkcube_product_slug |
| Template resource: | graphics_card |
I²C (Inter-Integrated Circuit)¶
All devices attached to the I2C bus must be detectable. This includes:
Temperature sensors
Humidity sensors
Accelerometers
The following test units are covered in this category:
| Category ID: | i2c |
| Status: | Blocking |
| Purpose: | If an expected number of I²C buses is provided, the job will verify the detected number is correct. If the expected number of buses is not provided, the job will pass if at least one I²C bus is detected. |
| Environment variable: | I2C_BUS_NUMBER |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_i2c == ‘True’ |
has_i2c.Media Card tests¶
Media Card readers are tested for read and write for the following type of cards:
CF
MMC
MS
MSP
SD
SDHC
SDXC
XD
The following test units are covered in this category:
| Category ID: | mediacard |
| Status: | Blocking |
| Purpose: | This test will check that the system’s media card reader can detect the insertion of a UNLOCKED Secure Digital High-Capacity (SDHC) media card Then it performs a read and write test on the SDHC card. Finally, it checks that the system detects the removal of the SDHC card. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | manifest.has_card_reader == ‘True’ |
has_card_reader.Memory tests¶
Proper detection of the amount of memory installed is required (the amount of memory installed is the memory seen by the OS).
The following test units are covered in this category:
Miscellaneous tests¶
The following test units are covered in this category:
| Category ID: | miscellanea |
| Status: | Blocking |
| Purpose: | Test to verify that the system uses production, rather than pre-release, versions of the kernel and the OS. |
| Plugin: | shell |
| Requires: | “Ubuntu Core” not in lsb.description |
| Category ID: | miscellanea |
| Status: | Blocking |
| Purpose: | Verify installed Debian package files against MD5 checksum lists from /var/lib/dpkg/info/*.md5sums. |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘debsums’ |
miscellanea/grub_file_checkCheck if the file core.efi exists to make sure shim and grub can be upgraded
| Category ID: | miscellanea |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | “Ubuntu Core” not in lsb.description cpuinfo.platform in (“x86_64”, “aarch64”, “armhf”) bootloader.name == “grub” |
| Category ID: | miscellanea |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Run Firmware Test Suite (FWTS) oops tests. |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
Monitor tests¶
Each of the available external video ports (supported ports are HDMI, DisplayPort, DVI) are tested one by one. Output to the display must work i.e. a console is presented.
The following test units are covered in this category:
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check changes to screen brightness. |
| Steps: |
|
| Verification: | Was your screen dimmed approximately to half of the maximum brightness? |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | dmi.display_type == “integrated” |
monitor/displayportTest the DisplayPort port functionality with mirrored, extended, external, or onboard display modes.
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your DisplayPort port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the DisplayPort-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dp == ‘True’ |
has_dp.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the DisplayPort port and the ability to do hotplugging. |
| Steps: | Skip this test if your system does not have a DisplayPort port. 1. If a display is already connected, unplug it. 2. (Re-)Connect a display to the DisplayPort port on your system |
| Verification: | Was the interface displayed correctly on the screen? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dp == ‘True’ |
has_dp.monitor/dviCheck DVI port functionality by connecting a display and verifying different display modes.
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your DVI port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the DVI-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dvi == ‘True’ |
has_dvi.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your HDMI port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the HDMI-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_hdmi == ‘True’ |
has_hdmi.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the HDMI port and the ability to do hotplugging. |
| Steps: | Skip this test if your system does not have a HDMI port. 1. If a display is already connected, unplug it. 2. (Re-)Connect a display to the HDMI port on your system |
| Verification: | Was the interface displayed correctly on the screen? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_hdmi == ‘True’ |
has_hdmi.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test verifies that multi-monitor output works on your desktop system. This is not the same test as the external monitor tests you would run on your laptop. You will need two monitors to perform this test. |
| Steps: | Skip this test if your video card does not support multiple monitors. 1. If your second monitor is not already connected, connect it now. 2. Open the “Displays” tool (open the dash and search for “Displays”). 3. Configure your output to provide one desktop across both monitors. 4. Open any application and drag it from one monitor to the next. |
| Verification: | Was the stretched desktop displayed correctly across both screens? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | dmi.sane_product == “non-portable” |
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your monitor power saving capabilities |
| Steps: |
|
| Verification: | Did the monitor go blank and turn on again after a few seconds? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check your Thunderbolt 3 port as a monitor interconnect. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the Thunderbolt-connected screen in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_thunderbolt3 == ‘True’ |
has_thunderbolt3.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the connection of a screen using a “USB Type-C to DisplayPort” adapter. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the screen connected using a “USB Type-C to DisplayPort” adapter in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_usbc_video == ‘True’ |
has_usbc_video.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the connection of a display using a “USB Type-C to HDMI” adapter. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the screen connected using a “USB Type-C to HDMI” adapter in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_usbc_video == ‘True’ |
has_usbc_video.| Category ID: | monitor |
| Status: | Blocking |
| Purpose: | This test will check the connection of a screen using a “USB Type-C to VGA” adapter. |
| Steps: |
|
| Verification: | Was the desktop displayed correctly on the screen connected using a “USB Type-C to VGA” adapter in every mode? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_usbc_video == ‘True’ |
has_usbc_video.Non-device specific networking tests¶
The following test units are covered in this category:
| Category ID: | networking |
| Status: | Blocking |
| Purpose: | Tests whether the system has a working Internet connection. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | networking |
| Status: | Blocking |
| Purpose: | This test will check the network device {__index__} ({interface}) |
| After-suspend: | True |
| From template: | networking/info_device__index___interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ |
Power Management tests¶
Warm reboot is tested such that the system must be able to perform the reboot command and services must be restarted such that systemctl does not identify a failed state.
Cold reboot is performed where an RTC is available (see next section). The wakealarm is used to reboot the system after a period of rest and services must be restarted such that systemctl does not identify a failed state.
The following test units are covered in this category:
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | This test powers off the system and then powers it on using RTC |
| Environment variable: | COLD_REBOOT_DELAY, RTC_DEVICE_FILE |
| User: | root |
| Plugin: | shell |
| Requires: | rtc.state == ‘supported’ rtc.wakealarm == ‘supported’ |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Test ACPI Wakealarm (fwts wakealarm) |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Check there are no failed services after the cold reboot |
| User: | root |
| Plugin: | shell |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Check there are no failed services after the warm reboot |
| User: | root |
| Plugin: | shell |
| Category ID: | power-management |
| Status: | Blocking |
| Purpose: | Verify that the Real-time clock (RTC) device functions properly, if present. |
| After-suspend: | True |
| Environment variable: | RTC_DEVICE_FILE |
| User: | root |
| Plugin: | shell |
| Requires: | rtc.state == ‘supported’ cpuinfo.other != ‘emulated by qemu’ |
Serial Port¶
Tests are carried out on ports that provide access via the Linux tty layer. The exact tests performed depend on the physical characteristics of the driver/receiver hardware. The possible tests include:
Ensure expected number of devices are available
Looped tests:
RS232 Ports: perform loopback test to ensure RX/TX
RS422/485 Ports: connect together to ensure RX/TX
Machine to Machine tests: confirm that a connection can be made to another PC device and RX/TX is operational
The following test units are covered in this category:
Suspend tests¶
The following test units are covered in this category:
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Verify that mixer settings after suspend are the same as before suspend. |
| Plugin: | shell |
| Requires: | manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_audio_playback.| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ package.name in [‘pulseaudio-utils’, ‘pipewire’] |
has_audio_playback.| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Verify that all CPUs are online after resuming. |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
suspend/display_after_suspendVerify if the display functions normally after a suspend and resume cycle.
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | This test will check that the display is correct after suspend and resume |
| Steps: |
|
| Verification: | Does the display work normally after resuming from suspend? |
| Plugin: | manual |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Verify that all memory is available after resuming from suspend. |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Test the network after resuming. |
| User: | root |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Run Firmware Test Suite (fwts) oops tests after suspend. |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | Test to see that we have the same resolution after resuming as before. |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Query sysfs and debugfs for the amount of times the system was suspended. We expect the count in /sys/power/suspend_stats/success and suscess in /sys/kernel/debugfs/suspend_stats to be non zero |
| User: | root |
| Plugin: | shell |
Touchscreen tests¶
The following test units are covered in this category:
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Check touchscreen drag & drop |
| Steps: |
|
| Verification: | Does drag and drop work? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_touchscreen == ‘True’ |
has_touchscreen.touchscreen/evdev/2-touch-tap-product_slugValidate proper detection of a 2-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that 2-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/2-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
touchscreen/evdev/3-touch-tap-product_slugValidate proper detection of a 3-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that 3-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/3-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
touchscreen/evdev/4-touch-tap-product_slugValidate the detection of a 4-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that 4-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/4-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
touchscreen/evdev/single-touch-tap-product_slugValidate the detection of a single-touch tap on touchscreen devices.
| Unit type: | template |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Validate that single-touch tap is properly detected |
| After-suspend: | True |
| From template: | touchscreen/evdev/single-touch-tap-product_slug |
| Template resource: | device |
| Template filter: | device.category == ‘TOUCHSCREEN’ |
| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Check touchscreen pinch gesture for rotate |
| Steps: |
|
| Verification: | Did the blue square rotate following the gesture? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_touchscreen_multitouch == ‘True’ |
has_touchscreen_multitouch.| Category ID: | touchscreen |
| Status: | Blocking |
| Purpose: | Check touchscreen pinch gesture for zoom |
| Steps: |
|
| Verification: | Did the blue square change size following the gesture? |
| After-suspend: | True |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_touchscreen_multitouch == ‘True’ |
has_touchscreen_multitouch.TPM 2.0 (Trusted Platform Module)¶
On Intel and AMD x86 platforms that include TPM 2.0 compliant modules, it is required that all commands necessary to support Ubuntu’s Full Disk Encryption functionality are supported.
The following test units are covered in this category:
clevis-encrypt-tpm2/detect-ecc-capabilitiesEnsure the TPM has required capabilities for clevis ECC test
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
clevis-encrypt-tpm2/detect-rsa-capabilitiesEnsure the TPM has required capabilities for clevis RSA test
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | tpm2 |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_tpm2_chip == ‘True’ executable.name == ‘clevis-encrypt-tpm2’ |
has_tpm2_chip.USB tests¶
USB 2.0¶
USB storage devices must work on all available USB ports. USB Human Interface Devices (HID), specifically keyboard or mouse, should be working properly on any USB port.
USB 3.0¶
USB storage devices must work on all available USB ports. USB Human Interface Devices (HID), specifically keyboard or mouse, should be working properly on any USB port.
USB Type C (USB 3.1)¶
USB Type C (USB 3.1) supports various types of devices (e.g. Video, Power) through the use of adapters or peripherals. The following adapters/peripherals should work:
Storage devices
Keyboard or mouse (basic functionality)
When DisplayPort over USB Type-C is advertised:
- Display hot plugging and the following display are required to work:
mirrored, extended, internal only, external only.
Audio output needs to be undistorted over this port.
The following test units are covered in this category:
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | This test will check if system detects network interface of the Type-C to ethernet adapter. |
| Steps: |
|
| Verification: | <missing verification> |
| After-suspend: | True |
| Plugin: | user-interact |
| Requires: | manifest.has_usbc_data == ‘True’ |
has_usbc_data.| Category ID: | usb |
| Status: | Blocking |
| Purpose: | This test will check that the system correctly detects the insertion of a USB 3.0 storage device in a USB Type-C connector. Then it performs a read and write test on the device. Finally, it checks that the system correctly detects the removal of the USB 3 storage. NOTE: Make sure the USB 3 storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | usb.usb3 == ‘supported’ manifest.has_usbc_data == ‘True’ |
has_usbc_data.| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Detects and shows USB devices attached to this system. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | cpuinfo.platform != ‘s390x’ |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Check USB input device works |
| Steps: |
|
| Verification: | What was just input is displayed correctly |
| After-suspend: | True |
| Plugin: | manual |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_usb_storage == ‘True’ |
has_usb_storage.| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Check system can detect insertion of a USB 2.0 storage device. Then it performs a read and write test on the USB 2.0. Finally, it checks that the system correctly detects the removal of the USB 2.0. NOTE: Make sure the USB storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
usb/storage-preinserted-symlink_uuidTest USB storage on 2.0 or 1.1 ports detected by udev ({symlink_uuid})
| Unit type: | template |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on randomly created data. It requires that a USB stick is plugged into an available USB port before running the certification suite. |
| After-suspend: | True |
| From template: | usb/storage-preinserted-symlink_uuid |
| Template resource: | removable_partition |
| Template filter: | “usb” in removable_partition.bus |
| Category ID: | usb |
| Status: | Blocking |
| Purpose: | Check system can detect insertion of a USB 3.0 storage device. Then it performs a read and write test on the USB 3.0. Finally, it checks that the system correctly detects the removal of the USB 3.0. NOTE: Make sure the USB storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | usb.usb3 == ‘supported’ |
Wireless networking tests¶
Wi-Fi interfaces are tested for connection to access points configured for 802.11 b/g/n/ac/ax protocols.
The following test units are covered in this category:
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_wlan_adapter == ‘True’ |
has_wlan_adapter.wireless/wireless_connection_open_ac_nm_interfaceConnect to unencrypted 802.11ac Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ac AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ac_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_ac_np_interfaceConnect to unencrypted 802.11ac Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ac AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ac_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_ax_nm_interfaceConnect to unencrypted 802.11ax Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ax AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ax_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_ax_np_interfaceConnect to unencrypted 802.11ax Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11ax AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_ax_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_be_nm_interfaceConnect to unencrypted 802.11be Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11be AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_be_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_be_np_interfaceConnect to unencrypted 802.11be Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11be AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_be_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_bg_nm_interfaceConnect to an unencrypted 802.11b/g Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check the system can connect to an insecure 802.11b/g AP |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_bg_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_bg_np_interfaceConnect to unencrypted 802.11b/g Wi-Fi network on {{ interface }} using netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check the system can connect to an unsecured 802.11b/g access point using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_bg_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_n_nm_interfaceConnect to an unencrypted 802.11n Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check if the system can connect to an unsecured 802.11n access point. |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_n_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_open_n_np_interfaceConnect to unencrypted 802.11n Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to insecure 802.11n AP using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_open_n_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_ax_nm_interfaceConnect to WPA3-encrypted 802.11ax Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa3 security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_ax_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_ax_np_interfaceConnect to WPA3-encrypted 802.11ax Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa3 security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_ax_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_be_nm_interfaceConnect to WPA3-encrypted 802.11be Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa3 security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_be_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa3_be_np_interfaceConnect to WPA3-encrypted 802.11be Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa3 security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa3_be_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ac_nm_interfaceConnect to WPA-encrypted 802.11ac Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ac AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ac_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ac_np_interfaceConnect to WPA-encrypted 802.11ac Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ac AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ac_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ax_nm_interfaceConnect to WPA-encrypted 802.11ax Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ax_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_ax_np_interfaceConnect to WPA-encrypted 802.11ax Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11ax AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_ax_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_be_nm_interfaceConnect to WPA-encrypted 802.11be Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_be_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_be_np_interfaceConnect to WPA-encrypted 802.11be Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11be AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_be_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_bg_nm_interfaceConnect to WPA-encrypted 802.11b/g Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11b/g AP with wpa security |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_bg_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_bg_np_interfaceConnect to WPA-encrypted 802.11b/g Wi-Fi network on {{ interface }} - netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can connect to 802.11b/g AP with wpa security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_bg_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_n_nm_interfaceConnect to a WPA-encrypted 802.11n Wi-Fi network on {{ interface }}
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check if the system can connect to an 802.11n AP with WPA security. |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_n_nm_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wireless_connection_wpa_n_np_interfaceConnect to a WPA-encrypted 802.11n Wi-Fi network on {{ interface }} using netplan
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check if the system can connect to an 802.11n AP with WPA security using netplan |
| After-suspend: | True |
| From template: | wireless/wireless_connection_wpa_n_np_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | wireless |
| Status: | Blocking |
| Purpose: | Check system can find a wireless network AP nearby |
| After-suspend: | True |
| From template: | wireless/wireless_scanning_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
Wireless Wide Area Network¶
WWAN interfaces are tested for connection to 3G/4G/LTE services.
The following test units are covered in this category:
wwan/check-sim-present-manufacturer-model-hw_id-autoCheck if a SIM card is present in a slot connected to the modem
| Unit type: | template |
| Category ID: | wwan |
| Status: | Blocking |
| Purpose: | <missing purpose> |
| Description: | Check if a SIM card is present in a slot connected to the modem |
| After-suspend: | True |
| From template: | wwan/check-sim-present-manufacturer-model-hw_id-auto |
| Template resource: | wwan_resource |
| Category ID: | wwan |
| Status: | Blocking |
| Purpose: | Tests that there is a WWAN module present and indicates that testing of it should follow. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_wwan_module == ‘True’ snap.name == ‘modem-manager’ or package.name == ‘modemmanager’ |
has_wwan_module.wwan/gsm-connection-manufacturer-model-hw_id-autoVerify a GSM broadband modem can create a data connection multiple times
| Unit type: | template |
| Category ID: | wwan |
| Status: | Blocking |
| Purpose: | Any modems discovered by the resource job that list GSM support will be tested to ensure a data connection can be made. |
| After-suspend: | True |
| From template: | wwan/gsm-connection-manufacturer-model-hw_id-auto |
| Template resource: | wwan_resource |
Non-blocking¶
Advanced Configuration and Power Interface¶
The following test units are covered in this category:
Audio tests¶
The following test units are covered in this category:
| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | Attaches the audio hardware data collection log to the results. |
| Plugin: | attachment |
audio/alsa_info_collectCollect audio-related system information for simulation and detailed testing.
| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | Collect audio-related system information. This data can be used to simulate this computer’s audio subsystem and perform more detailed tests under a controlled environment. |
| User: | root |
| Plugin: | shell |
| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_audio_capture == ‘True’ |
has_audio_capture.| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest.has_audio_playback == ‘True’ |
has_audio_playback.| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | Test to detect audio devices |
| Plugin: | shell |
| Requires: | manifest.has_audio_playback == ‘True’ package.name == ‘alsa-base’ |
has_audio_playback.audio/post-suspend-audio-occupiedVerify the test audio I/O after suspend with previously occupied devices.
| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | Validate the audio could input and output after suspending while audio devices are occupied before suspending |
| Steps: |
|
| Verification: | Did you hear the sound after suspend? |
| Environment variable: | ALSADEVICE, ALSA_CONFIG_PATH, LD_LIBRARY_PATH |
| Plugin: | user-interact-verify |
| Category ID: | audio |
| Status: | Non-blocking |
| Purpose: | Validate SOF firmware signature. |
| Plugin: | shell |
| Requires: | manifest.has_audio_playback == ‘True’ package.name == ‘linux-firmware’ |
has_audio_playback.Bluetooth - BlueZ Self Tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | Runs a specific test from the bnep test suite. |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-bnep-tests_bluez-internal-bnep-test |
| Template resource: | bluez-internal-bnep-tests |
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Runs a specific test from the hci test suite |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-hci-tests_bluez-internal-hci-test |
| Template resource: | bluez-internal-hci-tests |
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | Runs a specific test from the rfcomm test suite |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-rfcomm-tests_bluez-internal-rfcomm-test |
| Template resource: | bluez-internal-rfcomm-tests |
| Unit type: | template |
| Category ID: | bluetooth_bluez5_selftests |
| Status: | Non-blocking |
| Purpose: | Runs a specific test from the user channel test suite |
| After-suspend: | True |
| From template: | bluetooth/bluez-internal-uc-tests_bluez-internal-uc-test |
| Template resource: | bluez-internal-uc-tests |
Bluetooth tests¶
The following test units are covered in this category:
| Category ID: | bluetooth |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | package.name == ‘bluez’ or snap.name == ‘bluez’ environment.CHECKBOX_RUNNING_STRICT_SNAP != “1” or (connections.slot == ‘bluez:service’ and connections.plug == ‘{{ __system_env__[“SNAP_NAME”] }}:bluez’) |
bluetooth4/beacon_eddystone_url_interfaceTest system can get beacon EddyStone URL advertisements on the {{ interface }} adapter
| Unit type: | template |
| Category ID: | bluetooth |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | bluetooth4/beacon_eddystone_url_interface |
| Template resource: | device |
| Template filter: | device.category == ‘BLUETOOTH’ |
Camera tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | Uses an image of the camera to get the quality based on a No-Reference image quality assessment algorithm called BRISQUE. This test will timeout and fail if the quality has not been computed within 120 seconds. |
| From template: | camera/camera-quality-rpi_name |
| Template resource: | device |
| Template filter: | device.category == ‘MMAL’ and device.name != ‘’ |
camera/multiple-resolution-images-rpi-attachment_nameAttach an image from the multiple resolution images test on rpi
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | This test will attach one of the images used for the multiple resolution images test on rpi. |
| From template: | camera/multiple-resolution-images-rpi-attachment_name |
| Template resource: | device |
| Template filter: | device.category == ‘MMAL’ and device.name != ‘’ |
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | Takes multiple pictures based on the resolutions supported by the camera and validates their size and that they are of a valid format. |
| From template: | camera/multiple-resolution-images-rpi_name |
| Template resource: | device |
| Template filter: | device.category == ‘MMAL’ and device.name != ‘’ |
| Unit type: | template |
| Category ID: | camera |
| Status: | Non-blocking |
| Purpose: | Takes multiple pictures based on the resolutions supported by the camera and validates their size and that they are of a valid format. |
| After-suspend: | True |
| From template: | camera/multiple-resolution-images_name |
| Template resource: | device |
| Template filter: | device.category == ‘CAPTURE’ and device.name != ‘’ |
CPU tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Validate that the Floating Point Unit is running on {platform} device. |
| From template: | cpu/arm64_vfp_support_platform |
| Template resource: | cpuinfo |
| Template filter: | cpuinfo.platform == ‘aarch64’ |
cpu/armhf_vfp_support_platformValidate that the Vector Floating Point Unit is running on {platform} device
| Unit type: | template |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Validate that the Vector Floating Point Unit is running on {platform} device. |
| From template: | cpu/armhf_vfp_support_platform |
| Template resource: | cpuinfo |
| Template filter: | cpuinfo.platform == ‘armv7l’ |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | Runs a test for clock jitter on SMP machines. |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | cpuinfo.platform not in (“s390x”) |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the FWTS desktop diagnosis results log to the submission. |
| Plugin: | attachment |
| Requires: | cpuinfo.platform not in (“aarch64”, “armv7l”, “s390x”) |
| Category ID: | cpu |
| Status: | Non-blocking |
| Purpose: | Attaches the log generated by cpu/maxfreq_test to the results submission. |
| Plugin: | attachment |
DesignWare Core SuperSpeed USB 3.0 Controller¶
The following test units are covered in this category:
| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_usb_dwc3_controller == ‘True’ |
has_usb_dwc3_controller.| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | Check that after connecting the device under test (DUT) to another device (host), DUT can be detected as mass storage device by the host. |
| Steps: |
|
| Verification: | The host detects and mounts a mass storage device. It has read and write permissions on it. |
| User: | root |
| Plugin: | user-interact-verify |
| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Category ID: | usb-dwc3 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_usb_dwc3_controller == ‘True’ |
has_usb_dwc3_controller.Disk tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | disk/apste_support_on_name |
| Template resource: | device |
| Template filter: | device.driver == ‘nvme’ and device.category == ‘OTHER’ |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Examine the system to detect Software RAID devices are created and the RAID mode are expected the SOFTWARE_RAID_LEVEL variable is needed for this tests. e.g. SOFTWARE_RAID_LEVEL=”raid0 raid1 raid5” |
| Environment variable: | SOFTWARE_RAID_LEVEL |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘mdadm’ manifest.has_md_raid == ‘True’ |
has_md_raid.| Unit type: | template |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | Disk stress-ng test for {product_slug} |
| From template: | disk/disk_stress_ng_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Unit type: | template |
| Category ID: | disk |
| Status: | Non-blocking |
| Purpose: | This test checks disk stats, generates some activity and rechecks stats to verify they’ve changed. It also verifies that disks appear in the various files they’re supposed to. . This test will inspect the following disk: . product name: {product_slug} sysfs path: {path} device node path: /dev/{name} |
| After-suspend: | True |
| From template: | disk/stats_name |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ and device.name != ‘’ |
Docker containers¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/build-single_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/commit_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/compose-and-basic_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/compose-restart_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/compose-single_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/copy_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/deploy-registry_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/diff_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/export-and-import_arch |
| Template resource: | docker_resource |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| User: | root |
| Requires: | executable.name == ‘docker’ |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/inspect_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/interative_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/kill_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/restart-always_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/restart-on-failure_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/run_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/save-and-load_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/start-stop_arch |
| Template resource: | docker_resource |
| Unit type: | template |
| Category ID: | docker |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | docker/update_arch |
| Template resource: | docker_resource |
Eeprom¶
The following test units are covered in this category:
| Category ID: | eeprom |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_eeprom == ‘True’ |
has_eeprom.Error Detection And Correction (EDAC) Memory Controllers¶
The following test units are covered in this category:
| Category ID: | edac |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | attachment |
| Requires: | executable.name == ‘edac-util’ manifest.has_edac_module == ‘True’ |
has_edac_module.| Category ID: | edac |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| Requires: | executable.name == ‘edac-util’ manifest.has_edac_module == ‘True’ |
has_edac_module.Ethernet Device tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Non-blocking |
| Purpose: | Check that another system can wake the System Under Test (SUT) up from S3 using the Ethernet port {interface}’s WOL function. |
| From template: | ethernet/wol_S3_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.mac != ‘UNKNOWN’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Non-blocking |
| Purpose: | Check that another system can wake up from S4 the System Under Test (SUT) using ethernet port {interface} Wake-on-LAN (WOL) function. |
| From template: | ethernet/wol_S4_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.mac != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | ethernet |
| Status: | Non-blocking |
| Purpose: | Check that another system can wake the System Under Test (SUT) from S5 using the Ethernet port {interface} WOL function. |
| From template: | ethernet/wol_S5_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.mac != ‘UNKNOWN’ |
Firmware tests¶
The following test units are covered in this category:
| Category ID: | firmware |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Run Firmware Test Suite (fwts) QA-concerned desktop-specific diagnosis tests. |
| Environment variable: | PLAINBOX_SESSION_SHARE |
| User: | root |
| Plugin: | shell |
| Requires: | executable.name == ‘fwts’ |
| Category ID: | firmware |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the FWTS desktop diagnosis results log to the submission |
| Plugin: | attachment |
| Category ID: | firmware |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | attachment |
Gathers information about the DUT¶
The following test units are covered in this category:
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Gets CPU resource info from /proc/cpuinfo |
| User: | root |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Gets info on the version of dpkg installed |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates a list of interface declarations on the device |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates release info based on /etc/os-release |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates resource info based on /proc/meminfo |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates a list of packages |
| Plugin: | resource |
| Category ID: | information_gathering |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Generates a list of snap packages |
| Plugin: | resource |
General Purpose I/O¶
The following test units are covered in this category:
gpio/gpiomem_loopback_pairs_modelTest GPIO lines exposed on headers can be controlled via /dev/gpiomem
| Unit type: | template |
| Category ID: | gpio |
| Status: | Non-blocking |
| Purpose: | Ensure GPIO lines exposed on headers are controllable via /dev/gpiomem using the RPi python module for specific models. |
| After-suspend: | True |
| From template: | gpio/gpiomem_loopback_pairs_model |
| Template resource: | com.canonical.certification::model_assertion |
| Template filter: | model_assertion.model in (“pi2”, “pi3”, “ubuntu-core-18-pi2”, “ubuntu-core-18-pi3”) |
| Unit type: | template |
| Category ID: | gpio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | gpio/sysfs_loopback_pairs_model |
| Template resource: | com.canonical.certification::model_assertion |
| Template filter: | model_assertion.model in (“pi2”, “pi3”, “ubuntu-core-18-pi2”, “ubuntu-core-18-pi3”) |
gpio/sysfs_loopback_pairs_vendor_productTest GPIO lines exposed on headers can be controlled via sysfs
| Unit type: | template |
| Category ID: | gpio |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | gpio/sysfs_loopback_pairs_vendor_product |
| Template resource: | dmi |
| Template filter: | dmi.category == ‘SYSTEM’ and dmi.vendor == ‘AAEON’ and dmi.product in (‘UPX-TGL01’, ‘UPN-EHL01’) |
Hardware video acceleration¶
The following test units are covered in this category:
| Category ID: | va-api |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | package.name == ‘vainfo’ cpuinfo.platform == ‘x86_64’ manifest.has_va_api == ‘True’ |
has_va_api.Informational tests¶
The following test units are covered in this category:
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the contents of /proc/acpi/sleep if it exists. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a report of installed codecs for Intel HDA |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a report of CPU information |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches json dumps of installed dkms package information. |
| Plugin: | attachment |
| Requires: | package.name == ‘dkms’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a copy of /var/log/dmesg or the current dmesg buffer to the test results |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches info on DMI |
| Plugin: | attachment |
| Requires: | dmi_present.state == ‘supported’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches dmidecode output |
| User: | root |
| Plugin: | attachment |
| Requires: | executable.name == ‘dmidecode’ dmi_present.state == ‘supported’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attach system debian packages status |
| Plugin: | attachment |
| Requires: | executable.name == ‘dpkg’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the firmware version |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the buildstamp identifier for the OS |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches information about disk partitions |
| User: | root |
| Plugin: | attachment |
| Unit type: | template |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| From template: | info/hdparm_name.txt |
| Template resource: | device |
| Template filter: | device.category == ‘DISK’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Checks the value of the CONFIG_INTEL_IOMMU_DEFAULT_ON flag in the kernel configuration |
| Plugin: | shell |
| Requires: | cpuinfo.platform in (“i386”, “x86_64”) |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Output whether secure boot is enabled or disabled |
| Plugin: | attachment |
| Requires: | package.name == ‘mokutil’ manifest.has_secure_boot == ‘True’ |
has_secure_boot.| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | This job prints a tree of the time-critical chain of SystemD units. |
| Plugin: | shell |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Returns the name, driver name and driver version of any touchpad discovered on the system. |
| Plugin: | attachment |
| Requires: | device.category == ‘TOUCHPAD’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the installer debug log if it exists. |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the kernel command line used to boot |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a list of the currently running kernel modules. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches very verbose lspci output. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a hex dump of the standard part of the PCI configuration space for all PCI devices. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches the system topology as presented by the lstopo command |
| Plugin: | attachment |
| Requires: | executable.name == ‘lstopo’ |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches a list of detected USB devices. |
| After-suspend: | True |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | This job loads the hardware manifest and exposes it as a resource. |
| Plugin: | resource |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches info on system memory as seen in /proc/meminfo. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | Attaches modinfo information for all currently loaded modules |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the contents of the various modprobe conf files. |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the contents of the /etc/modules file. |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches the contents of various sysctl config files. |
| User: | root |
| Plugin: | attachment |
| Category ID: | info |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Attaches a report of sysfs attributes. |
| Plugin: | attachment |
| Requires: | cpuinfo.platform not in (“aarch64”) |
Intel Integrated Sensor Hub Transport Protocol (ISHTP)¶
The following test units are covered in this category:
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_eclite == ‘True’ |
has_eclite.eclite/temperature-reading-from-thermal-acpitzRead the temperature of acpitz to ensure Eclite is functional
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | For testing the feature of Eclite, one way is to monitor the temperature of acpitz thermal. |
| User: | root |
| Plugin: | shell |
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Category ID: | intel-ishtp |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | manifest.has_ishtp == ‘True’ |
has_ishtp.Intel Management Engine Interface (MEI)¶
The following test units are covered in this category:
| Category ID: | mei |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | cpuinfo.platform in (“i386”, “x86_64”) manifest.has_mei == ‘True’ |
has_mei.| Category ID: | mei |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | shell |
| Requires: | cpuinfo.platform in (“i386”, “x86_64”) manifest.has_mei == ‘True’ |
has_mei.LED tests¶
The following LEDS will be tested for functionality:
Cloud LED
Wireless LED
Bluetooth LED
WWAN LED
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | led |
| Status: | Non-blocking |
| Purpose: | Check that {name} LED turns on and off. |
| After-suspend: | True |
| From template: | led-indicator/gpio-controller-leds-name |
| Template resource: | led-indicator/gpio-controller-leds |
| Unit type: | template |
| Category ID: | led |
| Status: | Non-blocking |
| Purpose: | Check that {name} LED turns on and off. |
| After-suspend: | True |
| From template: | led-indicator/gpio-leds-name |
| Template resource: | led-indicator/gpio-leds |
Media Card tests¶
The following test units are covered in this category:
| Category ID: | mediacard |
| Status: | Non-blocking |
| Purpose: | This test will check that the system’s media card reader can detect the insertion of a Secure Digital Extended Capacity (SDXC) media card Then it performs a read and write test on the SDXC card. Finally, it checks that the system detects the removal of the SDXC card. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| User: | root |
| Plugin: | user-interact |
| Requires: | manifest.has_card_reader == ‘True’ |
has_card_reader.mediacard/storage-preinserted-symlink_uuidAutomated test of SD Card reading & writing ({symlink_uuid})
| Unit type: | template |
| Category ID: | mediacard |
| Status: | Non-blocking |
| Purpose: | This is a fully automated version of mediacard/sd-automated and assumes that the system under test has a memory card device plugged in prior to checkbox execution. |
| After-suspend: | True |
| From template: | mediacard/storage-preinserted-symlink_uuid |
| Template resource: | removable_partition |
| Template filter: | removable_partition.bus == ‘mediacard’ |
Miscellaneous tests¶
The following test units are covered in this category:
install/apt-get-gets-updatesEnsure apt can access repositories and get updates without installing them, to aid in recovery from broken updates.
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | Tests to see that apt can access repositories and get updates (does not install updates). This is done to confirm that you could recover from an incomplete or broken update. |
| User: | root |
| Plugin: | shell |
| Requires: | package.name == ‘apt’ |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | This test will check that the system can switch to a virtual terminal and back to X |
| Steps: |
|
| Verification: | Did your screen change temporarily to a text console and then switch back to your current session? |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | package.name == ‘kbd’ |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | Device check |
| Steps: |
|
| Verification: | Do the devices reported by udev match the devices on the Manifest? |
| Plugin: | user-interact-verify |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | Attaches the FWTS oops results log to the submission |
| Plugin: | attachment |
| Category ID: | miscellanea |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | A meta-job that verifies the data necessary for a complete result submission are present. Failure indicates that the results are incomplete and may be rejected. |
| Plugin: | shell |
Monitor tests¶
The following test units are covered in this category:
| Category ID: | monitor |
| Status: | Non-blocking |
| Purpose: | Check output to display through VGA adaptor on DVI port |
| Steps: |
|
| Verification: | Output to display works |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_dvi == ‘True’ |
has_dvi.| Category ID: | monitor |
| Status: | Non-blocking |
| Purpose: | Check output to display through VGA adaptor on HDMI port |
| Steps: |
|
| Verification: | Output to display works |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_hdmi == ‘True’ |
has_hdmi.| Category ID: | monitor |
| Status: | Non-blocking |
| Purpose: | Check output to display through VGA port |
| Steps: |
|
| Verification: | Output to display works |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_vga == ‘True’ |
has_vga.Non-device specific networking tests¶
The following test units are covered in this category:
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | Test if the running kernel supports IPv6. |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| After-suspend: | True |
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| Plugin: | shell |
| Requires: | manifest._ignore_disconnected_ethernet_interfaces == ‘True’ |
_ignore_disconnected_ethernet_interfaces.| Unit type: | template |
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | ipv6_link_local_address_interface |
| Template resource: | device |
| Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
| Category ID: | networking |
| Status: | Non-blocking |
| Purpose: | Verify that all network interfaces have predictable names. |
| Plugin: | shell |
| Requires: | environment.CHECKBOX_RUNNING_STRICT_SNAP != “1” or lsb.release >= ‘20’ environment.CHECKBOX_RUNNING_STRICT_SNAP != “1” or model_assertion.gadget != “pi” environment.CHECKBOX_RUNNING_STRICT_SNAP == “1” or lsb.release >= ‘18’ |
Power Management tests¶
Suspend/Resume¶
For x86 devices, a 30 cycle suspend/resume stress test is performed using the FWTS. The suspend mode (e.g. S3, S2Idle) used during the test will be the default for the system under test. The test is passed if all 30 cycles complete without failure. Any errors reported in the fwts log for the 30 cycle suspend/resume stress test are informational only and do not affect the outcome of the test, however, we do recommend examining and fixing any failures noted, as they indicate firmware non-compliance with standards.
In addition a single suspend is performed across which the following features and devices are tested:
CPU
Memory
Networking (Wifi, Ethernet)
Audio
Bluetooth
USB controllers
Input devices
Mediacards
The following test units are covered in this category:
| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | Attach log from fwts wakealarm test |
| Plugin: | attachment |
| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| Requires: | manifest.has_hardware_watchdog == ‘True’ |
has_hardware_watchdog.| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | Check there are no failed services after the watchdog triggered |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_hardware_watchdog == ‘True’ |
has_hardware_watchdog.| Category ID: | power-management |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: | <missing steps> |
| Verification: | <missing verification> |
| Description: | <missing description> |
| Requires: | manifest.has_hardware_watchdog == ‘True’ |
has_hardware_watchdog.Quadrature Encoder Peripherals¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | qep |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Checks that the device exists in lspci and that the device driver associated is correct. Device ID should be 8086:{qep-device} and the driver is always intel_qep. |
| From template: | qep/qep-device-driver-for-qep-device |
| Template resource: | qep/qep-devices |
Real Time Clock (RTC)¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | rtc_category |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | rtc/rtc_alarm_rtc |
| Template resource: | rtc_list |
| Unit type: | template |
| Category ID: | rtc_category |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | rtc/rtc_clock_rtc |
| Template resource: | rtc_list |
Snapd¶
The following test units are covered in this category:
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | The store should contain the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap. The test makes sure this can be downloaded and installed on the system. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | If snap list command is working then should at least find the ubuntu-core package. |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | The test will install the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap from the stable channel and then refreshes it to the edge channel and compares the revision before and after the refresh. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | After having installed the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap, check it can be removed. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Checks that the {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap can be refreshed after removal of the blacklisted revision. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Checks if the edge channel {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} snap is reverted back to the one from stable. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | If snap find command is working then should find {{ __checkbox_env__.get(“TEST_SNAP”, “test-snapd-tools”) }} in the store. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Test all the snaps’ confinement, devmode, revision. Make sure the confinement is “strict”, devmode is “False”, and revision should not be sideloaded. |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | The image can be tied to using a particular store for the OEM. This tests the store for the image is as expected. |
| From template: | snappy/test-store-config-store |
| Template resource: | com.canonical.certification::model_assertion |
| Template filter: | model_assertion.store not in (‘unknown’) |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Test the snappy install command is able to install and remove snap in beta channel store. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
| Category ID: | snapd |
| Status: | Non-blocking |
| Purpose: | Test the snappy install command is able to install a snap in the edge channel store. |
| Environment variable: | CHECKBOX_RUNTIME, SNAPD_POLL_INTERVAL, SNAPD_TASK_TIMEOUT, TEST_SNAP |
| User: | root |
| Plugin: | shell |
SocketCAN interface tests¶
Devices that support the SocketCAN standard are tested to ensure that the adapter is present and can be communicated with via CANBus configuration commands.
The following test units are covered in this category:
socketcan/send_packet_local_eff_virtualVirtual CAN device support test (Local test with raw socket and EFF)
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test that the kernel supports CAN networking by sending packets to a virtual device using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket, this is only a local test as the broadcast packet is received on the same device. |
| After-suspend: | True |
| From template: | socketcan/send_packet_local_eff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test that the kernel supports CAN networking by sending packets to a virtual device using a raw socket; this is only a local test as the broadcast packet is received on the same device. |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_socket_can_fd == ‘True’ |
has_socket_can_fd.| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| From template: | socketcan/send_packet_local_fd_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test that the kernel supports CAN networking by sending packets to a virtual device using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| User: | root |
| Plugin: | shell |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket, this is only a local test as the broadcast packet is received on the same device |
| After-suspend: | True |
| From template: | socketcan/send_packet_local_sff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket to a remote device. As a prerequisite the remote device should have can-echo-server installed so as to return the predicted packet. |
| After-suspend: | True |
| From template: | socketcan/send_packet_remote_eff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket to a remote device. As a prerequisite, the remote device should have can-echo-server installed so as to return the predicted packet. |
| After-suspend: | True |
| From template: | socketcan/send_packet_remote_fd_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
| Unit type: | template |
| Category ID: | socketcan |
| Status: | Non-blocking |
| Purpose: | Test a CAN device by sending packets using a raw socket to a remote device. As a prerequisite, the remote device should have can-echo-server installed so as to return the predicted packet. |
| After-suspend: | True |
| From template: | socketcan/send_packet_remote_sff_interface |
| Template resource: | device |
| Template filter: | device.category == ‘SOCKETCAN’ |
Suspend tests¶
The following test units are covered in this category:
| Category ID: | suspend |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | If the DUT suspended successfully, /sys/power/suspend_stats/fail* and fail* in /sys/kernel/debug/suspend_stats will be zero. If a device failed /sys/power/suspend_stats/last_failed_dev and last_failed_dev in /sys/kernel/debug/suspend_stats will show the failed device |
| User: | root |
| Plugin: | shell |
| Category ID: | suspend |
| Status: | Non-blocking |
| Purpose: | Attaches the FWTS oops results log to the submission after suspend |
| Plugin: | attachment |
| Category ID: | suspend |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| Plugin: | attachment |
| Category ID: | suspend |
| Status: | Non-blocking |
| Purpose: | Checks the sleep times to ensure that a machine suspends and resumes within a given threshold |
| Plugin: | shell |
suspend/xrandr_screens_after_suspend_primaryAttach screenshots from suspend/cycle resolutions after suspend test to results.
| Category ID: | suspend |
| Status: | Non-blocking |
| Purpose: | This attaches screenshots from the suspend/cycle_resolutions_after_suspend test to the results submission. |
| Plugin: | attachment |
TPM 2.0 (Trusted Platform Module)¶
The following test units are covered in this category:
| Category ID: | tpm2 |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | The information in the TPM Event Log can be useful in debugging problems with TPM command support and adherance to standards. This can be of particular help when checking whether a device can support Ubuntu Core Full Disk Encryption. |
| User: | root |
| Plugin: | attachment |
| Requires: | manifest.has_tpm2_chip == ‘True’ executable.name == ‘fwts’ |
has_tpm2_chip.USB tests¶
The following test units are covered in this category:
| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Steps: |
|
| Verification: | The host and DUT can ping each other. |
| Description: | <missing description> |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | Check that after connecting the device under test (DUT) to another device (host), the DUT can be detected as a mass storage device by the host. |
| Steps: |
|
| Verification: | The host detects and mounts the mass storage device. It has read and write permissions on it. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | Check if USB OTG can work as a serial port. |
| Steps: |
|
| Verification: | Does string send and receive function correctly? |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact-verify |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| User: | root |
| Plugin: | shell |
| Requires: | manifest.has_usbc_otg == ‘True’ |
has_usbc_otg.| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | This test will check that you can use a USB HID device plugged in a USB Type-C port using a “USB Type-C to Type-A” adapter |
| Steps: |
|
| Verification: | Did the device work as expected? |
| After-suspend: | True |
| Plugin: | manual |
| Requires: | manifest.has_usbc_data == ‘True’ |
has_usbc_data.usb-c/c-to-a-adapter/storage-manualTest USB 3 storage device insertion + read/write + removal using a “Type-C to Type-A” adapter.
| Category ID: | usb |
| Status: | Non-blocking |
| Purpose: | This test will check that the system correctly detects the insertion of a USB 3 storage device in a USB Type-C connector using a “Type-C to Type-A” adapter. Then it performs a read and write test on the device. Finally, it checks that the system correctly detects the removal of the USB 3 storage. NOTE: Make sure the USB 3 storage device has a partition before starting the test. |
| Steps: |
|
| Verification: | The verification of this test is automated. Do not change the automatically selected result. |
| After-suspend: | True |
| User: | root |
| Plugin: | user-interact |
| Requires: | usb.usb3 == ‘supported’ manifest.has_usbc_data == ‘True’ |
has_usbc_data.Wi-Fi access point¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | wireless/nmcli_wifi_ap_a_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/nmcli_wifi_ap_bg_interfaceCreate 802.11b/g Wi-Fi AP on {{ interface }} using NetworkManager
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Create an 802.11b/g Wi-Fi access point on a specified interface using NetworkManager command-line tools. |
| After-suspend: | True |
| From template: | wireless/nmcli_wifi_ap_bg_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_b_no_sta_interface_autoCreate open 802.11b Wi-Fi AP on {interface} with no STA
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11b Access Point without any STA connection on {interface} by configuring the system using wifi-ap snap and then checking status of the interface using iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_b_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_b_no_sta_interface_manualCreate open 802.11b Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11b Access Point without any STA connection |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_b_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_g_no_sta_interface_autoCreate an open 802.11g Wi-Fi AP on {interface} with no STA connected.
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11g Access Point without any Station (STA) connection on {interface} by configuring the system using the wifi-ap snap and then checking the status of the interface using the iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_g_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_open_g_no_sta_interface_manualCreate open 802.11g Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11g Access Point without any STA connection |
| After-suspend: | True |
| From template: | wireless/wifi_ap_open_g_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_setup_wizard_interface_autoCreate Access Point on {interface} using wifi-ap.setup-wizard
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create a WPA2 802.11g Access Point using wifi-ap.setup-wizard command on {interface}. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_setup_wizard_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11b Access Point without any STA connection on {interface} by configuring the system using wifi-ap snap and then checking the status of the interface using iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_b_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_b_no_sta_interface_manualCreate WPA2 802.11b Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create a WPA2 802.11b Access Point without any STA connected |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_b_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_b_with_sta_interface_autoCreate a WPA2 802.11b Wi-Fi Access Point on {interface} with active STA
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_b_with_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create an open 802.11g Access Point without any Station (STA) connection on {interface} by configuring the system using the wifi-ap snap and then checking the status of the interface using the iw command. |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_g_no_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_g_no_sta_interface_manualCreate WPA2 802.11g Wi-Fi AP on {interface} with no STA (Manual)
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | Check that the system can create a WPA2 802.11g Access Point without any STA connection |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_g_no_sta_interface_manual |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
wireless/wifi_ap_wpa_g_with_sta_interface_autoCreate WPA2 802.11g Wi-Fi Access Point on {interface} with active STA
| Unit type: | template |
| Category ID: | wifi_ap |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | <missing description> |
| After-suspend: | True |
| From template: | wireless/wifi_ap_wpa_g_with_sta_interface_auto |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
Wireless networking tests¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | wireless |
| Status: | Non-blocking |
| Purpose: | Ensure no crashes have occurred in the iwlwifi microcode. |
| After-suspend: | True |
| From template: | wireless/check_iwlwifi_microcode_crash_interface |
| Template resource: | device |
| Template filter: | device.driver == ‘iwlwifi’ |
| Unit type: | template |
| Category ID: | wireless |
| Status: | Non-blocking |
| Purpose: | Check if the DUT supports Wi-Fi 7 features like Multi-Link-Operation |
| After-suspend: | True |
| From template: | wireless/wifi7_mlo_interface |
| Template resource: | device |
| Template filter: | device.category == ‘WIRELESS’ and device.interface != ‘UNKNOWN’ |
Wireless Wide Area Network¶
The following test units are covered in this category:
| Unit type: | template |
| Category ID: | wwan |
| Status: | Non-blocking |
| Purpose: | <missing purpose> |
| Description: | Scan for available 3GPP networks with the target modem |
| After-suspend: | True |
| From template: | wwan/3gpp-scan-manufacturer-model-hw_id-auto |
| Template resource: | wwan_resource |
Manifest Entries¶
The following manifest entries are required for certification:
has_audio_captureAudio capture: Machine can record sound. (For example, a desktop PC probably requires a microphone connected to it)
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
has_audio_playbackAudio playback: Machine can emit sound. (For example, a desktop PC probably requires speakers connected to it)
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following LED indicators? |
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
| Value type: | bool |
| Prompt: | Does this machine have the following audio features? |
Appendix A. FWTS tests¶
As part of the certification process, we run a series of firmware tests that are part of the Canonical Firmware Test Suite. In general, any HIGH or CRITICAL error found in the fwts log can cause potential errors in the system and should be looked at by OEMs/ODMs.
Category |
Test Item |
Description |
|---|---|---|
Information |
acpidump |
Check ACPI table acpidump. |
Information |
version |
Gather kernel system information. |
ACPI |
acpitables |
ACPI table settings confidence checks. |
ACPI |
apicinstance |
Check for single instance of APIC/MADT table. |
ACPI |
hpet_check |
High Precision Event Timer configuration test. |
ACPI |
mcfg |
MCFG PCI Express* memory mapped config space. |
ACPI |
method |
ACPI DSDT Method Semantic Tests. |
CPU |
mpcheck |
Check Multi Processor tables. |
CPU |
msr |
CPU MSR consistency check. |
CPU |
mtrr |
MTRR validation. |
System |
apicedge |
APIC Edge/Level Check. |
System |
klog |
Scan kernel log for errors and warnings. |