66 lines
1.6 KiB
JavaScript
66 lines
1.6 KiB
JavaScript
// Import Node's built-in test tools.
|
|
const test = require("node:test");
|
|
const assert = require("node:assert/strict");
|
|
|
|
// Import the DNS service.
|
|
const {
|
|
lookupDns,
|
|
resolveRecord,
|
|
RECORD_TYPES,
|
|
} = require("../src/services/dnsService");
|
|
|
|
test("supports the expected DNS record types", () => {
|
|
assert.deepEqual(
|
|
RECORD_TYPES,
|
|
["A", "AAAA", "CNAME", "MX", "TXT", "NS"]
|
|
);
|
|
});
|
|
|
|
test("resolves A records for example.com", async () => {
|
|
const records = await resolveRecord("example.com", "A");
|
|
|
|
assert.equal(Array.isArray(records), true);
|
|
assert.equal(records.length > 0, true);
|
|
});
|
|
|
|
test("returns an array for a missing optional record type", async () => {
|
|
const records = await resolveRecord(
|
|
"example.com",
|
|
"CNAME"
|
|
);
|
|
|
|
assert.equal(Array.isArray(records), true);
|
|
});
|
|
|
|
test("joins TXT record fragments into strings", async () => {
|
|
const records = await resolveRecord("google.com", "TXT");
|
|
|
|
assert.equal(Array.isArray(records), true);
|
|
|
|
records.forEach((record) => {
|
|
assert.equal(typeof record, "string");
|
|
});
|
|
});
|
|
|
|
test("returns all supported record groups", async () => {
|
|
const result = await lookupDns("example.com");
|
|
|
|
assert.equal(result.hostname, "example.com");
|
|
assert.equal(typeof result.checkedAt, "string");
|
|
assert.equal(typeof result.records, "object");
|
|
|
|
RECORD_TYPES.forEach((recordType) => {
|
|
assert.equal(
|
|
Array.isArray(result.records[recordType]),
|
|
true
|
|
);
|
|
});
|
|
});
|
|
|
|
test("returns a valid ISO timestamp", async () => {
|
|
const result = await lookupDns("example.com");
|
|
const timestamp = Date.parse(result.checkedAt);
|
|
|
|
assert.equal(Number.isNaN(timestamp), false);
|
|
});
|