aboutsummaryrefslogtreecommitdiffstats
path: root/image_tests/001_check_file.t
diff options
context:
space:
mode:
Diffstat (limited to 'image_tests/001_check_file.t')
-rw-r--r--image_tests/001_check_file.t118
1 files changed, 118 insertions, 0 deletions
diff --git a/image_tests/001_check_file.t b/image_tests/001_check_file.t
new file mode 100644
index 0000000..26e331a
--- /dev/null
+++ b/image_tests/001_check_file.t
@@ -0,0 +1,118 @@
+# This file is part of the Mageia project
+# Copyright (C) 2011 Damien Lallement <dams@mageia.org>
+# (C) 2011 Romain D'Alverny <rda@mageia.org>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public License
+# along with this library; see the file COPYING.LIB. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
+
+
+use Test::Most;
+use File::Basename;
+use Isocheck;
+
+my ($image_path) = @ARGV;
+
+my $name = basename($image_path);
+my %info;
+
+bail_on_fail;
+
+%info = Isocheck::parse_image_file_name($name);
+if (scalar %info) {
+ pass 'ISO has valid filename.';
+ while (my ($k, $v) = each %info) {
+ note uc($k), "=$v\n" if defined $v;
+ }
+} else {
+ fail 'ISO has valid filename.';
+ diag 'See https://wiki.mageia.org/en/Product_naming for more information.';
+}
+
+# is file size correct?
+my $du = `du --apparent-size --block-size=MB $image_path`;
+my @size_name = split(/\t/, $du);
+my $size = $size_name[0];
+
+# Correct sizes: CD == 700MB & DVD == 4,700.373MB
+my %max_sizes = ("CD" => "700MB", "DVD" => "4700MB");
+ok($size le $max_sizes{$info{medium}},
+ sprintf("File has a working size (%s) for its medium type (%s, max %s).",
+ $size, $info{medium}, $max_sizes{$info{medium}}));
+
+TODO: {
+ local $TODO = ".idx & .lst" if 1;
+
+ ok(-r $image_path, '.idx list file is available.');
+ ok(-r $image_path, '.lst list file is available.');
+}
+
+
+# verify checksums
+my $md5file = $image_path . '.md5';
+my $sha1file = $image_path . '.sha1';
+
+my @ts = split(/ /, `md5sum $image_path`);
+my $md5 = $ts[0];
+@ts = split(/ /, `cat $md5file`);
+$md5file = $ts[0];
+is($md5, $md5file, 'MD5/.md5 checksums match.');
+
+@ts = split(/ /, `sha1sum $image_path`);
+my $sha1 = $ts[0];
+@ts = split(/ /, `cat $sha1file`);
+$sha1file = $ts[0];
+is($sha1, $sha1file, 'SHA1/.sha1 checksums match.');
+
+
+# check ISO header info
+# Check (see http://wiki.mandriva.com/en/Product_id)
+my $isoinfo = `isoinfo -d -i $image_path`;
+my %isoValues = (
+ "System id", "LINUX",
+ "Volume id", "$info{name} $info{version} $info{release}", # TODO not defined for sure yet
+ "Volume set id", "$info{name} $info{version} $info{release} $info{variant} $info{arch} $info{medium}", # TODO $info{'build'} ?
+ "Publisher id", "Mageia.Org",
+ "Data preparer id", "", # ?
+ "Copyright File id", "http://www.mageia.org/2/license/",
+ "Abstract File id", "http://www.mageia.org/2/"
+);
+
+my $testval;
+while (my ($k, $v) = each(%isoValues)) {
+ $testval = `printf "%s\n" "$isoinfo" | grep -i "$k:" |tr -d '\n'`;
+
+ # not testing right now, all expected values are not sure yet.
+ # is $testval, "$k: $v", "$k is correct. Found $testval.";
+ note "Found: $testval - expecting: $k: $v";
+}
+
+
+# bootable?
+ok(`isoinfo -d -i $image_path | grep bootable`, 'ISO is bootable.');
+
+# TODO check burnable?
+my $burner = "/dev/sr0";
+
+# FIXME is -eject really needed?
+my $_burning = `cdrecord -dummy speed=42 dev=$burner -v -eject -data $image_path 2> is_burnable.log`;
+my $result = `cat is_burnable.log | grep overburn | wc -l | tr -d '\n'`;
+
+-r "is_burnable.log" and system "rm is_burnable.log";
+
+is($result, 0, "ISO can be burnt.");
+
+
+done_testing();