Commit Graph

1159 Commits

Author SHA1 Message Date
Marteb
a07d59a63b ci: cram: packetinterception: update PacketInterception test
Signed-off-by: Marten Barrett <marten.barrett@softathome.com>
2026-08-24 09:05:39 +00:00
ahmed sassi
a49a1afa0c ci: cram: obuspa: update obuspa test
Signed-off-by: ahmed sassi <ahmed.sassi_ext@softathome.com>
2026-08-24 09:05:39 +00:00
ahmed sassi
daccd45f5c ci: cram: prplos: update 005-build-config
References: PPW-2364
Signed-off-by: ahmed sassi <ahmed.sassi_ext@softathome.com>
2026-08-24 09:05:39 +00:00
Petr Štetiar
b0aa5e3e34 ci: cram: size component job timeouts
Component jobs currently inherit the full-tier 85-minute timeout.
Measured runs peak at 35.8 minutes for components and 80.8 minutes for
the full tier.

Set each tier to the smallest five-minute multiple at least four
minutes above its maximum observed duration. This gives component jobs
40 minutes and retains 85 minutes for full jobs.

Keep the full-job limit explicit because those jobs would otherwise
inherit the new component limit. A hung component job now releases its
device roughly 45 minutes sooner.

Assisted-by: claude:opus-5:orchestrator
Assisted-by: codex:gpt-5.6-sol:medium-fast
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Petr Štetiar
2fdd09ead1 ci: testbed: summarize trailing test paths
run_check reports a failed command by expanding its complete argument
list. A full Freedom cram run carries about 199 test paths, producing
one roughly 13,000-character log line that obscures the actual failure.

The test arguments form a contiguous .t suffix. Count and replace only
that suffix with `(N tests)` in failure diagnostics, leaving the command
head and non-test invocations unchanged. Keep executing the original
arguments and preserve status and sentinel handling.

Cram's --verbose job output still lists each test path and result. The
component resolver continues to emit the selected path list used by the
job.

Assisted-by: claude:opus-5:orchestrator
Assisted-by: codex:gpt-5.6-sol:medium-fast
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Petr Štetiar
ffff4ed676 ci: cram: accept live br-lcm carrier state
The LCM bridge carrier reflects whether its container-side port is
live. Split execution can inspect it before the LCM suite tears that
state down, so the bridge can appear either live or without carrier.

Carrier state is not the route line's only variable part: ip route
also emits a trailing separator. Account for that separator after the
optional linkdown flag so both carrier states match.

Accept both observed route and link forms in every board's copy of the
affected expectations while keeping every address, interface
attribute, and the carrier-to-state pairing constrained.

Assisted-by: codex:gpt-5
Assisted-by: claude:opus-5:orchestrator
Assisted-by: codex:gpt-5.6-sol:medium-fast
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Petr Štetiar
8b234753ca ci: cram: wait for UPnP discovery readiness
The split prplos bucket reaches the discovery assertions sooner than the full suite and can observe an empty first root device.

Poll for the first root-device UUID for at most one minute before retaining the existing parameter assertions unchanged.

Assisted-by: codex:gpt-5
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Petr Štetiar
11eb3b38a5 ci: cram: detach mapper proxy from generic inventory
The data-model-mapper sibling test installs its package at runtime and creates Device.X_PRPLWARE-COM_SoftwareModules. The generic inventory must not depend on that sibling side effect.

Filter the mapper-only element following the cellular detachment precedent in e342d300. The mapper test continues to exercise the element in the LCM bucket.

Assisted-by: codex:gpt-5
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Petr Štetiar
0054cef6b0 ci: cram: create component jobs as manual by default
Component jobs start automatically whenever CRAM_COMPONENTS selects
them, and the variable defaults to prplos. Every merge-request pipeline
therefore schedules six hardware jobs whether or not anybody needs
them, and the bucket choice is fixed before the pipeline exists. The
non-DUT manifest lint also starts automatically in non-scheduled
pipelines.

Testbed time is the scarce resource, and the build test jobs feeding
these DUT jobs are already manual in merge-request pipelines. The
natural flow is to pick buckets after a build finishes, not at
pipeline creation. The lint should follow the same opt-in flow.

