diff --git a/src/docker-manager.test.ts b/src/docker-manager.test.ts index fcb1570bf..c2ec0fe9b 100644 --- a/src/docker-manager.test.ts +++ b/src/docker-manager.test.ts @@ -1,31 +1,8 @@ -import { generateDockerCompose } from './docker-manager'; +import { generateDockerCompose, subnetsOverlap } from './docker-manager'; import { WrapperConfig } from './types'; describe('docker-manager', () => { describe('subnetsOverlap', () => { - // Import private function for testing by extracting logic - const subnetsOverlap = (subnet1: string, subnet2: string): boolean => { - const [ip1, cidr1] = subnet1.split('/'); - const [ip2, cidr2] = subnet2.split('/'); - - const ipToNumber = (ip: string): number => { - return ip.split('.').reduce((acc, octet) => (acc << 8) + parseInt(octet, 10), 0) >>> 0; - }; - - const getNetworkRange = (ip: string, cidr: string): [number, number] => { - const ipNum = ipToNumber(ip); - const maskBits = parseInt(cidr, 10); - const mask = (0xffffffff << (32 - maskBits)) >>> 0; - const networkAddr = (ipNum & mask) >>> 0; - const broadcastAddr = (networkAddr | ~mask) >>> 0; - return [networkAddr, broadcastAddr]; - }; - - const [start1, end1] = getNetworkRange(ip1, cidr1); - const [start2, end2] = getNetworkRange(ip2, cidr2); - - return (start1 <= end2 && end1 >= start2); - }; it('should detect overlapping subnets with same CIDR', () => { expect(subnetsOverlap('172.30.0.0/24', '172.30.0.0/24')).toBe(true); diff --git a/src/docker-manager.ts b/src/docker-manager.ts index ddb99e8da..9a7865d76 100644 --- a/src/docker-manager.ts +++ b/src/docker-manager.ts @@ -46,7 +46,7 @@ async function getExistingDockerSubnets(): Promise { * Checks if two subnets overlap * Returns true if the new subnet conflicts with an existing subnet */ -function subnetsOverlap(subnet1: string, subnet2: string): boolean { +export function subnetsOverlap(subnet1: string, subnet2: string): boolean { // Parse CIDR notation: "172.17.0.0/16" -> ["172.17.0.0", "16"] const [ip1, cidr1] = subnet1.split('/'); const [ip2, cidr2] = subnet2.split('/');