@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.
- package/CHANGELOG.md +21 -2
- package/README.md +2 -13
- package/package.json +15 -9
- package/rr/a.js +1 -3
- package/rr/aaaa.js +6 -7
- package/rr/caa.js +13 -2
- package/rr/cname.js +1 -3
- package/rr/dname.js +1 -3
- package/rr/dnskey.js +38 -5
- package/rr/ds.js +13 -2
- package/rr/ipseckey.js +26 -10
- package/rr/key.js +14 -2
- package/rr/mx.js +1 -3
- package/rr/naptr.js +5 -1
- package/rr/rrsig.js +13 -2
- package/rr/smimea.js +29 -3
- package/rr/srv.js +1 -3
- package/rr/sshfp.js +20 -3
- package/rr/tlsa.js +29 -3
- package/rr.js +15 -6
- package/.codeclimate.yml +0 -25
- package/.github/FUNDING.yml +0 -3
- package/.github/workflows/ci.yml +0 -43
- package/.github/workflows/codeql.yml +0 -14
- package/.github/workflows/publish.yml +0 -16
- package/.gitmodules +0 -3
- package/.prettierrc.yml +0 -3
- package/DEVELOP.md +0 -9
- package/eslint.config.mjs +0 -41
- package/test/a.js +0 -75
- package/test/aaaa.js +0 -86
- package/test/base.js +0 -148
- package/test/caa.js +0 -111
- package/test/cert.js +0 -48
- package/test/cname.js +0 -40
- package/test/dname.js +0 -57
- package/test/dnskey.js +0 -45
- package/test/ds.js +0 -45
- package/test/fake.js +0 -34
- package/test/hinfo.js +0 -80
- package/test/https.js +0 -56
- package/test/ipseckey.js +0 -141
- package/test/key.js +0 -36
- package/test/loc.js +0 -75
- package/test/mx.js +0 -78
- package/test/naptr.js +0 -47
- package/test/ns.js +0 -56
- package/test/nsec.js +0 -37
- package/test/nsec3.js +0 -47
- package/test/nsec3param.js +0 -23
- package/test/nxt.js +0 -37
- package/test/openpgpkey.js +0 -85
- package/test/ptr.js +0 -56
- package/test/rr.js +0 -212
- package/test/smimea.js +0 -51
- package/test/soa.js +0 -99
- package/test/spf.js +0 -51
- package/test/srv.js +0 -101
- package/test/sshfp.js +0 -69
- package/test/svcb.js +0 -56
- package/test/tinydns.js +0 -163
- package/test/tlsa.js +0 -63
- package/test/txt.js +0 -82
- package/test/uri.js +0 -65
package/test/naptr.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import * as base from './base.js'
|
|
2
|
-
|
|
3
|
-
import NAPTR from '../rr/naptr.js'
|
|
4
|
-
|
|
5
|
-
const validRecords = [
|
|
6
|
-
{
|
|
7
|
-
owner: 'cid.urn.arpa.',
|
|
8
|
-
ttl: 86400,
|
|
9
|
-
class: 'IN',
|
|
10
|
-
type: 'NAPTR',
|
|
11
|
-
order: 100,
|
|
12
|
-
preference: 10,
|
|
13
|
-
flags: '',
|
|
14
|
-
service: '',
|
|
15
|
-
regexp: '!^urn:cid:.+@([^\\.]+\\.)(.*)$!\x02!i',
|
|
16
|
-
replacement: '.',
|
|
17
|
-
testB:
|
|
18
|
-
'cid.urn.arpa.\t86400\tIN\tNAPTR\t100\t10\t""\t""\t"!^urn:cid:.+@([^\\.]+\\.)(.*)$!\x02!i"\t.\n',
|
|
19
|
-
testT:
|
|
20
|
-
':cid.urn.arpa:35:\\000\\144\\000\\012\\000\\000\\040!^urn\\072cid\\072.+@([^\\134.]+\\134.)(.*)$!\x02!i\\001.\\000:86400::\n',
|
|
21
|
-
},
|
|
22
|
-
]
|
|
23
|
-
|
|
24
|
-
const invalidRecords = []
|
|
25
|
-
|
|
26
|
-
describe('NAPTR record', function () {
|
|
27
|
-
base.valid(NAPTR, validRecords)
|
|
28
|
-
base.invalid(NAPTR, invalidRecords)
|
|
29
|
-
|
|
30
|
-
base.getDescription(NAPTR)
|
|
31
|
-
base.getRFCs(NAPTR, validRecords[0])
|
|
32
|
-
base.getFields(NAPTR, [
|
|
33
|
-
'order',
|
|
34
|
-
'preference',
|
|
35
|
-
'flags',
|
|
36
|
-
'service',
|
|
37
|
-
'regexp',
|
|
38
|
-
'replacement',
|
|
39
|
-
])
|
|
40
|
-
base.getTypeId(NAPTR, 35)
|
|
41
|
-
|
|
42
|
-
base.toBind(NAPTR, validRecords)
|
|
43
|
-
base.toTinydns(NAPTR, validRecords)
|
|
44
|
-
|
|
45
|
-
base.fromBind(NAPTR, validRecords)
|
|
46
|
-
base.fromTinydns(NAPTR, validRecords)
|
|
47
|
-
})
|
package/test/ns.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import assert from 'assert'
|
|
2
|
-
|
|
3
|
-
import * as base from './base.js'
|
|
4
|
-
|
|
5
|
-
import NS from '../rr/ns.js'
|
|
6
|
-
|
|
7
|
-
const defaults = { class: 'IN', ttl: 3600, type: 'NS' }
|
|
8
|
-
|
|
9
|
-
const validRecords = [
|
|
10
|
-
{
|
|
11
|
-
...defaults,
|
|
12
|
-
owner: 'example.com.',
|
|
13
|
-
dname: 'ns1.example.com.',
|
|
14
|
-
testB: 'example.com.\t3600\tIN\tNS\tns1.example.com.\n',
|
|
15
|
-
testT: '&example.com::ns1.example.com:3600::\n',
|
|
16
|
-
},
|
|
17
|
-
]
|
|
18
|
-
|
|
19
|
-
const invalidRecords = [
|
|
20
|
-
{
|
|
21
|
-
...defaults,
|
|
22
|
-
owner: 'example.com.',
|
|
23
|
-
dname: '1.2.3.4', // FQDN required
|
|
24
|
-
msg: /dname must be fully qualified/,
|
|
25
|
-
},
|
|
26
|
-
]
|
|
27
|
-
|
|
28
|
-
describe('NS record', function () {
|
|
29
|
-
base.valid(NS, validRecords)
|
|
30
|
-
base.invalid(NS, invalidRecords)
|
|
31
|
-
|
|
32
|
-
base.getDescription(NS)
|
|
33
|
-
base.getRFCs(NS, validRecords[0])
|
|
34
|
-
base.getFields(NS, ['dname'])
|
|
35
|
-
base.getTypeId(NS, 2)
|
|
36
|
-
|
|
37
|
-
base.toBind(NS, validRecords)
|
|
38
|
-
base.toTinydns(NS, validRecords)
|
|
39
|
-
|
|
40
|
-
base.fromBind(NS, validRecords)
|
|
41
|
-
base.fromTinydns(NS, validRecords)
|
|
42
|
-
|
|
43
|
-
for (const val of validRecords) {
|
|
44
|
-
it.skip(`imports tinydns NS (&) record (${val.owner})`, function () {
|
|
45
|
-
const r = new NS({ tinyline: val.testT })
|
|
46
|
-
if (process.env.DEBUG) console.dir(r)
|
|
47
|
-
for (const f of ['owner', 'dname', 'ttl']) {
|
|
48
|
-
assert.deepStrictEqual(
|
|
49
|
-
r.get(f),
|
|
50
|
-
val[f],
|
|
51
|
-
`${f}: ${r.get(f)} !== ${val[f]}`,
|
|
52
|
-
)
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
})
|
package/test/nsec.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import * as base from './base.js'
|
|
2
|
-
|
|
3
|
-
import NSEC from '../rr/nsec.js'
|
|
4
|
-
|
|
5
|
-
const validRecords = [
|
|
6
|
-
{
|
|
7
|
-
owner: 'alfa.example.com.',
|
|
8
|
-
ttl: 86400,
|
|
9
|
-
class: 'IN',
|
|
10
|
-
type: 'NSEC',
|
|
11
|
-
'next domain': 'host.example.com.',
|
|
12
|
-
'type bit maps': 'A MX RRSIG NSEC TYPE1234',
|
|
13
|
-
testB: `alfa.example.com.\t86400\tIN\tNSEC\thost.example.com.\tA MX RRSIG NSEC TYPE1234\n`,
|
|
14
|
-
// testT : '\n',
|
|
15
|
-
},
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
const invalidRecords = [
|
|
19
|
-
// {
|
|
20
|
-
// },
|
|
21
|
-
]
|
|
22
|
-
|
|
23
|
-
describe('NSEC record', function () {
|
|
24
|
-
base.valid(NSEC, validRecords)
|
|
25
|
-
base.invalid(NSEC, invalidRecords, { ttl: 3600 })
|
|
26
|
-
|
|
27
|
-
base.getDescription(NSEC)
|
|
28
|
-
base.getRFCs(NSEC, validRecords[0])
|
|
29
|
-
base.getFields(NSEC, ['next domain', 'type bit maps'])
|
|
30
|
-
base.getTypeId(NSEC, 47)
|
|
31
|
-
|
|
32
|
-
base.toBind(NSEC, validRecords)
|
|
33
|
-
// base.toTinydns(NSEC, validRecords)
|
|
34
|
-
|
|
35
|
-
base.fromBind(NSEC, validRecords)
|
|
36
|
-
// base.fromTinydns(NSEC, validRecords)
|
|
37
|
-
})
|
package/test/nsec3.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import * as base from './base.js'
|
|
2
|
-
|
|
3
|
-
import NSEC3 from '../rr/nsec3.js'
|
|
4
|
-
|
|
5
|
-
const defaults = { class: 'IN', ttl: 3600, type: 'NSEC3' }
|
|
6
|
-
|
|
7
|
-
const validRecords = [
|
|
8
|
-
{
|
|
9
|
-
...defaults,
|
|
10
|
-
owner: 'test.example.com.',
|
|
11
|
-
'hash algorithm': 1,
|
|
12
|
-
flags: 1,
|
|
13
|
-
iterations: 12,
|
|
14
|
-
salt: 'aabbccdd',
|
|
15
|
-
'type bit maps': 'A\tRRSIG',
|
|
16
|
-
'next hashed owner name': '2vptu5timamqttgl4luu9kg21e0aor3s',
|
|
17
|
-
testB:
|
|
18
|
-
'test.example.com.\t3600\tIN\tNSEC3\t1\t1\t12\taabbccdd\t(2vptu5timamqttgl4luu9kg21e0aor3s\tA\tRRSIG)\n',
|
|
19
|
-
testT:
|
|
20
|
-
':test.example.com:50:\\001\\001\\000\\014aabbccdd2vptu5timamqttgl4luu9kg21e0aor3sA\\011RRSIG:3600::\n',
|
|
21
|
-
},
|
|
22
|
-
]
|
|
23
|
-
|
|
24
|
-
const invalidRecords = []
|
|
25
|
-
|
|
26
|
-
describe('NSEC3 record', function () {
|
|
27
|
-
base.valid(NSEC3, validRecords)
|
|
28
|
-
base.invalid(NSEC3, invalidRecords, { ttl: 3600 })
|
|
29
|
-
|
|
30
|
-
base.getDescription(NSEC3)
|
|
31
|
-
base.getRFCs(NSEC3, validRecords[0])
|
|
32
|
-
base.getFields(NSEC3, [
|
|
33
|
-
'hash algorithm',
|
|
34
|
-
'flags',
|
|
35
|
-
'iterations',
|
|
36
|
-
'salt',
|
|
37
|
-
'next hashed owner name',
|
|
38
|
-
'type bit maps',
|
|
39
|
-
])
|
|
40
|
-
base.getTypeId(NSEC3, 50)
|
|
41
|
-
|
|
42
|
-
base.toBind(NSEC3, validRecords)
|
|
43
|
-
base.toTinydns(NSEC3, validRecords)
|
|
44
|
-
|
|
45
|
-
base.fromBind(NSEC3, validRecords)
|
|
46
|
-
// base.fromTinydns(NSEC3, validRecords)
|
|
47
|
-
})
|
package/test/nsec3param.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import * as base from './base.js'
|
|
2
|
-
|
|
3
|
-
import NSEC3PARAM from '../rr/nsec3param.js'
|
|
4
|
-
|
|
5
|
-
const validRecords = []
|
|
6
|
-
|
|
7
|
-
const invalidRecords = []
|
|
8
|
-
|
|
9
|
-
describe('NSEC3PARAM record', function () {
|
|
10
|
-
base.valid(NSEC3PARAM, validRecords)
|
|
11
|
-
base.invalid(NSEC3PARAM, invalidRecords, { ttl: 3600 })
|
|
12
|
-
|
|
13
|
-
base.getDescription(NSEC3PARAM)
|
|
14
|
-
base.getRFCs(NSEC3PARAM, validRecords[0])
|
|
15
|
-
base.getFields(NSEC3PARAM, ['hash algorithm', 'flags', 'iterations', 'salt'])
|
|
16
|
-
base.getTypeId(NSEC3PARAM, 51)
|
|
17
|
-
|
|
18
|
-
// base.toBind(NSEC3PARAM, validRecords)
|
|
19
|
-
// base.toTinydns(NSEC3PARAM, validRecords)
|
|
20
|
-
|
|
21
|
-
// base.fromBind(NSEC3PARAM, validRecords)
|
|
22
|
-
// base.fromTinydns(NSEC3PARAM, validRecords)
|
|
23
|
-
})
|
package/test/nxt.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import * as base from './base.js'
|
|
2
|
-
|
|
3
|
-
import NXT from '../rr/nxt.js'
|
|
4
|
-
|
|
5
|
-
const validRecords = [
|
|
6
|
-
{
|
|
7
|
-
owner: 'big.example.com.',
|
|
8
|
-
ttl: 86400,
|
|
9
|
-
class: 'IN',
|
|
10
|
-
type: 'NXT',
|
|
11
|
-
'next domain': 'medium.example.com.',
|
|
12
|
-
'type bit map': 'A SIG NXT',
|
|
13
|
-
testB: `big.example.com.\t86400\tIN\tNXT\tmedium.example.com.\tA SIG NXT\n`,
|
|
14
|
-
// testT : '\n',
|
|
15
|
-
},
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
const invalidRecords = [
|
|
19
|
-
// {
|
|
20
|
-
// },
|
|
21
|
-
]
|
|
22
|
-
|
|
23
|
-
describe('NXT record', function () {
|
|
24
|
-
base.valid(NXT, validRecords)
|
|
25
|
-
base.invalid(NXT, invalidRecords, { ttl: 3600 })
|
|
26
|
-
|
|
27
|
-
base.getDescription(NXT)
|
|
28
|
-
base.getRFCs(NXT, validRecords[0])
|
|
29
|
-
base.getFields(NXT, ['next domain', 'type bit map'])
|
|
30
|
-
base.getTypeId(NXT, 30)
|
|
31
|
-
|
|
32
|
-
base.toBind(NXT, validRecords)
|
|
33
|
-
// base.toTinydns(NXT, validRecords)
|
|
34
|
-
|
|
35
|
-
base.fromBind(NXT, validRecords)
|
|
36
|
-
// base.fromTinydns(NXT, validRecords)
|
|
37
|
-
})
|
package/test/openpgpkey.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import * as base from './base.js'
|
|
2
|
-
|
|
3
|
-
import OPENPGPKEY from '../rr/openpgpkey.js'
|
|
4
|
-
|
|
5
|
-
const validRecords = [
|
|
6
|
-
{
|
|
7
|
-
owner: 'matt.example.com.',
|
|
8
|
-
ttl: 86400,
|
|
9
|
-
class: 'IN',
|
|
10
|
-
type: 'OPENPGPKEY',
|
|
11
|
-
'public key': `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
12
|
-
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
-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
-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
-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
-
g1nMRypoL25hPOtWoZSKhXRBWZfv5HcoRTfNfl8OmvVSzlper0noqAcgSKmzSqoS
|
|
17
|
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
Fm+55fI6UUpJooq9BTZrcSkCgOXXakQIVBSHic9dzfKK1aZ7s/pzsIRXRRfQ4b4r
|
|
48
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
z/tRfqHp3skczemIZH8xNBKq6LF4JBeR4RHbWdY+FdZf0YOlW3wjnaZK1waACkDQ
|
|
58
|
-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
-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
|
|
60
|
-
0VFBNRBmWIMXRAtmrzPyNp/nD7BymAQ=
|
|
61
|
-
=kezp
|
|
62
|
-
-----END PGP PUBLIC KEY BLOCK-----`,
|
|
63
|
-
testB:
|
|
64
|
-
'matt.example.com.\t86400\tIN\tOPENPGPKEY\t-----BEGIN PGP PUBLIC KEY BLOCK-----\n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\n0VFBNRBmWIMXRAtmrzPyNp/nD7BymAQ=\n=kezp\n-----END PGP PUBLIC KEY BLOCK-----\n',
|
|
65
|
-
// testT : '',
|
|
66
|
-
},
|
|
67
|
-
]
|
|
68
|
-
|
|
69
|
-
const invalidRecords = []
|
|
70
|
-
|
|
71
|
-
describe('OPENPGPKEY record', function () {
|
|
72
|
-
base.valid(OPENPGPKEY, validRecords)
|
|
73
|
-
base.invalid(OPENPGPKEY, invalidRecords, { ttl: 3600 })
|
|
74
|
-
|
|
75
|
-
base.getDescription(OPENPGPKEY)
|
|
76
|
-
base.getRFCs(OPENPGPKEY)
|
|
77
|
-
base.getFields(OPENPGPKEY, ['public key'])
|
|
78
|
-
base.getTypeId(OPENPGPKEY, 61)
|
|
79
|
-
|
|
80
|
-
base.toBind(OPENPGPKEY, validRecords)
|
|
81
|
-
// base.toTinydns(OPENPGPKEY, validRecords)
|
|
82
|
-
|
|
83
|
-
base.fromBind(OPENPGPKEY, validRecords)
|
|
84
|
-
// base.fromTinydns(OPENPGPKEY, validRecords)
|
|
85
|
-
})
|
package/test/ptr.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import assert from 'assert'
|
|
2
|
-
|
|
3
|
-
import * as base from './base.js'
|
|
4
|
-
|
|
5
|
-
import PTR from '../rr/ptr.js'
|
|
6
|
-
|
|
7
|
-
const defaults = { class: 'IN', ttl: 86400, type: 'PTR' }
|
|
8
|
-
|
|
9
|
-
const validRecords = [
|
|
10
|
-
{
|
|
11
|
-
...defaults,
|
|
12
|
-
owner: '2.2.0.192.in-addr.arpa.',
|
|
13
|
-
dname: 'dhcp.example.com.',
|
|
14
|
-
testB: '2.2.0.192.in-addr.arpa.\t86400\tIN\tPTR\tdhcp.example.com.\n',
|
|
15
|
-
testT: '^2.2.0.192.in-addr.arpa:dhcp.example.com:86400::\n',
|
|
16
|
-
},
|
|
17
|
-
]
|
|
18
|
-
|
|
19
|
-
const invalidRecords = [
|
|
20
|
-
{
|
|
21
|
-
...defaults,
|
|
22
|
-
owner: 'example.com.',
|
|
23
|
-
dname: '192.0.2.4', // FQDN required
|
|
24
|
-
msg: /dname must be fully qualified/,
|
|
25
|
-
},
|
|
26
|
-
]
|
|
27
|
-
|
|
28
|
-
describe('PTR record', function () {
|
|
29
|
-
base.valid(PTR, validRecords)
|
|
30
|
-
base.invalid(PTR, invalidRecords)
|
|
31
|
-
|
|
32
|
-
base.getDescription(PTR)
|
|
33
|
-
base.getRFCs(PTR, validRecords[0])
|
|
34
|
-
base.getFields(PTR, ['dname'])
|
|
35
|
-
base.getTypeId(PTR, 12)
|
|
36
|
-
|
|
37
|
-
base.toBind(PTR, validRecords)
|
|
38
|
-
base.toTinydns(PTR, validRecords)
|
|
39
|
-
|
|
40
|
-
base.fromBind(PTR, validRecords)
|
|
41
|
-
base.fromTinydns(PTR, validRecords)
|
|
42
|
-
|
|
43
|
-
for (const val of validRecords) {
|
|
44
|
-
it.skip(`imports tinydns PTR (^) record (${val.owner})`, async function () {
|
|
45
|
-
const r = new PTR({ tinyline: val.testT })
|
|
46
|
-
if (process.env.DEBUG) console.dir(r)
|
|
47
|
-
for (const f of ['owner', 'dname', 'ttl']) {
|
|
48
|
-
assert.deepStrictEqual(
|
|
49
|
-
r.get(f),
|
|
50
|
-
val[f],
|
|
51
|
-
`${f}: ${r.get(f)} !== ${val[f]}`,
|
|
52
|
-
)
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
})
|
package/test/rr.js
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import assert from 'assert'
|
|
2
|
-
|
|
3
|
-
import RR from '../rr.js'
|
|
4
|
-
import A from '../rr/a.js'
|
|
5
|
-
|
|
6
|
-
const cases = [
|
|
7
|
-
// { name: 'RR class', obj: RR, expect: [ 'owner', 'ttl', 'class', 'type' ] },
|
|
8
|
-
{
|
|
9
|
-
name: 'RR instance',
|
|
10
|
-
obj: new RR(null),
|
|
11
|
-
expect: ['owner', 'ttl', 'class', 'type'],
|
|
12
|
-
},
|
|
13
|
-
// { name: 'A class', obj: A, expect: [ 'owner', 'ttl', 'class', 'type', 'address' ] },
|
|
14
|
-
{
|
|
15
|
-
name: 'A instance',
|
|
16
|
-
obj: new A(null),
|
|
17
|
-
expect: ['owner', 'ttl', 'class', 'type', 'address'],
|
|
18
|
-
},
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
for (const c of cases) {
|
|
22
|
-
describe(`${c.name}`, function () {
|
|
23
|
-
describe('getFields', function () {
|
|
24
|
-
it('gets expected fields', async function () {
|
|
25
|
-
assert.deepStrictEqual(c.obj.getFields(), c.expect)
|
|
26
|
-
})
|
|
27
|
-
})
|
|
28
|
-
})
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
describe('RR', function () {
|
|
32
|
-
const r = new RR(null)
|
|
33
|
-
|
|
34
|
-
describe('setTtl', function () {
|
|
35
|
-
const invalid = [-1, -4, -299, 2147483648, undefined]
|
|
36
|
-
for (const i of invalid) {
|
|
37
|
-
it(`throws on invalid TTL: ${i}`, async function () {
|
|
38
|
-
try {
|
|
39
|
-
assert.deepStrictEqual(r.setTtl(i), false)
|
|
40
|
-
} catch (e) {
|
|
41
|
-
assert.ok(e.message)
|
|
42
|
-
console.error(e.message)
|
|
43
|
-
}
|
|
44
|
-
})
|
|
45
|
-
}
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
describe('setClass', function () {
|
|
49
|
-
for (const i of ['IN', 'CH', 'ANY', 'NONE']) {
|
|
50
|
-
it(`accepts valid class: ${i}`, async function () {
|
|
51
|
-
r.setClass(i)
|
|
52
|
-
assert.deepEqual(r.get('class'), i)
|
|
53
|
-
})
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
for (const i of ['matt', 'in', 0]) {
|
|
57
|
-
it(`throws on invalid class: ${i}`, async function () {
|
|
58
|
-
try {
|
|
59
|
-
assert.strictEqual(r.setClass(i), false)
|
|
60
|
-
} catch (e) {
|
|
61
|
-
assert.ok(e.message)
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
}
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
describe('fullyQualify', function () {
|
|
68
|
-
it('does nothing to empty hostname', async () => {
|
|
69
|
-
assert.equal(r.fullyQualify(''), '')
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
it('fully qualifies a valid hostname', async () => {
|
|
73
|
-
assert.equal(r.fullyQualify('example.com'), 'example.com.')
|
|
74
|
-
})
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
describe('getFQDN', function () {
|
|
78
|
-
it('adds a period to hostnames', async () => {
|
|
79
|
-
const rr = new RR(null)
|
|
80
|
-
rr.set('owner', 'www.example.com') // bypass FQ check
|
|
81
|
-
assert.equal(rr.getFQDN('owner'), 'www.example.com.')
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
it('reduces origin on request', async () => {
|
|
85
|
-
const rr = new RR(null)
|
|
86
|
-
const zone_opts = { origin: 'example.com.', hide: { origin: true } }
|
|
87
|
-
rr.setOwner('www.example.com.')
|
|
88
|
-
assert.equal(rr.getFQDN('owner', zone_opts), 'www')
|
|
89
|
-
})
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
describe('isFullyQualified', function () {
|
|
93
|
-
it('should detect FQDNs', async function () {
|
|
94
|
-
assert.deepEqual(
|
|
95
|
-
r.isFullyQualified('$type', '$field', 'host.example.com.'),
|
|
96
|
-
true,
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
try {
|
|
100
|
-
assert.deepEqual(
|
|
101
|
-
r.isFullyQualified('$type', '$field', 'host.example.com'),
|
|
102
|
-
false,
|
|
103
|
-
)
|
|
104
|
-
} catch (e) {
|
|
105
|
-
assert.ok(/must be fully qualified/.test(e.message))
|
|
106
|
-
}
|
|
107
|
-
})
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
describe('is8bitInt', function () {
|
|
111
|
-
const valid = [1, 2, 255]
|
|
112
|
-
const invalid = [-1, 'a', new Date(), undefined, 256]
|
|
113
|
-
|
|
114
|
-
for (const i of valid) {
|
|
115
|
-
it(`returns true for valid int: ${i}`, async function () {
|
|
116
|
-
assert.strictEqual(r.is8bitInt('test', 'field', i), true)
|
|
117
|
-
})
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
for (const i of invalid) {
|
|
121
|
-
it(`throws on invalid int: ${i}`, async function () {
|
|
122
|
-
try {
|
|
123
|
-
assert.strictEqual(r.is8bitInt('test', 'field', i), false)
|
|
124
|
-
} catch (e) {
|
|
125
|
-
assert.strictEqual(
|
|
126
|
-
e.message,
|
|
127
|
-
'test field must be a 8-bit integer (in the range 0-255)',
|
|
128
|
-
)
|
|
129
|
-
}
|
|
130
|
-
})
|
|
131
|
-
}
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
describe('is16bitInt', function () {
|
|
135
|
-
const valid = [0, 1, 2, 55555, 65535]
|
|
136
|
-
const invalid = ['a', new Date(), undefined, 65536]
|
|
137
|
-
|
|
138
|
-
for (const i of valid) {
|
|
139
|
-
it(`returns true for valid int: ${i}`, async function () {
|
|
140
|
-
assert.strictEqual(r.is16bitInt('test', 'field', i), true)
|
|
141
|
-
})
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
for (const i of invalid) {
|
|
145
|
-
it(`throws on invalid int: ${i}`, async function () {
|
|
146
|
-
try {
|
|
147
|
-
assert.strictEqual(r.is16bitInt('test', 'field', i), false)
|
|
148
|
-
} catch (e) {
|
|
149
|
-
assert.strictEqual(
|
|
150
|
-
e.message,
|
|
151
|
-
'test field must be a 16-bit integer (in the range 0-65535)',
|
|
152
|
-
)
|
|
153
|
-
}
|
|
154
|
-
})
|
|
155
|
-
}
|
|
156
|
-
})
|
|
157
|
-
|
|
158
|
-
describe('is32bitInt', function () {
|
|
159
|
-
const valid = [1, 2, 55555, 2147483647]
|
|
160
|
-
const invalid = ['a', new Date(), undefined, 2147483648]
|
|
161
|
-
|
|
162
|
-
for (const i of valid) {
|
|
163
|
-
it(`returns true for valid int: ${i}`, async function () {
|
|
164
|
-
assert.strictEqual(r.is32bitInt('test', 'field', i), true)
|
|
165
|
-
})
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
for (const i of invalid) {
|
|
169
|
-
it(`throws on invalid int: ${i}`, async function () {
|
|
170
|
-
try {
|
|
171
|
-
assert.strictEqual(r.is32bitInt('test', 'field', i), false)
|
|
172
|
-
} catch (e) {
|
|
173
|
-
assert.strictEqual(
|
|
174
|
-
e.message,
|
|
175
|
-
'test field must be a 32-bit integer (in the range 0-2147483647)',
|
|
176
|
-
)
|
|
177
|
-
}
|
|
178
|
-
})
|
|
179
|
-
}
|
|
180
|
-
})
|
|
181
|
-
|
|
182
|
-
describe('getQuoted', function () {
|
|
183
|
-
it('returns a quoted string', async () => {
|
|
184
|
-
r.set('cpu', '"already quoted"')
|
|
185
|
-
assert.equal(r.get('cpu'), '"already quoted"')
|
|
186
|
-
assert.equal(r.getQuoted('cpu'), '"already quoted"') // doesn't double quote
|
|
187
|
-
})
|
|
188
|
-
|
|
189
|
-
it("doesn't double quote a quoted string", async () => {
|
|
190
|
-
r.set('cpu', '"already quoted"')
|
|
191
|
-
assert.equal(r.getQuoted('cpu'), '"already quoted"')
|
|
192
|
-
})
|
|
193
|
-
})
|
|
194
|
-
|
|
195
|
-
describe('isQuoted', function () {
|
|
196
|
-
it('detects a quoted strings', async function () {
|
|
197
|
-
assert.deepEqual(r.isQuoted('"yes, this is"'), true)
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
it('detects non-quoted strings', async function () {
|
|
201
|
-
assert.deepEqual(r.isQuoted('nope, not quoted'), false)
|
|
202
|
-
})
|
|
203
|
-
})
|
|
204
|
-
|
|
205
|
-
describe('isValidHostname', function () {
|
|
206
|
-
for (const n of ['x', '2x', '*', '*.something']) {
|
|
207
|
-
it(`passes name: ${n}`, async function () {
|
|
208
|
-
assert.deepEqual(r.isValidHostname(n), true)
|
|
209
|
-
})
|
|
210
|
-
}
|
|
211
|
-
})
|
|
212
|
-
})
|
package/test/smimea.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import * as base from './base.js'
|
|
2
|
-
|
|
3
|
-
import SMIMEA from '../rr/smimea.js'
|
|
4
|
-
|
|
5
|
-
const defaults = { class: 'IN', ttl: 3600, type: 'SMIMEA' }
|
|
6
|
-
|
|
7
|
-
const validRecords = [
|
|
8
|
-
{
|
|
9
|
-
...defaults,
|
|
10
|
-
owner: '_443._tcp.www.example.com.',
|
|
11
|
-
ttl: 3600,
|
|
12
|
-
'certificate usage': 0,
|
|
13
|
-
selector: 0,
|
|
14
|
-
'matching type': 1,
|
|
15
|
-
'certificate association data':
|
|
16
|
-
'( d2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971 )',
|
|
17
|
-
testB:
|
|
18
|
-
'_443._tcp.www.example.com.\t3600\tIN\tSMIMEA\t0\t0\t1\t( d2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971 )\n',
|
|
19
|
-
// testT : '',
|
|
20
|
-
},
|
|
21
|
-
]
|
|
22
|
-
|
|
23
|
-
const invalidRecords = [
|
|
24
|
-
{
|
|
25
|
-
...defaults,
|
|
26
|
-
owner: 'test.example.com.',
|
|
27
|
-
selector: 6, // invalid
|
|
28
|
-
msg: /certificate usage invalid/,
|
|
29
|
-
},
|
|
30
|
-
]
|
|
31
|
-
|
|
32
|
-
describe('SMIMEA record', function () {
|
|
33
|
-
base.valid(SMIMEA, validRecords)
|
|
34
|
-
base.invalid(SMIMEA, invalidRecords)
|
|
35
|
-
|
|
36
|
-
base.getDescription(SMIMEA)
|
|
37
|
-
base.getRFCs(SMIMEA, validRecords[0])
|
|
38
|
-
base.getFields(SMIMEA, [
|
|
39
|
-
'certificate usage',
|
|
40
|
-
'selector',
|
|
41
|
-
'matching type',
|
|
42
|
-
'certificate association data',
|
|
43
|
-
])
|
|
44
|
-
base.getTypeId(SMIMEA, 53)
|
|
45
|
-
|
|
46
|
-
base.toBind(SMIMEA, validRecords)
|
|
47
|
-
// base.toTinydns(SMIMEA, validRecords)
|
|
48
|
-
|
|
49
|
-
base.fromBind(SMIMEA, validRecords)
|
|
50
|
-
// base.fromTinydns(SMIMEA, validRecords)
|
|
51
|
-
})
|