react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / http-signature / node_modules / asn1 / tst / ber / reader.test.js
81159 views// Copyright 2011 Mark Cavage <[email protected]> All rights reserved.12var test = require('tap').test;3456///--- Globals78var BerReader;9101112///--- Tests1314test('load library', function(t) {15BerReader = require('../../lib/index').BerReader;16t.ok(BerReader);17try {18new BerReader();19t.fail('Should have thrown');20} catch (e) {21t.ok(e instanceof TypeError, 'Should have been a type error');22}23t.end();24});252627test('read byte', function(t) {28var reader = new BerReader(new Buffer([0xde]));29t.ok(reader);30t.equal(reader.readByte(), 0xde, 'wrong value');31t.end();32});333435test('read 1 byte int', function(t) {36var reader = new BerReader(new Buffer([0x02, 0x01, 0x03]));37t.ok(reader);38t.equal(reader.readInt(), 0x03, 'wrong value');39t.equal(reader.length, 0x01, 'wrong length');40t.end();41});424344test('read 2 byte int', function(t) {45var reader = new BerReader(new Buffer([0x02, 0x02, 0x7e, 0xde]));46t.ok(reader);47t.equal(reader.readInt(), 0x7ede, 'wrong value');48t.equal(reader.length, 0x02, 'wrong length');49t.end();50});515253test('read 3 byte int', function(t) {54var reader = new BerReader(new Buffer([0x02, 0x03, 0x7e, 0xde, 0x03]));55t.ok(reader);56t.equal(reader.readInt(), 0x7ede03, 'wrong value');57t.equal(reader.length, 0x03, 'wrong length');58t.end();59});606162test('read 4 byte int', function(t) {63var reader = new BerReader(new Buffer([0x02, 0x04, 0x7e, 0xde, 0x03, 0x01]));64t.ok(reader);65t.equal(reader.readInt(), 0x7ede0301, 'wrong value');66t.equal(reader.length, 0x04, 'wrong length');67t.end();68});697071test('read boolean true', function(t) {72var reader = new BerReader(new Buffer([0x01, 0x01, 0xff]));73t.ok(reader);74t.equal(reader.readBoolean(), true, 'wrong value');75t.equal(reader.length, 0x01, 'wrong length');76t.end();77});787980test('read boolean false', function(t) {81var reader = new BerReader(new Buffer([0x01, 0x01, 0x00]));82t.ok(reader);83t.equal(reader.readBoolean(), false, 'wrong value');84t.equal(reader.length, 0x01, 'wrong length');85t.end();86});878889test('read enumeration', function(t) {90var reader = new BerReader(new Buffer([0x0a, 0x01, 0x20]));91t.ok(reader);92t.equal(reader.readEnumeration(), 0x20, 'wrong value');93t.equal(reader.length, 0x01, 'wrong length');94t.end();95});969798test('read string', function(t) {99var dn = 'cn=foo,ou=unit,o=test';100var buf = new Buffer(dn.length + 2);101buf[0] = 0x04;102buf[1] = Buffer.byteLength(dn);103buf.write(dn, 2);104var reader = new BerReader(buf);105t.ok(reader);106t.equal(reader.readString(), dn, 'wrong value');107t.equal(reader.length, dn.length, 'wrong length');108t.end();109});110111112test('read sequence', function(t) {113var reader = new BerReader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff]));114t.ok(reader);115t.equal(reader.readSequence(), 0x30, 'wrong value');116t.equal(reader.length, 0x03, 'wrong length');117t.equal(reader.readBoolean(), true, 'wrong value');118t.equal(reader.length, 0x01, 'wrong length');119t.end();120});121122123test('anonymous LDAPv3 bind', function(t) {124var BIND = new Buffer(14);125BIND[0] = 0x30; // Sequence126BIND[1] = 12; // len127BIND[2] = 0x02; // ASN.1 Integer128BIND[3] = 1; // len129BIND[4] = 0x04; // msgid (make up 4)130BIND[5] = 0x60; // Bind Request131BIND[6] = 7; // len132BIND[7] = 0x02; // ASN.1 Integer133BIND[8] = 1; // len134BIND[9] = 0x03; // v3135BIND[10] = 0x04; // String (bind dn)136BIND[11] = 0; // len137BIND[12] = 0x80; // ContextSpecific (choice)138BIND[13] = 0; // simple bind139140// Start testing ^^141var ber = new BerReader(BIND);142t.equal(ber.readSequence(), 48, 'Not an ASN.1 Sequence');143t.equal(ber.length, 12, 'Message length should be 12');144t.equal(ber.readInt(), 4, 'Message id should have been 4');145t.equal(ber.readSequence(), 96, 'Bind Request should have been 96');146t.equal(ber.length, 7, 'Bind length should have been 7');147t.equal(ber.readInt(), 3, 'LDAP version should have been 3');148t.equal(ber.readString(), '', 'Bind DN should have been empty');149t.equal(ber.length, 0, 'string length should have been 0');150t.equal(ber.readByte(), 0x80, 'Should have been ContextSpecific (choice)');151t.equal(ber.readByte(), 0, 'Should have been simple bind');152t.equal(null, ber.readByte(), 'Should be out of data');153t.end();154});155156157test('long string', function(t) {158var buf = new Buffer(256);159var o;160var s =161'2;649;CN=Red Hat CS 71GA Demo,O=Red Hat CS 71GA Demo,C=US;' +162'CN=RHCS Agent - admin01,UID=admin01,O=redhat,C=US [1] This is ' +163'Teena Vradmin\'s description.';164buf[0] = 0x04;165buf[1] = 0x81;166buf[2] = 0x94;167buf.write(s, 3);168var ber = new BerReader(buf.slice(0, 3 + s.length));169t.equal(ber.readString(), s);170t.end();171});172173174