nixpkgs/pkgs/development/libraries/gnutls/fix-guile-tests.patch
Ludovic Courtès f50b358f37 GnuTLS 2.12.3.
svn path=/nixpkgs/trunk/; revision=27039
2011-04-28 20:57:54 +00:00

633 lines
22 KiB
Diff

From ccbd77f6dc0b8440e7d80bddce2c8f950674eb46 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Thu, 28 Apr 2011 19:41:08 +0200
Subject: [PATCH] guile: Fix tests to match the `exit' behavior introduced in Guile 2.0.1.
This fix makes tests behave correctly wrt. to the Guile bug fix at
<http://git.sv.gnu.org/cgit/guile.git/commit/?id=e309f3bf9ee910c4772353ca3ff95f6f4ef466b5>.
---
guile/modules/Makefile.am | 3 +-
guile/modules/gnutls/build/tests.scm | 41 ++++++++++++++++++++++++++++++++++
guile/tests/anonymous-auth.scm | 18 +++++----------
guile/tests/errors.scm | 22 ++++++-----------
guile/tests/openpgp-auth.scm | 18 +++++----------
guile/tests/openpgp-keyring.scm | 24 ++++++-------------
guile/tests/openpgp-keys.scm | 35 +++++++++++-----------------
guile/tests/pkcs-import-export.scm | 32 ++++++++++----------------
guile/tests/session-record-port.scm | 26 ++++++++-------------
guile/tests/srp-base64.scm | 15 +++++++-----
guile/tests/x509-auth.scm | 18 +++++----------
guile/tests/x509-certificates.scm | 41 ++++++++++++++-------------------
12 files changed, 139 insertions(+), 154 deletions(-)
create mode 100644 guile/modules/gnutls/build/tests.scm
diff --git a/guile/modules/Makefile.am b/guile/modules/Makefile.am
index c1829ed..d1b1cac 100644
--- a/guile/modules/Makefile.am
+++ b/guile/modules/Makefile.am
@@ -1,5 +1,5 @@
# GnuTLS --- Guile bindings for GnuTLS.
-# Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
#
# GnuTLS is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -25,4 +25,5 @@ documentation_modules = system/documentation/README \
EXTRA_DIST = gnutls/build/enums.scm gnutls/build/smobs.scm \
gnutls/build/utils.scm gnutls/build/priorities.scm \
+ gnutls/build/tests.scm \
$(documentation_modules)
diff --git a/guile/modules/gnutls/build/tests.scm b/guile/modules/gnutls/build/tests.scm
new file mode 100644
index 0000000..ca3985f
--- /dev/null
+++ b/guile/modules/gnutls/build/tests.scm
@@ -0,0 +1,41 @@
+;;; GnuTLS --- Guile bindings for GnuTLS.
+;;; Copyright (C) 2011 Free Software Foundation, Inc.
+;;;
+;;; GnuTLS is free software; you can redistribute it and/or
+;;; modify it under the terms of the GNU Lesser General Public
+;;; License as published by the Free Software Foundation; either
+;;; version 2.1 of the License, or (at your option) any later version.
+;;;
+;;; GnuTLS 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
+;;; Lesser General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with GnuTLS; if not, write to the Free Software
+;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+;;; Written by Ludovic Courtès <ludo@gnu.org>.
+
+(define-module (gnutls build tests)
+ #:export (run-test))
+
+(define (run-test thunk)
+ "Call `(exit (THUNK))'. If THUNK raises an exception, then call `(exit 1)' and
+display a backtrace. Otherwise, return THUNK's return value."
+ (exit
+ (catch #t
+ thunk
+ (lambda (key . args)
+ ;; Never reached.
+ (exit 1))
+ (lambda (key . args)
+ (dynamic-wind ;; to be on the safe side
+ (lambda () #t)
+ (lambda ()
+ (format (current-error-port)
+ "~%throw to `~a' with args ~s~%" key args)
+ (display-backtrace (make-stack #t) (current-output-port)))
+ (lambda ()
+ (exit 1)))
+ (exit 1)))))
diff --git a/guile/tests/anonymous-auth.scm b/guile/tests/anonymous-auth.scm
index 17f5e80..63616a6 100644
--- a/guile/tests/anonymous-auth.scm
+++ b/guile/tests/anonymous-auth.scm
@@ -1,5 +1,5 @@
;;; GnuTLS --- Guile bindings for GnuTLS.
-;;; Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Lesser General Public
@@ -24,6 +24,7 @@
;;;
(use-modules (gnutls)
+ (gnutls build tests)
(srfi srfi-4))
@@ -54,10 +55,7 @@
;; (set-log-procedure! (lambda (level str)
;; (format #t "[~a|~a] ~a" (getpid) level str)))
-(dynamic-wind
- (lambda ()
- #t)
-
+(run-test
(lambda ()
(let ((socket-pair (socketpair PF_UNIX SOCK_STREAM 0))
(pid (primitive-fork)))
@@ -80,7 +78,7 @@
(record-send client %message)
(bye client close-request/rdwr)
- (exit))
+ (primitive-exit))
(let ((server (make-session connection-end/server)))
;; server-side
@@ -103,11 +101,7 @@
(let* ((buf (make-u8vector (u8vector-length %message)))
(amount (record-receive! server buf)))
(bye server close-request/rdwr)
- (exit (= amount (u8vector-length %message))
- (equal? buf %message)))))))
-
- (lambda ()
- ;; failure
- (exit 1)))
+ (and (= amount (u8vector-length %message))
+ (equal? buf %message))))))))
;;; arch-tag: 8c98de24-0a53-4290-974e-4b071ad162a0
diff --git a/guile/tests/errors.scm b/guile/tests/errors.scm
index cec6491..65b4ae9 100644
--- a/guile/tests/errors.scm
+++ b/guile/tests/errors.scm
@@ -1,5 +1,5 @@
;;; GnuTLS --- Guile bindings for GnuTLS.
-;;; Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Lesser General Public
@@ -22,25 +22,19 @@
;;; Test the error/exception mechanism.
;;;
-(use-modules (gnutls))
-
-(dynamic-wind
- (lambda ()
- #t)
+(use-modules (gnutls)
+ (gnutls build tests))
+(run-test
(lambda ()
(let ((s (make-session connection-end/server)))
(catch 'gnutls-error
(lambda ()
(handshake s))
(lambda (key err function . currently-unused)
- (exit (and (eq? key 'gnutls-error)
- err
- (string? (error->string err))
- (eq? function 'handshake)))))))
-
- (lambda ()
- ;; failure
- (exit 1)))
+ (and (eq? key 'gnutls-error)
+ err
+ (string? (error->string err))
+ (eq? function 'handshake)))))))
;;; arch-tag: 73ed6229-378d-4a12-a5c6-4c2586c6e3a2
diff --git a/guile/tests/openpgp-auth.scm b/guile/tests/openpgp-auth.scm
index 3db9e42..4b43c90 100644
--- a/guile/tests/openpgp-auth.scm
+++ b/guile/tests/openpgp-auth.scm
@@ -1,5 +1,5 @@
;;; GnuTLS-extra --- Guile bindings for GnuTLS-EXTRA.
-;;; Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2008, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS-extra is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
@@ -25,6 +25,7 @@
(use-modules (gnutls)
(gnutls extra)
+ (gnutls build tests)
(srfi srfi-4))
@@ -63,10 +64,7 @@
;; (set-log-procedure! (lambda (level str)
;; (format #t "[~a|~a] ~a" (getpid) level str)))
-(dynamic-wind
- (lambda ()
- #t)
-
+(run-test
(lambda ()
(let ((socket-pair (socketpair PF_UNIX SOCK_STREAM 0))
(pub (import-key import-openpgp-certificate
@@ -96,7 +94,7 @@
(write %message (session-record-port client))
(bye client close-request/rdwr)
- (exit))
+ (primitive-exit))
(let ((server (make-session connection-end/server))
(rsa (import-rsa-params "rsa-parameters.pem"))
@@ -123,11 +121,7 @@
(let ((msg (read (session-record-port server)))
(auth-type (session-authentication-type server)))
(bye server close-request/rdwr)
- (exit (and (eq? auth-type credentials/certificate)
- (equal? msg %message)))))))))
-
- (lambda ()
- ;; failure
- (exit 1)))
+ (and (eq? auth-type credentials/certificate)
+ (equal? msg %message)))))))))
;;; arch-tag: 1a973ed5-f45d-45a4-8160-900b6a8c27ff
diff --git a/guile/tests/openpgp-keyring.scm b/guile/tests/openpgp-keyring.scm
index e5cffc5..576a9db 100644
--- a/guile/tests/openpgp-keyring.scm
+++ b/guile/tests/openpgp-keyring.scm
@@ -1,5 +1,5 @@
;;; GnuTLS-extra --- Guile bindings for GnuTLS-EXTRA.
-;;; Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS-extra is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
@@ -24,6 +24,7 @@
;;;
(use-modules (gnutls extra) (gnutls)
+ (gnutls build tests)
(srfi srfi-1)
(srfi srfi-4))
@@ -59,21 +60,12 @@
(openpgp-keyring-contains-key-id? keyring id))
%ids-in-keyring)))))
-(dynamic-wind
-
- (lambda ()
- #t)
-
- (lambda ()
- (exit
- (every valid-keyring?
- (list %raw-keyring-file
- %ascii-keyring-file)
- (list openpgp-certificate-format/raw
- openpgp-certificate-format/base64))))
-
+(run-test
(lambda ()
- ;; failure
- (exit 1)))
+ (every valid-keyring?
+ (list %raw-keyring-file
+ %ascii-keyring-file)
+ (list openpgp-certificate-format/raw
+ openpgp-certificate-format/base64))))
;;; arch-tag: 516bf608-5c8b-4787-abe9-5f7b6e6d660b
diff --git a/guile/tests/openpgp-keys.scm b/guile/tests/openpgp-keys.scm
index 6049984..2ded32d 100644
--- a/guile/tests/openpgp-keys.scm
+++ b/guile/tests/openpgp-keys.scm
@@ -1,5 +1,5 @@
;;; GnuTLS-extra --- Guile bindings for GnuTLS-EXTRA.
-;;; Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS-extra is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
@@ -25,6 +25,7 @@
(use-modules (gnutls)
(gnutls extra)
+ (gnutls build tests)
(srfi srfi-1)
(srfi srfi-4)
(srfi srfi-11))
@@ -43,11 +44,7 @@
(stat:size (stat file)))
-(dynamic-wind
-
- (lambda ()
- #t)
-
+(run-test
(lambda ()
(let ((raw-pubkey (make-u8vector (file-size %certificate-file)))
(raw-privkey (make-u8vector (file-size %private-key-file))))
@@ -60,20 +57,16 @@
(sec (import-openpgp-private-key raw-privkey
openpgp-certificate-format/base64)))
- (exit (and (openpgp-certificate? pub)
- (openpgp-private-key? sec)
- (equal? (openpgp-certificate-id pub) %key-id)
- (u8vector? (openpgp-certificate-fingerprint pub))
- (every string? (openpgp-certificate-names pub))
- (member (openpgp-certificate-version pub) '(3 4))
- (list? (openpgp-certificate-usage pub))
- (let-values (((pk bits)
- (openpgp-certificate-algorithm pub)))
- (and (string? (pk-algorithm->string pk))
- (number? bits))))))))
-
- (lambda ()
- ;; failure
- (exit 1)))
+ (and (openpgp-certificate? pub)
+ (openpgp-private-key? sec)
+ (equal? (openpgp-certificate-id pub) %key-id)
+ (u8vector? (openpgp-certificate-fingerprint pub))
+ (every string? (openpgp-certificate-names pub))
+ (member (openpgp-certificate-version pub) '(3 4))
+ (list? (openpgp-certificate-usage pub))
+ (let-values (((pk bits)
+ (openpgp-certificate-algorithm pub)))
+ (and (string? (pk-algorithm->string pk))
+ (number? bits))))))))
;;; arch-tag: 2ee2a377-7f4d-4031-92a8-275090e4f83d
diff --git a/guile/tests/pkcs-import-export.scm b/guile/tests/pkcs-import-export.scm
index 8900f15..4121b18 100644
--- a/guile/tests/pkcs-import-export.scm
+++ b/guile/tests/pkcs-import-export.scm
@@ -1,5 +1,5 @@
;;; GnuTLS --- Guile bindings for GnuTLS.
-;;; Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Lesser General Public
@@ -23,6 +23,7 @@
;;;
(use-modules (gnutls)
+ (gnutls build tests)
(srfi srfi-4))
(define (import-something import-proc file fmt)
@@ -36,25 +37,16 @@
(import-something pkcs3-import-dh-parameters file
x509-certificate-format/pem))
-(dynamic-wind
-
- (lambda ()
- #t)
-
- (lambda ()
- (exit
- (let* ((dh-params (import-dh-params "dh-parameters.pem"))
- (export
- (pkcs3-export-dh-parameters dh-params
- x509-certificate-format/pem)))
- (and (u8vector? export)
- (let ((import
- (pkcs3-import-dh-parameters export
- x509-certificate-format/pem)))
- (dh-parameters? import))))))
-
+(run-test
(lambda ()
- ;; failure
- (exit 1)))
+ (let* ((dh-params (import-dh-params "dh-parameters.pem"))
+ (export
+ (pkcs3-export-dh-parameters dh-params
+ x509-certificate-format/pem)))
+ (and (u8vector? export)
+ (let ((import
+ (pkcs3-import-dh-parameters export
+ x509-certificate-format/pem)))
+ (dh-parameters? import))))))
;;; arch-tag: adff0f07-479e-421e-b47f-8956e06b9902
diff --git a/guile/tests/session-record-port.scm b/guile/tests/session-record-port.scm
index a41ea2c..1d53d9b 100644
--- a/guile/tests/session-record-port.scm
+++ b/guile/tests/session-record-port.scm
@@ -1,5 +1,5 @@
;;; GnuTLS --- Guile bindings for GnuTLS.
-;;; Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Lesser General Public
@@ -24,6 +24,7 @@
;;;
(use-modules (gnutls)
+ (gnutls build tests)
(srfi srfi-4))
@@ -54,10 +55,7 @@
;; (set-log-procedure! (lambda (level str)
;; (format #t "[~a|~a] ~a" (getpid) level str)))
-(dynamic-wind
- (lambda ()
- #t)
-
+(run-test
(lambda ()
;; Stress the GC. In 0.0, this triggered an abort due to
;; "scm_unprotect_object called during GC".
@@ -104,7 +102,7 @@
(uniform-vector-write %message (session-record-port client))
(bye client close-request/rdwr)
- (exit))
+ (primitive-exit))
(let ((server (make-session connection-end/server)))
;; server-side
@@ -130,15 +128,11 @@
(bye server close-request/rdwr)
;; Make sure we got everything right.
- (exit (eq? (session-record-port server)
- (session-record-port server))
- (= amount (u8vector-length %message))
- (equal? buf %message)
- (eof-object?
- (read-char (session-record-port server)))))))))
-
- (lambda ()
- ;; failure
- (exit 1)))
+ (and (eq? (session-record-port server)
+ (session-record-port server))
+ (= amount (u8vector-length %message))
+ (equal? buf %message)
+ (eof-object?
+ (read-char (session-record-port server))))))))))
;;; arch-tag: e873226a-d0b6-4a93-87ec-a1b5ad2ae8a2
diff --git a/guile/tests/srp-base64.scm b/guile/tests/srp-base64.scm
index c928f25..484288a 100644
--- a/guile/tests/srp-base64.scm
+++ b/guile/tests/srp-base64.scm
@@ -1,5 +1,5 @@
;;; GnuTLS --- Guile bindings for GnuTLS.
-;;; Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Lesser General Public
@@ -22,7 +22,8 @@
;;; Test SRP base64 encoding and decoding.
;;;
-(use-modules (gnutls))
+(use-modules (gnutls)
+ (gnutls build tests))
(define %message
"GnuTLS is free software; you can redistribute it and/or
@@ -30,10 +31,12 @@ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.")
-(exit (let ((encoded (srp-base64-encode %message)))
- (and (string? encoded)
- (string=? (srp-base64-decode encoded)
- %message))))
+(run-test
+ (lambda ()
+ (let ((encoded (srp-base64-encode %message)))
+ (and (string? encoded)
+ (string=? (srp-base64-decode encoded)
+ %message)))))
;;; arch-tag: ea1534a5-d513-4208-9a75-54bd4710f915
diff --git a/guile/tests/x509-auth.scm b/guile/tests/x509-auth.scm
index 83cf423..e5c3437 100644
--- a/guile/tests/x509-auth.scm
+++ b/guile/tests/x509-auth.scm
@@ -1,5 +1,5 @@
;;; GnuTLS --- Guile bindings for GnuTLS.
-;;; Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Lesser General Public
@@ -24,6 +24,7 @@
;;;
(use-modules (gnutls)
+ (gnutls build tests)
(srfi srfi-4))
@@ -62,10 +63,7 @@
;; (set-log-procedure! (lambda (level str)
;; (format #t "[~a|~a] ~a" (getpid) level str)))
-(dynamic-wind
- (lambda ()
- #t)
-
+(run-test
(lambda ()
(let ((socket-pair (socketpair PF_UNIX SOCK_STREAM 0))
(pub (import-key import-x509-certificate
@@ -95,7 +93,7 @@
(write %message (session-record-port client))
(bye client close-request/rdwr)
- (exit))
+ (primitive-exit))
(let ((server (make-session connection-end/server))
(rsa (import-rsa-params "rsa-parameters.pem"))
@@ -128,11 +126,7 @@
(let ((msg (read (session-record-port server)))
(auth-type (session-authentication-type server)))
(bye server close-request/rdwr)
- (exit (and (eq? auth-type credentials/certificate)
- (equal? msg %message)))))))))
-
- (lambda ()
- ;; failure
- (exit 1)))
+ (and (eq? auth-type credentials/certificate)
+ (equal? msg %message)))))))))
;;; arch-tag: 1f88f835-a5c8-4fd6-94b6-5a13571ba03d
diff --git a/guile/tests/x509-certificates.scm b/guile/tests/x509-certificates.scm
index fda227b..67c1885 100644
--- a/guile/tests/x509-certificates.scm
+++ b/guile/tests/x509-certificates.scm
@@ -1,5 +1,5 @@
;;; GnuTLS --- Guile bindings for GnuTLS.
-;;; Copyright (C) 2007, 2010 Free Software Foundation, Inc.
+;;; Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
;;;
;;; GnuTLS is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Lesser General Public
@@ -23,6 +23,7 @@
;;;
(use-modules (gnutls)
+ (gnutls build tests)
(srfi srfi-4)
(srfi srfi-11))
@@ -45,11 +46,7 @@
(stat:size (stat file)))
-(dynamic-wind
-
- (lambda ()
- #t)
-
+(run-test
(lambda ()
(let ((raw-certificate (make-u8vector (file-size %certificate-file)))
(raw-privkey (make-u8vector (file-size %private-key-file))))
@@ -64,23 +61,19 @@
(sec (import-x509-private-key raw-privkey
x509-certificate-format/pem)))
- (exit (and (x509-certificate? cert)
- (x509-private-key? sec)
- (string? (x509-certificate-dn cert))
- (string? (x509-certificate-issuer-dn cert))
- (string=? (x509-certificate-dn-oid cert 0) %first-oid)
- (eq? (x509-certificate-signature-algorithm cert)
- %signature-algorithm)
- (x509-certificate-matches-hostname? cert "localhost")
- (let-values (((type name)
- (x509-certificate-subject-alternative-name
- cert 0)))
- (and (string? name)
- (string?
- (x509-subject-alternative-name->string type)))))))))
-
- (lambda ()
- ;; failure
- (exit 1)))
+ (and (x509-certificate? cert)
+ (x509-private-key? sec)
+ (string? (x509-certificate-dn cert))
+ (string? (x509-certificate-issuer-dn cert))
+ (string=? (x509-certificate-dn-oid cert 0) %first-oid)
+ (eq? (x509-certificate-signature-algorithm cert)
+ %signature-algorithm)
+ (x509-certificate-matches-hostname? cert "localhost")
+ (let-values (((type name)
+ (x509-certificate-subject-alternative-name
+ cert 0)))
+ (and (string? name)
+ (string?
+ (x509-subject-alternative-name->string type)))))))))
;;; arch-tag: eef09b52-30e8-472a-8b93-cb636434f6eb
--
1.7.4.1