aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMaxime Devos <maximedevos@telenet.be>2021-09-13 16:05:59 +0200
committerMaxime Devos <maximedevos@telenet.be>2021-09-21 12:21:07 +0200
commit0d19fac619d387eced6629f722640352cfae6c60 (patch)
treec22a96257d524295cea2eb7cd204903b50badb8f /tests
parent316f627d4021343f4a81f53dd835308339f90a47 (diff)
downloadgnunet-scheme-0d19fac619d387eced6629f722640352cfae6c60.tar.gz
gnunet-scheme-0d19fac619d387eced6629f722640352cfae6c60.zip
config: Allow expanding loaded configurations.
* gnu/gnunet/config/fs.scm (make-expanded-configuration): New procedure. * doc/scheme-gnunet.tm (Loading configuration files): Document new procedure. * tests/config-fs.scm (load-string->config/expanded, load-string->alist/expanded): New procedures. ("make-expanded-configuration, one variable" ("make-expanded-configuration, expand variable (via getenv)") ("make-expanded-configuration, expand variable (via getenv, fancyness)") ("make-expanded-configuration, expand variable (via PATHS)") ("make-expanded-configuration, expand variable (via PATHS + getenv)") ("make-expanded-configuration, loop detected"): New tests.
Diffstat (limited to 'tests')
-rw-r--r--tests/config-fs.scm70
1 files changed, 69 insertions, 1 deletions
diff --git a/tests/config-fs.scm b/tests/config-fs.scm
index e457b0a..b194a6b 100644
--- a/tests/config-fs.scm
+++ b/tests/config-fs.scm
@@ -16,8 +16,12 @@
16;; 16;;
17;; SPDX-License-Identifier: AGPL3.0-or-later 17;; SPDX-License-Identifier: AGPL3.0-or-later
18 18
19(import (gnu gnunet config fs) 19(import (gnu gnunet config db)
20 (gnu gnunet config expand)
21 (gnu gnunet config fs)
20 (gnu gnunet config parser) 22 (gnu gnunet config parser)
23 (rnrs exceptions)
24 (srfi srfi-1)
21 (srfi srfi-64)) 25 (srfi srfi-64))
22(test-begin "config-fs") 26(test-begin "config-fs")
23 27
@@ -145,4 +149,68 @@
145 (load-string->alist/unexpanded 149 (load-string->alist/unexpanded
146 "[section1]\nVAR = VALUE\n[section2]\nVAR2 = VALUE2")) 150 "[section1]\nVAR = VALUE\n[section2]\nVAR2 = VALUE2"))
147 151
152(define (load-string->config/expanded text environment-variables)
153 (make-expanded-configuration
154 (lambda (set-value!)
155 (call-with-input-string text
156 (lambda (p)
157 (load-configuration/port! set-value! p))))
158 #:getenv
159 (alist->getenv environment-variables)))
160
161(define (load-string->alist/expanded text interested environment-variables)
162 (define config (load-string->config/expanded text environment-variables))
163 (filter-map (lambda (section+key)
164 `(,section+key
165 . ,(guard (c ((undefined-key-error? c) 'undefined))
166 (read-value identity config (car section+key)
167 (cdr section+key)))))
168 interested))
169
170(test-equal "make-expanded-configuration, one variable"
171 '((("sect" . "var") . "iable"))
172 (load-string->alist/expanded "[sect]\nvar=iable"
173 '(("sect" . "var")) '()))
174
175;; Detected a missing 'list'
176(test-equal "make-expanded-configuration, expand variable (via getenv)"
177 '((("sect" . "var") . "iable"))
178 (load-string->alist/expanded "[sect]\nvar=i$a"
179 '(("sect" . "var")) '(("a" . "able"))))
180
181
182(test-equal "make-expanded-configuration, expand variable (via getenv, fancyness)"
183 '((("sect" . "var") . "i}\\$able%f'"))
184 (load-string->alist/expanded "[sect]\nvar=i$a"
185 '(("sect" . "var"))
186 '(("a" . "}\\$able%f'"))))
187
188(test-equal "make-expanded-configuration, expand variable (via PATHS)"
189 '((("sect" . "var") . "iable")
190 (("PATHS" . "something") . "able"))
191 (load-string->alist/expanded
192 "[sect]\nvar=i$something\n[PATHS]\nsomething=able"
193 '(("sect" . "var")
194 ("PATHS" . "something"))
195 '()))
196
197;; Detects incorrect implementation of substring=? (string=? was used instead)
198(test-equal "make-expanded-configuration, expand variable (via PATHS + getenv)"
199 '((("sect" . "var") . "iable")
200 (("PATHS" . "something") . "able"))
201 (load-string->alist/expanded
202 "[sect]\nvar=i$something\n[PATHS]\nsomething=a$else"
203 '(("sect" . "var")
204 ("PATHS" . "something"))
205 '(("else" . "ble"))))
206
207;; Detect implementations of substring=? that always return #f.
208(test-equal "make-expanded-configuration, loop detected"
209 #t
210 (guard (c ((expansion-loop-error? c) #t))
211 (load-string->alist/expanded
212 "[sect]\nvar=i${something}\n[PATHS]\nsomething=d${something}"
213 '(("PATHS" . "something"))
214 '(("something" . "unused")))))
215
148(test-end "config-fs") 216(test-end "config-fs")