Drop the CRAM_COMPONENTS default and add trailing manual rules so every
component job and the lint appear as optional play buttons in
non-scheduled pipelines. Manually started jobs never gate the pipeline
result. With no opt-in variable or release-tag override, no cram-related
job at all, lint included, starts automatically.

Setting CRAM_COMPONENTS still starts the listed buckets automatically
with each board's existing blocking behavior. The automatic full run in
prplware release tag pipelines is unchanged.

Assisted-by: claude:fable-5
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Petr Štetiar
3c56f4f028 ci: cram: lint component manifest in pipelines
The component manifest lint currently runs only during local validation.
Merge requests get no feedback when new tests silently enter the prplos
remainder.

Add a non-DUT manifest coverage job to every pipeline. Fetch an MR base
when needed and pass it to the lint. Newly-in-remainder warnings then
appear in job output.

Give the job explicit rules: a job without rules keeps the legacy
branches-and-tags default and is never created in merge-request
pipelines, the exact place the diff-base comparison exists for. Skip
scheduled pipelines, which carry no cram work.

Use the digest-pinned testbed v1.3.0 image for Python, YAML, and git. The
MR diff-base comparison requires runtime git for cat-file, fetch, and the
lint script's child processes.

The image runs as the testbed user while the runner checkout has a
different owner. Git otherwise rejects the checkout before lint starts:

```text
fatal: detected dubious ownership in repository at
'/builds/prpl-foundation/prplos/prplos'
```

Pass a safe.directory override for CI_PROJECT_DIR through Git's inherited
configuration environment. Print the selected MR diff base so the
comparison path remains visible in job evidence. Add no hardware runner
tags or build dependencies.

Assisted-by: codex:gpt-5
Assisted-by: claude:fable-5
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Petr Štetiar
26895230f7 ci: cram: add component split jobs behind CRAM_COMPONENTS
The hardware cram jobs currently run each board's complete suite. Every
automatic pipeline therefore consumes coverage that can be selected more
cheaply by component.

Add a runtime component template so test collection happens in cram's
checkout and environment. Replace each legacy board job with four static
full, prplmesh, lcm, and prplos jobs selected through the
comma-separated CRAM_COMPONENTS variable.

Name each job `cram <board> [<component>]` and include the selected
component in the expandable test-execution section title.

Move the MXL-specific cram skip from the legacy job-name token. Use the
stable DUT board identifier instead.

Preserve skip behavior under the compact OSPv2 name.

Default automatic pipelines to prplos. Start the full jobs
automatically in prplware release tag pipelines, whose build jobs also
run automatically. Keep cram jobs out of scheduled pipelines entirely,
as with the legacy suite: schedules never create the build jobs these
jobs need, so any selected cram job would fail scheduled pipeline
creation with an unsatisfiable needs reference. Keep the test command,
post suite, timeout, run_check, and JUnit filenames unchanged.

Assisted-by: codex:gpt-5
Assisted-by: claude:fable-5
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Petr Štetiar
cc6961453f ci: cram: add component manifest lint
The computed prplos remainder keeps existing tests covered, but it can
also hide accidental classification of newly added tests. Stale or
overlapping component globs can likewise make split jobs unreliable.

The sanity set adds another strict boundary: a sanity test must not also
belong to an explicit component bucket.

Add a location-agnostic lint using the shared bucketing implementation.
Validate the schema, glob coverage, and sanity and explicit-component
exclusivity. Check the reserved smoke and hardware-only sets. Include
sanity in the reported bucket counts. Accept either a Git ref or a file
list as the baseline for newly-in-remainder warnings. Report missing
targets for tracked test symlinks without failing the otherwise valid
manifest.

Assisted-by: codex:gpt-5
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Petr Štetiar
9ccf6463e0 ci: cram: add component manifest and resolver
The legacy cram suite repeats nested directories to run setup-sensitive
tests early. Component jobs need the same ordered and deduplicated file
list without embedding repository locations in the CI configuration.

Some DUT and environment checks also need to run before every split
component because their failure invalidates the rest of that job.

