To be able to expose tr181-security's 'Device.Security.' to
OB-USP-A, this has to be compiled with REMOVE_DEVICE_SECURITY_CERTIFICATE.
cram: the expected output from the CRAM test obuspa.t is now different as it
comes from tr181-security
References: PCF-1323
Signed-off-by: Sergio Panseri <sergio.panseri@consult.red>
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org> [rebased]
Currently all CDRouter USP protocol tests in prplOS use STOMP MTP
(100%). This no longer matches the FEAT-63 delivery plan and industry
adoption.
MQTTv5 should become the default MTP for the majority of CDRouter test
runs, while keeping WebSocket and STOMP coverage in some jobs as smaller
regression slices.
So lets switch the shared template to MQTTv5 by default, parameterising
the shipped CDRouter configs instead of cloning them, and adding guarded
DUT init helpers that stop obuspa, install the requested reset file,
clear /etc/obuspa.db, start obuspa again, and wait for the USP data
model to come back.
Use the existing job matrix to keep protocol coverage aligned with the
agreed distribution:
- Wireless smoke tests use WebSocket
- prplOS Network Test Plan Candidate jobs use WebSocket
- IPv6 Top-100+mDNS VLAN jobs use STOMP
- all remaining jobs use MQTTv5
- MQTTv3 stays out of scope
References: PCF-1323, PCF-2322
Assisted-by: codex:gpt-5.4:xhigh
Assisted-by: claude:opus-4-6:1m-context
Co-developed-by: Sergio Panseri <sergio.panseri@consult.red>
Co-developed-by: Piotr Nakraszewicz <piotr.nakraszewicz@consult.red>
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Currently the cdrouter pipeline validates package manifests only when
package_apply runs in the script phase, after the DUT bringup and init
steps in before_script. When a manifest has human errors, the job spends
several minutes on setup before failing on package_apply.
So lets add an explicit package_validate subcommand that reuses the same
manifest resolution and package option checks without requiring API
mutation, and execute it as the first operational step in before_script.
This fails fast on manifest mistakes and avoids wasting DUT bringup time.
References: PCF-2532
Assisted-by: codex:gpt-5.4:xhigh
Assisted-by: claude:opus-4-6:1m-context
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Currently the CI pipeline imports CDRouter packages from .gz binary
exports using the package_import subcommand which stages files
through the CDRouter import API.
So lets switch the pipeline to use the new package_apply subcommand
which loads YAML manifests directly, resolves includes, and upserts
packages via the CDRouter packages API. The TEST_PACKAGE variable
derivation from CI_JOB_NAME remains unchanged - only the file
extension (.gz) is dropped and the subcommand changes from
package_import to package_apply.
References: PCF-2534
Assisted-by: codex:gpt-5.4:xhigh
Assisted-by: claude:opus-4-6:1m-context
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Currently all 16 CDRouter test packages are stored as opaque .gz
binary exports that cannot be reviewed, diffed, or maintained as
code. The .gz format carries implicit runtime fields (config_id,
device_id, schedule, agent_id) that do not belong in version
control.
So lets add unversioned YAML manifests for all 16 packages
converted from their .gz source files using
cdrouter-package-convert.py, and remove all .gz binary artifacts
from the repository. Each manifest contains name, description,
and tests in original order. Options use the compact form where
only non-default overrides are present (2 of 16 packages have
explicit options; the remaining 14 use CDRouter defaults
entirely).
All 16 packages passed round-trip fidelity verification:
CDRouter-IPv6-Top-100, CDRouter-IPv6-Top-100+mDNS,
CDRouter-IPv6-Top-100+mDNS+dslite, CDRouter-Top-100,
CDRouter-Top-100+mDNS, CDRouter-Top-100+mDNS-OSP,
CDRouter-TR-069, CDRouter-UPnP-IPv46,
CDRouter-UPnP-IPv46-Failing, CDRouter-USP-prpl,
CDRouter-Wireless, CDRouter-Wireless-OSPv1,
prpl-Certification, prplWare-Smoke-Test-Suite,
prplOS-Network-Test-Plan-Candidate-v1.2.0,
prplOS-Network-Test-Plan-Mandatory-v1.2.0
References: PCF-2533
Assisted-by: codex:gpt-5.4:xhigh
Assisted-by: claude:opus-4-6:1m-context
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Currently testbed-cdrouter.py only supports importing packages from
opaque .gz binary exports via the package_import subcommand. This
requires staging, committing, and name-patching through the CDRouter
import API, and provides no way to define packages as readable,
version-controlled YAML.
So lets add a resolve_manifest() method that loads YAML package
manifests with full include resolution and a package_apply
subcommand that upserts packages on the CDRouter instance via the
packages API.
The manifest resolver has strict validation:
- Key allowlist (name, description, includes, tests, options,
dedup_tests); unknown keys are rejected
- Forbidden keys (config, device, config_id, device_id)
- Root manifest name must match its filename
- Group manifests (under groups/) must not define name,
description, or options
- Type checks on all fields
Include resolution uses depth-first traversal with cycle
detection, path traversal rejection, and root-wins option merge.
Test deduplication is configurable via the root-only dedup_tests
boolean (defaults to false, preserving duplicates). Non-root
manifests (both includes and groups) must not define dedup_tests.
The package_apply subcommand performs deterministic upserts:
it always writes the complete manifest-driven state (testlist,
description, options) and only creates a new package on genuine
not-found errors from the CDRouter API.
Runtime config/device binding remains in the existing package_run
flow, keeping package manifests environment-agnostic.
References: PCF-2532
Assisted-by: codex:gpt-5.4:xhigh
Assisted-by: claude:opus-4-6:1m-context
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Currently CDRouter test packages are stored as opaque .gz binary
exports in .testbed/cdrouter/packages/. These binary blobs are not
human-readable, not diffable, and carry implicit fields that leak
runtime state into the repository.
So lets add a converter script that reads the two-line JSON format
inside .gz exports and emits clean unversioned YAML manifests. The
converter extracts name, description, testlist (as tests), and
options from each .gz file. By default it compacts the options map
by omitting keys matching known CDRouter defaults, keeping only
semantic overrides. The --preserve-all-options flag emits the full
source options map when needed.
Fidelity verification expands both source and generated options
with known defaults before comparison, so compact manifests with
omitted defaults still pass. Testlist order is compared exactly.
The converter rejects packages where the internal name does not
match the .gz filename.
CLI supports --input-dir, --output-dir, --filter, --dry-run,
--overwrite, --preserve-all-options, and --verbose flags. Exits
non-zero if any package fails fidelity.
References: PCF-2531, PCF-2535
Assisted-by: codex:gpt-5.4:xhigh
Assisted-by: claude:opus-4-6:1m-context
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
The console log from labgrid's serial connection can contain raw binary
bytes (e.g. 0xf6) that are not valid UTF-8. When
handle_exception_dump_console() reads the file with the default "r" mode
it crashes with UnicodeDecodeError, losing the debug output.
Open the file with errors="replace" to substitute invalid bytes with
the Unicode replacement character instead of crashing.
Fixes: 50298e9b64 ("ci: testbed-device.py: improve error reporting during the board bringup")
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Currently the testbed-01 before_script and after_script sections
contain an SSH key setup block that runs ssh-keyscan against
$TESTBED_UART_RELAY_HOST (uart-relay.testbed.vpn.true.cz). This
host was used by the old SSH-based ExternalPowerDriver for UART
relay access, but it was replaced by Modbus/TCP in commit
69cb220a0. The host is now unreachable, so ssh-keyscan exits
non-zero and set -e aborts the job, breaking all testbed-01
pipelines.
So lets fix this by removing the dead SSH key setup blocks from
both testbed.yml and cdrouter.yml (before_script and
after_script), as well as the TESTBED_UART_RELAY_HOST variable
definition. The ssh-keyscan $TARGET_LAN_IP lines for DUT SSH
access are left untouched as they serve a different purpose.
References: PCF-2361
Fixes: 69cb220a00 ("ci: testbed-01: labgrid: hook in new Papouch Quido relay board")
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
When developping F-115, X_PRPLWARE-COM_ForceTransfer was made public and
not added in the obuspa.t test.
This commit add it$
References: PPW-1809
Signed-off-by: ahmed sassi <ahmed.sassi_ext@softathome.com>
Currently multicast frames from Multi-AP agent is received as 3addr
which is not right as WFA Easymesh specification.
To WAR this AP side issue, adding check for 1905 packets not to be
dropped even when sent in 3addr format since duplication of few
frames is manageable.
Fixes: PPM-3887
Signed-off-by: Marvin Lu <marvin.lu@wnc.com.tw>
wds_mld_uid used for WDS STA AP\VLAN creation is always 0 for a multiAP
STA causing issues in interface creation.
Fix added to get new wds_mld_uid before interface creation for multiAP STA
and set mld_uid, flags to all partner links.
Change-Id: I167d2827916077772ebe48480c6c588eb339d62e
Fixes: https://prplfoundationcloud.atlassian.net/browse/PCF-2515
Signed-off-by: Marvin Lu <marvin.lu@wnc.com.tw>
Add support for the TR-181 parameter
Device.DHCPv6.Client.{i}.X_PRPLWARE-COM_ForceSolicitPolicy.
This parameter was recently introduced in tr181-dhcpv6client and
caused the obuspa.t CRAM test to fail because it was not handled
in the expected output.
References: PPW-1820
Signed-off-by: default avatarahmed sassi <ahmed.sassi_ext@softathome.com>
Update testbed.yml to make lcm tests run before other tests under generic
including backup and restore tests to avoid lcm tests failure issue
mentioned in PPW-1787.
Adding removal of testrole2 in 037-lcm-capabilities.t testcase cleanup.
Signed-off-by: Hari Sriram <hari.s@capgemini.com>
Signed-off-by: ahmed sassi <ahmed.sassi_ext@softathome.com>
This change:
- Adds cram tests for this feature
Implements: PCF-2198, PCF-2240
Signed-off-by: Jayamathi E <e.jayamathi@capgemini.com>
Signed-off-by: Hari Sriram <hari.s@capgemini.com>
Introduced a new configurable parameter(Device.WiFi.Radio.{i}.PowerType) to allow
to configure the 6GHz AccessPoint Type. This DM is applicable only for 6GHz.
For 2.4GHz and 5GHz, this DM would return empty string and for
6GHz the default value would be Standard_Power_AP.
Integrates:
- 0a1c00b6: ("pwhm: add a new parameter PowerType under Device.WiFi.Radio.", 2025-10-08)
- af079781: ("libswlc: add 6GHz PowerType related parameters", 2025-10-08)
Closes: PPM-3552
Signed-off-by: Sriya Nair <sriya.n@tataelxsi.co.in>
Signed-off-by: Hela Saadani <hela.saadani_ext@softathome.com>
Integrates following changes:
- reboot-service: Boot! event is not sent on Boot (PPW-322) (002809a1)
References: PPW-322
Signed-off-by: prplbot <bot@prplfoundation.org>
Currently generic/obuspa.t and generic/obuspa-cellular.t keep
large inline datamodel transcripts and compare them directly in the
cram file. That makes the tests hard to maintain and pushes the full
snapshot through the cram output path. The first DUT snapshot rework
also split the before and after checks across two cram commands, so
.t.err stopped rendering after the first mismatch and hid the
post-restart diff.
So lets move the expected generic and cellular datamodels into
fixture files and verify them through a shared host-side helper. The
helper uploads the target dump script with CRAM_REMOTE_COPY,
captures the datamodel on the DUT, copies it back, and compares it
locally. It now runs the full before/restart/after sequence in one
command so cram keeps both diff sections, and it stores *.actual and
*.diff artifacts for CI and local fixture refreshes.
Fixes: PCF-2475
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
When 5GHz HT_SCAN is failed due to any error, we try to convert 5GHz
interface to STATION mode for scan to succeed. As part of this, interface
is removed from bridge and brought DOWN to perform the mode change and
scan post that.
Currently due to ongoing 2GHz 40MHz HT_SCAN, we always get -EBUSY (-16) error
for 5GHz HT_SCAN and above STA mode change also fails leaving the interface in
DOWN state without recovery. Eventually beacon set fails with -100 (DOWN) error
to deinit and exit hostapd.
Fix this behavior with upstream implementation of mode change to STATION
only when AP scan is not supported (-EOPNOTSUPP, -95) and allow scan with
existing retry logic for HT_SCAN. Extend the same for MLO links as well.
Feature: MLD
Fixes: https://prplfoundationcloud.atlassian.net/browse/PCF-2455
Signed-off-by: Marvin Lu <marvin.lu@wnc.com.tw>
ISO 8601 allows variable precision for fractional seconds.
The system may return microseconds (6 digits) or nanoseconds (9 digits).
Both are valid, so the test regex is updated to accept 1-9 digits.
References: PPW-1670
Signed-off-by: Antoine Philippe <antoine.philippe@softathome.com>
Integrates following changes:
- pwhm: chanMgt: add api to get default supported chanspec (177754b0)
- pwhm: hapd: fix EP bkh connection delayed up to 10mn after fw upgrade (c7365cc0)
- pwhm: chanMgt: fix bgcac started with channel changes after dfs radar (38bbf947)
- pwhm: genEvt: fix sync fh/bk after reconnection to bkh via previous DFS Radar chan (9294c639)
References: PPW-1470
Signed-off-by: prplbot <bot@prplfoundation.org>
Problem: sometimes prplmesh-dm-mapper eventing tests reports failure
as if mapper did not send events, but in fact the source of the problem
is not clear: it can be mapper not sending them, or pwhm not emitting
them.
Solution: when testing events through mapper, add test using pwhm USP
socket so that we can check whether mapper or PWHM is at fault.
Closes: PPW-1680
References: FEAT-27
Signed-off-by: Artem Trokhymchuk <a.trokhymchuk@inango-systems.com>
Add a CRAM test that verifies Wake-on-LAN packet transmission
through the Device.Ethernet.WolL.SendMagicPacket RPC.
Use tcpdump to capture the generated UDP port 9 packet
and validate it in CI.
References: PCF-1774, FEAT-74
Signed-off-by: jim_yang <jim_yang@sdc.sercomm.com>
For now a supnp device sending beybey is keept in the upnp-discovery
data model. No real mechanism is done to remove them properly. This
mechanisme will be introduces by PPW-1533.
Referencs: PPW-1533
Signed-off-by: Alexandre Fiset <alexandre.fiset@softathome.com>
Currently the gmap upnp and dnssd cram tests (066-gmap-mod-upnp.t,
068-gmap-mod-dnssd.t) each duplicate apt source fixing and package
installation inline, which is fragile, slow and inconsistent with
the established pattern of pre-installing test dependencies.
So lets fix this by moving the runtime apt package installation
(minidlna, avahi-daemon, avahi-utils, dbus) into the testbed
before_script, following the pattern from commit d247c51ed663
("ci: cram: remove runtime pip install calls from tests").
The proper fix is to pre-install these packages in the testbed
Docker image, which is blocked on the container pipeline rebuild.
References: PPW-1258
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Add new tests for upnp and dnssd gmap modules.
The tests emulate upnp and dnssd services with minidlns and avahi.
This test the arrival and the departure of services.
Close: PPW-1619
Signed-off-by: Alexandre Fiset <alexandre.fiset@softathome.com>
After merging GitLab Merge Request 2226 prplos, OSPV2 CRAM jobs started failing, specifically in obuspa tests.
The issue is caused by merging the MR without including the required config_in file for the tr181-sfp component.
tr181-sfp component (tag v0.5.0, not v0.8.0 as expected)
Refrences:
PPW-1808
Signed-off-by: default avatarahmed sassi <ahmed.sassi_ext@softathome.com>
Currently PWHM USP is available for prplOS GW profile only.
In the prplOS Extender profile it causing an issue with prplMesh,
that it cannot be operational without PWHM USP socket.
Proposed solution is to move CONFIG_SAH_WLD_ENABLE_USP_SERVER_SOCKET
option from prpl.yml to the prpl_core.yml to get PWHM USP on all
prplOS builds. It will solve issue with prplOS Extender as well as
other builds where PWHM and prplMesh used.
Closes: PPW-1807
References: FEAT-84
Signed-off-by: Vladyslav Tupikin <v.tupikin@inango-systems.com>
This fixes interoperability with newer hostapd/wpa_supplicant and
prplMesh certification flows where MultiAPProfile values above 3 may be
used, for example mapr4/5/6.
Integrates:
- 5c2e663ac: ("Extend pWHM Multi-AP profile handling from 0..3 to 0..6.", 2026-03-30)
Fixes: PPM-3964
Signed-off-by: Dmytro Puz <d.puz@inango-systems.com>
Signed-off-by: Hela Saadani <hela.saadani_ext@softathome.com>
Integrates:
- dde8f833: ("time-manager: NTP service is down when IPVersion is forced to ipv6 or ipv4", 2026-01-02)
References: PPW-1323
Signed-off-by: Racha Hamhoum <racha.hamhoum_ext@softathome.com>
038-lcm-pcm compares data model snapshots taken before and after
fake_fw_upgrade. It filters runtime-only parameters through a
runtime_params ignore list before checking the diffs.
After commit 84d5923af0 ("profiles: lcm.yml: feed_lcm:
cthulhu-lpm: policy: fix malformed default policy file"), the
post-upgrade snapshot contains LocalPolicyManager.Action.1 runtime
entries. Because those parameters are not in the ignore list, the
test reports false runtime parameter mismatches.
Instead of extending the inline here-document again, move the ignore
list into ${TESTDIR}/lcm-pcm_runtime_params so it is easier to
review and maintain. Add the LocalPolicyManager.Action.1 parameters
there and copy the file into /tmp/lcm-pcm/runtime_params before
running the diff checks.
Fixes: PPW-1797
References: PPW-1637, PPW-1638
Fixes: 84d5923af0 ("profiles: lcm.yml: feed_lcm: cthulhu-lpm: policy: fix malformed default policy file")
Signed-off-by: Nabil BIZID <nabil.bizid@softathome.com>
A new tags parameter was added to the wan-manager. This parameter can be used to put certain tags/labels on a wan-mode.
This tags parameter will be provided to the (vendor) modules as is.
The (vendor) module can then change it's behavior depending on the tags which are set.
The obuspa cram test needed to be updated to now also expect this new parameter.
References: PCF-2434, FEAT-287
Signed-off-by: Toon Caeyers <toon.caeyers_ext@softathome.com>
The mod-wanmgr-system module is generic for board requiring just a reboot between modes with different physical type. As the OSPv2 requires more, the mod-wanmgr-system-ospv2 module is introduces that will configure the required settings when called.
This module replaces the mod-wanmgr-system module.
References: PCF-2471, FEAT-287
Signed-off-by: Toon Caeyers <toon.caeyers_ext@softathome.com>