Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81159 views
1
// Copyright 2011 Mark Cavage <[email protected]> All rights reserved.
2
3
var test = require('tap').test;
4
5
6
7
///--- Globals
8
9
var BerReader;
10
11
12
13
///--- Tests
14
15
test('load library', function(t) {
16
BerReader = require('../../lib/index').BerReader;
17
t.ok(BerReader);
18
try {
19
new BerReader();
20
t.fail('Should have thrown');
21
} catch (e) {
22
t.ok(e instanceof TypeError, 'Should have been a type error');
23
}
24
t.end();
25
});
26
27
28
test('read byte', function(t) {
29
var reader = new BerReader(new Buffer([0xde]));
30
t.ok(reader);
31
t.equal(reader.readByte(), 0xde, 'wrong value');
32
t.end();
33
});
34
35
36
test('read 1 byte int', function(t) {
37
var reader = new BerReader(new Buffer([0x02, 0x01, 0x03]));
38
t.ok(reader);
39
t.equal(reader.readInt(), 0x03, 'wrong value');
40
t.equal(reader.length, 0x01, 'wrong length');
41
t.end();
42
});
43
44
45
test('read 2 byte int', function(t) {
46
var reader = new BerReader(new Buffer([0x02, 0x02, 0x7e, 0xde]));
47
t.ok(reader);
48
t.equal(reader.readInt(), 0x7ede, 'wrong value');
49
t.equal(reader.length, 0x02, 'wrong length');
50
t.end();
51
});
52
53
54
test('read 3 byte int', function(t) {
55
var reader = new BerReader(new Buffer([0x02, 0x03, 0x7e, 0xde, 0x03]));
56
t.ok(reader);
57
t.equal(reader.readInt(), 0x7ede03, 'wrong value');
58
t.equal(reader.length, 0x03, 'wrong length');
59
t.end();
60
});
61
62
63
test('read 4 byte int', function(t) {
64
var reader = new BerReader(new Buffer([0x02, 0x04, 0x7e, 0xde, 0x03, 0x01]));
65
t.ok(reader);
66
t.equal(reader.readInt(), 0x7ede0301, 'wrong value');
67
t.equal(reader.length, 0x04, 'wrong length');
68
t.end();
69
});
70
71
72
test('read boolean true', function(t) {
73
var reader = new BerReader(new Buffer([0x01, 0x01, 0xff]));
74
t.ok(reader);
75
t.equal(reader.readBoolean(), true, 'wrong value');
76
t.equal(reader.length, 0x01, 'wrong length');
77
t.end();
78
});
79
80
81
test('read boolean false', function(t) {
82
var reader = new BerReader(new Buffer([0x01, 0x01, 0x00]));
83
t.ok(reader);
84
t.equal(reader.readBoolean(), false, 'wrong value');
85
t.equal(reader.length, 0x01, 'wrong length');
86
t.end();
87
});
88
89
90
test('read enumeration', function(t) {
91
var reader = new BerReader(new Buffer([0x0a, 0x01, 0x20]));
92
t.ok(reader);
93
t.equal(reader.readEnumeration(), 0x20, 'wrong value');
94
t.equal(reader.length, 0x01, 'wrong length');
95
t.end();
96
});
97
98
99
test('read string', function(t) {
100
var dn = 'cn=foo,ou=unit,o=test';
101
var buf = new Buffer(dn.length + 2);
102
buf[0] = 0x04;
103
buf[1] = Buffer.byteLength(dn);
104
buf.write(dn, 2);
105
var reader = new BerReader(buf);
106
t.ok(reader);
107
t.equal(reader.readString(), dn, 'wrong value');
108
t.equal(reader.length, dn.length, 'wrong length');
109
t.end();
110
});
111
112
113
test('read sequence', function(t) {
114
var reader = new BerReader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff]));
115
t.ok(reader);
116
t.equal(reader.readSequence(), 0x30, 'wrong value');
117
t.equal(reader.length, 0x03, 'wrong length');
118
t.equal(reader.readBoolean(), true, 'wrong value');
119
t.equal(reader.length, 0x01, 'wrong length');
120
t.end();
121
});
122
123
124
test('anonymous LDAPv3 bind', function(t) {
125
var BIND = new Buffer(14);
126
BIND[0] = 0x30; // Sequence
127
BIND[1] = 12; // len
128
BIND[2] = 0x02; // ASN.1 Integer
129
BIND[3] = 1; // len
130
BIND[4] = 0x04; // msgid (make up 4)
131
BIND[5] = 0x60; // Bind Request
132
BIND[6] = 7; // len
133
BIND[7] = 0x02; // ASN.1 Integer
134
BIND[8] = 1; // len
135
BIND[9] = 0x03; // v3
136
BIND[10] = 0x04; // String (bind dn)
137
BIND[11] = 0; // len
138
BIND[12] = 0x80; // ContextSpecific (choice)
139
BIND[13] = 0; // simple bind
140
141
// Start testing ^^
142
var ber = new BerReader(BIND);
143
t.equal(ber.readSequence(), 48, 'Not an ASN.1 Sequence');
144
t.equal(ber.length, 12, 'Message length should be 12');
145
t.equal(ber.readInt(), 4, 'Message id should have been 4');
146
t.equal(ber.readSequence(), 96, 'Bind Request should have been 96');
147
t.equal(ber.length, 7, 'Bind length should have been 7');
148
t.equal(ber.readInt(), 3, 'LDAP version should have been 3');
149
t.equal(ber.readString(), '', 'Bind DN should have been empty');
150
t.equal(ber.length, 0, 'string length should have been 0');
151
t.equal(ber.readByte(), 0x80, 'Should have been ContextSpecific (choice)');
152
t.equal(ber.readByte(), 0, 'Should have been simple bind');
153
t.equal(null, ber.readByte(), 'Should be out of data');
154
t.end();
155
});
156
157
158
test('long string', function(t) {
159
var buf = new Buffer(256);
160
var o;
161
var s =
162
'2;649;CN=Red Hat CS 71GA Demo,O=Red Hat CS 71GA Demo,C=US;' +
163
'CN=RHCS Agent - admin01,UID=admin01,O=redhat,C=US [1] This is ' +
164
'Teena Vradmin\'s description.';
165
buf[0] = 0x04;
166
buf[1] = 0x81;
167
buf[2] = 0x94;
168
buf.write(s, 3);
169
var ber = new BerReader(buf.slice(0, 3 + s.length));
170
t.equal(ber.readString(), s);
171
t.end();
172
});
173
174