it("findFree", function(done) { this.timeout(100000); let ips = IpStore.fromJson({ ipv4Range: [["192.168.176.100/24", "192.168.176.200/24"]], ipv6Range: [["fd00::100/112", "fd00::164/112"]], ipAssigned: new IpAssigned() }); // console.log("ipstore:-1:", ips); ips.assignGateWay([IPAddress.parse("192.168.176.254/24"), IPAddress.parse("fd00::1/112")]); // console.log("ipstore:-2:", ips); let ipes : IpEntry[] = []; for(let i = 0; i <= 100; ++i) { // console.log("ipstore:-3:", i); let ipe = ips.findFree(null, null); ipes.push(ipe); // console.log("ipstore:-4:", i); let ipe_a = ipe.ifAddr.getAddrs().map(s => s.to_string()); // console.log("ipstore:-5:", i, `192.168.176.${i+100}/24`, `fd00::${i+100}/112`); assert.deepEqual([ '192.168.176.254', 'fd00::1' ], IPAddress.to_s_vec(ipe.ifAddr.getDests())); assert.deepEqual([ IPAddress.parse(`192.168.176.${i+100}/24`).to_string(), IPAddress.parse(`fd00::${(i+0x100).toString(16)}/112`).to_string() ], ipe_a); } let ff = ips.findFree(null, null); console.log(ff); assert.isNull(ff); let first = ipes.shift(); let release = ips.release(first); assert.equal(first, release); let found = ips.findFree(null, null); // console.log("found:", found); assert.deepEqual(first.ifAddr.getAddrs(), found.ifAddr.getAddrs()); assert.isNull(ips.findFree(null, null)); // free one // find one != null // find one == null done(); });
it("IsUsable", () => { let ia = new IfAddrs(); ia.addAddr(IPAddress.parse("10.1.0.1/24")); assert.isNotNull(ia.addAddr(IPAddress.parse("10.2.0.1/24")), "ia.addAddr failed"); assert.isNull(ia.addAddr(IPAddress.parse("256.2.0.1/24")), "ia.addAddr failed"); assert.isNotNull(ia.addRoute(RouteVia.parse(IPAddress.parse("172.16.0.1/24"), IPAddress.parse("172.16.0.254")))); assert.isNull(ia.addDest(IPAddress.parse("172.316.0.1/24"))); assert.isNotNull(ia.addDest(IPAddress.parse("172.16.0.1/24"))); assert.isNotNull(ia.addRoute(RouteVia.parse(IPAddress.parse("172.17.0.1/24"), IPAddress.parse("172.17.0.254"))), "ia.addRoute 1 failed"); assert.isNull(ia.addRoute(RouteVia.parse(IPAddress.parse("300.17.0.1/24"), IPAddress.parse("172.17.0.254"))), "ia.addRoute 2 failed"); assert.isNull(ia.addRoute(RouteVia.parse(IPAddress.parse("300.17.0.1/24"), IPAddress.parse("172.17.0.254/23"))), "ia.addRoute 3 failed"); assert.isNull(ia.addRoute(RouteVia.parse(IPAddress.parse("300.17.0.1/24"), IPAddress.parse("172.17.0.354"))), "ia.addRoute 4 failed"); let ret = ia.asCommands("DEV"); let ref = ["ip addr add 10.1.0.1/24 dev DEV", "ip addr add 10.2.0.1/24 dev DEV", "ip route add 172.16.0.1/24 via 172.16.0.254 dev DEV", "ip route add 172.17.0.1/24 via 172.17.0.254 dev DEV", "ip link set dev DEV mtu 1360 up"].join("\n"); assert.equal(ret, ref, "wrong string"); let objIa = JSON.stringify(ia.asJson()); let other = JSON.parse(objIa); let otherIa = IfAddrs.fromJson(other); // console.log("other:", other); // console.log("otherIa:", otherIa); assert.equal(objIa, JSON.stringify(otherIa.asJson())); });