About: name the webmail node and the mail server node
Settings > About shows which webmail node answered (NODE_NAME, else the container hostname) and which inbuxa node it talks to: the address the server's name resolves to from the webmail, named by its PTR record. The server only tells administrators its node name, so the webmail works it out itself. Fetched from /api/about/nodes on every visit, cached for a minute server-side, for troubleshooting a cluster. Fork-only: upstream ihasmail runs one webmail against one server. 4 new strings, translated in all 9 catalogues.
This commit is contained in:
1 parent
119548090e
commit
6b44705bfd
14 files changed
+189
-1
No files matched your search
@@ -0,0 +1,40 @@
|
||||
import { test, beforeEach } from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { clearNodeCache, mailNode } from "./nodes.js";
|
||||
|
||||
/**
|
||||
* About names the mail node by the PTR of the address the server's name
|
||||
* resolves to from the webmail -- the local node, where a host entry pins it.
|
||||
*/
|
||||
|
||||
beforeEach(() => clearNodeCache());
|
||||
|
||||
const lookup = (address: string) => async () => ({ address });
|
||||
|
||||
test("the node is named by its address's PTR, without the trailing dot", async () => {
|
||||
const n = await mailNode("https://mail.example.com", lookup("192.0.2.2"), async () => ["mx2.example.com."]);
|
||||
assert.deepEqual(n, { host: "mail.example.com", address: "192.0.2.2", name: "mx2.example.com" });
|
||||
});
|
||||
|
||||
test("an address without a PTR still shows the address", async () => {
|
||||
const n = await mailNode("https://mail.example.com", lookup("192.0.2.3"), async () => { throw new Error("ENOTFOUND"); });
|
||||
assert.deepEqual(n, { host: "mail.example.com", address: "192.0.2.3", name: null });
|
||||
});
|
||||
|
||||
test("a name that doesn't resolve says so instead of failing", async () => {
|
||||
let reversed = false;
|
||||
const n = await mailNode("https://mail.example.com", async () => { throw new Error("ENOTFOUND"); }, async () => { reversed = true; return []; });
|
||||
assert.deepEqual(n, { host: "mail.example.com", address: null, name: null });
|
||||
assert.equal(reversed, false);
|
||||
});
|
||||
|
||||
test("the answer is cached for a minute, then looked up again", async () => {
|
||||
let calls = 0;
|
||||
const count = async () => { calls++; return { address: "192.0.2.1" }; };
|
||||
const rev = async () => ["mail.example.com"];
|
||||
await mailNode("https://mail.example.com", count, rev, 0);
|
||||
await mailNode("https://mail.example.com", count, rev, 59_000);
|
||||
assert.equal(calls, 1);
|
||||
await mailNode("https://mail.example.com", count, rev, 61_000);
|
||||
assert.equal(calls, 2);
|
||||
});
|
||||
Reference in new issue
Block a user