Add a reserved sanity set and the lcm and prplmesh manifest buckets,
keeping prplos as the computed remainder. Remove sanity matches before
partitioning the other tests, and prepend the ordered sanity block when
resolving any split component. Keep full-suite resolution unchanged and
allow the sanity block to be resolved directly for inspection.

Add a shared collector which preserves cram 0.7 traversal and
first-occurrence deduplication. Retain broken test symlinks so
pre-existing tree defects cannot crash list resolution.

Assisted-by: codex:gpt-5
References: CI-7
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-19 10:14:27 +00:00
Alexandre Fiset
4d250f3833 .gitlab: cram: update expected lspci output after hwdata upstep
The packages feed revision bumped by this alignment moves hwdata from
0.387 to 0.407. Its pci.ids now carries a name for 17cb:0308, so lspci
reports "SDX61/SDX62/SDX65 [Snapdragon 5G X6X-series]" where it used to
fall back to "Device 0308".

References: PPW-1773, PPW-2138, PPW-1785
Signed-off-by: Alexandre Fiset <alexandre.fiset@softathome.com>
2026-08-18 11:40:42 +01:00
Matthias Franck
65cd90f8bb .gitlab: cram: update expected output after alignment with openwrt v24.10.8
Some default config options in the curl package changed, so let's align the tests accordingly.
See:
f693e556ac
a9bd8f6f58
b087bf1841
2dbe2c0008

References: PPW-1773, PPW-2138, PPW-1785
Signed-off-by: Matthias Franck <matthias.franck@softathome.com>
2026-08-18 11:40:42 +01:00
Petr Štetiar
742dd9cd65 ci: build: generate release version files for tags
Release binaries must be reproducible from the sources shipped with them.
Generate version and version.date from git when CI_COMMIT_TAG is set,
before the build reads either value.

Compute both values before writing either file, then print them for
traceability. The tag condition is the exact complement of the development
guard, so generation cannot run on development builds.

Assisted-by: codex:gpt-5.6-sol:medium-fast
Assisted-by: claude:opus-5:orchestrator
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PCF-2730
2026-08-18 09:06:22 +00:00
Petr Štetiar
ff467a1172 ci: build: reject release-tag version files in development builds
version and version.date override the git-derived metadata used by
development builds. Keeping either file after a release-tag sync freezes
the reported revision or source date.

Add a fail-fast check to the shared build template before the first make
invocation. When CI_COMMIT_TAG is empty, the check reports their presence
and points sync authors to upstream's "revert to branch defaults"
commit.

Assisted-by: codex:gpt-5.6-sol:medium-fast
Assisted-by: claude:opus-5:orchestrator
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PCF-2730
2026-08-18 09:06:22 +00:00
Dmytro Puz
3f1884aea0 ci: cram: update prplMesh agent status output
Update the expected prplMesh CLI status output to include the live
controller connectivity state.

The backhaul manager refactoring added the "controller connected" field
to the agent status output. All covered gateway scenarios are operational
and connected to their local controller, so expect the field to be true
across the affected platform CRAM tests.

This is an expected-output update only and does not change test behavior.

References: PPM-4012
Signed-off-by: Dmytro Puz <d.puz@inango-systems.com>
2026-08-14 09:43:12 +00:00
Andrey Erokhin
81a9c94e8f ci: cram: add IEEE1905 model checks
Verify IEEE1905 model population against the number of prplMesh devices
expected in each testbed. Compare AL IDs and DataElements references, and
check that Network.Enable controls materialization.

Run the NMAP checks after the other prplMesh tests to avoid disrupting
the established Controller+Agent state and discovered testbed topology.

Closes: PPM-3970
References: FEAT-319
Signed-off-by: Andrey Erokhin <a.erokhin@inango-systems.com>
2026-08-14 09:43:12 +00:00
Andrey Erokhin
1693fd3cef PROVISORY: ci: cram: check IEEE1905 registration in obuspa
Check that prplMesh registers the complete Device.IEEE1905 data model
with obuspa.

Keep this check separate from obuspa.expected and run it before the tests
that restart obuspa. The prplMesh event loop does not currently support
reconnecting after an obuspa restart.

