summaryrefslogtreecommitdiff
path: root/tests/node_compat
diff options
context:
space:
mode:
Diffstat (limited to 'tests/node_compat')
-rw-r--r--tests/node_compat/config.jsonc2
-rw-r--r--tests/node_compat/runner/TODO.md1
-rw-r--r--tests/node_compat/test/parallel/test-blocklist.js291
3 files changed, 293 insertions, 1 deletions
diff --git a/tests/node_compat/config.jsonc b/tests/node_compat/config.jsonc
index 27cf6afb8..6a61c4e63 100644
--- a/tests/node_compat/config.jsonc
+++ b/tests/node_compat/config.jsonc
@@ -19,6 +19,7 @@
],
"parallel": [
"test-assert.js",
+ "test-blocklist.js",
"test-buffer-alloc.js",
"test-buffer-arraybuffer.js",
"test-buffer-from.js",
@@ -162,6 +163,7 @@
"test-assert-strict-exists.js",
"test-assert.js",
"test-bad-unicode.js",
+ "test-blocklist.js",
"test-btoa-atob.js",
"test-buffer-alloc.js",
"test-buffer-arraybuffer.js",
diff --git a/tests/node_compat/runner/TODO.md b/tests/node_compat/runner/TODO.md
index e24c82b75..4f397cc21 100644
--- a/tests/node_compat/runner/TODO.md
+++ b/tests/node_compat/runner/TODO.md
@@ -222,7 +222,6 @@ NOTE: This file should not be manually edited. Please edit `tests/node_compat/co
- [parallel/test-blob-file-backed.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-blob-file-backed.js)
- [parallel/test-blob.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-blob.js)
- [parallel/test-blocklist-clone.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-blocklist-clone.js)
-- [parallel/test-blocklist.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-blocklist.js)
- [parallel/test-bootstrap-modules.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-bootstrap-modules.js)
- [parallel/test-broadcastchannel-custom-inspect.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-broadcastchannel-custom-inspect.js)
- [parallel/test-buffer-backing-arraybuffer.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-buffer-backing-arraybuffer.js)
diff --git a/tests/node_compat/test/parallel/test-blocklist.js b/tests/node_compat/test/parallel/test-blocklist.js
new file mode 100644
index 000000000..fd63f51ff
--- /dev/null
+++ b/tests/node_compat/test/parallel/test-blocklist.js
@@ -0,0 +1,291 @@
+// deno-fmt-ignore-file
+// deno-lint-ignore-file
+
+// Copyright Joyent and Node contributors. All rights reserved. MIT license.
+// Taken from Node 18.12.1
+// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
+
+'use strict';
+
+require('../common');
+
+const {
+ BlockList,
+ SocketAddress,
+} = require('net');
+const assert = require('assert');
+const util = require('util');
+
+{
+ const blockList = new BlockList();
+
+ [1, [], {}, null, 1n, undefined, null].forEach((i) => {
+ assert.throws(() => blockList.addAddress(i), {
+ code: 'ERR_INVALID_ARG_TYPE'
+ });
+ });
+
+ [1, [], {}, null, 1n, null].forEach((i) => {
+ assert.throws(() => blockList.addAddress('1.1.1.1', i), {
+ code: 'ERR_INVALID_ARG_TYPE'
+ });
+ });
+
+ assert.throws(() => blockList.addAddress('1.1.1.1', 'foo'), {
+ code: 'ERR_INVALID_ARG_VALUE'
+ });
+
+ [1, [], {}, null, 1n, undefined, null].forEach((i) => {
+ assert.throws(() => blockList.addRange(i), {
+ code: 'ERR_INVALID_ARG_TYPE'
+ });
+ assert.throws(() => blockList.addRange('1.1.1.1', i), {
+ code: 'ERR_INVALID_ARG_TYPE'
+ });
+ });
+
+ [1, [], {}, null, 1n, null].forEach((i) => {
+ assert.throws(() => blockList.addRange('1.1.1.1', '1.1.1.2', i), {
+ code: 'ERR_INVALID_ARG_TYPE'
+ });
+ });
+
+ assert.throws(() => blockList.addRange('1.1.1.1', '1.1.1.2', 'foo'), {
+ code: 'ERR_INVALID_ARG_VALUE'
+ });
+}
+
+{
+ const blockList = new BlockList();
+ blockList.addAddress('1.1.1.1');
+ blockList.addAddress('8592:757c:efae:4e45:fb5d:d62a:0d00:8e17', 'ipv6');
+ blockList.addAddress('::ffff:1.1.1.2', 'ipv6');
+
+ assert(blockList.check('1.1.1.1'));
+ assert(!blockList.check('1.1.1.1', 'ipv6'));
+ assert(!blockList.check('8592:757c:efae:4e45:fb5d:d62a:0d00:8e17'));
+ assert(blockList.check('8592:757c:efae:4e45:fb5d:d62a:0d00:8e17', 'ipv6'));
+
+ assert(blockList.check('::ffff:1.1.1.1', 'ipv6'));
+ assert(blockList.check('::ffff:1.1.1.1', 'IPV6'));
+
+ assert(blockList.check('1.1.1.2'));
+
+ assert(!blockList.check('1.2.3.4'));
+ assert(!blockList.check('::1', 'ipv6'));
+}
+
+{
+ const blockList = new BlockList();
+ const sa1 = new SocketAddress({ address: '1.1.1.1' });
+ const sa2 = new SocketAddress({
+ address: '8592:757c:efae:4e45:fb5d:d62a:0d00:8e17',
+ family: 'ipv6'
+ });
+ const sa3 = new SocketAddress({ address: '1.1.1.2' });
+
+ blockList.addAddress(sa1);
+ blockList.addAddress(sa2);
+ blockList.addAddress('::ffff:1.1.1.2', 'ipv6');
+
+ assert(blockList.check('1.1.1.1'));
+ assert(blockList.check(sa1));
+ assert(!blockList.check('1.1.1.1', 'ipv6'));
+ assert(!blockList.check('8592:757c:efae:4e45:fb5d:d62a:0d00:8e17'));
+ assert(blockList.check('8592:757c:efae:4e45:fb5d:d62a:0d00:8e17', 'ipv6'));
+ assert(blockList.check(sa2));
+
+ assert(blockList.check('::ffff:1.1.1.1', 'ipv6'));
+ assert(blockList.check('::ffff:1.1.1.1', 'IPV6'));
+
+ assert(blockList.check('1.1.1.2'));
+ assert(blockList.check(sa3));
+
+ assert(!blockList.check('1.2.3.4'));
+ assert(!blockList.check('::1', 'ipv6'));
+}
+
+{
+ const blockList = new BlockList();
+ blockList.addRange('1.1.1.1', '1.1.1.10');
+ blockList.addRange('::1', '::f', 'ipv6');
+
+ assert(!blockList.check('1.1.1.0'));
+ for (let n = 1; n <= 10; n++)
+ assert(blockList.check(`1.1.1.${n}`));
+ assert(!blockList.check('1.1.1.11'));
+
+ assert(!blockList.check('::0', 'ipv6'));
+ for (let n = 0x1; n <= 0xf; n++) {
+ assert(blockList.check(`::${n.toString(16)}`, 'ipv6'),
+ `::${n.toString(16)} check failed`);
+ }
+ assert(!blockList.check('::10', 'ipv6'));
+}
+
+{
+ const blockList = new BlockList();
+ const sa1 = new SocketAddress({ address: '1.1.1.1' });
+ const sa2 = new SocketAddress({ address: '1.1.1.10' });
+ const sa3 = new SocketAddress({ address: '::1', family: 'ipv6' });
+ const sa4 = new SocketAddress({ address: '::f', family: 'ipv6' });
+
+ blockList.addRange(sa1, sa2);
+ blockList.addRange(sa3, sa4);
+
+ assert(!blockList.check('1.1.1.0'));
+ for (let n = 1; n <= 10; n++)
+ assert(blockList.check(`1.1.1.${n}`));
+ assert(!blockList.check('1.1.1.11'));
+
+ assert(!blockList.check('::0', 'ipv6'));
+ for (let n = 0x1; n <= 0xf; n++) {
+ assert(blockList.check(`::${n.toString(16)}`, 'ipv6'),
+ `::${n.toString(16)} check failed`);
+ }
+ assert(!blockList.check('::10', 'ipv6'));
+}
+
+{
+ const blockList = new BlockList();
+ blockList.addSubnet('1.1.1.0', 16);
+ blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6');
+
+ assert(blockList.check('1.1.0.1'));
+ assert(blockList.check('1.1.1.1'));
+ assert(!blockList.check('1.2.0.1'));
+ assert(blockList.check('::ffff:1.1.0.1', 'ipv6'));
+
+ assert(blockList.check('8592:757c:efae:4e45:f::', 'ipv6'));
+ assert(blockList.check('8592:757c:efae:4e45::f', 'ipv6'));
+ assert(!blockList.check('8592:757c:efae:4f45::f', 'ipv6'));
+}
+
+{
+ const blockList = new BlockList();
+ const sa1 = new SocketAddress({ address: '1.1.1.0' });
+ const sa2 = new SocketAddress({ address: '1.1.1.1' });
+ blockList.addSubnet(sa1, 16);
+ blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6');
+
+ assert(blockList.check('1.1.0.1'));
+ assert(blockList.check(sa2));
+ assert(!blockList.check('1.2.0.1'));
+ assert(blockList.check('::ffff:1.1.0.1', 'ipv6'));
+
+ assert(blockList.check('8592:757c:efae:4e45:f::', 'ipv6'));
+ assert(blockList.check('8592:757c:efae:4e45::f', 'ipv6'));
+ assert(!blockList.check('8592:757c:efae:4f45::f', 'ipv6'));
+}
+
+{
+ const blockList = new BlockList();
+ blockList.addAddress('1.1.1.1');
+ blockList.addRange('10.0.0.1', '10.0.0.10');
+ blockList.addSubnet('8592:757c:efae:4e45::', 64, 'IpV6'); // Case insensitive
+
+ // const rulesCheck = [
+ // 'Subnet: IPv6 8592:757c:efae:4e45::/64',
+ // 'Range: IPv4 10.0.0.1-10.0.0.10',
+ // 'Address: IPv4 1.1.1.1',
+ // ];
+ // assert.deepStrictEqual(blockList.rules, rulesCheck);
+
+ assert(blockList.check('1.1.1.1'));
+ assert(blockList.check('10.0.0.5'));
+ assert(blockList.check('::ffff:10.0.0.5', 'ipv6'));
+ assert(blockList.check('8592:757c:efae:4e45::f', 'ipv6'));
+
+ assert(!blockList.check('123.123.123.123'));
+ assert(!blockList.check('8592:757c:efaf:4e45:fb5d:d62a:0d00:8e17', 'ipv6'));
+ assert(!blockList.check('::ffff:123.123.123.123', 'ipv6'));
+}
+
+{
+ // This test validates boundaries of non-aligned CIDR bit prefixes
+ const blockList = new BlockList();
+ blockList.addSubnet('10.0.0.0', 27);
+ blockList.addSubnet('8592:757c:efaf::', 51, 'ipv6');
+
+ for (let n = 0; n <= 31; n++)
+ assert(blockList.check(`10.0.0.${n}`));
+ assert(!blockList.check('10.0.0.32'));
+
+ assert(blockList.check('8592:757c:efaf:0:0:0:0:0', 'ipv6'));
+ assert(blockList.check('8592:757c:efaf:1fff:ffff:ffff:ffff:ffff', 'ipv6'));
+ assert(!blockList.check('8592:757c:efaf:2fff:ffff:ffff:ffff:ffff', 'ipv6'));
+}
+
+{
+ // Regression test for https://github.com/nodejs/node/issues/39074
+ const blockList = new BlockList();
+
+ blockList.addRange('10.0.0.2', '10.0.0.10');
+
+ // IPv4 checks against IPv4 range.
+ assert(blockList.check('10.0.0.2'));
+ assert(blockList.check('10.0.0.10'));
+ assert(!blockList.check('192.168.0.3'));
+ assert(!blockList.check('2.2.2.2'));
+ assert(!blockList.check('255.255.255.255'));
+
+ // IPv6 checks against IPv4 range.
+ assert(blockList.check('::ffff:0a00:0002', 'ipv6'));
+ assert(blockList.check('::ffff:0a00:000a', 'ipv6'));
+ assert(!blockList.check('::ffff:c0a8:0003', 'ipv6'));
+ assert(!blockList.check('::ffff:0202:0202', 'ipv6'));
+ assert(!blockList.check('::ffff:ffff:ffff', 'ipv6'));
+}
+
+{
+ const blockList = new BlockList();
+ assert.throws(() => blockList.addRange('1.1.1.2', '1.1.1.1'), /ERR_INVALID_ARG_VALUE/);
+}
+
+{
+ const blockList = new BlockList();
+ assert.throws(() => blockList.addSubnet(1), /ERR_INVALID_ARG_TYPE/);
+ assert.throws(() => blockList.addSubnet('1.1.1.1', ''),
+ /ERR_INVALID_ARG_TYPE/);
+ assert.throws(() => blockList.addSubnet('1.1.1.1', NaN), /ERR_OUT_OF_RANGE/);
+ assert.throws(() => blockList.addSubnet('', 1, 1), /ERR_INVALID_ARG_TYPE/);
+ assert.throws(() => blockList.addSubnet('', 1, ''), /ERR_INVALID_ARG_VALUE/);
+
+ assert.throws(() => blockList.addSubnet('1.1.1.1', -1, 'ipv4'),
+ /ERR_OUT_OF_RANGE/);
+ assert.throws(() => blockList.addSubnet('1.1.1.1', 33, 'ipv4'),
+ /ERR_OUT_OF_RANGE/);
+
+ assert.throws(() => blockList.addSubnet('::', -1, 'ipv6'),
+ /ERR_OUT_OF_RANGE/);
+ assert.throws(() => blockList.addSubnet('::', 129, 'ipv6'),
+ /ERR_OUT_OF_RANGE/);
+}
+
+{
+ const blockList = new BlockList();
+ assert.throws(() => blockList.check(1), /ERR_INVALID_ARG_TYPE/);
+ assert.throws(() => blockList.check('', 1), /ERR_INVALID_ARG_TYPE/);
+}
+
+{
+ const blockList = new BlockList();
+ const ret = util.inspect(blockList, { depth: -1 });
+ assert.strictEqual(ret, '[BlockList]');
+}
+
+{
+ const blockList = new BlockList();
+ const ret = util.inspect(blockList, { depth: null });
+ assert(ret.includes('rules: []'));
+}
+
+{
+ // Test for https://github.com/nodejs/node/issues/43360
+ const blocklist = new BlockList();
+ blocklist.addSubnet('1.1.1.1', 32, 'ipv4');
+
+ assert(blocklist.check('1.1.1.1'));
+ assert(!blocklist.check('1.1.1.2'));
+ assert(!blocklist.check('2.3.4.5'));
+}