feat(external-gateway): add gateway client domain and DNS record support for dcrouter integration
This commit is contained in:
@@ -62,6 +62,7 @@ class FakeDatabase {
|
||||
const makeOneboxRef = () => {
|
||||
const database = new FakeDatabase();
|
||||
database.settings.set('dcrouterGatewayUrl', 'https://edge.example.com');
|
||||
database.settings.set('dcrouterGatewayClientId', 'onebox-1');
|
||||
database.settings.set('dcrouterWorkHosterId', 'onebox-1');
|
||||
database.secretSettings.set('dcrouterGatewayApiToken', 'dcr-token');
|
||||
|
||||
@@ -92,8 +93,9 @@ Deno.test('ExternalGatewayManager syncs dcrouter domains into Onebox domains', a
|
||||
});
|
||||
|
||||
const manager = new ExternalGatewayManager(oneboxRef as any);
|
||||
(manager as any).fireDcRouterRequest = async (method: string) => {
|
||||
assertEquals(method, 'getWorkHosterDomains');
|
||||
(manager as any).fireDcRouterRequest = async (method: string, requestData: Record<string, unknown>) => {
|
||||
assertEquals(method, 'getGatewayClientDomains');
|
||||
assertEquals(requestData.gatewayClientId, 'onebox-1');
|
||||
return {
|
||||
domains: [
|
||||
{
|
||||
@@ -117,7 +119,7 @@ Deno.test('ExternalGatewayManager syncs dcrouter domains into Onebox domains', a
|
||||
assertEquals(oneboxRef.database.getDomainByName('old.example.com')?.isObsolete, true);
|
||||
});
|
||||
|
||||
Deno.test('ExternalGatewayManager syncs service routes to dcrouter WorkHoster API', async () => {
|
||||
Deno.test('ExternalGatewayManager syncs service routes to dcrouter gatewayClient API', async () => {
|
||||
const oneboxRef = makeOneboxRef();
|
||||
oneboxRef.database.settings.set('serverIP', '203.0.113.10');
|
||||
oneboxRef.database.settings.set('httpPort', '8080');
|
||||
@@ -146,14 +148,14 @@ Deno.test('ExternalGatewayManager syncs service routes to dcrouter WorkHoster AP
|
||||
|
||||
await manager.syncServiceRoute(service);
|
||||
|
||||
const syncRequest = requests.find((request) => request.method === 'syncWorkAppRoute')!;
|
||||
const syncRequest = requests.find((request) => request.method === 'syncGatewayClientRoute')!;
|
||||
const route = syncRequest.requestData.route as any;
|
||||
const ownership = syncRequest.requestData.ownership as any;
|
||||
|
||||
assertEquals(ownership, {
|
||||
workHosterType: 'onebox',
|
||||
workHosterId: 'onebox-1',
|
||||
workAppId: 'hello',
|
||||
gatewayClientType: 'onebox',
|
||||
gatewayClientId: 'onebox-1',
|
||||
appId: 'hello',
|
||||
hostname: 'hello.example.com',
|
||||
});
|
||||
assertEquals(route.match, { ports: [443], domains: ['hello.example.com'] });
|
||||
@@ -162,13 +164,13 @@ Deno.test('ExternalGatewayManager syncs service routes to dcrouter WorkHoster AP
|
||||
assertEquals(syncRequest.requestData.enabled, true);
|
||||
});
|
||||
|
||||
Deno.test('ExternalGatewayManager deletes service routes through dcrouter WorkHoster API', async () => {
|
||||
Deno.test('ExternalGatewayManager deletes service routes through dcrouter gatewayClient API', async () => {
|
||||
const oneboxRef = makeOneboxRef();
|
||||
const manager = new ExternalGatewayManager(oneboxRef as any);
|
||||
let deleteRequest: Record<string, unknown> | null = null;
|
||||
|
||||
(manager as any).fireDcRouterRequest = async (method: string, requestData: Record<string, unknown>) => {
|
||||
assertEquals(method, 'syncWorkAppRoute');
|
||||
assertEquals(method, 'syncGatewayClientRoute');
|
||||
deleteRequest = requestData;
|
||||
return { success: true, action: 'deleted', routeId: 'route-1' };
|
||||
};
|
||||
@@ -182,6 +184,7 @@ Deno.test('ExternalGatewayManager deletes service routes through dcrouter WorkHo
|
||||
assert(deleteRequest);
|
||||
const capturedDeleteRequest = deleteRequest as Record<string, unknown>;
|
||||
assertEquals(capturedDeleteRequest.delete, true);
|
||||
assertEquals((capturedDeleteRequest.ownership as any).gatewayClientId, 'onebox-1');
|
||||
assertEquals((capturedDeleteRequest.ownership as any).hostname, 'hello.example.com');
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user