42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import { beforeEach, describe, expect, test, vi } from "vitest";
|
|
|
|
const testTailnetIPv4 = { value: undefined as string | undefined };
|
|
const testTailnetIPv6 = { value: undefined as string | undefined };
|
|
|
|
vi.mock("../infra/tailnet.js", () => ({
|
|
pickPrimaryTailnetIPv4: () => testTailnetIPv4.value,
|
|
pickPrimaryTailnetIPv6: () => testTailnetIPv6.value,
|
|
}));
|
|
|
|
import { isLocalGatewayAddress } from "./net.js";
|
|
|
|
describe("gateway net", () => {
|
|
beforeEach(() => {
|
|
testTailnetIPv4.value = undefined;
|
|
testTailnetIPv6.value = undefined;
|
|
});
|
|
|
|
test("treats loopback as local", () => {
|
|
expect(isLocalGatewayAddress("127.0.0.1")).toBe(true);
|
|
expect(isLocalGatewayAddress("127.0.1.1")).toBe(true);
|
|
expect(isLocalGatewayAddress("::1")).toBe(true);
|
|
expect(isLocalGatewayAddress("::ffff:127.0.0.1")).toBe(true);
|
|
});
|
|
|
|
test("treats local tailnet IPv4 as local", () => {
|
|
testTailnetIPv4.value = "100.64.0.1";
|
|
expect(isLocalGatewayAddress("100.64.0.1")).toBe(true);
|
|
expect(isLocalGatewayAddress("::ffff:100.64.0.1")).toBe(true);
|
|
});
|
|
|
|
test("ignores non-matching tailnet IPv4", () => {
|
|
testTailnetIPv4.value = "100.64.0.1";
|
|
expect(isLocalGatewayAddress("100.64.0.2")).toBe(false);
|
|
});
|
|
|
|
test("treats local tailnet IPv6 as local", () => {
|
|
testTailnetIPv6.value = "fd7a:115c:a1e0::123";
|
|
expect(isLocalGatewayAddress("fd7a:115c:a1e0::123")).toBe(true);
|
|
});
|
|
});
|