aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--README.txt11
-rw-r--r--image_tests/001_check_file.t4
-rw-r--r--image_tests/003_is_hybrid.t2
-rw-r--r--image_tests/install_iso/016_check_pubkey.t4
-rw-r--r--image_tests/live_iso/000_files_lists.t2
-rw-r--r--isocheck.pl6
-rw-r--r--lib/MDK/ISOcheck.pm160
-rw-r--r--t/00_load.t6
-rw-r--r--t/parse_image_file_name.t2
10 files changed, 184 insertions, 15 deletions
diff --git a/Makefile b/Makefile
index bc2719b..fb71d26 100644
--- a/Makefile
+++ b/Makefile
@@ -29,7 +29,7 @@ tar: export
rm -rf $(NAME)-$(VERSION)
test:
- prove t/
+ prove -l t/
man:
diff --git a/README.txt b/README.txt
index b32f970..40f09e1 100644
--- a/README.txt
+++ b/README.txt
@@ -14,8 +14,16 @@ All ISOs should pass this test suite after being built, before being released.
Usage
-----
+If packaged:
+
+ $ su
+ # isocheck path/to/your/Mageia-x-i586.iso
+ ...logs...
+
+If straight from source:
+
$ su
- # perl ./isocheck.pl path/to/your/Mageia-x-i586.iso
+ # perl -Ilib ./isocheck.pl path/to/your/Mageia-x-i586.iso
... logs ...
Returns 0 in case of success (and last line of log starts with "PASS").
@@ -72,6 +80,7 @@ TODO
- check releases_notes on the ISO
- package it
- wrap it to produce automatic reports after BCD
+ - think of grepping the project source for TODO or FIXME too
Style
-----
diff --git a/image_tests/001_check_file.t b/image_tests/001_check_file.t
index b853059..acf09f3 100644
--- a/image_tests/001_check_file.t
+++ b/image_tests/001_check_file.t
@@ -21,7 +21,7 @@
use Test::Most;
use File::Basename;
-use Isocheck;
+use MDK::ISOcheck;
my ($image_path) = @ARGV;
@@ -30,7 +30,7 @@ my %info;
bail_on_fail;
-%info = Isocheck::parse_image_file_name($name);
+%info = parse_image_file_name($name);
if (scalar %info) {
pass 'Image has a valid filename.';
while (my ($k, $v) = each %info) {
diff --git a/image_tests/003_is_hybrid.t b/image_tests/003_is_hybrid.t
index fc1ebba..8b5322e 100644
--- a/image_tests/003_is_hybrid.t
+++ b/image_tests/003_is_hybrid.t
@@ -19,7 +19,7 @@
#
use Test::Most;
-use Isocheck;
+use MDK::ISOcheck;
bail_on_fail;
diff --git a/image_tests/install_iso/016_check_pubkey.t b/image_tests/install_iso/016_check_pubkey.t
index 5fa1e9b..30878b8 100644
--- a/image_tests/install_iso/016_check_pubkey.t
+++ b/image_tests/install_iso/016_check_pubkey.t
@@ -24,11 +24,11 @@
use MDK::Common;
use Test::Most;
use File::Basename;
-use Isocheck;
+use MDK::ISOcheck;
my ($image_path) = @ARGV;
my $name = basename($image_path);
-my %info = Isocheck::parse_image_file_name($name);
+my %info = parse_image_file_name($name);
bail_on_fail;
diff --git a/image_tests/live_iso/000_files_lists.t b/image_tests/live_iso/000_files_lists.t
index e683823..d684148 100644
--- a/image_tests/live_iso/000_files_lists.t
+++ b/image_tests/live_iso/000_files_lists.t
@@ -5,4 +5,4 @@ my ($image_path) = @ARGV;
bail_on_fail;
ok(-r $image_path, '.idx list file is available.');
-ok(-r $image_path, '.lst list file is available.'); \ No newline at end of file
+ok(-r $image_path, '.lst list file is available.'); \ No newline at end of file
diff --git a/isocheck.pl b/isocheck.pl
index df94cb9..7c4f9b7 100644
--- a/isocheck.pl
+++ b/isocheck.pl
@@ -24,12 +24,12 @@ use 5.010;
use MDK::Common;
use TAP::Harness;
use TAP::Parser::Aggregator;
-use Isocheck;
+use MDK::ISOcheck;
my ($image_path) = @ARGV;
if (!defined $image_path) {
- print "Usage: ./test_iso.pl [ISO file]\nTry `./test_iso.pl --help' for more information.\n";
+ print "Usage: isocheck [ISO file]\nTry `./test_iso.pl --help' for more information.\n";
exit;
}
@@ -56,7 +56,7 @@ $aggregator->start;
$harness->aggregate_tests($aggregator, glob('image_tests/*.t'));
my $name = basename($image_path);
-my %info = Isocheck::parse_image_file_name($name);
+my %info = parse_image_file_name($name);
my @testfiles;
if (defined $info{variant} && $info{variant} =~ /^LiveCD/) {
diff --git a/lib/MDK/ISOcheck.pm b/lib/MDK/ISOcheck.pm
new file mode 100644
index 0000000..c560976
--- /dev/null
+++ b/lib/MDK/ISOcheck.pm
@@ -0,0 +1,160 @@
+# 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.
+#
+
+=head1 NAME
+
+ MDK::Isocheck - miscellaneous functions
+
+=head1 SYNOPSIS
+
+ use Isocheck;
+
+=head1 EXPORTS
+
+=over
+
+=item parse_image_file_name(STRING)
+
+return a populated hash if param is a valid image file name
+(see https://wiki.mageia.org/en/Product_naming ).
+
+return empty hash if invalid.
+
+=back
+
+=cut
+
+package MDK::ISOcheck;
+
+use strict;
+use warnings;
+
+our $VERSION = '0.2.0';
+
+use base 'Exporter';
+
+our @EXPORT = qw(parse_image_file_name is_hybrid hybrid1 hybrid2 hybrid3);
+
+sub parse_image_file_name {
+ my ($name) = @_;
+
+ return unless $name =~ m/^
+ (
+ (\w+) # name
+ -
+ (\d+) # version
+ (?:-((?:nightly|alpha|beta|RC)\d*))? # release
+ (?:-(.+))? # variant
+ -
+ (i586|x86_64|dual) # arch
+ (?:-(CD|DVD|BR))? # medium
+ (?:-(build_\w+))? # build
+ )
+ \.
+ (\w+) # extension
+ $/x;
+
+ my %info = (
+ full => $1,
+ name => $2,
+ version => $3,
+ defined $4 ? (release => $4) : (),
+ defined $5 ? (variant => $5) : (),
+ arch => $6,
+ defined $7 ? (medium => $7) : (),
+ defined $8 ? (build => $8) : (),
+ ext => $9
+ );
+
+ return %info;
+}
+
+# Verification if the ISO is hybrid
+sub is_hybrid {
+ my ($img, $full) = @_;
+
+ open(my $iso, $img);
+ my $hybrid = hybrid1($iso);
+ $hybrid &= hybrid2($iso);
+ $hybrid &= hybrid3($iso);
+ if ($full) {
+ # system "dd if=$img of=/dev/my-pendrive bs=8";
+ }
+ close($iso);
+
+ return $hybrid;
+}
+
+
+# Check the first 512 bytes of the iso
+sub hybrid1 {
+ my ($iso) = @_;
+ my $buffer;
+ my $hybrid;
+
+ foreach (0 .. 512) {
+ read($iso, $buffer, 1);
+ if ($buffer ne '\x00') {
+ $hybrid = 1;
+ }
+ }
+
+ return $hybrid;
+}
+
+#Check the 0x1fe & 0x1ff bytes of the iso
+sub hybrid2 {
+ my ($iso) = @_;
+ my $hybrid;
+ my $buffer;
+ my $byte = "\x55";
+
+ seek($iso, 0x1fe, 0);
+ read($iso, $buffer, 1);
+ if ($buffer eq $byte) {
+ read($iso, $buffer, 1);
+ $byte = "\xaa";
+ if ($buffer eq $byte) {
+ $hybrid = 1;
+ }
+ }
+
+ return $hybrid;
+}
+
+# check from the 0x200 to the 0x8000 bytes
+sub hybrid3 {
+ my ($iso) = @_;
+ my $hybrid = 1;
+ my $buffer;
+
+ seek($iso, 0x200, 0);
+ foreach (0x200 .. 0x8000) {
+ read($iso, $buffer, 1);
+ if ($buffer eq '\x00') {
+ $hybrid = 0;
+ }
+ }
+
+ return $hybrid;
+}
+
+1; \ No newline at end of file
diff --git a/t/00_load.t b/t/00_load.t
index 4a923e4..a0c0900 100644
--- a/t/00_load.t
+++ b/t/00_load.t
@@ -3,8 +3,8 @@
use Test::More tests => 2;
BEGIN {
-use_ok( 'Isocheck' );
-require_ok('Isocheck');
+use_ok('MDK::ISOcheck');
+require_ok('MDK::ISOcheck');
}
-diag( "Testing Isocheck $Isocheck::VERSION" ); \ No newline at end of file
+diag("Testing MDK::ISOcheck $MDK::ISOcheck::VERSION"); \ No newline at end of file
diff --git a/t/parse_image_file_name.t b/t/parse_image_file_name.t
index 4243514..0d8f34f 100644
--- a/t/parse_image_file_name.t
+++ b/t/parse_image_file_name.t
@@ -1,6 +1,6 @@
use Test::Most;
-use Isocheck;
+use MDK::ISOcheck;
bail_on_fail;