@nictool/dns-resource-record 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/README.md +2 -13
  3. package/package.json +15 -9
  4. package/rr/a.js +1 -3
  5. package/rr/aaaa.js +6 -7
  6. package/rr/caa.js +13 -2
  7. package/rr/cname.js +1 -3
  8. package/rr/dname.js +1 -3
  9. package/rr/dnskey.js +38 -5
  10. package/rr/ds.js +13 -2
  11. package/rr/ipseckey.js +26 -10
  12. package/rr/key.js +14 -2
  13. package/rr/mx.js +1 -3
  14. package/rr/naptr.js +5 -1
  15. package/rr/rrsig.js +13 -2
  16. package/rr/smimea.js +29 -3
  17. package/rr/srv.js +1 -3
  18. package/rr/sshfp.js +20 -3
  19. package/rr/tlsa.js +29 -3
  20. package/rr.js +15 -6
  21. package/.codeclimate.yml +0 -25
  22. package/.github/FUNDING.yml +0 -3
  23. package/.github/workflows/ci.yml +0 -43
  24. package/.github/workflows/codeql.yml +0 -14
  25. package/.github/workflows/publish.yml +0 -16
  26. package/.gitmodules +0 -3
  27. package/.prettierrc.yml +0 -3
  28. package/DEVELOP.md +0 -9
  29. package/eslint.config.mjs +0 -41
  30. package/test/a.js +0 -75
  31. package/test/aaaa.js +0 -86
  32. package/test/base.js +0 -148
  33. package/test/caa.js +0 -111
  34. package/test/cert.js +0 -48
  35. package/test/cname.js +0 -40
  36. package/test/dname.js +0 -57
  37. package/test/dnskey.js +0 -45
  38. package/test/ds.js +0 -45
  39. package/test/fake.js +0 -34
  40. package/test/hinfo.js +0 -80
  41. package/test/https.js +0 -56
  42. package/test/ipseckey.js +0 -141
  43. package/test/key.js +0 -36
  44. package/test/loc.js +0 -75
  45. package/test/mx.js +0 -78
  46. package/test/naptr.js +0 -47
  47. package/test/ns.js +0 -56
  48. package/test/nsec.js +0 -37
  49. package/test/nsec3.js +0 -47
  50. package/test/nsec3param.js +0 -23
  51. package/test/nxt.js +0 -37
  52. package/test/openpgpkey.js +0 -85
  53. package/test/ptr.js +0 -56
  54. package/test/rr.js +0 -212
  55. package/test/smimea.js +0 -51
  56. package/test/soa.js +0 -99
  57. package/test/spf.js +0 -51
  58. package/test/srv.js +0 -101
  59. package/test/sshfp.js +0 -69
  60. package/test/svcb.js +0 -56
  61. package/test/tinydns.js +0 -163
  62. package/test/tlsa.js +0 -63
  63. package/test/txt.js +0 -82
  64. package/test/uri.js +0 -65