Closes: PPM-3970
References: PPM-4178
References: FEAT-319
Signed-off-by: Andrey Erokhin <a.erokhin@inango-systems.com>
2026-08-14 09:43:12 +00:00
Andrey Erokhin
09e608c27f ci: cram: add IEEE1905 datamodel
Extend the Cram datamodel expectations with the new Device.IEEE1905 object tree
and the prplMesh HigherLayerRequestIntervalSec configuration parameter.

Closes: PPM-3970
References: FEAT-319
Signed-off-by: Andrey Erokhin <a.erokhin@inango-systems.com>
2026-08-14 09:43:12 +00:00
Tim Hsu
cf58abc4ea ci: cram: freedom: expect kmod-input-gpio-keys-polled in build config
The WPS button now uses a gpio-keys-polled node, which pulls in
kmod-input-gpio-keys-polled, so it appears in the build .config.

Add it to the expected package list in 005-build-config.t.

Fixed: PCF-2655

Signed-off-by: Tim Hsu <tim.hsu@wnc.com.tw>
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org> [rebased]
2026-08-11 14:03:01 +00:00
Tim Hsu
741840c473 ci: cram: freedom: point WPS gpio-key check at gpio-keys-polled node
WPS button moved from the gpio-keys edge-IRQ node to a separate gpio-keys-polled node to avoid the GPIO12 pad-leakage IRQ storm.

015-platform.t still read soc@0/gpio_keys/button@1, which no longer exists, so the WPS label and linux,code checks failed.

Point both at soc@0/gpio_keys_polled/button@1; reset stays at gpio_keys/button@2 and linux,code is unchanged (0x0211).

Fixed: PCF-2655

Signed-off-by: Tim Hsu <tim.hsu@wnc.com.tw>
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org> [rebased]
2026-08-11 14:03:01 +00:00
FAOUZI YAHYA
0f3ea5734e ci: cram: replace X_PRPLWARE-COM_ForceSolicitPolicy with ForceSolicitPolicy
Integrates:
-replace X_PRPLWARE-COM_ForceSolicitPolicy with ForceSolicitPolicy

References: PCF-2540, PPW-1892
Signed-off-by: FAOUZI YAHYA <faouzi.yahya_ext@softathome.com>
2026-08-11 14:24:46 +01:00
Alexandre Fiset
a2fdadb0f2 ci: cram: dhcpv6-forcesolicite: drop vendor prefix from parameter name
ForceSolicitPolicy is now a standard TR-181 parameter with no vendor
prefix. Update the cram test accordingly.

Signed-off-by: Alexandre Fiset <alexandre.fiset@softathome.com>
2026-08-11 14:24:46 +01:00
Iacob Juc
42e6ebcb32 cram: add cram test for Radio.IEEE80211be.MLDUnitSetting
Testing Various valid combinations on 6GHz PrivateVAP

side-effect: default value of MLDUnitSetting changes behavior of PWHM

i.e. new parameter:
Radio.{i}.IEEE80211be.MLDUnitSetting=Assumed
is expected to invalidate current apmld tests
Reset it to Required, the value that keeps old pwhm behavior

OBUSPA:
Prefix IEEE80211be.MLDUnitSetting with X_PRPLWARE-COM_
and add it to obuspa.expected datamodel dump

testbed.yml : increase timeout by 2min (nominal execution time : 1m50s)

Issue: PPM-3545
Signed-off-by: Iacob Juc <iacob.juc_ext@softathome.com>
2026-08-07 16:16:23 +00:00
Hela Saadani
c3f756c8c4 ci: cram: ubus-datamodel: add DNSSD.Scan
Update ubus-datamodel to add DNSSD.Scan

References: PPW-1676
Signed-off-by: Hela Saadani <hela.saadani_ext@softathome.com>
2026-08-07 16:06:20 +01:00
Yousfi Neji
2b33b01372 ci: cram: fix issue where services were not removed from the data model
Issue:
With the introduction of cache services and a configurable removal timeout (PPW-1676),
services are no longer removed immediately when they are no longer detected.
Instead, a timer is started based on the new RemoveServiceTimeout parameter.
If the service is rediscovered before the timer expires, it remains in the data model.
The default timeout value is set to 300000 ms (5 minutes).

