UNPKG

ip-anonymize

Version:

Anonymize IP addresses, works with IPv4 and IPv6

138 lines (124 loc) 6.85 kB
/* global describe, it */ const anonymize = require('../index.js') const assert = require('assert') describe('AnonymizeTest', function () { describe('#anonymize()', function () { it('should return null when input is undefined', function () { assert.equal(anonymize(), null) }) it('should return null when input is not a string', function () { assert.equal(anonymize({}), null) assert.equal(anonymize(8), null) assert.equal(anonymize(['hello']), null) }) it('should return null when input string is not a valid IP', function () { assert.equal(anonymize('8'), null) assert.equal(anonymize('148'), null) assert.equal(anonymize('0.0.0.0.0'), null) assert.equal(anonymize('0.0.0.0e'), null) assert.equal(anonymize('0.256.0.0'), null) assert.equal(anonymize('::1:'), null) assert.equal(anonymize('::1::2'), null) assert.equal(anonymize('ff:ff:ff:ff:ff:ff:ff'), null) assert.equal(anonymize('ff:ff:ff:ff:ff:ff:ff:ff:ff'), null) assert.equal(anonymize('ff:::ff'), null) assert.equal(anonymize('ff:::f:f'), null) assert.equal(anonymize('::ff::192.168.0.1'), null) assert.equal(anonymize('a::b:0:0:0:0:0:f'), null) }) it('should anonymize IPv4 correctly (default 24)', function () { assert.equal(anonymize('192.168.0.1'), '192.168.0.0') assert.equal(anonymize('192.168.0.132'), '192.168.0.0') assert.equal(anonymize('1.1.1.1'), '1.1.1.0') assert.equal(anonymize('0.0.0.0'), '0.0.0.0') assert.equal(anonymize('255.255.255.255'), '255.255.255.0') assert.equal(anonymize('172.0.0.1'), '172.0.0.0') }) it('should anonymize IPv6 correctly (default 24)', function () { assert.equal(anonymize('::'), '::') assert.equal(anonymize('::1'), '::') assert.equal(anonymize('0:0:0:0:0:0:0:0'), '::') assert.equal(anonymize('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'), 'ffff:ff00::') assert.equal(anonymize('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 16, 16), 'ffff::') }) it('should anonymize IPv6_4 correctly (default 24)', function () { // This case is IPv4-compatible IPv6 address assert.equal(anonymize('0:0:0:0:0:0:192.168.0.1'), '::192.168.0.0') assert.equal(anonymize('ff::0:0:192.168.0.1'), 'ff::0.0.0.0') assert.equal(anonymize('::ff:0:192.168.0.1'), '::0.0.0.0') assert.equal(anonymize('ffff:ffff::ff:0:192.168.0.1'), 'ffff:ff00::0.0.0.0') assert.equal(anonymize('1::ffff:192.168.0.1'), '1::0.0.0.0') assert.equal(anonymize('::fffe:192.168.0.1'), '::0.0.0.0') assert.equal(anonymize('::00ff:192.168.0.1'), '::0.0.0.0') }) it('should handle IPv4 compatible IPv6 addresses (default 24)', function () { assert.equal(anonymize('::123.123.123.123'), '::123.123.123.0') assert.equal(anonymize('0:0::192.168.42.20'), '::192.168.42.0') }) it('should handle IPv4 compatible IPv6 addresses', function () { assert.equal(anonymize('::123.123.123.123', 31, 0), '::123.123.123.122') assert.equal(anonymize('::123.123.123.123', 0, 31), '::0.0.0.0') assert.equal(anonymize('0:0::192.168.42.20', 31, 0), '::192.168.42.20') }) it('should handle IPv4 mapped IPv6 addresses (default 24)', function () { assert.equal(anonymize('::FFFF:123.123.123.123'), '::ffff:123.123.123.0') }) it('should handle IPv4 mapped IPv6 addresses', function () { assert.equal(anonymize('::FFFF:123.123.123.123', 31, 0), '::ffff:123.123.123.122') assert.equal(anonymize('::FFFF:123.123.123.123', 0, 0), '::ffff:0.0.0.0') }) it('should anonymize IPv4 with odd mask', function () { assert.equal(anonymize('255.255.255.0', 1), '128.0.0.0') assert.equal(anonymize('255.255.255.0', 3), '224.0.0.0') }) it('should anonymize IPv6 with odd mask', function () { assert.equal(anonymize('ffff::', 1, 1), '8000::') assert.equal(anonymize('ffff::', 3, 3), 'e000::') assert.equal(anonymize('ffff::', 5, 5), 'f800::') }) it('should anonymize IPv6_4 with odd mask', function () { assert.equal(anonymize('ffff::8.8.8.8', 1, 1), '8000::0.0.0.0') assert.equal(anonymize('ffff::8.8.8.8', 3, 3), 'e000::0.0.0.0') assert.equal(anonymize('ffff::8.8.8.8', 5, 5), 'f800::0.0.0.0') }) it('should use the mask arguments in correct order', function () { assert.equal(anonymize('ffff::8.8.8.8', 0, 128), 'ffff::8.8.8.8') assert.equal(anonymize('ffff::f', 0, 128), 'ffff::f') assert.equal(anonymize('8.8.8.8', 0, 128), '0.0.0.0') assert.equal(anonymize('ffff::8.8.8.8', 128, 0), '::0.0.0.0') assert.equal(anonymize('ffff::f', 128, 0), '::') assert.equal(anonymize('8.8.8.8', 128, 0), '8.8.8.8') }) it('should anonymize IPv4 correctly preserving all bits', function () { assert.equal(anonymize('172.0.0.1', 32), '172.0.0.1') assert.equal(anonymize('0.0.0.0', 32), '0.0.0.0') assert.equal(anonymize('192.168.0.1', 32), '192.168.0.1') assert.equal(anonymize('10.0.1.100', 32), '10.0.1.100') }) it('should anonymize IPv6 correctly preserving all bits', function () { assert.equal(anonymize('ffff::ffff', 128, 128), 'ffff::ffff') assert.equal(anonymize('a:b:c:d:e:f:a:b', 128, 128), 'a:b:c:d:e:f:a:b') assert.equal(anonymize('0:b:c:d:e:f:a:b', 128, 128), '0:b:c:d:e:f:a:b') assert.equal(anonymize('0:0:c:d:e:f:a:b', 128, 128), '::c:d:e:f:a:b') assert.equal(anonymize('ffff::ff:ff', 128, 128), 'ffff::ff:ff') assert.equal(anonymize('::ff:0', 128, 128), '::ff:0') assert.equal(anonymize('0:0:ff:0::ff:0', 128, 128), '0:0:ff::ff:0') assert.equal(anonymize('0::ff:0:0:ff:0', 128, 128), '::ff:0:0:ff:0') assert.equal(anonymize('f:f::', 128, 128), 'f:f::') assert.equal(anonymize('::f:f', 128, 128), '::f:f') assert.equal(anonymize('::a:b', 128, 128), '::a:b') assert.equal(anonymize('a::b:0:0:0:0:f', 128, 128), 'a:0:b::f') }) it('should anonymize IPv6_4 correctly preserving all bits', function () { assert.equal(anonymize('::ff:0:192.168.0.1', 128, 128), '::ff:0:192.168.0.1') assert.equal(anonymize('a:b:c:d:e:f:192.168.0.1', 128, 128), 'a:b:c:d:e:f:192.168.0.1') assert.equal(anonymize('0:b:c:d:e:f:192.168.0.1', 128, 128), '0:b:c:d:e:f:192.168.0.1') assert.equal(anonymize('0:0:c:d:e:f:192.168.0.1', 128, 128), '::c:d:e:f:192.168.0.1') assert.equal(anonymize('f:f::192.168.0.1', 128, 128), 'f:f::192.168.0.1') assert.equal(anonymize('f:f::0.0.0.1', 128, 128), 'f:f::0.0.0.1') assert.equal(anonymize('f:f::0:0.0.0.1', 128, 128), 'f:f::0.0.0.1') assert.equal(anonymize('f:f::0:0.0.0.1', 128, 128), 'f:f::0.0.0.1') assert.equal(anonymize('f:f::0:0:0.0.0.1', 128, 128), 'f:f::0.0.0.1') }) }) })