dns-guide.test.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import assert from 'node:assert/strict';
  2. import dns from 'node:dns';
  3. import { test } from 'node:test';
  4. test('includes live current values for verification and dkim records', async () => {
  5. const originalResolver = dns.promises.Resolver;
  6. const lookup = new Map([
  7. ['example.com', ['v=spf1 ip4:192.0.2.10 a:mail.example.com ~all']],
  8. ['_mailhub.example.com', ['mailhub-verification=verify-token']],
  9. ['mh202607._domainkey.example.com', ['v=DKIM1; k=rsa; p=dkim-public']],
  10. ['_dmarc.example.com', ['v=DMARC1; p=none; rua=mailto:dmarc@example.com; adkim=s; aspf=s; pct=100']]
  11. ]);
  12. dns.promises.Resolver = class FakeResolver {
  13. setServers() {}
  14. async resolveTxt(name) {
  15. const value = lookup.get(name);
  16. if (!value) {
  17. const error = new Error('not found');
  18. error.code = 'ENODATA';
  19. throw error;
  20. }
  21. return value.map((record) => [record]);
  22. }
  23. async resolve4(name) {
  24. return name === 'mail.example.com' ? ['192.0.2.10'] : [];
  25. }
  26. async reverse(ip) {
  27. return ip === '192.0.2.10' ? ['mail.example.com'] : [];
  28. }
  29. };
  30. try {
  31. const { buildDnsGuide } = await import(`../src/dns-guide.js?test=${Date.now()}`);
  32. const guide = await buildDnsGuide({
  33. domain: 'example.com',
  34. selector: 'mh202607',
  35. verificationToken: 'verify-token',
  36. dkimPublic: 'dkim-public',
  37. senderHost: 'mail.example.com',
  38. sendingIp: '192.0.2.10',
  39. spfExtra: '',
  40. dmarcPolicy: 'none',
  41. dmarcRua: 'mailto:dmarc@example.com'
  42. });
  43. const verification = guide.records.find((record) => record.key === 'verification');
  44. const dkim = guide.records.find((record) => record.key === 'dkim');
  45. assert.deepEqual(verification.current, ['mailhub-verification=verify-token']);
  46. assert.deepEqual(dkim.current, ['v=DKIM1; k=rsa; p=dkim-public']);
  47. } finally {
  48. dns.promises.Resolver = originalResolver;
  49. }
  50. });