utils: Test 'compressed-port' and 'decompressed-port' for both gzip and xz.

* tests/utils.scm (test-compression/decompression): New procedure.
<top level>: Call it for both 'xz and 'gzip.
This commit is contained in:
Ludovic Courtès 2019-05-23 22:11:33 +02:00
parent 2a991f3ae4
commit 4c7ebe318f
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 40 additions and 23 deletions

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org> ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
;;; ;;;
@ -174,30 +174,47 @@
(any (compose (negate zero?) cdr waitpid) (any (compose (negate zero?) cdr waitpid)
pids)))) pids))))
(test-assert "compressed-port, decompressed-port, non-file" (define (test-compression/decompression method run?)
"Test METHOD, a symbol such as 'gzip. Call RUN? to determine whether to
skip these tests."
(unless (run?) (test-skip 1))
(test-assert (format #f "compressed-port, decompressed-port, non-file [~a]"
method)
(let ((data (call-with-input-file (search-path %load-path "guix.scm") (let ((data (call-with-input-file (search-path %load-path "guix.scm")
get-bytevector-all))) get-bytevector-all)))
(let*-values (((compressed pids1) (let*-values (((compressed pids1)
(compressed-port 'xz (open-bytevector-input-port data))) (compressed-port method (open-bytevector-input-port data)))
((decompressed pids2) ((decompressed pids2)
(decompressed-port 'xz compressed))) (decompressed-port method compressed)))
(and (every (compose zero? cdr waitpid) (and (every (compose zero? cdr waitpid)
(append pids1 pids2)) (pk 'pids method (append pids1 pids2)))
(equal? (get-bytevector-all decompressed) data))))) (let ((result (get-bytevector-all decompressed)))
(pk 'len method
(if (bytevector? result)
(bytevector-length result)
result)
(bytevector-length data))
(equal? result data))))))
(false-if-exception (delete-file temp-file)) (false-if-exception (delete-file temp-file))
(test-assert "compressed-output-port + decompressed-port" (unless (run?) (test-skip 1))
(test-assert (format #f "compressed-output-port + decompressed-port [~a]"
method)
(let* ((file (search-path %load-path "guix/derivations.scm")) (let* ((file (search-path %load-path "guix/derivations.scm"))
(data (call-with-input-file file get-bytevector-all)) (data (call-with-input-file file get-bytevector-all))
(port (open-file temp-file "w0b"))) (port (open-file temp-file "w0b")))
(call-with-compressed-output-port 'xz port (call-with-compressed-output-port method port
(lambda (compressed) (lambda (compressed)
(put-bytevector compressed data))) (put-bytevector compressed data)))
(close-port port) (close-port port)
(bytevector=? data (bytevector=? data
(call-with-decompressed-port 'xz (open-file temp-file "r0b") (call-with-decompressed-port method (open-file temp-file "r0b")
get-bytevector-all)))) get-bytevector-all)))))
(for-each test-compression/decompression
'(gzip xz lzip)
(list (const #t) (const #t)))
;; This is actually in (guix store). ;; This is actually in (guix store).
(test-equal "store-path-package-name" (test-equal "store-path-package-name"