ci: cram: lcm: update tests to avoid hardcoded indexes

Refactor LCM tests to eliminate reliance on hardcoded
index values when querying the datamodel. Previously,
tests depended on specific indexes, which could cause
failures if indexes did not match or were altered by
other tests.

This update replaces ubus commands with generic ba-cli
commands that use filters to query instances, making
tests more robust and less prone to breakage due to
index mismatches.

References: PCF-2025
Signed-off-by: Nabil BIZID <nabil.bizid@softathome.com>
This commit is contained in:
Nabil BIZID 2025-10-05 16:26:55 +02:00 committed by Matthias Franck
parent 60a248ee66
commit 7f5541acf6
2 changed files with 62 additions and 41 deletions

View File

@ -19,38 +19,55 @@ Check that random LXC binaries work:
Check Cthulhu.Config datamodel:
$ R "ubus -S call Cthulhu.Config _get"
{"Cthulhu.Config.":{"PluginLocation":"/usr/lib/amx/cthulhu/plugins","ImageLocation":"/lcm/rlyeh/images","HostObjectsMountOptions":"bind,ro,nodev,nosuid,relatime,noexec","UseOverlayFS":true,"GracefulShutdownTimeoutSeconds":10,"UseBundles":false,"StorageLocation":"/lcm/cthulhu","HostObjectsMountOptionsTmpfs":"rw,nodev,nosuid,relatime","DefaultBackend":"/usr/lib/cthulhu-lxc/cthulhu-lxc.so","BundleLocation":"/lcm/celephais/bundles","BlobLocation":"/lcm/rlyeh/blobs"}}
{}
{"amxd-error-code":0}
$ R "ubus-cli -l -j Cthulhu.Config.?0 | jsonfilter -e @[*].*.PluginLocation -e @[*].*.ImageLocation -e @[*].*.UseOverlayFS -e @[*].*.GracefulShutdownTimeoutSeconds -e @[*].*.UseBundles -e @[*].*.StorageLocation -e @[*].*.DefaultBackend -e @[*].*.BundleLocation -e @[*].*.BlobLocation | sort"
/lcm/celephais/bundles
/lcm/cthulhu
/lcm/rlyeh/blobs
/lcm/rlyeh/images
/usr/lib/amx/cthulhu/plugins
/usr/lib/cthulhu-lxc/cthulhu-lxc.so
0
1
10
Check Rlyeh datamodel:
$ R "ubus -S call Rlyeh _get"
{"Rlyeh.":{"PluginLocation":"/usr/lib/amx/rlyeh/plugins","ImageLocation":"/lcm/rlyeh/images","ROImageLocation":"/usr/rlyeh/images","ROStorageLocation":"/usr/rlyeh/blobs","CertificateVerification":true,"SignatureVerification":true,"RemainingDiskSpaceBytes":1000001,"StorageLocation":"/lcm/rlyeh/blobs","OnboardingFile":"/lcm/rlyeh_onboarded"}}
{}
{"amxd-error-code":0}
$ R "ba-cli -l -j Rlyeh.?0 | jsonfilter -e @[*].*.PluginLocation -e @[*].*.ImageLocation -e @[*].*.ROImageLocation -e @[*].*.ROStorageLocation -e @[*].*.CertificateVerification -e @[*].*.SignatureVerification -e @[*].*.StorageLocation -e @[*].*.RemainingDiskSpaceBytes -e @[*].*.OnboardingFile | sort"
/lcm/rlyeh/blobs
/lcm/rlyeh/images
/lcm/rlyeh_onboarded
/usr/lib/amx/rlyeh/plugins
/usr/rlyeh/blobs
/usr/rlyeh/images
1
1
1000001
Check SoftwareModules datamodel:
$ R "ubus -S call SoftwareModules _get"
{"SoftwareModules.":{"ExecutionUnitNumberOfEntries":0,"ExecEnvNumberOfEntries":1,"DeploymentUnitNumberOfEntries":0}}
{}
{"amxd-error-code":0}
$ R "ba-cli -l -j SoftwareModules.? | jsonfilter -e @[*].*.ExecEnvNumberOfEntries -e @[*].*.ExecutionUnitNumberOfEntries -e @[*].*.DeploymentUnitNumberOfEntries | sort"
0
0
1
Check Timingila datamodel:
$ R "ubus -S call Timingila _get"
{"Timingila.":{"RmAfterUninstall":true,"ContainerPluginPath":"/usr/lib/timingila-cthulhu/timingila-cthulhu.so","PackagerPluginPath":"/usr/lib/timingila-rlyeh/timingila-rlyeh.so","version":"alpha"}}
{}
{"amxd-error-code":0}
$ R "ba-cli -l -j Timingila.?0 | jsonfilter -e @[*].*.ContainerPluginPath -e @[*].*.PackagerPluginPath -e @[*].*.RmAfterUninstall -e @[*].*.version | sort"
/usr/lib/timingila-cthulhu/timingila-cthulhu.so
/usr/lib/timingila-rlyeh/timingila-rlyeh.so
1
alpha
Check that Rlyeh has no container images:
$ R "ubus -S call Rlyeh.Images _get"
{"Rlyeh.Images.":{}}
{}
{"amxd-error-code":0}
$ R "ba-cli -l -j 'Rlyeh.Images.?'"
[{}]
Check that registry.gitlab.com is accessible:
@ -58,40 +75,44 @@ Check that registry.gitlab.com is accessible:
Check that Rlyeh can download testing container:
$ R "ubus -S call Rlyeh pull '{\"URI\":\"docker://registry.gitlab.com/prpl-foundation/prplos/prplos/prplos-testing-container-intel_mips-xrx500:v1\",\"DUID\":\"0f032bd7-54bd-5b81-b14e-9441d730092f\"}'"
{"retval":""}
{}
{"amxd-error-code":0}
$ R "ba-cli -l -j 'Rlyeh.pull(URI = \"docker://registry.gitlab.com/prpl-foundation/prplos/prplos/prplos-testing-container-intel_mips-xrx500:v1\", DUID = \"0f032bd7-54bd-5b81-b14e-9441d730092f\")'"
Rlyeh.pull() returned
[""]
$ R 'i=1; while [ $i -lt 10 ] && [ "$(ba-cli -lj "Rlyeh.Images.[DUID == \"0f032bd7-54bd-5b81-b14e-9441d730092f\"].DUID?" | jsonfilter -e @[*].*.DUID)" != "0f032bd7-54bd-5b81-b14e-9441d730092f" ]; do i=$((i+1)); sleep 1; done'
$ R "ubus -t 60 wait_for Rlyeh.Images.1"
Check that Rlyeh has downloaded the testing container:
$ R "ubus -S call Rlyeh.Images _get | jsonfilter -e @[*].Name -e @[*].Status | sort"
$ R "ba-cli -l -j 'Rlyeh.Images.[DUID == \"0f032bd7-54bd-5b81-b14e-9441d730092f\"].?' | jsonfilter -e @[*].*.Name -e @[*].*.Status | sort"
Downloaded
prpl-foundation/prplos/prplos/prplos-testing-container-intel_mips-xrx500
Remove testing container:
$ R "ubus -S call Rlyeh remove '{\"DUID\":\"0f032bd7-54bd-5b81-b14e-9441d730092f\",\"Version\":\"v1\"}'"; sleep 5
{"retval":""}
{}
{"amxd-error-code":0}
$ R "ba-cli -l -j 'Rlyeh.remove(DUID=\"0f032bd7-54bd-5b81-b14e-9441d730092f\", Version = \"v1\")'"; sleep 5
Rlyeh.remove() returned
[""]
$ R "ubus -S call Rlyeh.Images.1 _get | jsonfilter -e @[*].MarkForRemoval"
true
$ R "ba-cli -l -j 'Rlyeh.Images.[DUID == \"0f032bd7-54bd-5b81-b14e-9441d730092f\"].?' | jsonfilter -e @[*].*.MarkForRemoval"
1
$ R "ubus -S call Rlyeh gc"
{"retval":""}
{}
{"amxd-error-code":0}
$ R "ba-cli -l -j 'Rlyeh.gc()'"; sleep 5
Rlyeh.gc() returned
[""]
Check that Rlyeh has no container images:
$ R "ubus -S call Rlyeh.Images _get"
{"Rlyeh.Images.":{}}
{}
{"amxd-error-code":0}
$ R "ba-cli -l -j 'Rlyeh.Images.?'"
[{}]
Check that testing image is gone from the filesystem as well:

View File

@ -178,7 +178,7 @@ Check new DeploymentUnit:
SoftwareModules.DeploymentUnit.*.DUID="*" (glob)
SoftwareModules.DeploymentUnit.*.Description="*" (glob)
SoftwareModules.DeploymentUnit.*.ExecutionEnvRef="Device.SoftwareModules.ExecEnv.1." (glob)
SoftwareModules.DeploymentUnit.3.ExecutionUnitList="Device.SoftwareModules.ExecutionUnit.1"
SoftwareModules.DeploymentUnit.*.ExecutionUnitList="Device.SoftwareModules.ExecutionUnit.*" (glob)
SoftwareModules.DeploymentUnit.*.Installed="*" (glob)
SoftwareModules.DeploymentUnit.*.LastUpdate="*" (glob)
SoftwareModules.DeploymentUnit.*.ModuleVersion="v1" (glob)