91 lines
2.6 KiB
TypeScript
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();
|
|
});
|
|
});
|
|
});
|