react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / http-signature / node_modules / asn1 / tst / ber / writer.test.js
81159 views// Copyright 2011 Mark Cavage <[email protected]> All rights reserved.12var test = require('tap').test;3var sys = require('sys');45///--- Globals67var BerWriter;89var BerReader;101112///--- Tests1314test('load library', function(t) {15BerWriter = require('../../lib/index').BerWriter;16t.ok(BerWriter);17t.ok(new BerWriter());18t.end();19});202122test('write byte', function(t) {23var writer = new BerWriter();2425writer.writeByte(0xC2);26var ber = writer.buffer;2728t.ok(ber);29t.equal(ber.length, 1, 'Wrong length');30t.equal(ber[0], 0xC2, 'value wrong');3132t.end();33});343536test('write 1 byte int', function(t) {37var writer = new BerWriter();3839writer.writeInt(0x7f);40var ber = writer.buffer;4142t.ok(ber);43t.equal(ber.length, 3, 'Wrong length for an int: ' + ber.length);44t.equal(ber[0], 0x02, 'ASN.1 tag wrong (2) -> ' + ber[0]);45t.equal(ber[1], 0x01, 'length wrong(1) -> ' + ber[1]);46t.equal(ber[2], 0x7f, 'value wrong(3) -> ' + ber[2]);4748t.end();49});505152test('write 2 byte int', function(t) {53var writer = new BerWriter();5455writer.writeInt(0x7ffe);56var ber = writer.buffer;5758t.ok(ber);59t.equal(ber.length, 4, 'Wrong length for an int');60t.equal(ber[0], 0x02, 'ASN.1 tag wrong');61t.equal(ber[1], 0x02, 'length wrong');62t.equal(ber[2], 0x7f, 'value wrong (byte 1)');63t.equal(ber[3], 0xfe, 'value wrong (byte 2)');6465t.end();66});676869test('write 3 byte int', function(t) {70var writer = new BerWriter();7172writer.writeInt(0x7ffffe);73var ber = writer.buffer;7475t.ok(ber);76t.equal(ber.length, 5, 'Wrong length for an int');77t.equal(ber[0], 0x02, 'ASN.1 tag wrong');78t.equal(ber[1], 0x03, 'length wrong');79t.equal(ber[2], 0x7f, 'value wrong (byte 1)');80t.equal(ber[3], 0xff, 'value wrong (byte 2)');81t.equal(ber[4], 0xfe, 'value wrong (byte 3)');8283t.end();84});858687test('write 4 byte int', function(t) {88var writer = new BerWriter();8990writer.writeInt(0x7ffffffe);91var ber = writer.buffer;9293t.ok(ber);9495t.equal(ber.length, 6, 'Wrong length for an int');96t.equal(ber[0], 0x02, 'ASN.1 tag wrong');97t.equal(ber[1], 0x04, 'length wrong');98t.equal(ber[2], 0x7f, 'value wrong (byte 1)');99t.equal(ber[3], 0xff, 'value wrong (byte 2)');100t.equal(ber[4], 0xff, 'value wrong (byte 3)');101t.equal(ber[5], 0xfe, 'value wrong (byte 4)');102103t.end();104});105106107test('write boolean', function(t) {108var writer = new BerWriter();109110writer.writeBoolean(true);111writer.writeBoolean(false);112var ber = writer.buffer;113114t.ok(ber);115t.equal(ber.length, 6, 'Wrong length');116t.equal(ber[0], 0x01, 'tag wrong');117t.equal(ber[1], 0x01, 'length wrong');118t.equal(ber[2], 0xff, 'value wrong');119t.equal(ber[3], 0x01, 'tag wrong');120t.equal(ber[4], 0x01, 'length wrong');121t.equal(ber[5], 0x00, 'value wrong');122123t.end();124});125126127test('write string', function(t) {128var writer = new BerWriter();129writer.writeString('hello world');130var ber = writer.buffer;131132t.ok(ber);133t.equal(ber.length, 13, 'wrong length');134t.equal(ber[0], 0x04, 'wrong tag');135t.equal(ber[1], 11, 'wrong length');136t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value');137138t.end();139});140141test('write buffer', function(t) {142var writer = new BerWriter();143// write some stuff to start with144writer.writeString('hello world');145var ber = writer.buffer;146var buf = new Buffer([0x04, 0x0b, 0x30, 0x09, 0x02, 0x01, 0x0f, 0x01, 0x01,1470xff, 0x01, 0x01, 0xff]);148writer.writeBuffer(buf.slice(2, buf.length), 0x04);149ber = writer.buffer;150151t.ok(ber);152t.equal(ber.length, 26, 'wrong length');153t.equal(ber[0], 0x04, 'wrong tag');154t.equal(ber[1], 11, 'wrong length');155t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value');156t.equal(ber[13], buf[0], 'wrong tag');157t.equal(ber[14], buf[1], 'wrong length');158for (var i = 13, j = 0; i < ber.length && j < buf.length; i++, j++) {159t.equal(ber[i], buf[j], 'buffer contents not identical');160}161t.end();162});163164test('write string array', function(t) {165var writer = new BerWriter();166writer.writeStringArray(['hello world', 'fubar!']);167var ber = writer.buffer;168169t.ok(ber);170171t.equal(ber.length, 21, 'wrong length');172t.equal(ber[0], 0x04, 'wrong tag');173t.equal(ber[1], 11, 'wrong length');174t.equal(ber.slice(2, 13).toString('utf8'), 'hello world', 'wrong value');175176t.equal(ber[13], 0x04, 'wrong tag');177t.equal(ber[14], 6, 'wrong length');178t.equal(ber.slice(15).toString('utf8'), 'fubar!', 'wrong value');179180t.end();181});182183184test('resize internal buffer', function(t) {185var writer = new BerWriter({size: 2});186writer.writeString('hello world');187var ber = writer.buffer;188189t.ok(ber);190t.equal(ber.length, 13, 'wrong length');191t.equal(ber[0], 0x04, 'wrong tag');192t.equal(ber[1], 11, 'wrong length');193t.equal(ber.slice(2).toString('utf8'), 'hello world', 'wrong value');194195t.end();196});197198199test('sequence', function(t) {200var writer = new BerWriter({size: 25});201writer.startSequence();202writer.writeString('hello world');203writer.endSequence();204var ber = writer.buffer;205206t.ok(ber);207console.log(ber);208t.equal(ber.length, 15, 'wrong length');209t.equal(ber[0], 0x30, 'wrong tag');210t.equal(ber[1], 13, 'wrong length');211t.equal(ber[2], 0x04, 'wrong tag');212t.equal(ber[3], 11, 'wrong length');213t.equal(ber.slice(4).toString('utf8'), 'hello world', 'wrong value');214215t.end();216});217218219test('nested sequence', function(t) {220var writer = new BerWriter({size: 25});221writer.startSequence();222writer.writeString('hello world');223writer.startSequence();224writer.writeString('hello world');225writer.endSequence();226writer.endSequence();227var ber = writer.buffer;228229t.ok(ber);230t.equal(ber.length, 30, 'wrong length');231t.equal(ber[0], 0x30, 'wrong tag');232t.equal(ber[1], 28, 'wrong length');233t.equal(ber[2], 0x04, 'wrong tag');234t.equal(ber[3], 11, 'wrong length');235t.equal(ber.slice(4, 15).toString('utf8'), 'hello world', 'wrong value');236t.equal(ber[15], 0x30, 'wrong tag');237t.equal(ber[16], 13, 'wrong length');238t.equal(ber[17], 0x04, 'wrong tag');239t.equal(ber[18], 11, 'wrong length');240t.equal(ber.slice(19, 30).toString('utf8'), 'hello world', 'wrong value');241242t.end();243});244245246test('LDAP bind message', function(t) {247var dn = 'cn=foo,ou=unit,o=test';248var writer = new BerWriter();249writer.startSequence();250writer.writeInt(3); // msgid = 3251writer.startSequence(0x60); // ldap bind252writer.writeInt(3); // ldap v3253writer.writeString(dn);254writer.writeByte(0x80);255writer.writeByte(0x00);256writer.endSequence();257writer.endSequence();258var ber = writer.buffer;259260t.ok(ber);261t.equal(ber.length, 35, 'wrong length (buffer)');262t.equal(ber[0], 0x30, 'wrong tag');263t.equal(ber[1], 33, 'wrong length');264t.equal(ber[2], 0x02, 'wrong tag');265t.equal(ber[3], 1, 'wrong length');266t.equal(ber[4], 0x03, 'wrong value');267t.equal(ber[5], 0x60, 'wrong tag');268t.equal(ber[6], 28, 'wrong length');269t.equal(ber[7], 0x02, 'wrong tag');270t.equal(ber[8], 1, 'wrong length');271t.equal(ber[9], 0x03, 'wrong value');272t.equal(ber[10], 0x04, 'wrong tag');273t.equal(ber[11], dn.length, 'wrong length');274t.equal(ber.slice(12, 33).toString('utf8'), dn, 'wrong value');275t.equal(ber[33], 0x80, 'wrong tag');276t.equal(ber[34], 0x00, 'wrong len');277278t.end();279});280281282test('Write OID', function(t) {283var oid = '1.2.840.113549.1.1.1';284var writer = new BerWriter();285writer.writeOID(oid);286287var ber = writer.buffer;288t.ok(ber);289console.log(require('util').inspect(ber));290console.log(require('util').inspect(new Buffer([0x06, 0x09, 0x2a, 0x86,2910x48, 0x86, 0xf7, 0x0d,2920x01, 0x01, 0x01])));293294t.end();295});296297298