os-autoinst-distri-rocky-mi.../tests/os_release.pm
Adam Williamson bf5691e69d Fix and simplify fedora_release test
Also simplify os_release a bit thanks to the improved spell_
version_number.

Signed-off-by: Adam Williamson <awilliam@redhat.com>
2019-08-21 13:09:40 -07:00

141 lines
5.7 KiB
Perl

use base "installedtest";
use strict;
use testapi;
use utils;
# This test checks that the descriptions in /etc/os-release file are correct and that they
# match the current version.
sub strip_marks {
# Remove the quotation marks from the string:
my $string = shift;
$string=~ tr/"//d;
return $string;
}
sub run {
# First, let us define some variables needed to run the program.
my $self = shift;
# The file to be checked
my $filename = '/etc/os-release';
# Read the content of the file to compare. Let us parse the file
# and create a hash with those values, so that we can easily access
# them and assert them.
my $infile = script_output "cat /etc/os-release";
my @infile = split /\n/, $infile;
my %content = ();
foreach (@infile) {
chomp $_;
my ($key, $value) = split /=/, $_;
$content{$key} = $value;
}
# Now, we have all the data ready and we can start testing, first let us get
# correct variables to compare the system data with.
# First, we know the basic stuff
my $id = get_var("DISTRI"); # Should be "fedora"
my $name = ucfirst($id);
my $version_id = get_var("VERSION"); # Should be the version number or Rawhide.
my $varstr = spell_version_number($version_id);
my $target = lc($version_id);
if ($version_id eq "Rawhide") {
$version_id = get_var("RAWREL");
}
# the 'generic' os-release in fedora-release has no VARIANT or
# VARIANT_ID and the string used in values like VERSION, that in other
# cases is the VARIANT, is 'Rawhide' for Rawhide and the spelt version
# number for other releases. These are the values we'll see for an
# Everything image.
my $variant_id = "";
my $variant = "generic";
# now replace the values with the correct ones if we are testing a
# subvariant that maps to a known variant
my $subvariant = get_var('SUBVARIANT');
my %variants = (
Server => ["server", "Server Edition"],
Workstation => ["workstation", "Workstation Edition"],
AtomicHost => ["atomic.host", "Atomic Host"],
CoreOS => ["coreos", "CoreOS"],
KDE => ["kde", "KDE Plasma"],
Silverblue => ["workstation", "Workstation Edition"],
);
if (exists($variants{$subvariant})) {
($variant_id, $variant) = @{$variants{$subvariant}};
$varstr = $variant;
}
my $version = "$version_id ($varstr)";
my $platform_id = "platform:f$version_id";
my $pretty = "$name $version_id ($varstr)";
#Now. we can start testing the real values from the installed system.
my @fails = ();
my $failref =\@fails;
# Test for name
rec_log "NAME should be $name and is $content{'NAME'}", $content{'NAME'} eq $name, $failref;
# Test for version.
my $strip = strip_marks($content{'VERSION'});
rec_log "VERSION should be $version and is $strip", $strip eq $version, $failref;
# Test for version_id
rec_log "VERSION_ID should be $version_id and is $content{'VERSION_ID'}", $content{'VERSION_ID'} eq $version_id, $failref;
# Test for platform_id
$strip = strip_marks($content{'PLATFORM_ID'});
rec_log "PLATFORM_ID should be $platform_id and is $strip", $strip eq $platform_id, $failref;
# Test for pretty name
$strip = strip_marks($content{'PRETTY_NAME'});
rec_log "PRETTY_NAME should be $pretty and is $strip", $strip eq $pretty, $failref;
# Test for RH Bugzilla Product
$strip = strip_marks($content{'REDHAT_BUGZILLA_PRODUCT'});
rec_log "REDHAT_BUGZILLA_PRODUCT should be $name and is $strip", $strip eq $name, $failref;
# Test for RH Bugzilla Product Version
rec_log "REDHAT_BUGZILLA_PRODUCT_VERSION should be $target and is $content{'REDHAT_BUGZILLA_PRODUCT_VERSION'}", $content{'REDHAT_BUGZILLA_PRODUCT_VERSION'} eq $target, $failref;
# Test for RH Support Product
$strip = strip_marks($content{'REDHAT_SUPPORT_PRODUCT'});
rec_log "REDHAT_SUPPORT_PRODUCT should be $name and is $strip", $strip eq $name, $failref;
# Test for RH Support Product Version
rec_log "REDHAT_SUPPORT_PRODUCT_VERSION should be $target and is $content{'REDHAT_SUPPORT_PRODUCT_VERSION'}", $content{'REDHAT_SUPPORT_PRODUCT_VERSION'} eq $target, $failref;
# Test for Variant but only in case of Server or Workstation
if ($variant ne "generic") {
$strip = strip_marks($content{'VARIANT'});
rec_log "VARIANT should be $variant and is $strip", $strip eq $variant, $failref;
# Test for VARIANT_ID
rec_log "VARIANT_ID should be $variant_id and is $content{'VARIANT_ID'}", $content{'VARIANT_ID'} eq $variant_id, $failref;
}
else {
print "VARIANT was not tested because the compose is not Workstation or Server Edition.\n";
print "VARIANT_ID was not tested because the compose is not Workstation or Server Edition.\n";
}
# Check for fails, count them, collect their messages and die if something was found.
my $failcount = scalar @fails;
script_run "echo \"There were $failcount failures in total.\" >> /tmp/os-release.log";
upload_logs "/tmp/os-release.log", failok=>1;
my $failmessages = "";
foreach my $fail (@fails) {
$failmessages .= "\n".$fail;
}
die $failmessages if ($failcount > 0);
}
sub test_flags {
return {always_rollback => 1};
}
1;
# vim: set sw=4 et: