Skip to main content
Module

x/cidr2range/convert_test.ts

Convert utilities for CIDR and IP address
Latest
File
import { assertEquals, assertThrows,} from "https://deno.land/std@0.147.0/testing/asserts.ts";import { cidr2range, ipv42num, ipv62num, num2ipv4, num2ipv6, range2cidr,} from "./convert.ts";
type CidrTestData = { cidr: string; testName?: string; range?: string[];};
Deno.test("cidr2range", async (t) => { for ( const { cidr, range } of [ { cidr: "1.1.1.1/32", range: ["1.1.1.1", "1.1.1.1"] }, { cidr: "1.1.1.0/24", range: ["1.1.1.0", "1.1.1.255"] }, { cidr: "1.1.0.0/16", range: ["1.1.0.0", "1.1.255.255"] }, { cidr: "1.0.0.0/8", range: ["1.0.0.0", "1.255.255.255"] }, { cidr: "1.1.1.2/29", range: ["1.1.1.0", "1.1.1.7"] }, { cidr: "1.1.1.1/25", range: ["1.1.1.0", "1.1.1.127"] }, { cidr: "2001:4860:4860::8888/32", range: [ "2001:4860::", "2001:4860:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF".toLowerCase(), ], }, { cidr: "2001:4860:4860::8888/128", range: [ "2001:4860:4860::8888", "2001:4860:4860::8888", ], }, ] as CidrTestData[] ) { await t.step(cidr, () => { assertEquals(cidr2range(cidr), range); }); }
for ( const { cidr, testName } of [ { cidr: "111111111", testName: "cidr is invalid 1" }, { cidr: "1.1.1.1.1", testName: "cidr is invalid 2" }, { cidr: "256.1.1.1", testName: "cidr is invalid 3" }, { cidr: "1.256.1.1", testName: "cidr is invalid 4" }, { cidr: "1.1.1.256", testName: "cidr is invalid 5" }, { cidr: "1/32.1.1.1", testName: "cidr is invalid 6" }, { cidr: "1.1/32.1.1", testName: "cidr is invalid 7" }, { cidr: "1.1.1/32.1", testName: "cidr is invalid 8" }, { cidr: "1.1.1.1/32/1", testName: "cidr is invalid 9" }, { cidr: "1.1.1.1/aaaa", testName: "cidr is invalid 10" }, ] as CidrTestData[] ) { await t.step(testName!, () => { assertThrows(() => cidr2range(cidr), "cidr is invalid"); }); }});
Deno.test("range2cidr", async (t) => { await t.step("ipv4 range to cidr", () => { const ipRange = ["10.0.0.1", "10.0.0.10"]; assertEquals(range2cidr(ipRange), [ "10.0.0.1/32", "10.0.0.2/31", "10.0.0.4/30", "10.0.0.8/31", "10.0.0.10/32", ]); });
for ( const { range, cidr } of [ { range: [ "2001:4860:4860:0000:0000:0000:0000:0000", "2001:4860:4860:0000:0000:0000:0000:0001", ], cidr: ["2001:4860:4860::/127"], }, { range: [ "2001:4860:4860:0000:0000:0000:0000:8888", "2001:4860:4860:0000:0000:0000:1111:1111", ], cidr: [ "2001:4860:4860::8888/125", "2001:4860:4860::8890/124", "2001:4860:4860::88a0/123", "2001:4860:4860::88c0/122", "2001:4860:4860::8900/120", "2001:4860:4860::8a00/119", "2001:4860:4860::8c00/118", "2001:4860:4860::9000/116", "2001:4860:4860::a000/115", "2001:4860:4860::c000/114", "2001:4860:4860::1:0/112", "2001:4860:4860::2:0/111", "2001:4860:4860::4:0/110", "2001:4860:4860::8:0/109", "2001:4860:4860::10:0/108", "2001:4860:4860::20:0/107", "2001:4860:4860::40:0/106", "2001:4860:4860::80:0/105", "2001:4860:4860::100:0/104", "2001:4860:4860::200:0/103", "2001:4860:4860::400:0/102", "2001:4860:4860::800:0/101", "2001:4860:4860::1000:0/104", "2001:4860:4860::1100:0/108", "2001:4860:4860::1110:0/112", "2001:4860:4860::1111:0/116", "2001:4860:4860::1111:1000/120", "2001:4860:4860::1111:1100/124", "2001:4860:4860::1111:1110/127", ], }, ] ) { await t.step("ipv6 range to cidr", () => { assertEquals(range2cidr(range), cidr); }); }});
Deno.test("num2ipv4 and ipv42num", async (t) => { for ( const ipAddress of [ "1.1.1.1", "10.1.1.1", "1.10.1.1", "1.1.10.1", "1.1.1.10", "100.1.1.1", "1.100.1.1", "1.1.100.1", "1.1.1.100", "0.0.0.0", "255.255.255.255", ] ) { await t.step(ipAddress, () => { assertEquals(num2ipv4(ipv42num(ipAddress)), ipAddress); }); }});
Deno.test("ipv62num", async (t) => { for ( const ipAddress of [ "2001:4860:4860::8888", "2001:4860:4860:1111:1111:1111:1111:8888", "3FFE:FFFF:7654:FEDA:1245:BA98:3210:4562", ] ) { await t.step(ipAddress, () => { assertEquals(num2ipv6(ipv62num(ipAddress)), ipAddress.toLowerCase()); }); }});