add tests
This commit is contained in:
parent
b9eb421b77
commit
3a23e470c0
1
.fmf/version
Normal file
1
.fmf/version
Normal file
@ -0,0 +1 @@
|
||||
1
|
9
plans/gating.fmf
Normal file
9
plans/gating.fmf
Normal file
@ -0,0 +1,9 @@
|
||||
summary: Run s390utils gating tests
|
||||
|
||||
discover:
|
||||
how: fmf
|
||||
test:
|
||||
- "^/tests/sanity"
|
||||
|
||||
execute:
|
||||
how: tmt
|
4
plans/main.fmf
Normal file
4
plans/main.fmf
Normal file
@ -0,0 +1,4 @@
|
||||
adjust:
|
||||
- when: arch != s390x
|
||||
enabled: false
|
||||
because: The s390utils package is s390x only.
|
138
tests/sanity/extract-module-sig.pl
Executable file
138
tests/sanity/extract-module-sig.pl
Executable file
@ -0,0 +1,138 @@
|
||||
#!/usr/bin/env perl
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# extract-mod-sig <part> <module-file>
|
||||
#
|
||||
# Reads the module file and writes out some or all of the signature
|
||||
# section to stdout. Part is the bit to be written and is one of:
|
||||
#
|
||||
# -0: The unsigned module, no signature data at all
|
||||
# -a: All of the signature data, including magic number
|
||||
# -d: Just the descriptor values as a sequence of numbers
|
||||
# -n: Just the signer's name
|
||||
# -k: Just the key ID
|
||||
# -s: Just the crypto signature or PKCS#7 message
|
||||
#
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
die "Format: $0 -[0adnks] module-file >out\n"
|
||||
if ($#ARGV != 1);
|
||||
|
||||
my $part = $ARGV[0];
|
||||
my $modfile = $ARGV[1];
|
||||
|
||||
my $magic_number = "~Module signature appended~\n";
|
||||
|
||||
#
|
||||
# Read the module contents
|
||||
#
|
||||
open FD, "<$modfile" || die $modfile;
|
||||
binmode(FD);
|
||||
my @st = stat(FD);
|
||||
die "$modfile" unless (@st);
|
||||
my $buf = "";
|
||||
my $len = sysread(FD, $buf, $st[7]);
|
||||
die "$modfile" unless (defined($len));
|
||||
die "Short read on $modfile\n" unless ($len == $st[7]);
|
||||
close(FD) || die $modfile;
|
||||
|
||||
print STDERR "Read ", $len, " bytes from module file\n";
|
||||
|
||||
die "The file is too short to have a sig magic number and descriptor\n"
|
||||
if ($len < 12 + length($magic_number));
|
||||
|
||||
#
|
||||
# Check for the magic number and extract the information block
|
||||
#
|
||||
my $p = $len - length($magic_number);
|
||||
my $raw_magic = substr($buf, $p);
|
||||
|
||||
die "Magic number not found at $len\n"
|
||||
if ($raw_magic ne $magic_number);
|
||||
print STDERR "Found magic number at $len\n";
|
||||
|
||||
$p -= 12;
|
||||
my $raw_info = substr($buf, $p, 12);
|
||||
|
||||
my @info = unpack("CCCCCxxxN", $raw_info);
|
||||
my ($algo, $hash, $id_type, $name_len, $kid_len, $sig_len) = @info;
|
||||
|
||||
if ($id_type == 0) {
|
||||
print STDERR "Found PGP key identifier\n";
|
||||
} elsif ($id_type == 1) {
|
||||
print STDERR "Found X.509 cert identifier\n";
|
||||
} elsif ($id_type == 2) {
|
||||
print STDERR "Found PKCS#7/CMS encapsulation\n";
|
||||
} else {
|
||||
print STDERR "Found unsupported identifier type $id_type\n";
|
||||
}
|
||||
|
||||
#
|
||||
# Extract the three pieces of info data
|
||||
#
|
||||
die "Insufficient name+kid+sig data in file\n"
|
||||
unless ($p >= $name_len + $kid_len + $sig_len);
|
||||
|
||||
$p -= $sig_len;
|
||||
my $raw_sig = substr($buf, $p, $sig_len);
|
||||
$p -= $kid_len;
|
||||
my $raw_kid = substr($buf, $p, $kid_len);
|
||||
$p -= $name_len;
|
||||
my $raw_name = substr($buf, $p, $name_len);
|
||||
|
||||
my $module_len = $p;
|
||||
|
||||
if ($sig_len > 0) {
|
||||
print STDERR "Found $sig_len bytes of signature [";
|
||||
my $n = $sig_len > 16 ? 16 : $sig_len;
|
||||
foreach my $i (unpack("C" x $n, substr($raw_sig, 0, $n))) {
|
||||
printf STDERR "%02x", $i;
|
||||
}
|
||||
print STDERR "]\n";
|
||||
}
|
||||
|
||||
if ($kid_len > 0) {
|
||||
print STDERR "Found $kid_len bytes of key identifier [";
|
||||
my $n = $kid_len > 16 ? 16 : $kid_len;
|
||||
foreach my $i (unpack("C" x $n, substr($raw_kid, 0, $n))) {
|
||||
printf STDERR "%02x", $i;
|
||||
}
|
||||
print STDERR "]\n";
|
||||
}
|
||||
|
||||
if ($name_len > 0) {
|
||||
print STDERR "Found $name_len bytes of signer's name [$raw_name]\n";
|
||||
}
|
||||
|
||||
#
|
||||
# Produce the requested output
|
||||
#
|
||||
if ($part eq "-0") {
|
||||
# The unsigned module, no signature data at all
|
||||
binmode(STDOUT);
|
||||
print substr($buf, 0, $module_len);
|
||||
} elsif ($part eq "-a") {
|
||||
# All of the signature data, including magic number
|
||||
binmode(STDOUT);
|
||||
print substr($buf, $module_len);
|
||||
} elsif ($part eq "-d") {
|
||||
# Just the descriptor values as a sequence of numbers
|
||||
print join(" ", @info), "\n";
|
||||
} elsif ($part eq "-n") {
|
||||
# Just the signer's name
|
||||
print STDERR "No signer's name for PKCS#7 message type sig\n"
|
||||
if ($id_type == 2);
|
||||
binmode(STDOUT);
|
||||
print $raw_name;
|
||||
} elsif ($part eq "-k") {
|
||||
# Just the key identifier
|
||||
print STDERR "No key ID for PKCS#7 message type sig\n"
|
||||
if ($id_type == 2);
|
||||
binmode(STDOUT);
|
||||
print $raw_kid;
|
||||
} elsif ($part eq "-s") {
|
||||
# Just the crypto signature or PKCS#7 message
|
||||
binmode(STDOUT);
|
||||
print $raw_sig;
|
||||
}
|
16
tests/sanity/main.fmf
Normal file
16
tests/sanity/main.fmf
Normal file
@ -0,0 +1,16 @@
|
||||
summary: sanity
|
||||
description: |
|
||||
Basic test for s390utils
|
||||
contact: Daniel Horak <dhorak@redhat.com>
|
||||
component:
|
||||
- s390utils
|
||||
test: ./runtest.sh
|
||||
framework: beakerlib
|
||||
require:
|
||||
- s390utils-base
|
||||
duration: 5m
|
||||
enabled: true
|
||||
adjust:
|
||||
- when: arch != s390x
|
||||
enabled: false
|
||||
because: This this package is s390x only
|
157
tests/sanity/runtest.sh
Executable file
157
tests/sanity/runtest.sh
Executable file
@ -0,0 +1,157 @@
|
||||
#!/bin/bash
|
||||
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# runtest.sh of /CoreOS/s390utils/Sanity/smoke-functionality
|
||||
# Description: Smoke, Sanity and function tests
|
||||
# Author: Dan Horák <sharkcz@redhat.com>
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# Copyright (c) 2019 Red Hat, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation, either version 2 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be
|
||||
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
# PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see http://www.gnu.org/licenses/.
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
# Include Beaker environment
|
||||
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||
|
||||
PACKAGE="s390utils-base"
|
||||
|
||||
EXTRACT="$PWD/extract-module-sig.pl"
|
||||
|
||||
rlJournalStart
|
||||
rlPhaseStartSetup
|
||||
rlAssertRpm $PACKAGE
|
||||
rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory"
|
||||
rlRun "pushd $TmpDir"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "General tests"
|
||||
rlRun "chccwdev --version"
|
||||
rlRun "chchp --version"
|
||||
rlRun "chcpumf --version"
|
||||
rlRun "chreipl --version"
|
||||
rlRun "chshut --version"
|
||||
rlRun "chzcrypt --version"
|
||||
rlRun "chzdev --version"
|
||||
rlRun "cio_ignore --version"
|
||||
rlRun "dasdfmt --version"
|
||||
rlRun "dasdinfo --version"
|
||||
rlRun "dasdstat --version"
|
||||
rlRun "dasdview --version"
|
||||
rlRun "fdasd --version"
|
||||
rlRun "hyptop --version"
|
||||
rlRun "lschp --version"
|
||||
rlRun "lscpumf --version"
|
||||
rlRun "lscss --version"
|
||||
rlRun "lsdasd --version"
|
||||
rlRun "lsqeth --version"
|
||||
rlRun "lsluns --version"
|
||||
rlRun "lsreipl --version"
|
||||
rlRun "lsscm --version"
|
||||
rlRun "lsshut --version"
|
||||
rlRun "lstape --version"
|
||||
rlRun "lszcrypt --version"
|
||||
rlRun "lszdev --version"
|
||||
rlRun "lszfcp --version"
|
||||
rlRun "qetharp --version"
|
||||
rlRun "qethconf --version"
|
||||
rlRun "qethqoat --version"
|
||||
rlRun "tape390_crypt --version"
|
||||
rlRun "tape390_display --version"
|
||||
rlRun "ttyrun --version"
|
||||
rlRun "tunedasd --version"
|
||||
rlRun "vmcp --version"
|
||||
rlRun "vmur --version"
|
||||
rlRun "zcryptctl --version"
|
||||
rlRun "zcryptstats --version"
|
||||
rlRun "zfcpdbf --version"
|
||||
rlRun "zgetdump --version"
|
||||
rlRun "zipl --version"
|
||||
rlRun "znetconf --version"
|
||||
rlRun "zpcictl --version"
|
||||
rlRun "zkey --version"
|
||||
rlRun "zkey-cryptsetup --version"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "s390utils 2.15.1+ - RHEL 8.4+ and RHEL 9"
|
||||
rlRun "hsci --version"
|
||||
rlRun "lsstp --version"
|
||||
|
||||
# check for perl-free s390utils-core
|
||||
rlRun "rpm -q --requires s390utils-core | grep -q perl" 1 "Checking Perl deps in s390utils-core"
|
||||
|
||||
# check kernel installation, must not create /boot/<machineid>
|
||||
if [ $UID -eq 0 ]; then
|
||||
if rlCheckRpm kernel-core; then
|
||||
rlRun "dnf -y reinstall kernel-core" 0 "Reinstalling the kernel to verify BLS scripts function"
|
||||
rlAssertNotExists /boot/`cat /etc/machine-id`
|
||||
else
|
||||
rlLog "Skipping kernel reinstallation / BLS test, kernel-core not installed, probably running in a container"
|
||||
fi
|
||||
else
|
||||
rlLog "Skipping kernel reinstallation / BLS test, needs root permissions"
|
||||
fi
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "s390utils 2.16.0+ - RHEL 8.5+ and RHEL 9"
|
||||
rlRun "lshwc --version"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "s390utils 2.19.0+ - RHEL 8.6+ and RHEL 9"
|
||||
rlRun "hsavmcore --version"
|
||||
rlRun "sclpdbf --version"
|
||||
rlRun "zipl-editenv --version"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "s390utils 2.22.0+ - RHEL 8.7+ and RHEL 9.1+"
|
||||
rlRun "pai --version"
|
||||
rlRun "pvattest --version"
|
||||
rlRun "pvextract-hdr -h"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "s390utils 2.25.0+ - RHEL 8.8+ and RHEL 9.2+"
|
||||
# no new tools
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "s390utils 2.27.0+ - RHEL 8.9+ and RHEL 9.3+"
|
||||
# no new tools
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "s390utils 2.29.0+ - RHEL 8.10+ and RHEL 9.4+"
|
||||
rlRun "pvsecret --version"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "s390utils 2.33.1+ - RHEL 9.5+ and RHEL 10"
|
||||
rlRun "chpstat --version"
|
||||
rlRun "lspai --version"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "Bootloader signature"
|
||||
# only RHEL has signed bootloader
|
||||
if rlIsRHEL '>=8'; then
|
||||
rlRun "$EXTRACT -s /usr/lib/s390-tools/stage3.bin > stage3.bin.sig" 0 "Check bootloader signature"
|
||||
else
|
||||
rlLog "Skipping bootloader signature check, not on RHEL"
|
||||
fi
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartCleanup
|
||||
rlRun "popd"
|
||||
rlRun "rm -r $TmpDir" 0 "Removing tmp directory"
|
||||
rlPhaseEnd
|
||||
rlJournalPrintText
|
||||
rlJournalEnd
|
Loading…
Reference in New Issue
Block a user