UNPKG

socksv5

Version:

SOCKS protocol version 5 server and client implementations for node.js

176 lines (133 loc) 4.73 kB
var sprintf = require('sprintf').sprintf; var should = require('chai').should(); var v4 = require('../ipv6').v4; // A convenience function to convert a list of IPv4 address notations // to v4.Address instances function notationsToAddresseses(notations) { var addresses = []; notations.forEach(function (notation) { addresses.push(new v4.Address(notation)); }); return addresses; } describe('v4', function () { describe('A correct address', function () { var topic = new v4.Address('127.0.0.1'); it('validates as correct', function () { topic.isCorrect().should.equal(true); should.equal(topic.correctForm(), '127.0.0.1'); }); }); describe('An address with a subnet', function () { var topic = new v4.Address('127.0.0.1/16'); it('is contained by an identical address with an identical subnet', function () { var same = new v4.Address('127.0.0.1/16'); topic.isInSubnet(same).should.equal(true); }); }); describe('A small subnet', function () { var topic = new v4.Address('127.0.0.1/16'); it('is contained by larger subnets', function () { for (var i = 15; i > 0; i--) { var larger = new v4.Address(sprintf('127.0.0.1/%d', i)); topic.isInSubnet(larger).should.equal(true); } }); }); describe('A large subnet', function () { var topic = new v4.Address('127.0.0.1/8'); it('is not contained by smaller subnets', function () { for (var i = 9; i <= 32; i++) { var smaller = new v4.Address(sprintf('127.0.0.1/%d', i)); topic.isInSubnet(smaller).should.equal(false); } }); }); describe('An integer v4 address', function () { var topic = new v4.Address.fromInteger(432432423); it('validates', function () { topic.isValid().should.equal(true); }); it('parses correctly', function () { topic.address.should.equal('25.198.101.39'); topic.subnet.should.equal('/32'); topic.subnetMask.should.equal(32); }); it('should match an address from its hex representation', function () { var hex = v4.Address.fromHex('19c66527'); hex.address.should.equal('25.198.101.39'); hex.subnet.should.equal('/32'); hex.subnetMask.should.equal(32); }); }); describe('An address with a subnet', function () { var topic = new v4.Address('127.0.0.1/16'); it('validates', function () { topic.isValid().should.equal(true); }); it('parses the subnet', function () { should.equal(topic.subnet, '/16'); }); it('is in its own subnet', function () { topic.isInSubnet(new v4.Address('127.0.0.1/16')).should.equal(true); }); it('is not in another subnet', function () { topic.isInSubnet(new v4.Address('192.168.0.1/16')).should.equal(false); }); }); describe('Creating an address from a BigInteger', function () { var topic = v4.Address.fromBigInteger(2130706433); it('should parse correctly', function () { topic.isValid().should.equal(true); topic.correctForm().should.equal('127.0.0.1'); }); }); describe('Converting an address to a BigInteger', function () { var topic = new v4.Address('127.0.0.1'); it('should convert properly', function () { topic.bigInteger().intValue().should.equal(2130706433); }); }); describe('Creating an address from hex', function () { var topic = v4.Address.fromHex('7f:00:00:01'); it('should parse correctly', function () { topic.isValid().should.equal(true); topic.correctForm().should.equal('127.0.0.1'); }); }); describe('Converting an address to hex', function () { var topic = new v4.Address('127.0.0.1'); it('should convert correctly', function () { topic.toHex().should.equal('7f:00:00:01'); }); }); describe('Converting an address to an array', function () { var topic = new v4.Address('127.0.0.1'); it('should convert correctly', function () { var a = topic.toArray(); a.should.be.an.instanceOf(Array).and.have.lengthOf(4); a[0].should.equal(127); a[1].should.equal(0); a[2].should.equal(0); a[3].should.equal(1); }); }); describe('A different notation of the same address', function () { var addresses = notationsToAddresseses([ "127.0.0.1/32", "127.0.0.1/032", "127.000.000.001/032", "127.000.000.001/32", "127.0.0.1", "127.000.000.001", "127.000.0.1" ]); it('is parsed to the same result', function () { addresses.forEach(function (topic) { should.equal(topic.correctForm(), '127.0.0.1'); should.equal(topic.subnetMask, 32); }); }); }); });