mirror of
https://github.com/xcat2/xcat-core.git
synced 2026-10-21 23:28:19 +00:00
c6fc094c93
The Perl tests of the OpenEmbedded Genesis image ran its shell scripts
and C programs through system(), qx, pipes and fork, wrote fake
commands through copied read_file and write_file helpers, and matched
regexes against shell and C source. Many rejections checked only a
non-zero exit, so an earlier, unrelated failure also passed. The
quality gate judged 91% of their 762 checks bad.
The shell and C checks move to bats in xCAT-test/bats. The C programs
are compiled there and run: the plain console, test drivers for the
shared status view and the shell launcher, and genesis-udp-send against
a loopback listener. Each rejection now matches the message of its own
guard. The .t files keep the artifact checks (kas, recipes, kernel
fragments, units, README), read with XCAT::Test::File. Test files left
with no checks are deleted.
Claim map (file -> where its claims went):
- go_xcat_uninstall_installed_only.t -> go_xcat_uninstall_installed_only.bats
- genesis_readme_paths.t, genesis_base_sources_staged.t -> kept in the
.t (README read by slurp_repo_file, tarball read by Archive::Tar)
- genesis_openembedded_{export,hardware,runtime}.t -> the bats file of
the same name
- genesis_openembedded_{bmcsetup,metrics,extensions,qeth,actions,
discovery}.t -> scripts to the bats file of the same name, recipes
and units kept in the .t
- genesis_openembedded_console.t -> built and run checks, state.c,
plain_ui.c and shell.c to genesis_openembedded_console.bats; Newt
source checks kept in the .t
- genesis_openembedded.t -> oe/build to genesis_openembedded_build.bats;
shell matches to the runtime, hardware and extensions bats; console
matches to the console bats or the console .t; artifacts kept
Red proof: every moved or new test was run against a mutated copy of
the code it covers and went red, for example: rpm -q not checked,
tar without --mtime, VEX report not exported, support dir after PATH,
digest check off, layer2 forced, wildcard device allowed, arguments
eval'd, tcp probe skipped, SOURCE_PORT 302, AF_INET only, stage timer
compared, launch error ignored, kas run twice, status written in place.
One mutation stayed green: tar without --owner=0 when the test runs as
root.
Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
46 lines
1.6 KiB
Bash
46 lines
1.6 KiB
Bash
#!/usr/bin/env bats
|
|
#
|
|
# oe/export copies an OpenEmbedded Genesis image out of a Yocto deploy directory, with its
|
|
# SBOM, its VEX report, a format manifest and SHA256SUMS. The deploy directory here is a
|
|
# scratch tree in the layout Yocto writes.
|
|
|
|
load 'helpers/shell_source'
|
|
|
|
setup()
|
|
{
|
|
EXPORT="$(require_repo_file 'xCAT-genesis-base/oe/export')"
|
|
machine=xcat-genesis-x86-64
|
|
image="xcat-genesis-image-$machine.rootfs"
|
|
deploy="$BATS_TEST_TMPDIR/deploy"
|
|
out_dir="$BATS_TEST_TMPDIR/export"
|
|
machine_dir="$deploy/images/$machine"
|
|
license_dir="$deploy/licenses/xcat_genesis_x86_64/$image"
|
|
mkdir -p "$machine_dir" "$license_dir"
|
|
printf kernel >"$machine_dir/bzImage"
|
|
printf initramfs >"$machine_dir/$image.cpio.gz"
|
|
printf packages >"$machine_dir/$image.manifest"
|
|
printf '{}' >"$machine_dir/$image.spdx.json"
|
|
printf '{}' >"$machine_dir/$image.vex.json"
|
|
printf licenses >"$license_dir/license.manifest"
|
|
}
|
|
|
|
@test "the image exports, with its SBOM and VEX report" {
|
|
run "$EXPORT" x86_64 "$deploy" "$out_dir"
|
|
[ "$status" -eq 0 ]
|
|
[ -f "$out_dir/image.spdx.json" ]
|
|
[ -f "$out_dir/image.vex.json" ]
|
|
}
|
|
|
|
@test "the export identifies its format and architecture" {
|
|
"$EXPORT" x86_64 "$deploy" "$out_dir"
|
|
[ "$(cat "$out_dir/xcat-genesis.manifest")" = "format=xcat-genesis
|
|
version=1
|
|
architecture=x86_64" ]
|
|
}
|
|
|
|
@test "the export manifest has a checksum, and all exported checksums verify" {
|
|
"$EXPORT" x86_64 "$deploy" "$out_dir"
|
|
grep -Eq '^[0-9a-f]{64} xcat-genesis\.manifest$' "$out_dir/SHA256SUMS"
|
|
(cd "$out_dir" && sha256sum -c SHA256SUMS >/dev/null)
|
|
}
|