1 // Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.
3 var test = require('tap').test;
15 test('load library', function(t) {
16 BerReader = require('../../lib/index').BerReader;
20 t.fail('Should have thrown');
22 t.ok(e instanceof TypeError, 'Should have been a type error');
28 test('read byte', function(t) {
29 var reader = new BerReader(new Buffer([0xde]));
31 t.equal(reader.readByte(), 0xde, 'wrong value');
36 test('read 1 byte int', function(t) {
37 var reader = new BerReader(new Buffer([0x02, 0x01, 0x03]));
39 t.equal(reader.readInt(), 0x03, 'wrong value');
40 t.equal(reader.length, 0x01, 'wrong length');
45 test('read 2 byte int', function(t) {
46 var reader = new BerReader(new Buffer([0x02, 0x02, 0x7e, 0xde]));
48 t.equal(reader.readInt(), 0x7ede, 'wrong value');
49 t.equal(reader.length, 0x02, 'wrong length');
54 test('read 3 byte int', function(t) {
55 var reader = new BerReader(new Buffer([0x02, 0x03, 0x7e, 0xde, 0x03]));
57 t.equal(reader.readInt(), 0x7ede03, 'wrong value');
58 t.equal(reader.length, 0x03, 'wrong length');
63 test('read 4 byte int', function(t) {
64 var reader = new BerReader(new Buffer([0x02, 0x04, 0x7e, 0xde, 0x03, 0x01]));
66 t.equal(reader.readInt(), 0x7ede0301, 'wrong value');
67 t.equal(reader.length, 0x04, 'wrong length');
72 test('read 1 byte negative int', function(t) {
73 var reader = new BerReader(new Buffer([0x02, 0x01, 0xdc]));
75 t.equal(reader.readInt(), -36, 'wrong value');
76 t.equal(reader.length, 0x01, 'wrong length');
81 test('read 2 byte negative int', function(t) {
82 var reader = new BerReader(new Buffer([0x02, 0x02, 0xc0, 0x4e]));
84 t.equal(reader.readInt(), -16306, 'wrong value');
85 t.equal(reader.length, 0x02, 'wrong length');
90 test('read 3 byte negative int', function(t) {
91 var reader = new BerReader(new Buffer([0x02, 0x03, 0xff, 0x00, 0x19]));
93 t.equal(reader.readInt(), -65511, 'wrong value');
94 t.equal(reader.length, 0x03, 'wrong length');
99 test('read 4 byte negative int', function(t) {
100 var reader = new BerReader(new Buffer([0x02, 0x04, 0x91, 0x7c, 0x22, 0x1f]));
102 t.equal(reader.readInt(), -1854135777, 'wrong value');
103 t.equal(reader.length, 0x04, 'wrong length');
108 test('read boolean true', function(t) {
109 var reader = new BerReader(new Buffer([0x01, 0x01, 0xff]));
111 t.equal(reader.readBoolean(), true, 'wrong value');
112 t.equal(reader.length, 0x01, 'wrong length');
117 test('read boolean false', function(t) {
118 var reader = new BerReader(new Buffer([0x01, 0x01, 0x00]));
120 t.equal(reader.readBoolean(), false, 'wrong value');
121 t.equal(reader.length, 0x01, 'wrong length');
126 test('read enumeration', function(t) {
127 var reader = new BerReader(new Buffer([0x0a, 0x01, 0x20]));
129 t.equal(reader.readEnumeration(), 0x20, 'wrong value');
130 t.equal(reader.length, 0x01, 'wrong length');
135 test('read string', function(t) {
136 var dn = 'cn=foo,ou=unit,o=test';
137 var buf = new Buffer(dn.length + 2);
139 buf[1] = Buffer.byteLength(dn);
141 var reader = new BerReader(buf);
143 t.equal(reader.readString(), dn, 'wrong value');
144 t.equal(reader.length, dn.length, 'wrong length');
149 test('read sequence', function(t) {
150 var reader = new BerReader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff]));
152 t.equal(reader.readSequence(), 0x30, 'wrong value');
153 t.equal(reader.length, 0x03, 'wrong length');
154 t.equal(reader.readBoolean(), true, 'wrong value');
155 t.equal(reader.length, 0x01, 'wrong length');
160 test('anonymous LDAPv3 bind', function(t) {
161 var BIND = new Buffer(14);
162 BIND[0] = 0x30; // Sequence
164 BIND[2] = 0x02; // ASN.1 Integer
166 BIND[4] = 0x04; // msgid (make up 4)
167 BIND[5] = 0x60; // Bind Request
169 BIND[7] = 0x02; // ASN.1 Integer
171 BIND[9] = 0x03; // v3
172 BIND[10] = 0x04; // String (bind dn)
174 BIND[12] = 0x80; // ContextSpecific (choice)
175 BIND[13] = 0; // simple bind
178 var ber = new BerReader(BIND);
179 t.equal(ber.readSequence(), 48, 'Not an ASN.1 Sequence');
180 t.equal(ber.length, 12, 'Message length should be 12');
181 t.equal(ber.readInt(), 4, 'Message id should have been 4');
182 t.equal(ber.readSequence(), 96, 'Bind Request should have been 96');
183 t.equal(ber.length, 7, 'Bind length should have been 7');
184 t.equal(ber.readInt(), 3, 'LDAP version should have been 3');
185 t.equal(ber.readString(), '', 'Bind DN should have been empty');
186 t.equal(ber.length, 0, 'string length should have been 0');
187 t.equal(ber.readByte(), 0x80, 'Should have been ContextSpecific (choice)');
188 t.equal(ber.readByte(), 0, 'Should have been simple bind');
189 t.equal(null, ber.readByte(), 'Should be out of data');
194 test('long string', function(t) {
195 var buf = new Buffer(256);
198 '2;649;CN=Red Hat CS 71GA Demo,O=Red Hat CS 71GA Demo,C=US;' +
199 'CN=RHCS Agent - admin01,UID=admin01,O=redhat,C=US [1] This is ' +
200 'Teena Vradmin\'s description.';
205 var ber = new BerReader(buf.slice(0, 3 + s.length));
206 t.equal(ber.readString(), s);