1
0

intermediate-response.test.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. 'use strict'
  2. const tap = require('tap')
  3. const { operations } = require('@ldapjs/protocol')
  4. const { BerWriter, BerReader } = require('@ldapjs/asn1')
  5. const IntermediateResponse = require('./intermediate-response')
  6. const {
  7. intermediateResponseBytes,
  8. intermediateResponseNoValueBytes,
  9. intermediateResponseNoNameBytes
  10. } = require('./_fixtures/message-byte-arrays')
  11. tap.test('basic', t => {
  12. t.test('constructor no args', async t => {
  13. const res = new IntermediateResponse()
  14. t.strictSame(res.pojo, {
  15. messageId: 1,
  16. protocolOp: operations.LDAP_RES_INTERMEDIATE,
  17. type: 'IntermediateResponse',
  18. responseName: undefined,
  19. responseValue: undefined,
  20. controls: []
  21. })
  22. t.equal(res.type, 'IntermediateResponse')
  23. })
  24. t.test('constructor with args', async t => {
  25. const res = new IntermediateResponse({
  26. responseName: '1.2.3',
  27. responseValue: 'foo'
  28. })
  29. t.strictSame(res.pojo, {
  30. messageId: 1,
  31. protocolOp: operations.LDAP_RES_INTERMEDIATE,
  32. type: 'IntermediateResponse',
  33. responseName: '1.2.3',
  34. responseValue: 'foo',
  35. controls: []
  36. })
  37. })
  38. t.end()
  39. })
  40. tap.test('.responseName', t => {
  41. t.test('sets/gets', async t => {
  42. const res = new IntermediateResponse()
  43. t.equal(res.responseName, undefined)
  44. res.responseName = '1.2.3'
  45. t.equal(res.responseName, '1.2.3')
  46. })
  47. t.test('rejects bad value', async t => {
  48. const res = new IntermediateResponse()
  49. t.throws(
  50. () => {
  51. res.responseName = 'foo bar'
  52. },
  53. 'responseName must be a numeric OID'
  54. )
  55. t.throws(
  56. () => {
  57. res.responseName = 1.2
  58. },
  59. 'responseName must be a numeric OID'
  60. )
  61. })
  62. t.end()
  63. })
  64. tap.test('.responseValue', t => {
  65. t.test('sets/gets', async t => {
  66. const res = new IntermediateResponse()
  67. t.equal(res.responseValue, undefined)
  68. res.responseValue = '1.2.3'
  69. t.equal(res.responseValue, '1.2.3')
  70. })
  71. t.test('rejects bad value', async t => {
  72. const res = new IntermediateResponse()
  73. t.throws(
  74. () => {
  75. res.responseValue = { foo: 'foo' }
  76. },
  77. 'responseValue must be a string'
  78. )
  79. })
  80. t.end()
  81. })
  82. tap.test('_toBer', t => {
  83. t.test('converts instance to BER', async t => {
  84. let res = new IntermediateResponse({
  85. messageId: 2,
  86. responseName: '1.2.3',
  87. responseValue: 'foo'
  88. })
  89. let writer = new BerWriter()
  90. res._toBer(writer)
  91. t.equal(
  92. Buffer.from(intermediateResponseBytes.slice(5)).compare(writer.buffer),
  93. 0
  94. )
  95. res = new IntermediateResponse({
  96. messageId: 2,
  97. responseName: '1.2.3'
  98. })
  99. writer = new BerWriter()
  100. res._toBer(writer)
  101. t.equal(
  102. Buffer.from(intermediateResponseNoValueBytes.slice(5)).compare(writer.buffer),
  103. 0
  104. )
  105. res = new IntermediateResponse({
  106. messageId: 2,
  107. responseValue: 'foo'
  108. })
  109. writer = new BerWriter()
  110. res._toBer(writer)
  111. t.equal(
  112. Buffer.from(intermediateResponseNoNameBytes.slice(5)).compare(writer.buffer),
  113. 0
  114. )
  115. })
  116. t.end()
  117. })
  118. tap.test('_pojo', t => {
  119. t.test('returns a pojo representation', async t => {
  120. const req = new IntermediateResponse({
  121. responseName: '1.2.3',
  122. responseValue: 'foo'
  123. })
  124. t.strictSame(req._pojo(), {
  125. responseName: '1.2.3',
  126. responseValue: 'foo'
  127. })
  128. })
  129. t.end()
  130. })
  131. tap.test('#parseToPojo', t => {
  132. t.test('throws if operation incorrect', async t => {
  133. const reqBuffer = Buffer.from(intermediateResponseBytes)
  134. reqBuffer[5] = 0x61
  135. const reader = new BerReader(reqBuffer)
  136. reader.readSequence()
  137. reader.readInt()
  138. t.throws(
  139. () => IntermediateResponse.parseToPojo(reader),
  140. Error('found wrong protocol operation: 0x61')
  141. )
  142. })
  143. t.test('returns a pojo representation', async t => {
  144. let reqBuffer = Buffer.from(intermediateResponseBytes)
  145. let reader = new BerReader(reqBuffer)
  146. reader.readSequence()
  147. reader.readInt()
  148. let pojo = IntermediateResponse.parseToPojo(reader)
  149. t.equal(pojo.protocolOp, operations.LDAP_RES_INTERMEDIATE)
  150. t.equal(pojo.responseName, '1.2.3')
  151. t.equal(pojo.responseValue, 'foo')
  152. reqBuffer = Buffer.from(intermediateResponseNoNameBytes)
  153. reader = new BerReader(reqBuffer)
  154. reader.readSequence()
  155. reader.readInt()
  156. pojo = IntermediateResponse.parseToPojo(reader)
  157. t.equal(pojo.responseName, undefined)
  158. t.equal(pojo.responseValue, 'foo')
  159. })
  160. t.end()
  161. })