Fix:
The fix involves modifying the cram test to lower the RemoveServiceTimeout to 5000 ms (5 second)
for quicker testing.

Tracked-by: PPW-1676
Signed-off-by: Yousfi Neji <yousfi.neji_ext@softathome.com>
2026-08-07 16:06:20 +01:00
Alexandre Fiset
d5d0fae4bb ci: cram: update build config and tls expectations for VPN feature
prpl_core.yml now pulls strongswan-default and sixteen strongswan
modules for the IPsec datamodel. They drag in dependencies nothing
selects explicitly -- strongswan-ipsec via mod-stroke, and libgcrypt
plus libgpg-error via mod-gcrypt -- so every board that ships strongswan
sees a wider package set than its expected output records.

Refresh the expectations for the three boards that build strongswan:

- 005-build-config.t on mxl25641-hdk-6, wnc-freedom and urx851-b0-dk.
  urx851-b0-dk has no hardware test job, so its copy of the same
  expected output would have drifted unnoticed until the board is
  exercised again; keep the three in sync.
- 011-tls.t on mxl25641-hdk-6 and wnc-freedom. The grep pattern and the
  version-tolerant libopenssl / libustream-openssl regexes are left
  untouched; only strongswan-mod-openssl is added. Enumerating the whole
  strongswan package set belongs in 005-build-config.t, not in a test
  whose subject is the single TLS library.

The same module set also widens what charon advertises through the IPsec
root object. Rather than track those capability strings, 133-tr181-ipsec.t
now asserts only that the datamodel starts with no entries, so the
expectation no longer moves with the strongswan module selection.

Also drop CONFIG_VERSION_CODE_FILENAMES from the wnc-freedom expected
build config. The symbol is no longer emitted, which is OpenWrt base
drift rather than a VPN change, but the expectation cannot pass while it
is listed.

References: FEAT-150, PCF-2467
Signed-off-by: Alexandre Fiset <alexandre.fiset@softathome.com>
2026-08-05 14:16:15 +01:00
Alexandre Fiset
1279782024 ci: cram: freedom: swupdate: cleanup /tmp after the dry-run tests
The .swu firmware image (~80MB) and temporary PEM keys generated during
the wrong-key test were never removed from DUT /tmp, leaving the
partition nearly full for the tests that run afterwards.

Delete the .swu image and the generated PEM files at the end of the
test.

References: PCF-2469, PPW-2134
Signed-off-by: Alexandre Fiset <alexandre.fiset@softathome.com>
2026-08-05 14:16:15 +01:00
Alin Nastac
306a6c7aa9 ci: cram: tr181-ipsec initial tests
Add initial cram tests for tr181-ipsec, including an end-to-end test with
IKEv2 certificate authentication: a dedicated strongSwan charon instance
runs inside a network namespace (with a private /var/run tmpfs to isolate
it from the CPE charon) behind a veth pair emulating the WAN link, so the
test is self-contained and is not tied to a specific board. Certificates
are generated on the DUT: a self-signed one for the CPE, and for the peer
an end entity certificate issued by a dedicated CA, since
IKEv2RemoteAuthenticationMethod designates the authority the peer is
validated against rather than the peer certificate itself. They are
imported through /etc/config/autocert into Security.Certificate, and
referenced from an IPsec.Profile/Filter pair. The end-to-end test verifies
the IKEv2 SA and Child SA come up and that protected traffic flows.

References: PCF-2469, FEAT-150
Signed-off-by: Alin Nastac <alin.nastac@softathome.com>
Signed-off-by: Alexandre Fiset <alexandre.fiset@softathome.com>
2026-08-05 14:16:15 +01:00
Patrick Havelange
8b52032bc4 ci: cram: tr181-wireguard initial tests
Add initial cram tests for tr181-wireguard, including an end-to-end tunnel
test: the remote peer lives in a network namespace behind a veth pair
emulating the WAN link and is configured with wireguard-tools, so the
test is self-contained and is not tied to a specific board. The
end-to-end test drives the CPE side through the data
model (WireGuard.Tunnel/Peer + IP.Interface + Firewall.Service), verifies
the handshake on the peer, ping in both directions, a short iperf3 session
and the NetModel flags.

