Spaces:
Paused
Paused
| import { assertEquals, assertThrows } from "./deps.ts"; | |
| import { generateRandomIPv6 } from "../lib/helpers/ipv6Rotation.ts"; | |
| Deno.test("generateRandomIPv6 - generates valid IPv6 addresses", () => { | |
| const ipv6Block = "2001:db8::/32"; | |
| // Generate multiple addresses to ensure randomness | |
| const addresses = new Set<string>(); | |
| for (let i = 0; i < 100; i++) { | |
| const addr = generateRandomIPv6(ipv6Block); | |
| addresses.add(addr); | |
| // Verify the address starts with the correct prefix | |
| // For /32 block, the first 32 bits should match | |
| // 2001:db8 = first 32 bits | |
| const parts = addr.split(":"); | |
| assertEquals(parts[0], "2001"); | |
| assertEquals(parts[1], "db8"); | |
| } | |
| // Ensure we got different addresses (high probability with randomization) | |
| // At least 50 unique addresses out of 100 should be generated | |
| assertEquals(addresses.size > 50, true); | |
| }); | |
| Deno.test("generateRandomIPv6 - handles different block sizes", () => { | |
| // Test with /32 block | |
| const addr32 = generateRandomIPv6("2001:db8::/32"); | |
| const parts32 = addr32.split(":"); | |
| assertEquals(parts32[0], "2001"); | |
| assertEquals(parts32[1], "db8"); | |
| // Test with /48 block | |
| const addr48 = generateRandomIPv6("2001:db8:1234::/48"); | |
| const parts48 = addr48.split(":"); | |
| assertEquals(parts48[0], "2001"); | |
| assertEquals(parts48[1], "db8"); | |
| assertEquals(parts48[2], "1234"); | |
| // Test with /64 block | |
| const addr64 = generateRandomIPv6("2001:db8::/64"); | |
| const parts64 = addr64.split(":"); | |
| assertEquals(parts64[0], "2001"); | |
| assertEquals(parts64[1], "db8"); | |
| }); | |
| Deno.test("generateRandomIPv6 - throws error for invalid block size", () => { | |
| assertThrows( | |
| () => generateRandomIPv6("2001:db8::/129"), | |
| Error, | |
| "Invalid IPv6 block size", | |
| ); | |
| assertThrows( | |
| () => generateRandomIPv6("2001:db8::/0"), | |
| Error, | |
| "Invalid IPv6 block size", | |
| ); | |
| }); | |
| Deno.test("generateRandomIPv6 - handles compressed IPv6 notation", () => { | |
| const ipv6Block = "2001:db8::/32"; | |
| const addr = generateRandomIPv6(ipv6Block); | |
| // Address should be valid IPv6 | |
| const parts = addr.split(":"); | |
| assertEquals(parts.length >= 3, true); // At least some parts should be present | |
| assertEquals(parts[0], "2001"); | |
| assertEquals(parts[1], "db8"); | |
| }); | |