package/test/soa.js DELETED
@@ -1,99 +0,0 @@
1
- import assert from 'assert'
2
-
3
- import * as base from './base.js'
4
-
5
- import SOA from '../rr/soa.js'
6
-
7
- const defaults = { class: 'IN', ttl: 3600, type: 'SOA' }
8
-
9
- const validRecords = [
10
- {
11
- ...defaults,
12
- owner: 'example.com.',
13
- mname: 'ns1.example.com.',
14
- rname: 'matt.example.com.',
15
- serial: 1,
16
- refresh: 7200,
17
- retry: 3600,
18
- expire: 1209600,
19
- minimum: 3600,
20
- testB: `example.com.\t3600\tIN\tSOA\tns1.example.com.\tmatt.example.com.\t1\t7200\t3600\t1209600\t3600\n`,
21
- testT:
22
- 'Zexample.com:ns1.example.com:matt.example.com:1:7200:3600:1209600:3600:3600::\n',
23
- },
24
- {
25
- ...defaults,
26
- owner: '2.example.com.',
27
- mname: 'ns2.example.com.',
28
- rname: 'matt.example.com.',
29
- serial: 1,
30
- refresh: 7200,
31
- retry: 3600,
32
- expire: 1209600,
33
- minimum: 3600,
34
- testB: `2.example.com.\t3600\tIN\tSOA\tns2.example.com.\tmatt.example.com.\t1\t7200\t3600\t1209600\t3600\n`,
35
- testT:
36
- 'Z2.example.com:ns2.example.com:matt.example.com:1:7200:3600:1209600:3600:3600::\n',
37
- },
38
- ]
39
-
40
- const invalidRecords = [
41
- {
42
- ...defaults,
43
- owner: 'example.com.',
44
- mname: 'ns1.example.com.',
45
- rname: 'matt.example.com.',
46
- serial: 4294967296,
47
- refresh: 7200,
48
- retry: 3600,
49
- expire: 1209600,
50
- msg: /serial must be a 32-bit integer/,
51
- },
52
- ]
53
-
54
- describe('SOA record', function () {
55
- base.valid(SOA, validRecords)
56
- base.invalid(SOA, invalidRecords)
57
-
58
- base.getDescription(SOA)
59
- base.getRFCs(SOA, validRecords[0])
60
- base.getFields(SOA, [
61
- 'mname',
62
- 'rname',
63
- 'serial',
64
- 'refresh',
65
- 'retry',
66
- 'expire',
67
- 'minimum',
68
- ])
69
- base.getTypeId(SOA, 6)
70
-
71
- base.toBind(SOA, validRecords)
72
- base.toTinydns(SOA, validRecords)
73
-
74
- base.fromBind(SOA, validRecords)
75
- base.fromTinydns(SOA, validRecords)
76
-
77
- for (const val of validRecords) {
78
- it.skip(`imports tinydns SOA (Z) record (${val.owner})`, async function () {
79
- const r = new SOA({ tinyline: val.testT })
80
- if (process.env.DEBUG) console.dir(r)
81
- for (const f of [
82
- 'owner',
83
- 'mname',
84
- 'rname',
85
- 'serial',
86
- 'refresh',
87
- 'retry',
88
- 'expire',
89
- 'ttl',
90
- ]) {
91
- assert.deepStrictEqual(
92
- r.get(f),
93
- val[f],
94
- `${f}: ${r.get(f)} !== ${val[f]}`,
95
- )
96
- }
97
- })
98
- }
99
- })
package/test/spf.js DELETED
@@ -1,51 +0,0 @@
1
- import assert from 'assert'
2
-
3
- import * as base from './base.js'
4
-
5
- import SPF from '../rr/spf.js'
6
-
7
- const defaults = { class: 'IN', ttl: 86400, type: 'SPF' }
8
-
9
- const validRecords = [
10
- {
11
- ...defaults,
12
- owner: 'example.com.',
13
- data: 'v=spf1 mx a include:mx.example.com -all',
14
- testB:
15
- 'example.com.\t86400\tIN\tSPF\t"v=spf1 mx a include:mx.example.com -all"\n',
16
- testT:
17
- ':example.com:99:v=spf1 mx a include\\072mx.example.com -all:86400::\n',
18
- },
19
- ]
20
-
21
- const invalidRecords = []
22
-
23
- describe('SPF record', function () {
24
- base.valid(SPF, validRecords)
25
- base.invalid(SPF, invalidRecords)
26
-
27
- base.getDescription(SPF)
28
- base.getRFCs(SPF, validRecords[0])
29
- base.getFields(SPF, ['data'])
30
- base.getTypeId(SPF, 99)
31
-
32
- base.toBind(SPF, validRecords)
33
- base.toTinydns(SPF, validRecords)
34
-
35
- base.fromBind(SPF, validRecords)
36
- base.fromTinydns(SPF, validRecords)
37
-
38
- for (const val of validRecords) {
39
- it.skip(`imports tinydns SPF (generic) record`, async function () {
40
- const r = new SPF({ tinyline: val.testT })
41
- if (process.env.DEBUG) console.dir(r)
42
- for (const f of ['owner', 'data', 'ttl']) {
43
- assert.deepStrictEqual(
44
- r.get(f),
45
- val[f],
46
- `${f}: ${r.get(f)} !== ${val[f]}`,
47
- )
48
- }
49
- })
50
- }
51
- })
package/test/srv.js DELETED
@@ -1,101 +0,0 @@
1
- import assert from 'assert'
2
-
3
- import * as base from './base.js'
4
-
5
- import SRV from '../rr/srv.js'
6
-
7
- const defaults = { class: 'IN', ttl: 3600, type: 'SRV' }
8
-
9
- const validRecords = [
10
- {
11
- ...defaults,
12
- owner: '_imaps._tcp.example.com.',
13
- priority: 1,
14
- weight: 0,
15
- port: 993,
16
- target: 'mail.example.com.',
17
- testB:
18
- '_imaps._tcp.example.com.\t3600\tIN\tSRV\t1\t0\t993\tmail.example.com.\n',
19
- testT:
20
- ':_imaps._tcp.example.com:33:\\000\\001\\000\\000\\003\\341\\004mail\\007example\\003com\\000:3600::\n',
21
- },
22
- {
23
- ...defaults,
24
- owner: '_sip._tls.example.com.',
25
- priority: 100,
26
- weight: 1,
27
- port: 443,
28
- target: 'sipdir.online.lync.com.',
29
- testB:
30
- '_sip._tls.example.com.\t3600\tIN\tSRV\t100\t1\t443\tsipdir.online.lync.com.\n',
31
- testT:
32
- ':_sip._tls.example.com:33:\\000\\144\\000\\001\\001\\273\\006sipdir\\006online\\004lync\\003com\\000:3600::\n',
33
- },
34
- ]
35
-
36
- const invalidRecords = [
37
- {
38
- ...defaults,
39
- owner: 'test.example.com.',
40
- target: 'not-full-qualified.example.com',
41
- msg: /must be a 16-bit integer/,
42
- },
43
- {
44
- ...defaults,
45
- owner: 'test.example.com.',
46
- target: '192.168.0.1',
47
- msg: /must be a 16-bit integer/,
48
- },
49
- ]
50
-
51
- describe('SRV record', function () {
52
- base.valid(SRV, validRecords)
53
- base.invalid(SRV, invalidRecords)
54
-
55
- base.getDescription(SRV)
56
- base.getRFCs(SRV, validRecords[0])
57
- base.getFields(SRV, ['priority', 'weight', 'port', 'target'])
58
- base.getTypeId(SRV, 33)
59
-
60
- base.toBind(SRV, validRecords)
61
- base.toTinydns(SRV, validRecords)
62
-
63
- base.fromBind(SRV, validRecords)
64
- base.fromTinydns(SRV, validRecords)
65
-
66
- for (const val of validRecords) {
67
- it(`imports tinydns SRV (generic) record (${val.owner})`, async function () {
68
- const r = new SRV({ tinyline: val.testT })
69
- if (process.env.DEBUG) console.dir(r)
70
- for (const f of [
71
- 'owner',
72
- 'target',
73
- 'priority',
74
- 'weight',
75
- 'port',
76
- 'ttl',
77
- ]) {
78
- assert.deepStrictEqual(
79
- r.get(f),
80
- val[f],
81
- `${f}: ${r.get(f)} !== ${val[f]}`,
82
- )
83
- }
84
- })
85
- }
86
-
87
- it(`imports tinydns SRV (S) record`, async function () {
88
- const val = validRecords[0]
89
- const r = new SRV({
90
- tinyline: 'S_imaps._tcp.example.com:mail.example.com:993:1:0:3600::',
91
- })
92
- if (process.env.DEBUG) console.dir(r)
93
- for (const f of ['owner', 'target', 'priority', 'weight', 'port', 'ttl']) {
94
- assert.deepStrictEqual(
95
- r.get(f),
96
- val[f],
97
- `${f}: ${r.get(f)} !== ${val[f]}`,
98
- )
99
- }
100
- })
101
- })
package/test/sshfp.js DELETED
@@ -1,69 +0,0 @@
1
- import * as base from './base.js'
2
-
3
- import SSHFP from '../rr/sshfp.js'
4
-
5
- const common = { type: 'SSHFP', ttl: 86400, class: 'IN' }
6
-
7
- const validRecords = [
8
- {
9
- ...common,
10
- owner: 'mail.example.com.',
11
- algorithm: 1,
12
- fptype: 1,
13
- fingerprint:
14
- 'ed8c6e16fdae4f633eee6a7b8f64fdd356bbb32841d535565d777014c9ea4c26',
15
- testB:
16
- 'mail.example.com.\t86400\tIN\tSSHFP\t1\t1\ted8c6e16fdae4f633eee6a7b8f64fdd356bbb32841d535565d777014c9ea4c26\n',
17
- testT:
18
- ':mail.example.com:44:\\001\\001\\355\\214\\156\\026\\375\\256\\117\\143\\076\\356\\152\\173\\217\\144\\375\\323\\126\\273\\263\\050\\101\\325\\065\\126\\135\\167\\160\\024\\311\\352\\114\\046:86400::\n',
19
- },
20
- {
21
- ...common,
22
- owner: 'jails.example.com.',
23
- algorithm: 1,
24
- fptype: 1,
25
- fingerprint: '684981f1b57cc6b05bb2a5a7fd51a9114fef064d',
26
- testB:
27
- 'jails.example.com.\t86400\tIN\tSSHFP\t1\t1\t684981f1b57cc6b05bb2a5a7fd51a9114fef064d\n',
28
- testT:
29
- ':jails.example.com:44:\\001\\001\\150\\111\\201\\361\\265\\174\\306\\260\\133\\262\\245\\247\\375\\121\\251\\021\\117\\357\\006\\115:86400::\n',
30
- },
31
- {
32
- ...common,
33
- owner: 'jails.example.com.',
34
- algorithm: 3,
35
- fptype: 2,
36
- fingerprint:
37
- '81f9dbc4c009a1297336d69fcc2264f2a28417b781dafdd9c1ef7ff256066a35',
38
- testB:
39
- 'jails.example.com.\t86400\tIN\tSSHFP\t3\t2\t81f9dbc4c009a1297336d69fcc2264f2a28417b781dafdd9c1ef7ff256066a35\n',
40
- },
41
- {
42
- ...common,
43
- owner: 'jails.example.com.',
44
- algorithm: 1,
45
- fptype: 2,
46
- fingerprint:
47
- 'ed8c6e16fdae4f633eee6a7b8f64fdd356bbb32841d535565d777014c9ea4c26',
48
- testB:
49
- 'jails.example.com.\t86400\tIN\tSSHFP\t1\t2\ted8c6e16fdae4f633eee6a7b8f64fdd356bbb32841d535565d777014c9ea4c26\n',
50
- },
51
- ]
52
-
53
- const invalidRecords = []
54
-
55
- describe('SSHFP record', function () {
56
- base.valid(SSHFP, validRecords)
57
- base.invalid(SSHFP, invalidRecords)
58
-
59
- base.getDescription(SSHFP)
60
- base.getRFCs(SSHFP, validRecords[0])
61
- base.getFields(SSHFP, ['algorithm', 'fptype', 'fingerprint'])
62
- base.getTypeId(SSHFP, 44)
63
-
64
- base.toBind(SSHFP, validRecords)
65
- base.toTinydns(SSHFP, validRecords)
66
-
67
- base.fromBind(SSHFP, validRecords)
68
- base.fromTinydns(SSHFP, validRecords)
69
- })
package/test/svcb.js DELETED
@@ -1,56 +0,0 @@
1
- import * as base from './base.js'
2
-
3
- import SVCB from '../rr/svcb.js'
4
-
5
- const defaults = { class: 'IN', ttl: 3600, type: 'SVCB' }
6
-
7
- const validRecords = [
8
- {
9
- ...defaults,
10
- owner: '_8443._foo.api.example.com.',
11
- ttl: 7200,
12
- priority: 0,
13
- 'target name': 'svc4.example.net.',
14
- params: 'alpn="bar" port="8004" ech="..."',
15
- testB:
16
- '_8443._foo.api.example.com.\t7200\tIN\tSVCB\t0\tsvc4.example.net.\talpn="bar" port="8004" ech="..."\n',
17
- },
18
- {
19
- ...defaults,
20
- owner: '_8080._foo.example.com.',
21
- priority: 0,
22
- 'target name': 'foosvc.example.net.',
23
- params: '',
24
- testB:
25
- '_8080._foo.example.com.\t3600\tIN\tSVCB\t0\tfoosvc.example.net.\t\n',
26
- },
27
- /*
28
- _1234._bar.example.com. 300 IN SVCB 1 svc1.example.net. ( ech="111..." ipv6hint=2001:db8::1 port=1234 )
29
- SVCB 2 svc2.example.net. ( ech="222..." ipv6hint=2001:db8::2 port=1234 )
30
- */
31
- ]
32
-
33
- const invalidRecords = [
34
- // {
35
- // ...defaults,
36
- // owner : 'test.example.com.',
37
- // 'target name': 'not-full-qualified.example.com',
38
- // params : /must be a 16-bit integer/,
39
- // },
40
- ]
41
-
42
- describe('SVCB record', function () {
43
- base.valid(SVCB, validRecords)
44
- base.invalid(SVCB, invalidRecords)
45
-
46
- base.getDescription(SVCB)
47
- base.getRFCs(SVCB, validRecords[0])
48
- base.getFields(SVCB, ['priority', 'target name', 'params'])
49
- base.getTypeId(SVCB, 64)
50
-
51
- base.toBind(SVCB, validRecords)
52
- // base.toTinydns(SVCB, validRecords)
53
-
54
- base.fromBind(SVCB, validRecords)
55
- // base.fromTinydns(SVCB, validRecords)
56
- })
package/test/tinydns.js DELETED
@@ -1,163 +0,0 @@
1
- import assert from 'assert'
2
-
3
- import * as TINYDNS from '../lib/tinydns.js'
4
-
5
- describe('TINYDNS', function () {
6
- const b64cases = {
7
- '0sAQPeOwAGDPLrDebL1q5Lg8XW9B/d9MnxqlzIYKXhvZPWEHNYGP7AwART/tmkeDNn7HPMtgM6GIwQ4p0KGLfSRoUKbjtPlRVeWYLbsnNXeFU5bchyYef0efYiKlxZdo':
8
- '\\322\\300\\020\\075\\343\\260\\000\\140\\317.\\260\\336l\\275j\\344\\270\\074\\135oA\\375\\337L\\237\\032\\245\\314\\206\\012\\136\\033\\331\\075a\\0075\\201\\217\\354\\014\\000E\\077\\355\\232G\\2036\\176\\307\\074\\313\\1403\\241\\210\\301\\016\\051\\320\\241\\213\\175\\044hP\\246\\343\\264\\371QU\\345\\230-\\273\\0475w\\205S\\226\\334\\207\\046\\036\\177G\\237b\\042\\245\\305\\227h',
9
- }
10
-
11
- describe('base64toOctal', function () {
12
- for (const c in b64cases) {
13
- it('octal escapes a base64 encoded string', async function () {
14
- assert.strictEqual(TINYDNS.base64toOctal(c), b64cases[c])
15
- })
16
- }
17
- })
18
-
19
- describe('octalToBase64', function () {
20
- for (const c in b64cases) {
21
- it('converts octal escaped to base64 encoded string', async function () {
22
- assert.deepStrictEqual(TINYDNS.octalToBase64(b64cases[c]), c)
23
- })
24
- }
25
- })
26
-
27
- describe('escapeOctal', function () {
28
- const rdataRe = new RegExp(/[\r\n\t:\\/]/, 'g')
29
- it('escapes tinydns rdata special chars', async function () {
30
- const e = TINYDNS.escapeOctal(
31
- rdataRe,
32
- 'v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN/nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64/cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn/LAf+3kzW58AjsERpsNCSTD2RquxbnyoR/1wdGKb8cUlD/EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB',
33
- )
34
- assert.strictEqual(
35
- e,
36
- 'v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN\\057nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64\\057cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn\\057LAf+3kzW58AjsERpsNCSTD2RquxbnyoR\\0571wdGKb8cUlD\\057EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB',
37
- )
38
- })
39
-
40
- const specialChars = {
41
- '/': '\\057',
42
- '\\': '\\134',
43
- ':': '\\072',
44
- }
45
-
46
- for (const c of Object.keys(specialChars)) {
47
- it(`escapes tinydns rdata special char ${c}`, function () {
48
- assert.strictEqual(TINYDNS.escapeOctal(rdataRe, c), specialChars[c])
49
- })
50
- }
51
- })
52
-
53
- describe('octaltoChar', function () {
54
- it('converts a string of octal escapes to characters', async () => {})
55
- })
56
-
57
- describe('octalToHex', function () {
58
- it('unescapes octal to hex digits', function () {
59
- assert.strictEqual(
60
- TINYDNS.octalToHex(
61
- '\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\001',
62
- ),
63
- '00000000000000000000000000000001',
64
- )
65
- })
66
- })
67
-
68
- describe('UInt16toOctal', function () {
69
- it('converts a 16-bit number to escaped octal', function () {
70
- assert.strictEqual(TINYDNS.UInt16toOctal(65535), '\\377\\377')
71
- })
72
-
73
- it('converts a 16-bit number to escaped octal', function () {
74
- assert.strictEqual(TINYDNS.UInt16toOctal(1), '\\000\\001')
75
- })
76
- })
77
-
78
- describe('octalToUInt16', function () {
79
- it('converts a 16-bit number to escaped octal', function () {
80
- assert.strictEqual(TINYDNS.octalToUInt16('\\377\\377'), 65535)
81
- })
82
-
83
- it('converts a 16-bit number to escaped octal', function () {
84
- assert.strictEqual(TINYDNS.octalToUInt16('\\000\\001'), 1)
85
- })
86
- })
87
-
88
- describe('UInt32toOctal', function () {
89
- it('converts a 32-bit number to escaped octal', function (done) {
90
- assert.strictEqual(
91
- TINYDNS.UInt32toOctal(2319310648),
92
- '\\212\\075\\337\\070',
93
- )
94
- done()
95
- })
96
-
97
- it('converts a 32-bit number to escaped octal', function (done) {
98
- assert.strictEqual(
99
- TINYDNS.UInt32toOctal(1706988648),
100
- '\\145\\276\\224\\150',
101
- )
102
- done()
103
- })
104
- })
105
-
106
- describe('octalToUInt32', function () {
107
- it('converts escaped octal to 32-bit integer', function () {
108
- assert.strictEqual(
109
- TINYDNS.octalToUInt32('\\145\\276\\224\\150'),
110
- 1706988648,
111
- )
112
- })
113
- })
114
-
115
- describe('unpackDomainName', function () {
116
- it(`extracts domain name from wire format`, async () => {
117
- const r = TINYDNS.unpackDomainName(
118
- '\\006sipdir\\006online\\004lync\\003com\\000',
119
- )
120
- assert.strictEqual(r[0], 'sipdir.online.lync.com.')
121
- assert.strictEqual(r[1], 40)
122
- })
123
- })
124
-
125
- const cases = {
126
- '0.0.0.0': '\\000\\000\\000\\000',
127
- '192.0.2.127': '\\300\\000\\002\\177',
128
- '255.255.255.255': '\\377\\377\\377\\377',
129
- }
130
-
131
- describe('ipv4toOctal', function () {
132
- for (const c in cases) {
133
- it(`converts dotted quad IPv4 to octal escaped integer ${c}`, async () => {
134
- assert.strictEqual(TINYDNS.ipv4toOctal(c), cases[c])
135
- })
136
- }
137
- })
138
-
139
- describe('octalToIPv4', function () {
140
- for (const c in cases) {
141
- it(`converts octal escaped integer to dotted quad IPv4 ${cases[c]}`, async () => {
142
- assert.strictEqual(TINYDNS.octalToIPv4(cases[c]), c)
143
- })
144
- }
145
- })
146
-
147
- describe('packString', function () {
148
- it(`packs a string to wire format`, async () => {
149
- assert.strictEqual(
150
- TINYDNS.packString('matt wuz here'),
151
- '\\015matt wuz here',
152
- )
153
- })
154
- })
155
-
156
- describe('uppackString', function () {
157
- it(`uppacks a string from wire format`, async () => {
158
- assert.deepStrictEqual(TINYDNS.unpackString('\\015matt wuz here'), [
159
- 'matt wuz here',
160
- ])
161
- })
162
- })
163
- })
package/test/tlsa.js DELETED
@@ -1,63 +0,0 @@
1
- import * as base from './base.js'
2
-
3
- import TLSA from '../rr/tlsa.js'
4
-
5
- const defaults = { class: 'IN', ttl: 3600, type: 'TLSA' }
6
-
7
- const validRecords = [
8
- {
9
- ...defaults,
10
- owner: '_443._tcp.www.example.com.',
11
- 'certificate usage': 0,
12
- selector: 0,
13
- 'matching type': 1,
14
- 'certificate association data':
15
- 'd2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971',
16
- testB:
17
- '_443._tcp.www.example.com.\t3600\tIN\tTLSA\t0\t0\t1\td2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971\n',
18
- testT:
19
- ':_443._tcp.www.example.com:52:\\000\\000\\001d2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971:3600::\n',
20
- },
21
- {
22
- ...defaults,
23
- owner: '_443._tcp.www.example.com.',
24
- 'certificate usage': 1,
25
- selector: 1,
26
- 'matching type': 2,
27
- 'certificate association data':
28
- '92003ba34942dc74152e2f2c408d29ec a5a520e7f2e06bb944f4dca346baf63c 1b177615d466f6c4b71c216a50292bd5 8c9ebdd2f74e38fe51ffd48c43326cbc',
29
- testB: `_443._tcp.www.example.com.\t3600\tIN\tTLSA\t1\t1\t2\t92003ba34942dc74152e2f2c408d29ec a5a520e7f2e06bb944f4dca346baf63c 1b177615d466f6c4b71c216a50292bd5 8c9ebdd2f74e38fe51ffd48c43326cbc\n`,
30
- testT:
31
- ':_443._tcp.www.example.com:52:\\001\\001\\00292003ba34942dc74152e2f2c408d29ec a5a520e7f2e06bb944f4dca346baf63c 1b177615d466f6c4b71c216a50292bd5 8c9ebdd2f74e38fe51ffd48c43326cbc:3600::\n',
32
- },
33
- ]
34
-
35
- const invalidRecords = [
36
- {
37
- ...defaults,
38
- owner: 'test.example.com.',
39
- selector: 6, // invalid
40
- msg: /RFC/,
41
- },
42
- ]
43
-
44
- describe('TLSA record', function () {
45
- base.valid(TLSA, validRecords)
46
- base.invalid(TLSA, invalidRecords)
47
-
48
- base.getDescription(TLSA)
49
- base.getRFCs(TLSA, validRecords[0])
50
- base.getFields(TLSA, [
51
- 'certificate usage',
52
- 'selector',
53
- 'matching type',
54
- 'certificate association data',
55
- ])
56
- base.getTypeId(TLSA, 52)
57
-
58
- base.toBind(TLSA, validRecords)
59
- base.toTinydns(TLSA, validRecords)
60
-
61
- base.fromBind(TLSA, validRecords)
62
- base.fromTinydns(TLSA, validRecords)
63
- })
package/test/txt.js DELETED
@@ -1,82 +0,0 @@
1
- import assert from 'assert'
2
-
3
- import * as base from './base.js'
4
-
5
- import TXT from '../rr/txt.js'
6
-
7
- const validRecords = [
8
- {
9
- owner: 'oct2021._domainkey.example.com.',
10
- ttl: 86400,
11
- type: 'TXT',
12
- data: 'v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN/nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64/cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn/LAf+3kzW58AjsERpsNCSTD2RquxbnyoR/1wdGKb8cUlD/EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB',
13
- testB:
14
- 'oct2021._domainkey.example.com.\t86400\tIN\tTXT\t"v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN/nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64/cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob" "4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn/LAf+3kzW58AjsERpsNCSTD2RquxbnyoR/1wdGKb8cUlD/EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB"\n',
15
- testT:
16
- "'oct2021._domainkey.example.com:v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN\\057nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64\\057cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn\\057LAf+3kzW58AjsERpsNCSTD2RquxbnyoR\\0571wdGKb8cUlD\\057EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB:86400::\n",
17
- },
18
- {
19
- owner: 'oct2021._domainkey.example.com.',
20
- ttl: 86400,
21
- type: 'TXT',
22
- data: [
23
- 'v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN/nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64/cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob',
24
- '4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn/LAf+3kzW58AjsERpsNCSTD2RquxbnyoR/1wdGKb8cUlD/EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB',
25
- ],
26
- testB:
27
- 'oct2021._domainkey.example.com.\t86400\tIN\tTXT\t"v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN/nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64/cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob" "4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn/LAf+3kzW58AjsERpsNCSTD2RquxbnyoR/1wdGKb8cUlD/EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB"\n',
28
- testT:
29
- "'oct2021._domainkey.example.com:v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN\\057nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64\\057cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn\\057LAf+3kzW58AjsERpsNCSTD2RquxbnyoR\\0571wdGKb8cUlD\\057EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB:86400::\n",
30
- },
31
- {
32
- owner: 'example.com.',
33
- ttl: 86400,
34
- type: 'TXT',
35
- data: 'v=spf1 mx a include:mx.example.com -all',
36
- testB:
37
- 'example.com.\t86400\tIN\tTXT\t"v=spf1 mx a include:mx.example.com -all"\n',
38
- testT: "'example.com:v=spf1 mx a include\\072mx.example.com -all:86400::\n",
39
- },
40
- ]
41
-
42
- const invalidRecords = []
43
-
44
- describe('TXT record', function () {
45
- base.valid(TXT, validRecords)
46
- base.invalid(TXT, invalidRecords)
47
-
48
- base.getDescription(TXT)
49
- base.getRFCs(TXT, validRecords[0])
50
- base.getFields(TXT, ['data'])
51
- base.getTypeId(TXT, 16)
52
-
53
- base.toBind(TXT, validRecords)
54
- base.toTinydns(TXT, validRecords)
55
-
56
- base.fromTinydns(TXT, validRecords)
57
- base.fromBind(TXT, validRecords)
58
-
59
- it(`imports tinydns TXT (generic) record`, async function () {
60
- const val = {
61
- owner: 'nov2021._domainkey.example.com.',
62
- type: 'TXT',
63
- data: 'v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN/nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64/cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn/LAf+3kzW58AjsERpsNCSTD2RquxbnyoR/1wdGKb8cUlD/EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB',
64
- ttl: 86400,
65
- testB:
66
- 'nov2021._domainkey.example.com.\t86400\tIN\tTXT\t"v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN/nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64/cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob" "4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn/LAf+3kzW58AjsERpsNCSTD2RquxbnyoR/1wdGKb8cUlD/EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB"\n',
67
- testT:
68
- ':nov2021._domainkey.example.com:16:\\622v=DKIM1;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoyUzGOTSOmakY8BcxXgi0mN\\057nFegLBPs7aaGQUtjHfa8yUrt9T2j6GSXgdjLuG3R43WjePQv3RHzc+bwwOkdw0XDOXiztn5mhrlaflbVr5PMSTrv64\\057cpFQKLtgQx8Vgqp7Dh3jw13rLomRTqJFgMrMHdhIibZEa69gtuAfDqoeXo6QDSGk5JuBAeRHEH27FriHulg5ob4F4lmh7fMFVsDGkQEF6jaIVYqvRjDyyQed3R3aTJX3fpb3QrtRqvfn\\057LAf+3kzW58AjsERpsNCSTD2RquxbnyoR\\0571wdGKb8cUlD\\057EXvqtvpVnOzHeSeMEqex3kQI8HOGsEehWZlKd+GqwIDAQAB:86400\n',
69
- }
70
-
71
- const r = new TXT({ tinyline: val.testT })
72
- if (process.env.DEBUG) console.dir(r)
73
- for (const f of r.getFields()) {
74
- if (f === 'class') continue
75
- assert.deepStrictEqual(
76
- r.get(f),
77
- val[f],
78
- `${f}: ${r.get(f)} !== ${val[f]}`,
79
- )
80
- }
81
- })
82
- })