;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2015 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (test-base32) #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module (guix utils) #:use-module (srfi srfi-1) #:use-module (srfi srfi-34) #:use-module (srfi srfi-64) #:use-module (ice-9 rdelim) #:use-module (ice-9 popen) #:use-module (ice-9 match) #:use-module (rnrs bytevectors) #:use-module (rnrs io ports)) ;; Test the (guix base32) module. (define %nix-hash (or (and=> (getenv "NIX_HASH") (match-lambda ("" #f) (val val))) "nix-hash")) (define %have-nix-hash? ;; Note: Use `system', not `system*', because of . (false-if-exception (zero? (system (string-append %nix-hash " --version"))))) (test-begin "base32") (test-assert "bytevector->base32-string" (fold (lambda (bv expected result) (and result (string=? (bytevector->base32-string bv) expected))) #t ;; Examples from RFC 4648. (map string->utf8 '("" "f" "fo" "foo" "foob" "fooba" "foobar")) '("" "my" "mzxq" "mzxw6" "mzxw6yq" "mzxw6ytb" "mzxw6ytboi"))) (test-assert "base32-string->bytevector" (every (lambda (bv) (equal? (base32-string->bytevector (bytevector->base32-string bv)) bv)) ;; Examples from RFC 4648. (map string->utf8 '("" "f" "fo" "foo" "foob" "fooba" "foobar")))) (test-assert "nix-base32-string->bytevector" (every (lambda (bv) (equal? (nix-base32-string->bytevector (bytevector->nix-base32-string bv)) bv)) ;; Examples from RFC 4648. (map string->utf8 '("" "f" "fo" "foo" "foob" "fooba" "foobar")))) (test-equal "&invalid-base32-character" #\e (guard (c ((invalid-base32-character? c) (invalid-base32-character-value c))) (nix-base32-string->bytevector (string-append (make-string 51 #\a) "e")))) ;; The following test requires `nix-hash' in $PATH. (unless %have-nix-hash? (test-skip 1)) (test-assert "sha256 & bytevector->nix-base32-string" (let ((file (search-path %load-path "tests/test.drv"))) (equal? (bytevector->nix-base32-string (sha256 (call-with-input-file file get-bytevector-all))) (let* ((c (format #f "~a --type sha256 --base32 --flat \"~a\"" %nix-hash file)) (p (open-input-pipe c)) (l (read-line p))) (close-pipe p) l)))) (test-end) 1 +0200'>2015-09-24ui: Gracefully handle Unicode description strings....Ludovic Courtès 2015-09-18Add (guix scripts)....Alex Kost 2015-02-26ui: Honor --no-* options passed via $GUIX_BUILD_OPTIONS....Ludovic Courtès 2015-02-26ui: Factorize command-line + env. var. option parsing....Ludovic Courtès 2015-02-08ui: Simplify 'show-manifest-transaction' test....Ludovic Courtès 2014-10-10ui: Move 'show-manifest-transaction' from (guix profiles)....Alex Kost 2014-10-03ui: Recognize the same size units as Coreutils....Ludovic Courtès 2014-08-11ui: Fix handling of periods by fill-paragraph....Cyrill Schenkel 2014-05-19ui: Gracefully deal with zero-output derivations....Ludovic Courtès 2014-04-08ui: Add 'size->number'....Ludovic Courtès 2013-11-01ui: Factorize package specification parsing....Ludovic Courtès 2013-09-19guix package: Add '--list-generations'....Nikita Karetnikov 2013-02-01guix-package: Report `--search' matches in recutils format....Ludovic Courtès