From 91051377da1f82f3fd611018ecf822f0cffcff51 Mon Sep 17 00:00:00 2001 From: Nathan Rogers Date: Mon, 26 Mar 2012 14:30:23 -0500 Subject: [PATCH] added tests and better handle zero-length cookies --- lib/controls/paged_results_control.js | 5 +- test/controls/paged_results_control_test.js | 86 +++++++++++++++++++++ 2 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 test/controls/paged_results_control_test.js diff --git a/lib/controls/paged_results_control.js b/lib/controls/paged_results_control.js index f8e6ce2..5dfa9c9 100644 --- a/lib/controls/paged_results_control.js +++ b/lib/controls/paged_results_control.js @@ -50,6 +50,7 @@ PagedResultsControl.prototype.parse = function parse(buffer) { this._value = {}; this._value.size = ber.readInt(); this._value.cookie = ber.readString(asn1.Ber.OctetString, true); + if(!this._value.cookie) this._value.cookie = new Buffer(0); //readString returns '' instead of a zero-length buffer return true; } @@ -66,10 +67,10 @@ PagedResultsControl.prototype._toBer = function (ber) { var writer = new BerWriter(); writer.startSequence(); writer.writeInt(this.value.size); - if(this.value.cookie) + if(this.value.cookie && this.value.cookie.length>0) writer.writeBuffer(this.value.cookie, asn1.Ber.OctetString); else - writer.writeString(''); + writer.writeString(''); //writeBuffer rejects zero-length buffers writer.endSequence(); ber.writeBuffer(writer.buffer, 0x04); diff --git a/test/controls/paged_results_control_test.js b/test/controls/paged_results_control_test.js new file mode 100644 index 0000000..1ff97f1 --- /dev/null +++ b/test/controls/paged_results_control_test.js @@ -0,0 +1,86 @@ + +var test = require('tap').test; + +var asn1 = require('asn1'); + +var BerReader = asn1.BerReader; +var BerWriter = asn1.BerWriter; +var getControl; +var PagedResultsControl; + +function bufferEqual(t, a, b) { + t.equal(a.toString('hex'), b.toString('hex')) +} + + +///--- Tests + + +test('load library', function (t) { + PagedResultsControl = + require('../../lib').PagedResultsControl; + t.ok(PagedResultsControl); + getControl = require('../../lib').getControl; + t.ok(getControl); + t.end(); +}); + + +test('new no args', function (t) { + t.ok(new PagedResultsControl()); + t.end(); +}); + + +test('new with args', function (t) { + var c = new PagedResultsControl({ + type: '1.2.840.113556.1.4.319', + criticality: true, + value: { + size: 1000, + cookie: new Buffer([1,2,3]) + } + }); + t.ok(c); + t.equal(c.type, '1.2.840.113556.1.4.319'); + t.ok(c.criticality); + t.equal(c.value.size, 1000); + bufferEqual(t,c.value.cookie, new Buffer([1,2,3])); + + + var writer = new BerWriter(); + c.toBer(writer); + var reader = new BerReader(writer.buffer); + var psc = getControl(reader); + t.ok(psc); + console.log('psc', psc.value); + t.equal(psc.type, '1.2.840.113556.1.4.319'); + t.ok(psc.criticality); + t.equal(psc.value.size, 1000); + bufferEqual(t,psc.value.cookie, new Buffer([1,2,3])); + + t.end(); +}); + +test('tober', function (t) { + var psc = new PagedResultsControl({ + type: '1.2.840.113556.1.4.319', + criticality: true, + value: { + size: 20, + cookie: new Buffer(0) + } + }); + + var ber = new BerWriter(); + psc.toBer(ber); + + var c = getControl(new BerReader(ber.buffer)); + t.ok(c); + t.equal(c.type, '1.2.840.113556.1.4.319'); + t.ok(c.criticality); + t.equal(c.value.size, 20); + bufferEqual(t,c.value.cookie, new Buffer(0)); + + t.end(); +});