mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
feat(core): Add health endpoint for task broker server (no-changelog) (#11920)
This commit is contained in:
parent
a8df221bfb
commit
9669380097
|
@ -163,6 +163,8 @@ export class TaskRunnerServer {
|
||||||
authEndpoint,
|
authEndpoint,
|
||||||
send(async (req) => await this.taskRunnerAuthController.createGrantToken(req)),
|
send(async (req) => await this.taskRunnerAuthController.createGrantToken(req)),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.app.get('/healthz', (_, res) => res.send({ status: 'ok' }));
|
||||||
}
|
}
|
||||||
|
|
||||||
private handleUpgradeRequest = (
|
private handleUpgradeRequest = (
|
||||||
|
|
|
@ -10,6 +10,7 @@ describe('TaskRunnerModule in internal mode', () => {
|
||||||
const runnerConfig = Container.get(TaskRunnersConfig);
|
const runnerConfig = Container.get(TaskRunnersConfig);
|
||||||
runnerConfig.port = 0; // Random port
|
runnerConfig.port = 0; // Random port
|
||||||
runnerConfig.mode = 'internal';
|
runnerConfig.mode = 'internal';
|
||||||
|
runnerConfig.enabled = true;
|
||||||
const module = Container.get(TaskRunnerModule);
|
const module = Container.get(TaskRunnerModule);
|
||||||
|
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
|
|
|
@ -1,21 +1,15 @@
|
||||||
import { TaskRunnersConfig } from '@n8n/config';
|
|
||||||
import Container from 'typedi';
|
import Container from 'typedi';
|
||||||
|
|
||||||
import { TaskRunnerWsServer } from '@/runners/runner-ws-server';
|
import { TaskRunnerWsServer } from '@/runners/runner-ws-server';
|
||||||
import { TaskBroker } from '@/runners/task-broker.service';
|
import { TaskBroker } from '@/runners/task-broker.service';
|
||||||
import { TaskRunnerProcess } from '@/runners/task-runner-process';
|
import { TaskRunnerProcess } from '@/runners/task-runner-process';
|
||||||
import { TaskRunnerServer } from '@/runners/task-runner-server';
|
|
||||||
import { retryUntil } from '@test-integration/retry-until';
|
import { retryUntil } from '@test-integration/retry-until';
|
||||||
|
import { setupBrokerTestServer } from '@test-integration/utils/task-broker-test-server';
|
||||||
|
|
||||||
describe('TaskRunnerProcess', () => {
|
describe('TaskRunnerProcess', () => {
|
||||||
const authToken = 'token';
|
const { config, server: taskRunnerServer } = setupBrokerTestServer({
|
||||||
const runnerConfig = Container.get(TaskRunnersConfig);
|
mode: 'internal',
|
||||||
runnerConfig.enabled = true;
|
});
|
||||||
runnerConfig.mode = 'internal';
|
|
||||||
runnerConfig.authToken = authToken;
|
|
||||||
runnerConfig.port = 0; // Use any port
|
|
||||||
const taskRunnerServer = Container.get(TaskRunnerServer);
|
|
||||||
|
|
||||||
const runnerProcess = Container.get(TaskRunnerProcess);
|
const runnerProcess = Container.get(TaskRunnerProcess);
|
||||||
const taskBroker = Container.get(TaskBroker);
|
const taskBroker = Container.get(TaskBroker);
|
||||||
const taskRunnerService = Container.get(TaskRunnerWsServer);
|
const taskRunnerService = Container.get(TaskRunnerWsServer);
|
||||||
|
@ -23,7 +17,7 @@ describe('TaskRunnerProcess', () => {
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
await taskRunnerServer.start();
|
await taskRunnerServer.start();
|
||||||
// Set the port to the actually used port
|
// Set the port to the actually used port
|
||||||
runnerConfig.port = taskRunnerServer.port;
|
config.port = taskRunnerServer.port;
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { setupBrokerTestServer } from '@test-integration/utils/task-broker-test-server';
|
||||||
|
|
||||||
|
describe('TaskRunnerServer', () => {
|
||||||
|
const { agent, server } = setupBrokerTestServer({
|
||||||
|
authToken: 'token',
|
||||||
|
mode: 'external',
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
await server.start();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await server.stop();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('/healthz', () => {
|
||||||
|
it('should return 200', async () => {
|
||||||
|
await agent.get('/healthz').expect(200);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,40 @@
|
||||||
|
import { TaskRunnersConfig } from '@n8n/config';
|
||||||
|
import request from 'supertest';
|
||||||
|
import type TestAgent from 'supertest/lib/agent';
|
||||||
|
import Container from 'typedi';
|
||||||
|
|
||||||
|
import { TaskRunnerServer } from '@/runners/task-runner-server';
|
||||||
|
|
||||||
|
export interface TestTaskBrokerServer {
|
||||||
|
server: TaskRunnerServer;
|
||||||
|
agent: TestAgent;
|
||||||
|
config: TaskRunnersConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up a Task Broker Server for testing purposes. The server needs
|
||||||
|
* to be started and stopped manually.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { server, agent, config } = setupBrokerTestServer();
|
||||||
|
*
|
||||||
|
* beforeAll(async () => await server.start());
|
||||||
|
* afterAll(async () => await server.stop());
|
||||||
|
*/
|
||||||
|
export const setupBrokerTestServer = (
|
||||||
|
config: Partial<TaskRunnersConfig> = {},
|
||||||
|
): TestTaskBrokerServer => {
|
||||||
|
const runnerConfig = Container.get(TaskRunnersConfig);
|
||||||
|
Object.assign(runnerConfig, config);
|
||||||
|
runnerConfig.enabled = true;
|
||||||
|
runnerConfig.port = 0; // Use any port
|
||||||
|
|
||||||
|
const taskRunnerServer = Container.get(TaskRunnerServer);
|
||||||
|
const agent = request.agent(taskRunnerServer.app);
|
||||||
|
|
||||||
|
return {
|
||||||
|
server: taskRunnerServer,
|
||||||
|
agent,
|
||||||
|
config: runnerConfig,
|
||||||
|
};
|
||||||
|
};
|
Loading…
Reference in a new issue