image tests: ignore 'selinux/context-mismatch' in image-info report on RHEL-8

Add a new CLI option to `osbuild-image-tests` called
`-skip-selinux-ctx-check` to workaround the limitation of `setfiles` on
RHEL-8 [1]. If the option is passed to the binary, then the
'selinux/context-mismatch' part is removed from the "expected" and
"actual" image-info report, before these two reports are compared.

Modify `image_tests.sh` to run `osbuild-image-tests` with
`-skip-selinux-ctx-check` when run on RHEL-8.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1973754

Signed-off-by: Tomas Hozza <thozza@redhat.com>
This commit is contained in:
Tomas Hozza 2021-06-21 13:40:13 +02:00 committed by Alexander Todorov
parent bce603586e
commit e6c3d78ec4
2 changed files with 24 additions and 0 deletions

View file

@ -49,6 +49,7 @@ type testcaseStruct struct {
var disableLocalBoot = flag.Bool("disable-local-boot", false, "when this flag is given, no images are booted locally using qemu (this does not affect testing in clouds)")
var failLocalBoot = flag.Bool("fail-local-boot", true, "when this flag is on (default), local boot will fail. Usually indicates missing cloud credentials")
var skipSELinuxCtxCheck = flag.Bool("skip-selinux-ctx-check", false, "when this flag is on, the 'selinux/context-mismatch' part is removed from the image-info report before it is checked.")
// runOsbuild runs osbuild with the specified manifest and output-directory.
func runOsbuild(manifest []byte, store, outputDirectory string, exports []string) error {
@ -81,6 +82,17 @@ func runOsbuild(manifest []byte, store, outputDirectory string, exports []string
return nil
}
// Delete the 'selinux/context-mismatch' part of the image-info report to
// workaround https://bugzilla.redhat.com/show_bug.cgi?id=1973754
func deleteSELinuxCtxFromImageInfoReport(imageInfoReport interface{}) {
imageInfoMap := imageInfoReport.(map[string]interface{})
selinuxReport, exists := imageInfoMap["selinux"]
if exists {
selinuxReportMap := selinuxReport.(map[string]interface{})
delete(selinuxReportMap, "context-mismatch")
}
}
// testImageInfo runs image-info on image specified by imageImage and
// compares the result with expected image info
func testImageInfo(t *testing.T, imagePath string, rawImageInfoExpected []byte) {
@ -103,6 +115,12 @@ func testImageInfo(t *testing.T, imagePath string, rawImageInfoExpected []byte)
err = cmd.Wait()
require.NoErrorf(t, err, "running image-info failed: %v", err)
if *skipSELinuxCtxCheck {
fmt.Println("ignoring 'selinux/context-mismatch' part of the image-info report")
deleteSELinuxCtxFromImageInfoReport(imageInfoExpected)
deleteSELinuxCtxFromImageInfoReport(imageInfoGot)
}
assert.Equal(t, imageInfoExpected, imageInfoGot)
}

View file

@ -16,6 +16,12 @@ if [[ "${ARCH}" == "aarch64" ]]; then
IMAGE_TEST_CASE_RUNNER="${IMAGE_TEST_CASE_RUNNER} --disable-local-boot"
fi
# Skip 'selinux/contect-mismatch' part of the image-info report on RHEL-8.
# https://bugzilla.redhat.com/show_bug.cgi?id=1973754
if [[ "${DISTRO_CODE}" =~ "rhel_8" ]]; then
IMAGE_TEST_CASE_RUNNER="${IMAGE_TEST_CASE_RUNNER} -skip-selinux-ctx-check"
fi
PASSED_TESTS=()
FAILED_TESTS=()