diff options
author | Maxime Devos <maximedevos@telenet.be> | 2021-09-13 16:05:59 +0200 |
---|---|---|
committer | Maxime Devos <maximedevos@telenet.be> | 2021-09-21 12:21:07 +0200 |
commit | 0d19fac619d387eced6629f722640352cfae6c60 (patch) | |
tree | c22a96257d524295cea2eb7cd204903b50badb8f /tests | |
parent | 316f627d4021343f4a81f53dd835308339f90a47 (diff) | |
download | gnunet-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.scm | 70 |
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") |