summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/graph.scm2
-rw-r--r--tests/guix-environment-container.sh9
-rw-r--r--tests/guix-home.sh2
-rw-r--r--tests/import-utils.scm2
-rw-r--r--tests/networking.scm11
-rw-r--r--tests/services/configuration.scm194
6 files changed, 203 insertions, 17 deletions
diff --git a/tests/graph.scm b/tests/graph.scm
index 6674b5cc8f..a6186ff7e8 100644
--- a/tests/graph.scm
+++ b/tests/graph.scm
@@ -477,7 +477,7 @@ edges."
'("libffi" "guile" "guile-json")
(run-with-store %store
(mlet %store-monad ((path (shortest-path (specification->package "libffi")
- guile-json
+ guile-json-1
%reverse-package-node-type)))
(return (map package-name path)))))
diff --git a/tests/guix-environment-container.sh b/tests/guix-environment-container.sh
index 0475405a89..a30d6b7fb2 100644
--- a/tests/guix-environment-container.sh
+++ b/tests/guix-environment-container.sh
@@ -264,3 +264,12 @@ guix shell --bootstrap guile-bootstrap --container \
# An invalid symlink spec causes the command to fail.
! guix shell --bootstrap -CS bin/guile=/usr/bin/guile guile-bootstrap -- exit
+
+# Check whether '--nesting' works.
+guix build hello -d
+env="$(type -P pre-inst-env)"
+if guix shell -C -D guix -- "$env" guix build hello -d # cannot work
+then false; else true; fi
+hello_drv="$(guix build hello -d)"
+hello_drv_nested="$(cd "$(dirname env)" && guix shell --bootstrap -CW -D guix -- "$env" guix build hello -d)"
+test "$hello_drv" = "$hello_drv_nested"
diff --git a/tests/guix-home.sh b/tests/guix-home.sh
index 3151f66683..11b068ca43 100644
--- a/tests/guix-home.sh
+++ b/tests/guix-home.sh
@@ -36,8 +36,8 @@ container_supported ()
fi
}
-NIX_STORE_DIR="$(guile -c '(use-modules (guix config))(display %storedir)')"
localstatedir="$(guile -c '(use-modules (guix config))(display %localstatedir)')"
+NIX_STORE_DIR="$(guile -c '(use-modules (guix config))(display %storedir)')"
GUIX_DAEMON_SOCKET="$localstatedir/guix/daemon-socket/socket"
export NIX_STORE_DIR GUIX_DAEMON_SOCKET
diff --git a/tests/import-utils.scm b/tests/import-utils.scm
index 44dff14597..1565dd610a 100644
--- a/tests/import-utils.scm
+++ b/tests/import-utils.scm
@@ -141,7 +141,7 @@ Differences are hard to spot, e.g. in CLOS vs. GOOPS."))
(license:license? (package-license pkg))
(build-system? (package-build-system pkg))
(origin? (package-source pkg))
- (equal? (origin-sha256 (package-source pkg))
+ (equal? (content-hash-value (origin-hash (package-source pkg)))
(base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))))
(test-equal "alist->package with false license" ;<https://bugs.gnu.org/30470>
diff --git a/tests/networking.scm b/tests/networking.scm
index f2421370d2..fbf8db7a02 100644
--- a/tests/networking.scm
+++ b/tests/networking.scm
@@ -43,17 +43,6 @@
"server some.ntp.server.org iburst version 3 maxpoll 16 prefer"
(ntp-server->string %ntp-server-sample))
-(test-equal "ntp configuration servers deprecated form"
- (ntp-configuration-servers
- (ntp-configuration
- (servers (list "example.pool.ntp.org"))))
- (ntp-configuration-servers
- (ntp-configuration
- (servers (list (ntp-server
- (type 'server)
- (address "example.pool.ntp.org")
- (options '())))))))
-
;;;
;;; OpenNTPD
diff --git a/tests/services/configuration.scm b/tests/services/configuration.scm
index 4f8a74dc8a..8ad5907f37 100644
--- a/tests/services/configuration.scm
+++ b/tests/services/configuration.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2021, 2022 Maxim Cournoyer <[email protected]>
;;; Copyright © 2021 Xinglu Chen <[email protected]>
;;; Copyright © 2022 Ludovic Courtès <[email protected]>
+;;; Copyright © 2023 Bruno Victal <[email protected]>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,6 +23,7 @@
#:use-module (gnu services configuration)
#:use-module (guix diagnostics)
#:use-module (guix gexp)
+ #:autoload (guix i18n) (G_)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-64))
@@ -46,14 +48,14 @@
(port-configuration-port (port-configuration)))
(test-equal "wrong type for a field"
- '("configuration.scm" 57 11) ;error location
+ '("configuration.scm" 59 11) ;error location
(guard (c ((configuration-error? c)
(let ((loc (error-location c)))
(list (basename (location-file loc))
(location-line loc)
(location-column loc)))))
(port-configuration
- ;; This is line 56; the test relies on line/column numbers!
+ ;; This is line 58; the test relies on line/column numbers!
(port "This is not a number!"))))
(define-configuration port-configuration-cs
@@ -80,6 +82,9 @@
(format #f "~a = ~a;" name value))
(define-configuration serializable-configuration
+ (port (number 80) "The port number." (serializer custom-number-serializer)))
+
+(define-configuration serializable-configuration-deprecated
(port (number 80) "The port number." custom-number-serializer))
(test-assert "serialize-configuration"
@@ -87,8 +92,14 @@
(let ((config (serializable-configuration)))
(serialize-configuration config serializable-configuration-fields))))
+(test-assert "serialize-configuration [deprecated]"
+ (gexp?
+ (let ((config (serializable-configuration-deprecated)))
+ (serialize-configuration
+ config serializable-configuration-deprecated-fields))))
+
(define-configuration serializable-configuration
- (port (number 80) "The port number." custom-number-serializer)
+ (port (number 80) "The port number." (serializer custom-number-serializer))
(no-serialization))
(test-assert "serialize-configuration with no-serialization"
@@ -111,6 +122,183 @@
;;;
+;;; define-configuration macro, extra-args literals
+;;;
+
+(define (eval-gexp x)
+ "Get serialized config as string."
+ (eval (gexp->approximate-sexp x)
+ (current-module)))
+
+(define (port? value)
+ (or (string? value) (number? value)))
+
+(define (sanitize-port value)
+ (cond ((number? value) value)
+ ((string? value) (string->number value))
+ (else (raise (formatted-message (G_ "Bad value: ~a") value)))))
+
+(test-group "Basic sanitizer literal tests"
+ (define serialize-port serialize-number)
+
+ (define-configuration config-with-sanitizer
+ (port
+ (port 80)
+ "Lorem Ipsum."
+ (sanitizer sanitize-port)))
+
+ (test-equal "default value, sanitizer"
+ 80
+ (config-with-sanitizer-port (config-with-sanitizer)))
+
+ (test-equal "string value, sanitized to number"
+ 56
+ (config-with-sanitizer-port (config-with-sanitizer
+ (port "56"))))
+
+ (define (custom-serialize-port field-name value)
+ (number->string value))
+
+ (define-configuration config-serializer
+ (port
+ (port 80)
+ "Lorem Ipsum."
+ (serializer custom-serialize-port)))
+
+ (test-equal "default value, serializer literal"
+ "80"
+ (eval-gexp
+ (serialize-configuration (config-serializer)
+ config-serializer-fields))))
+
+(test-group "empty-serializer as literal/procedure tests"
+ (define-configuration config-with-literal
+ (port
+ (port 80)
+ "Lorem Ipsum."
+ empty-serializer))
+
+ (define-configuration config-with-proc
+ (port
+ (port 80)
+ "Lorem Ipsum."
+ (serializer empty-serializer)))
+
+ (test-equal "empty-serializer as literal"
+ ""
+ (eval-gexp
+ (serialize-configuration (config-with-literal)
+ config-with-literal-fields)))
+
+ (test-equal "empty-serializer as procedure"
+ ""
+ (eval-gexp
+ (serialize-configuration (config-with-proc)
+ config-with-proc-fields))))
+
+(test-group "permutation tests"
+ (define-configuration config-san+empty-ser
+ (port
+ (port 80)
+ "Lorem Ipsum."
+ (sanitizer sanitize-port)
+ empty-serializer))
+
+ (define-configuration config-san+ser
+ (port
+ (port 80)
+ "Lorem Ipsum."
+ (sanitizer sanitize-port)
+ (serializer (lambda _ "foo"))))
+
+ (test-equal "default value, sanitizer, permutation"
+ 80
+ (config-san+empty-ser-port (config-san+empty-ser)))
+
+ (test-equal "default value, serializer, permutation"
+ "foo"
+ (eval-gexp
+ (serialize-configuration (config-san+ser) config-san+ser-fields)))
+
+ (test-equal "string value sanitized to number, permutation"
+ 56
+ (config-san+ser-port (config-san+ser
+ (port "56"))))
+
+ ;; Ordering tests.
+ (define-configuration config-ser+san
+ (port
+ (port 80)
+ "Lorem Ipsum."
+ (sanitizer sanitize-port)
+ (serializer (lambda _ "foo"))))
+
+ (define-configuration config-empty-ser+san
+ (port
+ (port 80)
+ "Lorem Ipsum."
+ empty-serializer
+ (sanitizer sanitize-port)))
+
+ (test-equal "default value, sanitizer, permutation 2"
+ 56
+ (config-empty-ser+san-port (config-empty-ser+san
+ (port "56"))))
+
+ (test-equal "default value, serializer, permutation 2"
+ "foo"
+ (eval-gexp
+ (serialize-configuration (config-ser+san) config-ser+san-fields))))
+
+(test-group "duplicated/conflicting entries"
+ (test-error
+ "duplicate sanitizer" #t
+ (macroexpand '(define-configuration dupe-san
+ (foo
+ (list '())
+ "Lorem Ipsum."
+ (sanitizer (lambda () #t))
+ (sanitizer (lambda () #t))))))
+
+ (test-error
+ "duplicate serializer" #t
+ (macroexpand '(define-configuration dupe-ser
+ (foo
+ (list '())
+ "Lorem Ipsum."
+ (serializer (lambda _ ""))
+ (serializer (lambda _ ""))))))
+
+ (test-error
+ "conflicting use of serializer + empty-serializer" #t
+ (macroexpand '(define-configuration ser+empty-ser
+ (foo
+ (list '())
+ "Lorem Ipsum."
+ (serializer (lambda _ "lorem"))
+ empty-serializer)))))
+
+(test-group "Mix of deprecated and new syntax"
+ (test-error
+ "Mix of bare serializer and new syntax" #t
+ (macroexpand '(define-configuration mixed
+ (foo
+ (list '())
+ "Lorem Ipsum."
+ (sanitizer (lambda () #t))
+ (lambda _ "lorem")))))
+
+ (test-error
+ "Mix of bare serializer and new syntax, permutation)" #t
+ (macroexpand '(define-configuration mixed
+ (foo
+ (list '())
+ "Lorem Ipsum."
+ (lambda _ "lorem")
+ (sanitizer (lambda () #t)))))))
+
+
+;;;
;;; define-maybe macro.
;;;
(define-maybe number)