Files
deeplx/tests/lib/proxyManager.test.ts

91 lines
2.6 KiB
TypeScript

/**
* Tests for proxy management functionality
*/
import {
generateBrowserFingerprint,
getProxyEndpoints,
selectProxy,
} from "../../src/lib/proxyManager";
describe("Proxy Manager Module", () => {
let mockEnv: Env;
beforeEach(() => {
mockEnv = createMockEnv();
});
afterEach(() => {
jest.clearAllMocks();
});
describe("generateBrowserFingerprint", () => {
it("should generate browser-like headers", () => {
const fingerprint = generateBrowserFingerprint();
expect(fingerprint).toHaveProperty("User-Agent");
expect(fingerprint).toHaveProperty("Accept");
expect(fingerprint).toHaveProperty("Accept-Language");
expect(fingerprint).toHaveProperty("Accept-Encoding");
expect(fingerprint).toHaveProperty("DNT");
expect(fingerprint).toHaveProperty("Connection");
expect(fingerprint).toHaveProperty("Upgrade-Insecure-Requests");
});
it("should generate string header values", () => {
const fingerprint = generateBrowserFingerprint();
Object.values(fingerprint).forEach((value) => {
expect(typeof value).toBe("string");
expect(value.length).toBeGreaterThan(0);
});
});
});
describe("getProxyEndpoints", () => {
it("should parse proxy URLs from environment", () => {
const endpoints = getProxyEndpoints(mockEnv);
expect(Array.isArray(endpoints)).toBe(true);
expect(endpoints.length).toBe(2);
expect(endpoints[0]).toHaveProperty("url");
});
it("should trim proxy URLs", () => {
const endpoints = getProxyEndpoints({
...mockEnv,
PROXY_URLS:
" https://test1.example.com/jsonrpc , https://test2.example.com/jsonrpc ",
});
expect(endpoints).toEqual([
{ url: "https://test1.example.com/jsonrpc" },
{ url: "https://test2.example.com/jsonrpc" },
]);
});
it("should handle missing proxy URLs", () => {
const envWithoutProxies = { ...mockEnv, PROXY_URLS: undefined };
const endpoints = getProxyEndpoints(envWithoutProxies);
expect(endpoints).toEqual([]);
});
});
describe("selectProxy", () => {
it("should select a proxy from available endpoints", async () => {
const proxy = await selectProxy(mockEnv);
expect(proxy).not.toBeNull();
expect(proxy?.url).toMatch(/^https:\/\/test[12]\.example\.com\/jsonrpc$/);
});
it("should return null when no proxies are available", async () => {
const envWithoutProxies = { ...mockEnv, PROXY_URLS: undefined };
const proxy = await selectProxy(envWithoutProxies);
expect(proxy).toBeNull();
});
});
});