aboutsummaryrefslogtreecommitdiffstats
path: root/image_tests/003_is_hybrid.t
diff options
context:
space:
mode:
Diffstat (limited to 'image_tests/003_is_hybrid.t')
-rw-r--r--image_tests/003_is_hybrid.t99
1 files changed, 99 insertions, 0 deletions
diff --git a/image_tests/003_is_hybrid.t b/image_tests/003_is_hybrid.t
new file mode 100644
index 0000000..dd89fd7
--- /dev/null
+++ b/image_tests/003_is_hybrid.t
@@ -0,0 +1,99 @@
+# 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;
+
+bail_on_fail;
+
+my ($image_path) = @ARGV;
+
+ok(is_hybrid($image_path, 0), "Is hybrid");
+
+# 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;
+}
+
+done_testing();