bind-request.test.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. 'use strict'
  2. const tap = require('tap')
  3. const { BerReader } = require('@ldapjs/asn1')
  4. const BindRequest = require('./bind-request')
  5. const {
  6. bindRequestBytes,
  7. bindRequestAnonymousBytes
  8. } = require('./_fixtures/message-byte-arrays')
  9. tap.test('basic', t => {
  10. t.test('constructor no args', async t => {
  11. const req = new BindRequest()
  12. t.strictSame(req.pojo, {
  13. messageId: 1,
  14. protocolOp: 0x60,
  15. type: 'BindRequest',
  16. version: 3,
  17. name: null,
  18. authenticationType: 'simple',
  19. credentials: '',
  20. controls: []
  21. })
  22. })
  23. t.test('properties return correct values', async t => {
  24. const req = new BindRequest({
  25. messageId: 1,
  26. version: 999,
  27. name: 'foobar',
  28. authentication: 'nonsense',
  29. credentials: 'secret'
  30. })
  31. t.equal(req.credentials, 'secret')
  32. t.equal(req.name, 'foobar')
  33. t.equal(req.type, 'BindRequest')
  34. t.equal(req.version, 999)
  35. t.equal(req._dn, 'foobar')
  36. })
  37. t.end()
  38. })
  39. tap.test('toBer', t => {
  40. t.test('converts BindRequest to BER', async t => {
  41. const reqBuffer = Buffer.from(bindRequestBytes)
  42. const reader = new BerReader(reqBuffer)
  43. const message = BindRequest.parse(reader)
  44. const ber = message.toBer()
  45. t.equal('[object BerReader]', Object.prototype.toString.call(ber))
  46. t.equal(reqBuffer.compare(ber.buffer), 0)
  47. })
  48. t.test('converts an anonymous bind request', async t => {
  49. const reqBuffer = Buffer.from(bindRequestAnonymousBytes)
  50. const message = new BindRequest()
  51. const ber = message.toBer()
  52. t.equal(reqBuffer.compare(ber.buffer), 0)
  53. })
  54. t.end()
  55. })
  56. tap.test('_pojo', t => {
  57. t.test('returns implementation properties', async t => {
  58. const message = new BindRequest()
  59. const pojo = message._pojo()
  60. t.strictSame(pojo, {
  61. version: 3,
  62. name: null,
  63. authenticationType: 'simple',
  64. credentials: ''
  65. })
  66. })
  67. t.end()
  68. })
  69. tap.test('#parseToPojo', t => {
  70. t.test('throws if operation incorrect', async t => {
  71. const reqBuffer = Buffer.from(bindRequestBytes)
  72. reqBuffer[5] = 0x61
  73. const reader = new BerReader(reqBuffer)
  74. reader.readSequence()
  75. reader.readInt()
  76. t.throws(
  77. () => BindRequest.parseToPojo(reader),
  78. Error('found wrong protocol operation: 0x61')
  79. )
  80. })
  81. t.test('throws if simple auth credentials is tagged wrong', async t => {
  82. const reqBuffer = Buffer.from(bindRequestBytes)
  83. reqBuffer[31] = 0x83
  84. const reader = new BerReader(reqBuffer)
  85. reader.readSequence()
  86. reader.readInt()
  87. t.throws(
  88. () => BindRequest.parseToPojo(reader),
  89. Error('authentication 0x83 not supported')
  90. )
  91. })
  92. t.test('returns a pojo representation', async t => {
  93. const reqBuffer = Buffer.from(bindRequestBytes)
  94. const reader = new BerReader(reqBuffer)
  95. reader.readSequence()
  96. reader.readInt()
  97. const pojo = BindRequest.parseToPojo(reader)
  98. t.strictSame(pojo, {
  99. protocolOp: 0x60,
  100. version: 3,
  101. name: 'uid=admin,ou=system',
  102. authentication: 'simple',
  103. credentials: 'secret'
  104. })
  105. })
  106. t.end()
  107. })