# This file is part of the Mageia project # Copyright (C) 2011 Damien Lallement # (C) 2011 Romain D'Alverny # # 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();