81 lines
2.6 KiB
Diff
81 lines
2.6 KiB
Diff
|
From 72cc38bc65d4a675d9134acb085d2e0c3dcd5383 Mon Sep 17 00:00:00 2001
|
||
|
From: David Mitchell <davem@iabyn.com>
|
||
|
Date: Fri, 14 Dec 2018 16:54:42 +0000
|
||
|
Subject: [PATCH] ext/GDBM_File/t/fatal.t: handle non-fatality
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
This script is supposed to exercise the error handling callback
|
||
|
mechanism in gdbm, by triggering an error by surreptitiously closing
|
||
|
the file handle which gdbm has opened.
|
||
|
|
||
|
However, this doesn't trigger an error in newer releases of the gdbm
|
||
|
library, which uses mmap() rather than write() etc. In fact I can't see
|
||
|
any way of triggering an error: so just skip the relevant tests if we
|
||
|
can't trigger a failure.
|
||
|
|
||
|
Petr Písař: Ported to 5.28.1 from
|
||
|
upstream's d33f9fbdb3bb27a3b32a2ffa9aa035617c07f7a1.
|
||
|
|
||
|
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||
|
---
|
||
|
ext/GDBM_File/t/fatal.t | 35 ++++++++++++++++++++++++++---------
|
||
|
1 file changed, 26 insertions(+), 9 deletions(-)
|
||
|
|
||
|
diff --git a/ext/GDBM_File/t/fatal.t b/ext/GDBM_File/t/fatal.t
|
||
|
index 0e426d4..6945653 100644
|
||
|
--- a/ext/GDBM_File/t/fatal.t
|
||
|
+++ b/ext/GDBM_File/t/fatal.t
|
||
|
@@ -1,4 +1,12 @@
|
||
|
#!./perl -w
|
||
|
+#
|
||
|
+# Exercise the error handling callback mechanism in gdbm.
|
||
|
+#
|
||
|
+# Try to trigger an error by surreptitiously closing the file handle which
|
||
|
+# gdbm has opened. Note that this won't trigger an error in newer
|
||
|
+# releases of the gdbm library, which uses mmap() rather than write() etc:
|
||
|
+# so skip in that case.
|
||
|
+
|
||
|
use strict;
|
||
|
|
||
|
use Test::More;
|
||
|
@@ -34,16 +42,25 @@ isnt((open $fh, "<&=$fileno"), undef, "dup fileno $fileno")
|
||
|
or diag("\$! = $!");
|
||
|
isnt(close $fh, undef,
|
||
|
"close fileno $fileno, out from underneath the GDBM_File");
|
||
|
-is(eval {
|
||
|
+
|
||
|
+# store some data to a closed file handle
|
||
|
+
|
||
|
+my $res = eval {
|
||
|
$h{Perl} = 'Rules';
|
||
|
untie %h;
|
||
|
- 1;
|
||
|
-}, undef, 'Trapped error when attempting to write to knobbled GDBM_File');
|
||
|
-
|
||
|
-# Observed "File write error" and "lseek error" from two different systems.
|
||
|
-# So there might be more variants. Important part was that we trapped the error
|
||
|
-# via croak.
|
||
|
-like($@, qr/ at .*\bfatal\.t line \d+\.\n\z/,
|
||
|
- 'expected error message from GDBM_File');
|
||
|
+ 99;
|
||
|
+};
|
||
|
+
|
||
|
+SKIP: {
|
||
|
+ skip "Can't tigger failure", 2 if $res == 99;
|
||
|
+
|
||
|
+ is $res, undef, "eval should return undef";
|
||
|
+
|
||
|
+ # Observed "File write error" and "lseek error" from two different
|
||
|
+ # systems. So there might be more variants. Important part was that
|
||
|
+ # we trapped the error # via croak.
|
||
|
+ like($@, qr/ at .*\bfatal\.t line \d+\.\n\z/,
|
||
|
+ 'expected error message from GDBM_File');
|
||
|
+}
|
||
|
|
||
|
unlink <Op_dbmx*>;
|
||
|
--
|
||
|
2.17.2
|
||
|
|