123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- 'use strict'
- const tap = require('tap')
- const { operations } = require('@ldapjs/protocol')
- const { BerWriter, BerReader } = require('@ldapjs/asn1')
- const IntermediateResponse = require('./intermediate-response')
- const {
- intermediateResponseBytes,
- intermediateResponseNoValueBytes,
- intermediateResponseNoNameBytes
- } = require('./_fixtures/message-byte-arrays')
- tap.test('basic', t => {
- t.test('constructor no args', async t => {
- const res = new IntermediateResponse()
- t.strictSame(res.pojo, {
- messageId: 1,
- protocolOp: operations.LDAP_RES_INTERMEDIATE,
- type: 'IntermediateResponse',
- responseName: undefined,
- responseValue: undefined,
- controls: []
- })
- t.equal(res.type, 'IntermediateResponse')
- })
- t.test('constructor with args', async t => {
- const res = new IntermediateResponse({
- responseName: '1.2.3',
- responseValue: 'foo'
- })
- t.strictSame(res.pojo, {
- messageId: 1,
- protocolOp: operations.LDAP_RES_INTERMEDIATE,
- type: 'IntermediateResponse',
- responseName: '1.2.3',
- responseValue: 'foo',
- controls: []
- })
- })
- t.end()
- })
- tap.test('.responseName', t => {
- t.test('sets/gets', async t => {
- const res = new IntermediateResponse()
- t.equal(res.responseName, undefined)
- res.responseName = '1.2.3'
- t.equal(res.responseName, '1.2.3')
- })
- t.test('rejects bad value', async t => {
- const res = new IntermediateResponse()
- t.throws(
- () => {
- res.responseName = 'foo bar'
- },
- 'responseName must be a numeric OID'
- )
- t.throws(
- () => {
- res.responseName = 1.2
- },
- 'responseName must be a numeric OID'
- )
- })
- t.end()
- })
- tap.test('.responseValue', t => {
- t.test('sets/gets', async t => {
- const res = new IntermediateResponse()
- t.equal(res.responseValue, undefined)
- res.responseValue = '1.2.3'
- t.equal(res.responseValue, '1.2.3')
- })
- t.test('rejects bad value', async t => {
- const res = new IntermediateResponse()
- t.throws(
- () => {
- res.responseValue = { foo: 'foo' }
- },
- 'responseValue must be a string'
- )
- })
- t.end()
- })
- tap.test('_toBer', t => {
- t.test('converts instance to BER', async t => {
- let res = new IntermediateResponse({
- messageId: 2,
- responseName: '1.2.3',
- responseValue: 'foo'
- })
- let writer = new BerWriter()
- res._toBer(writer)
- t.equal(
- Buffer.from(intermediateResponseBytes.slice(5)).compare(writer.buffer),
- 0
- )
- res = new IntermediateResponse({
- messageId: 2,
- responseName: '1.2.3'
- })
- writer = new BerWriter()
- res._toBer(writer)
- t.equal(
- Buffer.from(intermediateResponseNoValueBytes.slice(5)).compare(writer.buffer),
- 0
- )
- res = new IntermediateResponse({
- messageId: 2,
- responseValue: 'foo'
- })
- writer = new BerWriter()
- res._toBer(writer)
- t.equal(
- Buffer.from(intermediateResponseNoNameBytes.slice(5)).compare(writer.buffer),
- 0
- )
- })
- t.end()
- })
- tap.test('_pojo', t => {
- t.test('returns a pojo representation', async t => {
- const req = new IntermediateResponse({
- responseName: '1.2.3',
- responseValue: 'foo'
- })
- t.strictSame(req._pojo(), {
- responseName: '1.2.3',
- responseValue: 'foo'
- })
- })
- t.end()
- })
- tap.test('#parseToPojo', t => {
- t.test('throws if operation incorrect', async t => {
- const reqBuffer = Buffer.from(intermediateResponseBytes)
- reqBuffer[5] = 0x61
- const reader = new BerReader(reqBuffer)
- reader.readSequence()
- reader.readInt()
- t.throws(
- () => IntermediateResponse.parseToPojo(reader),
- Error('found wrong protocol operation: 0x61')
- )
- })
- t.test('returns a pojo representation', async t => {
- let reqBuffer = Buffer.from(intermediateResponseBytes)
- let reader = new BerReader(reqBuffer)
- reader.readSequence()
- reader.readInt()
- let pojo = IntermediateResponse.parseToPojo(reader)
- t.equal(pojo.protocolOp, operations.LDAP_RES_INTERMEDIATE)
- t.equal(pojo.responseName, '1.2.3')
- t.equal(pojo.responseValue, 'foo')
- reqBuffer = Buffer.from(intermediateResponseNoNameBytes)
- reader = new BerReader(reqBuffer)
- reader.readSequence()
- reader.readInt()
- pojo = IntermediateResponse.parseToPojo(reader)
- t.equal(pojo.responseName, undefined)
- t.equal(pojo.responseValue, 'foo')
- })
- t.end()
- })
|