UNPKG

@ldapjs/messages

Version:

API for creating and parsing LDAP messages

129 lines (107 loc) 3.1 kB
'use strict' const tap = require('tap') const { BerReader } = require('@ldapjs/asn1') const BindRequest = require('./bind-request') const { bindRequestBytes, bindRequestAnonymousBytes } = require('./_fixtures/message-byte-arrays') tap.test('basic', t => { t.test('constructor no args', async t => { const req = new BindRequest() t.strictSame(req.pojo, { messageId: 1, protocolOp: 0x60, type: 'BindRequest', version: 3, name: null, authenticationType: 'simple', credentials: '', controls: [] }) }) t.test('properties return correct values', async t => { const req = new BindRequest({ messageId: 1, version: 999, name: 'foobar', authentication: 'nonsense', credentials: 'secret' }) t.equal(req.credentials, 'secret') t.equal(req.name, 'foobar') t.equal(req.type, 'BindRequest') t.equal(req.version, 999) t.equal(req._dn, 'foobar') }) t.end() }) tap.test('toBer', t => { t.test('converts BindRequest to BER', async t => { const reqBuffer = Buffer.from(bindRequestBytes) const reader = new BerReader(reqBuffer) const message = BindRequest.parse(reader) const ber = message.toBer() t.equal('[object BerReader]', Object.prototype.toString.call(ber)) t.equal(reqBuffer.compare(ber.buffer), 0) }) t.test('converts an anonymous bind request', async t => { const reqBuffer = Buffer.from(bindRequestAnonymousBytes) const message = new BindRequest() const ber = message.toBer() t.equal(reqBuffer.compare(ber.buffer), 0) }) t.end() }) tap.test('_pojo', t => { t.test('returns implementation properties', async t => { const message = new BindRequest() const pojo = message._pojo() t.strictSame(pojo, { version: 3, name: null, authenticationType: 'simple', credentials: '' }) }) t.end() }) tap.test('#parseToPojo', t => { t.test('throws if operation incorrect', async t => { const reqBuffer = Buffer.from(bindRequestBytes) reqBuffer[5] = 0x61 const reader = new BerReader(reqBuffer) reader.readSequence() reader.readInt() t.throws( () => BindRequest.parseToPojo(reader), Error('found wrong protocol operation: 0x61') ) }) t.test('throws if simple auth credentials is tagged wrong', async t => { const reqBuffer = Buffer.from(bindRequestBytes) reqBuffer[31] = 0x83 const reader = new BerReader(reqBuffer) reader.readSequence() reader.readInt() t.throws( () => BindRequest.parseToPojo(reader), Error('authentication 0x83 not supported') ) }) t.test('returns a pojo representation', async t => { const reqBuffer = Buffer.from(bindRequestBytes) const reader = new BerReader(reqBuffer) reader.readSequence() reader.readInt() const pojo = BindRequest.parseToPojo(reader) t.strictSame(pojo, { protocolOp: 0x60, version: 3, name: 'uid=admin,ou=system', authentication: 'simple', credentials: 'secret' }) }) t.end() })