Implements: PCF-2023
References: FEAT-150
Signed-off-by: Patrick Havelange <patrick.havelange_ext@softathome.com>
Signed-off-by: Alexandre Fiset <alexandre.fiset@softathome.com>
2026-08-05 14:16:15 +01:00
Khaled Hasni
737f390651 ci: cram: tr181-tuntap initial tests
Add CRAM tests for tr181-tuntap.

References: PCF-2467, FEAT-150
Signed-off-by: Khaled Hasni <khaled.hasni_ext@softathome.com>
2026-08-05 14:16:15 +01:00
Khaled Hasni
bd85d5aa3e ci: cram: tr181-gre initial tests
Add CRAM tests for tr181-gre, including an end-to-end tunnel test: the
remote peer lives in a network namespace behind a veth pair emulating
the WAN link, so the test is self-contained and is not tied to a
specific board. The end-to-end test drives the tunnel
through the data model (GRE.Tunnel + Interface + IP.Interface), verifies
the kernel route, reply behaviour with and without a peer return route,
the UseSequenceNumber/UseChecksum toggles and runs a short iperf3 session
through the tunnel.

References: PCF-2294, FEAT-150
Signed-off-by: Khaled Hasni <khaled.hasni_ext@softathome.com>
Signed-off-by: Alexandre Fiset <alexandre.fiset@softathome.com>
2026-08-05 14:16:15 +01:00
Petr Štetiar
23e82ac48a ci: cram: stop ssh from consuming script input
Cram supplies each generated test script to the shell through standard
input. The shared SSH command inherits that input and consumes the
remaining script, leaving the shell at EOF inside a quoted command.

