wangzhibo
2026-05-09 53418655c061ac26f66058253f39200aced1ab1d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
'use strict'
 
const tap = require('tap')
const { BerReader } = require('@ldapjs/asn1')
const parseToMessage = require('./parse-to-message')
 
const messageBytesArrays = require('./messages/_fixtures/message-byte-arrays')
 
tap.test('throws if input not a BerReader', async t => {
  const input = Buffer.from([0x30, 0x01, 0x64])
  t.throws(
    () => parseToMessage(input),
    Error('Expected BerReader but got [object Uint8Array]')
  )
})
 
tap.test('throws if sequence is invalid', async t => {
  const input = new BerReader(Buffer.from([0x0a, 0x01, 0x64]))
  t.throws(
    () => parseToMessage(input),
    Error('Expected 0x02: got 0x64')
  )
})
 
tap.test('parses messages correctly', async t => {
  for (const [name, messageBytes] of Object.entries(messageBytesArrays)) {
    t.comment(`verifying message bytes: ${name}`)
    const expected = Buffer.from(messageBytes)
    const reader = new BerReader(expected)
    const message = parseToMessage(reader)
    const found = message.toBer().buffer
    const isEqual = t.equal(expected.compare(found), 0, `${name} comparison`)
 
    if (isEqual === false) {
      const diff = {}
      for (let i = 0; i < expected.length; i += 1) {
        if (expected[i] !== found[i]) {
          diff[i] = {
            expected: Number(expected[i]).toString(16),
            found: Number(found[i]).toString(16)
          }
        }
      }
      t.fail(`${name} differs`, diff)
    }
  }
})
 
tap.test('parses search req with evolution filter', async t => {
  const messageBytes = require('./_fixtures/evolution-filter-req')
  const messageBuffer = Buffer.from(messageBytes)
  const message = parseToMessage(new BerReader(messageBuffer))
  t.equal(messageBuffer.compare(message.toBer().buffer), 0)
})