parse-to-message.test.js 1.7 KB

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