From bc1794cb677ca922c0161e2aa4adf0ed01c21966 Mon Sep 17 00:00:00 2001 From: qpan Date: Wed, 28 Jun 2023 16:47:29 +0800 Subject: [PATCH] #890,unit test --- issue-890.test.js | 91 +++++++++++++++++++ test/issue-890.test.js | 69 ++++++++++++++ test/lib/client/message-tracker/index.test.js | 5 +- 3 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 issue-890.test.js create mode 100644 test/issue-890.test.js diff --git a/issue-890.test.js b/issue-890.test.js new file mode 100644 index 0000000..a92a3a6 --- /dev/null +++ b/issue-890.test.js @@ -0,0 +1,91 @@ +'use strict' + +const tap = require('tap') +const { SearchResultEntry, SearchRequest } = require('@ldapjs/messages') +const ldapjs = require('../lib') +const process = require('process'); +const server = ldapjs.createServer() + +const SUFFIX = '' +const directory = { + 'dc=example,dc=com': { + objectclass: 'example', + dc: 'example', + cn: 'example' + } +} + +// process.prependListener('uncaughtException', handleException); + +// function handleException(err){ +// console.error(err); +// } + +process.on('SIGINT', () => { + console.log('SKIP'); +}); + +server.bind(SUFFIX, (req, res, done) => { + res.end() + return done() +}) + +server.search(SUFFIX, (req, res, done) => { + // const dn = req.dn.toString().toLowerCase() + + // if (Object.hasOwn(directory, dn) === false) { + // return done(Error('not in directory')) + // } + + // switch (req.scope) { + // case SearchRequest.SCOPE_BASE: + // case SearchRequest.SCOPE_SUBTREE: { + // res.send(new SearchResultEntry({ objectName: `dc=${req.scopeName}` })) + // break + // } + // } + + // res.end() + // done() +}) + +tap.beforeEach(t => { + return new Promise((resolve, reject) => { + server.listen(0, '127.0.0.1', (err) => { + if (err) return reject(err) + t.context.url = server.url + + // t.context.client = ldapjs.createClient({ url: [server.url],timeout:5 }) + // t.context.searchOpts = { + // filter: '(&(objectClass=*))', + // scope: 'subtree', + // attributes: ['dn', 'cn'] + // } + + resolve() + }) + }) +}) + +tap.afterEach(t => { + // return new Promise((resolve, reject) => { + // t.context.client.destroy() + // server.close((err) => { + // if (err) return reject(err) + // resolve() + // }) + // }) +}) + + +tap.test('tracker.fetch ', t => { + const { client, searchOpts } = t.context + // client.bind('test', 'test', (err) => { + // t.equal(err.lde_message, 'request timeout (client interrupt)'); + // client.unbind(); + // }); +}) + + + + diff --git a/test/issue-890.test.js b/test/issue-890.test.js new file mode 100644 index 0000000..40bd35e --- /dev/null +++ b/test/issue-890.test.js @@ -0,0 +1,69 @@ +'use strict' + +const tap = require('tap') +const ldapjs = require('../') +const { SearchResultEntry, SearchRequest } = require('@ldapjs/messages') +const server = ldapjs.createServer() +const BIND_DN = 'cn=root' +const BIND_PW = 'secret' +const SUFFIX = '' + +server.bind(SUFFIX, (res, done) => { + res.end() + return done() +}) + +server.search(SUFFIX, (req, res, done) => { + const dn = req.dn.toString().toLowerCase() + + if (Object.hasOwn(directory, dn) === false) { + return done(Error('not in directory')) + } + + switch (req.scope) { + case SearchRequest.SCOPE_BASE: + case SearchRequest.SCOPE_SUBTREE: { + res.send(new SearchResultEntry({ objectName: `dc=${req.scopeName}` })) + break + } + } + res.end() + done() +}) + +tap.beforeEach(t => { + return new Promise((resolve, reject) => { + server.listen(0, '127.0.0.1', (err) => { + if (err) return reject(err) + t.context.url = server.url + t.context.client = ldapjs.createClient({ url: [server.url], timeout: 0, connectTimeout: 0, idleTimeout: 0 }) + t.context.searchOpts = { + filter: '(&(objectClass=*))', + scope: 'sub', + attributes: ['dn', 'cn'] + } + + resolve() + }) + }) +}) + +tap.afterEach(t => { + return new Promise((resolve, reject) => { + t.context.client.destroy() + server.close((err) => { + if (err) return reject(err) + resolve() + }) + }) +}) + +tap.test('tracker.fetch', t => { + const { client } = t.context + client.bind(BIND_DN, BIND_PW, function (err, res) { + t.error(err) + t.ok(res) + t.equal(res.status, 0) + t.end() + }) +}) \ No newline at end of file diff --git a/test/lib/client/message-tracker/index.test.js b/test/lib/client/message-tracker/index.test.js index 0aa4de2..79f3423 100644 --- a/test/lib/client/message-tracker/index.test.js +++ b/test/lib/client/message-tracker/index.test.js @@ -126,10 +126,11 @@ tap.test('#fetch', t => { function handler () {} }) - t.test('returns null when message does not exist', async t => { + t.test('returns {message: null, callback: null} when message does not exist', async t => { const tracker = messageTrackerFactory({ id: 'foo', parser: {} }) - const fetched = tracker.fetch(1) + const { callback: fetched,message } = tracker.fetch(1) t.equal(fetched, null) + t.equal(message, null) }) t.end()