summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorWeijia Wang <381152119@qq.com>2018-09-03 20:28:31 +0800
committerWeijia Wang <381152119@qq.com>2018-09-11 16:58:16 +0800
commit8e73594a5c82de26ebc0b1daedb20b6d3053dd4b (patch)
tree22de63e750d65674da7fb2fcb9be12a71216c86e /test
parent121439a8ff0cd5e41517b3032890d5dab90ea44b (diff)
downloadandroid-node-v8-8e73594a5c82de26ebc0b1daedb20b6d3053dd4b.tar.gz
android-node-v8-8e73594a5c82de26ebc0b1daedb20b6d3053dd4b.tar.bz2
android-node-v8-8e73594a5c82de26ebc0b1daedb20b6d3053dd4b.zip
net: port isIPv6 to JS
Porting isIPv6() to JS makes it 10%-250% faster in most cases and reduces some C++ code. This change also adds tests for some edge cases. PR-URL: https://github.com/nodejs/node/pull/22673 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Roman Reiss <me@silverwind.io>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-net-isipv4.js46
-rw-r--r--test/parallel/test-net-isipv6.js244
2 files changed, 290 insertions, 0 deletions
diff --git a/test/parallel/test-net-isipv4.js b/test/parallel/test-net-isipv4.js
new file mode 100644
index 0000000000..ec04505ced
--- /dev/null
+++ b/test/parallel/test-net-isipv4.js
@@ -0,0 +1,46 @@
+'use strict';
+require('../common');
+const assert = require('assert');
+const net = require('net');
+
+const v4 = [
+ '0.0.0.0',
+ '8.8.8.8',
+ '127.0.0.1',
+ '100.100.100.100',
+ '192.168.0.1',
+ '18.101.25.153',
+ '123.23.34.2',
+ '172.26.168.134',
+ '212.58.241.131',
+ '128.0.0.0',
+ '23.71.254.72',
+ '223.255.255.255',
+ '192.0.2.235',
+ '99.198.122.146',
+ '46.51.197.88',
+ '173.194.34.134'
+];
+
+const v4not = [
+ '.100.100.100.100',
+ '100..100.100.100.',
+ '100.100.100.100.',
+ '999.999.999.999',
+ '256.256.256.256',
+ '256.100.100.100.100',
+ '123.123.123',
+ 'http://123.123.123',
+ '1000.2.3.4',
+ '999.2.3.4',
+ '0000000192.168.0.200',
+ '192.168.0.2000000000'
+];
+
+v4.forEach((ip) => {
+ assert.strictEqual(net.isIPv4(ip), true);
+});
+
+v4not.forEach((ip) => {
+ assert.strictEqual(net.isIPv4(ip), false);
+});
diff --git a/test/parallel/test-net-isipv6.js b/test/parallel/test-net-isipv6.js
new file mode 100644
index 0000000000..7ba379c3bd
--- /dev/null
+++ b/test/parallel/test-net-isipv6.js
@@ -0,0 +1,244 @@
+'use strict';
+require('../common');
+const assert = require('assert');
+const net = require('net');
+
+const v6 = [
+ '::',
+ '1::',
+ '::1',
+ '1::8',
+ '1::7:8',
+ '1:2:3:4:5:6:7:8',
+ '1:2:3:4:5:6::8',
+ '1:2:3:4:5:6:7::',
+ '1:2:3:4:5::7:8',
+ '1:2:3:4:5::8',
+ '1:2:3::8',
+ '1::4:5:6:7:8',
+ '1::6:7:8',
+ '1::3:4:5:6:7:8',
+ '1:2:3:4::6:7:8',
+ '1:2::4:5:6:7:8',
+ '::2:3:4:5:6:7:8',
+ '1:2::8',
+ '2001:0000:1234:0000:0000:C1C0:ABCD:0876',
+ '3ffe:0b00:0000:0000:0001:0000:0000:000a',
+ 'FF02:0000:0000:0000:0000:0000:0000:0001',
+ '0000:0000:0000:0000:0000:0000:0000:0001',
+ '0000:0000:0000:0000:0000:0000:0000:0000',
+ '::ffff:192.168.1.26',
+ '2::10',
+ 'ff02::1',
+ 'fe80::',
+ '2002::',
+ '2001:db8::',
+ '2001:0db8:1234::',
+ '::ffff:0:0',
+ '::ffff:192.168.1.1',
+ '1:2:3:4::8',
+ '1::2:3:4:5:6:7',
+ '1::2:3:4:5:6',
+ '1::2:3:4:5',
+ '1::2:3:4',
+ '1::2:3',
+ '::2:3:4:5:6:7',
+ '::2:3:4:5:6',
+ '::2:3:4:5',
+ '::2:3:4',
+ '::2:3',
+ '::8',
+ '1:2:3:4:5:6::',
+ '1:2:3:4:5::',
+ '1:2:3:4::',
+ '1:2:3::',
+ '1:2::',
+ '1:2:3:4::7:8',
+ '1:2:3::7:8',
+ '1:2::7:8',
+ '1:2:3:4:5:6:1.2.3.4',
+ '1:2:3:4:5::1.2.3.4',
+ '1:2:3:4::1.2.3.4',
+ '1:2:3::1.2.3.4',
+ '1:2::1.2.3.4',
+ '1::1.2.3.4',
+ '1:2:3:4::5:1.2.3.4',
+ '1:2:3::5:1.2.3.4',
+ '1:2::5:1.2.3.4',
+ '1::5:1.2.3.4',
+ '1::5:11.22.33.44',
+ 'fe80::217:f2ff:254.7.237.98',
+ 'fe80::217:f2ff:fe07:ed62',
+ '2001:DB8:0:0:8:800:200C:417A',
+ 'FF01:0:0:0:0:0:0:101',
+ '0:0:0:0:0:0:0:1',
+ '0:0:0:0:0:0:0:0',
+ '2001:DB8::8:800:200C:417A',
+ 'FF01::101',
+ '0:0:0:0:0:0:13.1.68.3',
+ '0:0:0:0:0:FFFF:129.144.52.38',
+ '::13.1.68.3',
+ '::FFFF:129.144.52.38',
+ 'fe80:0000:0000:0000:0204:61ff:fe9d:f156',
+ 'fe80:0:0:0:204:61ff:fe9d:f156',
+ 'fe80::204:61ff:fe9d:f156',
+ 'fe80:0:0:0:204:61ff:254.157.241.86',
+ 'fe80::204:61ff:254.157.241.86',
+ 'fe80::1',
+ '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
+ '2001:db8:85a3:0:0:8a2e:370:7334',
+ '2001:db8:85a3::8a2e:370:7334',
+ '2001:0db8:0000:0000:0000:0000:1428:57ab',
+ '2001:0db8:0000:0000:0000::1428:57ab',
+ '2001:0db8:0:0:0:0:1428:57ab',
+ '2001:0db8:0:0::1428:57ab',
+ '2001:0db8::1428:57ab',
+ '2001:db8::1428:57ab',
+ '::ffff:12.34.56.78',
+ '::ffff:0c22:384e',
+ '2001:0db8:1234:0000:0000:0000:0000:0000',
+ '2001:0db8:1234:ffff:ffff:ffff:ffff:ffff',
+ '2001:db8:a::123',
+ '::ffff:192.0.2.128',
+ '::ffff:c000:280',
+ 'a:b:c:d:e:f:f1:f2',
+ 'a:b:c::d:e:f:f1',
+ 'a:b:c::d:e:f',
+ 'a:b:c::d:e',
+ 'a:b:c::d',
+ '::a',
+ '::a:b:c',
+ '::a:b:c:d:e:f:f1',
+ 'a::',
+ 'a:b:c::',
+ 'a:b:c:d:e:f:f1::',
+ 'a:bb:ccc:dddd:000e:00f:0f::',
+ '0:a:0:a:0:0:0:a',
+ '0:a:0:0:a:0:0:a',
+ '2001:db8:1:1:1:1:0:0',
+ '2001:db8:1:1:1:0:0:0',
+ '2001:db8:1:1:0:0:0:0',
+ '2001:db8:1:0:0:0:0:0',
+ '2001:db8:0:0:0:0:0:0',
+ '2001:0:0:0:0:0:0:0',
+ 'A:BB:CCC:DDDD:000E:00F:0F::',
+ '0:0:0:0:0:0:0:a',
+ '0:0:0:0:a:0:0:0',
+ '0:0:0:a:0:0:0:0',
+ 'a:0:0:a:0:0:a:a',
+ 'a:0:0:a:0:0:0:a',
+ 'a:0:0:0:a:0:0:a',
+ 'a:0:0:0:a:0:0:0',
+ 'a:0:0:0:0:0:0:0',
+ 'fe80::7:8%eth0',
+ 'fe80::7:8%1'
+];
+
+const v6not = [
+ '',
+ '1:',
+ ':1',
+ '11:36:12',
+ '02001:0000:1234:0000:0000:C1C0:ABCD:0876',
+ '2001:0000:1234:0000:00001:C1C0:ABCD:0876',
+ '2001:0000:1234: 0000:0000:C1C0:ABCD:0876',
+ '2001:1:1:1:1:1:255Z255X255Y255',
+ '3ffe:0b00:0000:0001:0000:0000:000a',
+ 'FF02:0000:0000:0000:0000:0000:0000:0000:0001',
+ '3ffe:b00::1::a',
+ '::1111:2222:3333:4444:5555:6666::',
+ '1:2:3::4:5::7:8',
+ '12345::6:7:8',
+ '1::5:400.2.3.4',
+ '1::5:260.2.3.4',
+ '1::5:256.2.3.4',
+ '1::5:1.256.3.4',
+ '1::5:1.2.256.4',
+ '1::5:1.2.3.256',
+ '1::5:300.2.3.4',
+ '1::5:1.300.3.4',
+ '1::5:1.2.300.4',
+ '1::5:1.2.3.300',
+ '1::5:900.2.3.4',
+ '1::5:1.900.3.4',
+ '1::5:1.2.900.4',
+ '1::5:1.2.3.900',
+ '1::5:300.300.300.300',
+ '1::5:3000.30.30.30',
+ '1::400.2.3.4',
+ '1::260.2.3.4',
+ '1::256.2.3.4',
+ '1::1.256.3.4',
+ '1::1.2.256.4',
+ '1::1.2.3.256',
+ '1::300.2.3.4',
+ '1::1.300.3.4',
+ '1::1.2.300.4',
+ '1::1.2.3.300',
+ '1::900.2.3.4',
+ '1::1.900.3.4',
+ '1::1.2.900.4',
+ '1::1.2.3.900',
+ '1::300.300.300.300',
+ '1::3000.30.30.30',
+ '::400.2.3.4',
+ '::260.2.3.4',
+ '::256.2.3.4',
+ '::1.256.3.4',
+ '::1.2.256.4',
+ '::1.2.3.256',
+ '::300.2.3.4',
+ '::1.300.3.4',
+ '::1.2.300.4',
+ '::1.2.3.300',
+ '::900.2.3.4',
+ '::1.900.3.4',
+ '::1.2.900.4',
+ '::1.2.3.900',
+ '::300.300.300.300',
+ '::3000.30.30.30',
+ '2001:DB8:0:0:8:800:200C:417A:221',
+ 'FF01::101::2',
+ '1111:2222:3333:4444::5555:',
+ '1111:2222:3333::5555:',
+ '1111:2222::5555:',
+ '1111::5555:',
+ '::5555:',
+ ':::',
+ '1111:',
+ ':',
+ ':1111:2222:3333:4444::5555',
+ ':1111:2222:3333::5555',
+ ':1111:2222::5555',
+ ':1111::5555',
+ ':::5555',
+ '1.2.3.4:1111:2222:3333:4444::5555',
+ '1.2.3.4:1111:2222:3333::5555',
+ '1.2.3.4:1111:2222::5555',
+ '1.2.3.4:1111::5555',
+ '1.2.3.4::5555',
+ '1.2.3.4::',
+ 'fe80:0000:0000:0000:0204:61ff:254.157.241.086',
+ '123',
+ 'ldkfj',
+ '2001::FFD3::57ab',
+ '2001:db8:85a3::8a2e:37023:7334',
+ '2001:db8:85a3::8a2e:370k:7334',
+ '1:2:3:4:5:6:7:8:9',
+ '1::2::3',
+ '1:::3:4:5',
+ '1:2:3::4:5:6:7:8:9',
+ '::ffff:2.3.4',
+ '::ffff:257.1.2.3',
+ '::ffff:12345678901234567890.1.26',
+ '2001:0000:1234:0000:0000:C1C0:ABCD:0876 0',
+ '02001:0000:1234:0000:0000:C1C0:ABCD:0876'
+];
+
+v6.forEach((ip) => {
+ assert.strictEqual(net.isIPv6(ip), true);
+});
+
+v6not.forEach((ip) => {
+ assert.strictEqual(net.isIPv6(ip), false);
+});