tests: configuration: Add a test to cover 'unset regression.
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>
Wed, 10 Aug 2022 03:06:16 +0000 (23:06 -0400)
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>
Wed, 10 Aug 2022 03:14:42 +0000 (23:14 -0400)
The regression was introduced with a2b89a3319dc1d621c546855f578acae5baaf6da,
and introduce a risk that 'unset leaks to serialized configuration files.

* tests/services/configuration.scm (maybe-symbol): New type.
(config-with-maybe-symbol): New configuration.
("symbol maybe value serialization, unspecified"): New test.

Reported-by: Attila Lendvai <attila@lendvai.name>
tests/services/configuration.scm

index 548c400..649dad2 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
 ;;;
    (config-with-maybe-number
     (port 42))))
 
+(define (serialize-symbol name value)
+  (format #f "~a=~a~%" name value))
+
+(define-maybe symbol)
+
+(define-configuration config-with-maybe-symbol
+  (protocol maybe-symbol ""))
+
+;;; Maybe symbol values are currently seen as serializable, because the
+;;; unspecified value is 'unset, which is a symbol itself.
+;;; TODO: Remove expected fail marker after resolution.
+(test-expect-fail 1)
+(test-equal "symbol maybe value serialization, unspecified"
+  ""
+  (gexp->approximate-sexp
+   (serialize-configuration (config-with-maybe-symbol)
+                            config-with-maybe-symbol-fields)))
+
 (define-maybe/no-serialization string)
 
 (define-configuration config-with-maybe-string/no-serialization