commit 5e099b8801eba9d22c0416447c568bef534ac1b9
parent e27e5c05841338635c551b4f135f65d2ba78f525
Author: Florian Dold <dold@taler.net>
Date: Tue, 21 Jul 2026 19:48:16 +0200
util: test that only .conf files are loaded from the defaults directory
Diffstat:
1 file changed, 35 insertions(+), 0 deletions(-)
diff --git a/packages/taler-util/src/talerconfig.test.ts b/packages/taler-util/src/talerconfig.test.ts
@@ -275,3 +275,38 @@ test("the default config directory is loaded in sorted order", (t) => {
}
}
});
+
+test("the default config directory loads only .conf files", (t) => {
+ // GNUnet skips any entry in the defaults directory whose extension is not
+ // ".conf". Loading everything means a README crashes the load, and an
+ // editor backup sorts after the file it backs up and overrides it.
+ const dir = makeConfigDir([
+ ["a.conf", "first"],
+ ["b.conf", "last"],
+ ]);
+ nodejs_fs.writeFileSync(
+ nodejs_path.join(dir, "conf.d", "b.conf~"),
+ "[test]\nVALUE = stale backup\n",
+ );
+ nodejs_fs.writeFileSync(
+ nodejs_path.join(dir, "conf.d", "README"),
+ "This directory holds configuration snippets.\n",
+ );
+ nodejs_fs.writeFileSync(
+ nodejs_path.join(dir, "main.conf"),
+ "[unrelated]\nX = y\n",
+ );
+ const varname = "TALER_EXCHANGE_BASE_CONFIG";
+ const saved = process.env[varname];
+ process.env[varname] = nodejs_path.join(dir, "conf.d");
+ try {
+ const config = Configuration.load(nodejs_path.join(dir, "main.conf"));
+ assert.strictEqual(config.getString("test", "value").required(), "last");
+ } finally {
+ if (saved === undefined) {
+ delete process.env[varname];
+ } else {
+ process.env[varname] = saved;
+ }
+ }
+});