Commit 5fd42aa540 ("ci: cram: use legacy SCP protocol for remote
copies") rewrote CRAM_REMOTE_COMMAND while adding legacy SCP support and
dropped the -n option added for PCF-2222. Job 15640024463 then failed
130-periodicfileupload.t with:

/bin/sh: 152: Syntax error: Unterminated quoted string (no-eol)

Job 15640024462 leaked this salt marker in the same test:

CRAM1 (no-eol)

Restore -n so SSH reads from /dev/null instead of the generated test
script.

Assisted-by: codex:gpt-5.6-sol
Assisted-by: claude:opus-5:1m-context
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Fixes: 5fd42aa540 ("ci: cram: use legacy SCP protocol for remote copies")
References: PCF-2222
2026-08-05 12:56:30 +00:00
Houssem Dafdouf
840cf16690 ci: cram: fix quoting of expanded function substitutions
Quote expanded command substitutions in remote logger commands
to ensure the expanded value is passed as a single literal
argument and prevent remote shell interpretation of special
characters.

Closes: PPW-1315
Signed-off-by: Houssem Dafdouf <houssem.dafdouf_ext@softathome.com>
2026-07-31 13:00:20 +00:00
Mykola Hlukhenkyi
004a6ad64e ci: cram: lcm: update TrustedProvider service version
Currently, the 036-lcm-usp-restrictions test fails during the
TrustedProvider model validation; this happened because
TrustedProvider required some time (up to 5 seconds) to register its model:
da53b18a65/src/main.c (L159)

New version of TrustedProvider service registers data model over ODL and
amxrt mechanism and does not contain the registration timeouts.

Fixes: PPW-2037
References: FEAT-28, FEAT-120
Signed-off-by: Mykola Hlukhenkyi <m.hlukhenkyi@inango-systems.com>
Signed-off-by: Artem Trokhymchuk <a.trokhymchuk@inango-systems.com>
2026-07-29 13:51:36 +00:00
FAOUZI YAHYA
5154d52915 ci: cram: add Device.BulkData.Profile.{i}.HTTP.X_PRPLWARE-COM_CABundle
Integrates:
-add Device.BulkData.Profile.{i}.HTTP.X_PRPLWARE-COM_CABundle

References: PPW-1962
Signed-off-by: FAOUZI YAHYA <faouzi.yahya_ext@softathome.com>
2026-07-28 10:35:34 +01:00
Petr Štetiar
4e07a8fbea ci: cram: provide TLS certificate to servefile
Debian 13 ships pyOpenSSL without the deprecated X509Req API used by
servefile certificate generation.

Generate a short-lived certificate with openssl and pass it to both
HTTPS server instances.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PPW-1258
2026-07-28 10:19:05 +01:00
Petr Štetiar
74447b9463 ci: cram: run host ping with raw-socket privilege
The Debian 13 testbed image runs cram as an unprivileged user, so its
ping process cannot open a raw socket with the executor capabilities.
Use the existing passwordless sudo setup for the host-side probe.

GitLab runner hostnames are not present in the container hosts file,
so sudo also emits a lookup warning before the asserted ping result.
Discard stderr while retaining the ping and grep exit behavior.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PPW-1258
2026-07-28 10:19:05 +01:00
Petr Štetiar
38c51e4976 ci: cram: accept any MiniDLNA server version
The separately released testbed image can update MiniDLNA without
changing the behavior under test. Matching one package version makes
the DUT discovery test fail whenever that host-side fixture changes.

Keep the server description fields exact, but match the MiniDLNA
version with a cram glob. This verifies that the DUT discovers the
fixture without coupling the expectation to a Debian package version.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PPW-1258
2026-07-28 10:19:05 +01:00
Petr Štetiar
5fd42aa540 ci: cram: use legacy SCP protocol for remote copies
OpenSSH in the Debian 13 testbed container uses SFTP for scp transfers
by default, while the DUT images do not provide an SFTP server.

Force the legacy SCP protocol in the shared cram copy command, the
security certificate fixture, and the remaining direct scp calls so
every test can stage its helper files and packages.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Fixes: 854ef0eafb ("ci: cram: add new LCM tests")
References: PPW-1258
2026-07-28 10:19:01 +01:00
Petr Štetiar
f414d6aed2 ci: testbed: stop installing packages at runtime
The shared testbed setup installs MiniDLNA, Avahi, and dbus before
every cram and CDRouter job. This adds network and package mirror
dependencies to hardware tests and allows the runtime environment to
drift independently of the selected image.

The separately released testbed image now carries these packages,
together with the Python dependencies used by cram. Remove the runtime
apt update and install command so jobs consume only the image contents.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Fixes: 6792ba6b95 ("PROVISORY: ci: testbed: install minidlna and avahi packages at runtime")
References: PPW-1258
2026-07-28 10:14:51 +01:00
Petr Štetiar
30185bbbaf ci: testbed: stop rewriting Debian package sources
The testbed setup rewrites the Debian mirror to archive.debian.org
before installing runtime cram dependencies. This was needed for the
old Buster container, but Debian 13 uses current mirrors and stores its
configuration in deb822 files instead of /etc/apt/sources.list.

Both focused cram jobs stop at the first rewrite before DUT bring-up:

```text
$ sudo sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list 2>/dev/null
Running after_script
```

Remove both obsolete rewrites and let apt use the sources supplied by
the versioned Debian 13 testbed image.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
Fixes: 6792ba6b95 ("PROVISORY: ci: testbed: install minidlna and avahi packages at runtime")
References: PPW-1258
2026-07-28 10:14:51 +01:00
Petr Štetiar
3225ea1c95 ci: cram: stop installing Python tools at runtime
Debian 13 marks its system Python environment as externally managed,
so cram-time pip installs fail before the tests can exercise the DUT.
Python 3.13 also removed cgi, which the preinstalled servefile 0.5.4
still imports.

Use async-upnp-client, servefile, scapy, and legacy cgi from the
testbed image. Remove the per-test pip calls and PATH overrides, and
document that scapy is an image dependency. Preserve the newer
CABundle fixture setup from the source change.

The later 018-dhcpv4-client-options.t test reintroduced the same pip
call, so give it the same treatment.

Assisted-by: codex:gpt-5
Assisted-by: claude:opus-5:orchestrator
Assisted-by: codex:gpt-5.6-sol:medium-fast
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PPW-1258
2026-07-28 10:14:51 +01:00
Petr Štetiar
ab855504b5 ci: cram: accept ntpsec ntpdate output
ntpsec-ntpdate 1.2.3 reports successful queries as a timestamp
followed by numeric offset and uncertainty values instead of the
former textual offset wording.

Match the numeric ntpsec query format so the time test accepts the
output provided by the Debian 13 testbed image.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PPW-1258
2026-07-28 10:14:51 +01:00
Petr Štetiar
fff3204ae2 ci: docker: drop the in-tree testbed container
The testbed container now has its own prpl Foundation project, release
pipeline, and versioned registry image. Keeping the old Debian Buster
image in prplos leaves two sources for the same CI runtime and continues
to expose obsolete build, test, and deploy jobs.

Remove the in-tree Dockerfile and its CI job definitions. Drop the root
include because the testbed and CDRouter templates now consume the
external containers/testbed release directly.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PPW-1258
2026-07-28 10:14:51 +01:00
Petr Štetiar
5c97fa5a41 ci: testbed: consume the ci/containers/testbed v1.3.0 image
The testbed and CDRouter templates currently derive their image from the
designated prplos branch. This couples image changes to an in-tree build
and prevents consumers from using the separately released container.

Use the released ci/containers/testbed v1.3.0 image in both templates,
pinning it to its published immutable manifest digest. This keeps cram
and CDRouter on the same Debian 13 environment with the runtime test
dependencies preinstalled, while every pipeline pulls the exact released
content.

The previous image declared /home/testbed as a volume. GitLab's Docker
executor replaced it with an empty, root-owned, persistent runner cache
that shadowed the writable home created in the image. OpenSSH resolves
~/.ssh through the passwd database instead of $HOME, so redirecting HOME
could not make bare ssh read the host key written by ssh-keyscan.

The v1.3.0 image drops that volume. Remove the ineffective HOME
overrides while retaining the .ssh directory setup that ssh-keyscan
needs.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PPW-1258
2026-07-28 10:14:51 +01:00
Petr Štetiar
cbc87d14e0 ci: cram: 130-periodicfileupload.t: restore the canonical R alias
Cram tests conventionally define R directly from CRAM_REMOTE_COMMAND.
Commit 43f1696033 ("ci: cram: periodicfileupload tests sometimes fails
(PPW-1766)") introduced a sed pipeline for this test.

The substitution only matches ssh when it has a leading space, while
CRAM_REMOTE_COMMAND begins with ssh. The pipeline is therefore a silent
no-op.

Keeping a per-test rewrite would duplicate the stdin handling. The
preceding "ci: cram: keep remote commands off the script stdin" puts
ssh -n into CRAM_REMOTE_COMMAND at its source for every test.

Restore the canonical alias so this test follows the suite convention
and relies on the centralized remote command definition.

References: PCF-2222, PPW-1766
Assisted-by: claude:opus-5:orchestrator
Assisted-by: codex:gpt-5.6-sol:medium-fast
Fixes: 43f1696033 ("ci: cram: periodicfileupload tests sometimes fails (PPW-1766)")
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-07-28 09:03:45 +00:00
Petr Štetiar
3723a2793b ci: cram: keep remote commands off the script stdin
Cram supplies the complete generated test script through the shell's
stdin. SSH inherits that input from the shared remote-command alias and
drains the script beyond the shell's read-ahead buffer. The shell then
reaches EOF in the middle of a quoted command near byte 8,192:

```text
/bin/sh: 74: Syntax error: Unterminated quoted string
```

This is independent of the Python interpreter. Freedom job 15484314070
failed the 49-command probe at chunk 0036 under Python 3.14.6. With the
same probe and firmware, job 15484856804 passed all 49 chunks under
Python 3.13 after adding the SSH stdin protection.

Pass -n to the shared SSH command so it reads from /dev/null instead of
the test script. Apply the same safe default to the MXL fallback alias.

Assisted-by: codex:gpt-5
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
References: PCF-2222
2026-07-28 09:03:45 +00:00