* Copyright (C) 2014 Red Hat, Inc.
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
import * as utils from "./utils.js";
import cockpit from "cockpit";
import QUnit from "qunit-tests";
function assert_throws(assert, func, checks) {
assert.expect(checks.length);
checks.forEach(function(c) {
assert.throws(function() {
func(c);
});
});
}
QUnit.test("ip_prefix_from_text", function (assert) {
const checks = [
["0", 0],
["12", 12],
[" 12 ", 12]
];
assert.expect(checks.length);
checks.forEach(function(c) {
assert.strictEqual(utils.ip_prefix_from_text(c[0]), c[1]);
});
});
QUnit.test("ip_prefix_from_text invalids", function (assert) {
const checks = [
"",
"-1",
"foo",
"1foo",
"1.5",
"1 2 3"
];
assert_throws(assert, utils.ip_prefix_from_text, checks);
});
QUnit.test("ip_metric_from_text", function (assert) {
const checks = [
["", 0],
["0", 0],
["12", 12],
[" 12 ", 12]
];
assert.expect(checks.length);
checks.forEach(function(c) {
assert.strictEqual(utils.ip_metric_from_text(c[0]), c[1]);
});
});
QUnit.test("ip_metric_from_text invalids", function (assert) {
const checks = [
"-1",
"foo",
"1foo",
"1.5",
"1 2 3"
];
assert_throws(assert, utils.ip_metric_from_text, checks);
});
QUnit.test("ip4_to/from_text be", function (assert) {
const checks = [
["0.0.0.0", 0x00000000],
["255.255.255.255", 0xFFFFFFFF],
["1.2.3.4", 0x01020304],
[" 1.2.3.4 ", 0x01020304],
[" 1 . 2 . 3. 4 ", 0x01020304]
];
assert.expect(2 * checks.length);
utils.set_byteorder("be");
checks.forEach(function(c) {
assert.strictEqual(utils.ip4_to_text(c[1]), c[0].replaceAll(" ", ""));
assert.strictEqual(utils.ip4_from_text(c[0]), c[1]);
});
});
QUnit.test("ip4_to/from_text le", function (assert) {
const checks = [
["0.0.0.0", 0x00000000],
["255.255.255.255", 0xFFFFFFFF],
["1.2.3.4", 0x04030201],
[" 1.2.3.4 ", 0x04030201],
[" 1 . 2 . 3. 4 ", 0x04030201]
];
assert.expect(2 * checks.length);
utils.set_byteorder("le");
checks.forEach(function(c) {
assert.strictEqual(utils.ip4_to_text(c[1]), c[0].replaceAll(" ", ""));
assert.strictEqual(utils.ip4_from_text(c[0]), c[1]);
});
});
QUnit.test("ip4_from_text invalids", function (assert) {
const checks = [
"",
"0",
"0.0",
"0.0.0",
"0.0.0.0.0",
"-1.2.3.4",
"foo",
"1.foo.3.4",
"1foo.2.3.4",
"1.2.3.400",
"1,2,3,4",
"1 1.2.3 3.4"
];
assert_throws(assert, utils.ip4_from_text, checks);
});
QUnit.test("ip4_to_text zero", function (assert) {
utils.set_byteorder("be");
assert.strictEqual(utils.ip4_to_text(0, true), "");
});
QUnit.test("ip4_from_text empty", function (assert) {
utils.set_byteorder("be");
assert.strictEqual(utils.ip4_from_text("", true), 0);
});
QUnit.test("ip4_to/from_text invalid byteorder", function (assert) {
utils.set_byteorder(undefined);
assert.throws(function() { utils.ip4_from_text("1.2.3.4") });
assert.throws(function() { utils.ip4_to_text(0x01020304) });
});
QUnit.test("ip4_prefix_from_text", function (assert) {
const checks = [
"0.0.0.0",
" 128.0.0.0",
"192.0.0.0 ",
"224.0.0.0",
"240.0.0.0",
"248.0.0.0",
"252.0.0.0",
"254.0.0.0",
"255.0.0.0",
"255.128.0.0",
"255.192.0.0",
"255.224.0.0",
"255.240.0.0",
"255.248.0.0",
"255.252.0.0",
"255.254.0.0",
"255.255.0.0",
"255.255.128.0",
"255.255.192.0",
"255.255.224.0",
"255.255.240.0",
"255.255.248.0",
"255.255.252.0",
"255.255.254.0",
"255.255.255.0",
"255.255.255.128",
"255.255.255.192",
"255.255.255.224",
"255.255.255.240",
"255.255.255.248",
"255.255.255.252",
"255.255.255.254",
"255.255.255.255"
];
assert.expect(checks.length);
checks.forEach(function(c, i) {
assert.strictEqual(utils.ip4_prefix_from_text(c), i);
});
});
QUnit.test("ip4_prefix_from_text invalids", function (assert) {
const checks = [
"",
"-1",
"foo",
"1foo",
"1.5",
"0.0",
"0.0.0",
"0.0.0.0.0",
"1.2.3.4",
"255.255.255.8",
"255.192.0.10",
"224. 0. 0.0",
"240. 0.0 .0",
"252. 0.0.0"
];
assert_throws(assert, utils.ip4_prefix_from_text, checks);
});
QUnit.test("ip6_to/from_text", function (assert) {
const checks = [
[[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
"::"
],
[[0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F],
"1:203:405:607:809:a0b:c0d:e0f"
],
[[0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F],
" 1: 203 : 405: 607: 809:a0b :c0d:e0f"
],
];
assert.expect(2 * checks.length);
checks.forEach(function(c) {
assert.strictEqual(utils.ip6_to_text(cockpit.base64_encode(c[0])), c[1].replaceAll(" ", ""));
assert.deepEqual(cockpit.base64_decode(utils.ip6_from_text(c[1])), c[0]);
});
});
QUnit.test("ip6_from_text abbrevs", function (assert) {
const checks = [
["::",
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
],
["::1",
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01],
],
["1::",
[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
],
["1:2:3::2:1",
[0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01],
],
["2001::1",
[0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01],
],
];
checks.forEach(function(c) {
assert.deepEqual(cockpit.base64_decode(utils.ip6_from_text(c[0])), c[1]);
});
});
QUnit.test("ip6_from_text invalids", function (assert) {
const checks = [
"",
"0",
"0:0",
"0:0:0",
"0:0:0:0",
"0:0:0:0:0",
"0:0:0:0:0:0",
"0:0:0:0:0:0:0",
"0:0:0:0:0:0:0:0:0",
"foo",
"1:2:3:four:5:6:7:8",
"1:2:3:-4:5:6:7:8",
"1:2:3:4.0:5:6:7:8",
"1:2:3:4foo:5:6:7:8",
"1:2:3:10000:5:6:7:8",
"1::4::8",
"::8::",
"1:2:3:4 4:5:6:7:8",
];
assert_throws(assert, utils.ip6_from_text, checks);
});
QUnit.test("ip6_to_text zero", function (assert) {
const zero = [0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
];
assert.strictEqual(utils.ip6_to_text(cockpit.base64_encode(zero), true), "");
});
QUnit.test("ip6_from_text empty", function (assert) {
const zero = [0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
];
assert.deepEqual(cockpit.base64_decode(utils.ip6_from_text("", true)), zero);
});
QUnit.start();