First commit
This commit is contained in:
119
node_modules/@ldapjs/dn/lib/utils/parse-string/read-attribute-value.test.js
generated
vendored
Normal file
119
node_modules/@ldapjs/dn/lib/utils/parse-string/read-attribute-value.test.js
generated
vendored
Normal file
@ -0,0 +1,119 @@
|
||||
'use strict'
|
||||
|
||||
const tap = require('tap')
|
||||
const readAttributeValue = require('./read-attribute-value')
|
||||
const { BerReader } = require('@ldapjs/asn1')
|
||||
|
||||
const missingError = Error('attribute value does not start with equals sign')
|
||||
|
||||
tap.test('throws if missing equals sign', async t => {
|
||||
let input = Buffer.from('foo')
|
||||
t.throws(
|
||||
() => readAttributeValue({ searchBuffer: input, startPos: 3 }),
|
||||
missingError
|
||||
)
|
||||
|
||||
input = Buffer.from('foo ≠')
|
||||
t.throws(
|
||||
() => readAttributeValue({ searchBuffer: input, startPos: 3 }),
|
||||
missingError
|
||||
)
|
||||
})
|
||||
|
||||
tap.test('handles empty attribute value', async t => {
|
||||
const input = Buffer.from('foo=')
|
||||
const result = readAttributeValue({ searchBuffer: input, startPos: 3 })
|
||||
t.same(result, { endPos: 4, value: '' })
|
||||
})
|
||||
|
||||
tap.test('returns attribute value', async t => {
|
||||
const input = Buffer.from('foo=bar')
|
||||
const result = readAttributeValue({ searchBuffer: input, startPos: 3 })
|
||||
t.same(result, { endPos: 7, value: 'bar' })
|
||||
})
|
||||
|
||||
tap.test('quoted values', t => {
|
||||
t.test('throws if quote is unexpected', async t => {
|
||||
const input = Buffer.from('=foo"bar')
|
||||
t.throws(
|
||||
() => readAttributeValue({ searchBuffer: input, startPos: 0 }),
|
||||
'unexpected quote (") in rdn string at position 4'
|
||||
)
|
||||
})
|
||||
|
||||
t.test('handles a basic quoted value', async t => {
|
||||
const input = Buffer.from('="bar"')
|
||||
const result = readAttributeValue({ searchBuffer: input, startPos: 0 })
|
||||
t.same(result, { endPos: 6, value: 'bar' })
|
||||
})
|
||||
|
||||
t.test('handles quote followed by end char', async t => {
|
||||
const input = Buffer.from('="bar",another=rdn')
|
||||
const result = readAttributeValue({ searchBuffer: input, startPos: 0 })
|
||||
t.same(result, { endPos: 6, value: 'bar' })
|
||||
})
|
||||
|
||||
t.test('significant spaces in quoted values are part of the value', async t => {
|
||||
const input = Buffer.from('="foo bar "')
|
||||
const result = readAttributeValue({ searchBuffer: input, startPos: 0 })
|
||||
t.same(result, { endPos: 13, value: 'foo bar' })
|
||||
})
|
||||
|
||||
t.test('throws if next significant char is not an end char', async t => {
|
||||
const input = Buffer.from('="foo bar" baz')
|
||||
t.throws(
|
||||
() => readAttributeValue({ searchBuffer: input, startPos: 0 }),
|
||||
'significant rdn character found outside of quotes at position 7'
|
||||
)
|
||||
})
|
||||
|
||||
t.test('throws if ending quote not found', async t => {
|
||||
const input = Buffer.from('="foo')
|
||||
t.throws(
|
||||
() => readAttributeValue({ searchBuffer: input, startPos: 0 }),
|
||||
'missing ending double quote for attribute value'
|
||||
)
|
||||
})
|
||||
|
||||
t.end()
|
||||
})
|
||||
|
||||
tap.test('leading and trailing spaces are omitted', async t => {
|
||||
const input = Buffer.from('= foo ')
|
||||
const result = readAttributeValue({ searchBuffer: input, startPos: 0 })
|
||||
t.same(result, { endPos: 9, value: 'foo' })
|
||||
})
|
||||
|
||||
tap.test('parses escaped attribute values', async t => {
|
||||
const input = Buffer.from('foo=foo\\#bar')
|
||||
const result = readAttributeValue({ searchBuffer: input, startPos: 3 })
|
||||
t.same(result, { endPos: 12, value: 'foo#bar' })
|
||||
})
|
||||
|
||||
tap.test('stops reading at all ending characters', async t => {
|
||||
const tests = [
|
||||
{ input: '=foo,bar', expected: { endPos: 4, value: 'foo' } },
|
||||
{ input: '=foo+bar', expected: { endPos: 4, value: 'foo' } },
|
||||
{ input: '=foo;bar', expected: { endPos: 4, value: 'foo' } }
|
||||
]
|
||||
|
||||
for (const test of tests) {
|
||||
const result = readAttributeValue({
|
||||
searchBuffer: Buffer.from(test.input),
|
||||
startPos: 0
|
||||
})
|
||||
t.same(result, test.expected)
|
||||
}
|
||||
})
|
||||
|
||||
tap.test('reads hex encoded string', async t => {
|
||||
const input = Buffer.from('=#0403666f6f')
|
||||
const result = readAttributeValue({ searchBuffer: input, startPos: 0 })
|
||||
const expected = {
|
||||
endPos: 12,
|
||||
value: new BerReader(Buffer.from([0x04, 0x03, 0x66, 0x6f, 0x6f]))
|
||||
}
|
||||
|
||||
t.same(result, expected)
|
||||
t.equal(result.value.buffer.compare(expected.value.buffer), 0)
|
||||
})
|
||||
Reference in New Issue
Block a user