From 8390869811f56f5b2ff947efb9d48bcf219a0444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 13 Nov 2018 11:38:00 +0100 Subject: [PATCH] tests: Check file canonicalization for 'restore-file-set'. * guix/tests.scm (canonical-file?): New procedure. * tests/nar.scm ("restore-file-set (signed, valid)"): Check that every item of FILES matches 'canonical-file?'. --- guix/tests.scm | 9 +++++++++ tests/nar.scm | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/guix/tests.scm b/guix/tests.scm index 66524ddc2f..f4948148c4 100644 --- a/guix/tests.scm +++ b/guix/tests.scm @@ -36,6 +36,7 @@ (define-module (guix tests) random-text random-bytevector file=? + canonical-file? network-reachable? shebang-too-long? mock @@ -150,6 +151,14 @@ (define (file=? a b) (else (error "what?" (lstat a)))))) +(define (canonical-file? file) + "Return #t if FILE is in the store, is read-only, and its mtime is 1." + (let ((st (lstat file))) + (or (not (string-prefix? (%store-prefix) file)) + (eq? 'symlink (stat:type st)) + (and (= 1 (stat:mtime st)) + (zero? (logand #o222 (stat:mode st))))))) + (define (network-reachable?) "Return true if we can reach the Internet." (false-if-exception (getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV))) diff --git a/tests/nar.scm b/tests/nar.scm index ff16c3c400..bf1b066687 100644 --- a/tests/nar.scm +++ b/tests/nar.scm @@ -25,6 +25,8 @@ (define-module (test-nar) #:select (open-sha256-port open-sha256-input-port)) #:use-module ((guix packages) #:select (base32)) + #:use-module ((guix build utils) + #:select (find-files)) #:use-module (rnrs bytevectors) #:use-module (rnrs io ports) #:use-module (srfi srfi-1) @@ -354,7 +356,8 @@ (define (touch file) (map (lambda (file) (call-with-input-file file get-string-all)) - files)))))))) + files)) + (every canonical-file? files))))))) (test-assert "restore-file-set (missing signature)" (let/ec return