88 lines
3.6 KiB
TypeScript
88 lines
3.6 KiB
TypeScript
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|
import * as plugins from '../ts/plugins.js';
|
|
import type { IForwardConfig, TForwardingType } from '../ts/forwarding/config/forwarding-types.js';
|
|
|
|
// First, import the components directly to avoid issues with compiled modules
|
|
import { ForwardingHandlerFactory } from '../ts/forwarding/factory/forwarding-factory.js';
|
|
// Import route-based helpers
|
|
import {
|
|
createHttpRoute,
|
|
createHttpsTerminateRoute,
|
|
createHttpsPassthroughRoute,
|
|
createHttpToHttpsRedirect,
|
|
createCompleteHttpsServer
|
|
} from '../ts/proxies/smart-proxy/utils/route-helpers.js';
|
|
|
|
// Create helper functions for backward compatibility
|
|
const helpers = {
|
|
httpOnly: (domains: string | string[], target: any) => createHttpRoute(domains, target),
|
|
tlsTerminateToHttp: (domains: string | string[], target: any) =>
|
|
createHttpsTerminateRoute(domains, target),
|
|
tlsTerminateToHttps: (domains: string | string[], target: any) =>
|
|
createHttpsTerminateRoute(domains, target, { reencrypt: true }),
|
|
httpsPassthrough: (domains: string | string[], target: any) =>
|
|
createHttpsPassthroughRoute(domains, target)
|
|
};
|
|
|
|
// Route-based utility functions for testing
|
|
function findRouteForDomain(routes: any[], domain: string): any {
|
|
return routes.find(route => {
|
|
const domains = Array.isArray(route.match.domains)
|
|
? route.match.domains
|
|
: [route.match.domains];
|
|
return domains.includes(domain);
|
|
});
|
|
}
|
|
|
|
// Replace the old test with route-based tests
|
|
tap.test('Route Helpers - Create HTTP routes', async () => {
|
|
const route = helpers.httpOnly('example.com', { host: 'localhost', port: 3000 });
|
|
expect(route.action.type).toEqual('forward');
|
|
expect(route.match.domains).toEqual('example.com');
|
|
expect(route.action.target).toEqual({ host: 'localhost', port: 3000 });
|
|
});
|
|
|
|
tap.test('Route Helpers - Create HTTPS terminate to HTTP routes', async () => {
|
|
const route = helpers.tlsTerminateToHttp('secure.example.com', { host: 'localhost', port: 3000 });
|
|
expect(route.action.type).toEqual('forward');
|
|
expect(route.match.domains).toEqual('secure.example.com');
|
|
expect(route.action.tls?.mode).toEqual('terminate');
|
|
});
|
|
|
|
tap.test('Route Helpers - Create HTTPS passthrough routes', async () => {
|
|
const route = helpers.httpsPassthrough('passthrough.example.com', { host: 'backend', port: 443 });
|
|
expect(route.action.type).toEqual('forward');
|
|
expect(route.match.domains).toEqual('passthrough.example.com');
|
|
expect(route.action.tls?.mode).toEqual('passthrough');
|
|
});
|
|
|
|
tap.test('Route Helpers - Create HTTPS to HTTPS routes', async () => {
|
|
const route = helpers.tlsTerminateToHttps('reencrypt.example.com', { host: 'backend', port: 443 });
|
|
expect(route.action.type).toEqual('forward');
|
|
expect(route.match.domains).toEqual('reencrypt.example.com');
|
|
expect(route.action.tls?.mode).toEqual('terminate-and-reencrypt');
|
|
});
|
|
|
|
tap.test('Route Helpers - Create complete HTTPS server with redirect', async () => {
|
|
const routes = createCompleteHttpsServer(
|
|
'full.example.com',
|
|
{ host: 'localhost', port: 3000 },
|
|
{ certificate: 'auto' }
|
|
);
|
|
|
|
expect(routes.length).toEqual(2);
|
|
|
|
// Check HTTP to HTTPS redirect - find route by port
|
|
const redirectRoute = routes.find(r => r.match.ports === 80);
|
|
expect(redirectRoute.action.type).toEqual('socket-handler');
|
|
expect(redirectRoute.action.socketHandler).toBeDefined();
|
|
expect(redirectRoute.match.ports).toEqual(80);
|
|
|
|
// Check HTTPS route
|
|
const httpsRoute = routes.find(r => r.action.type === 'forward');
|
|
expect(httpsRoute.match.ports).toEqual(443);
|
|
expect(httpsRoute.action.tls?.mode).toEqual('terminate');
|
|
});
|
|
|
|
// Export test runner
|
|
export default tap.start(); |