Files
n8n-enterprise-unlocked/packages/cli/src/runners/auth/__tests__/task-runner-auth.service.test.ts

96 lines
2.6 KiB
TypeScript

import { GlobalConfig } from '@n8n/config';
import { sleep } from 'n8n-workflow';
import config from '@/config';
import { CacheService } from '@/services/cache/cache.service';
import { retryUntil } from '@test-integration/retry-until';
import { mockInstance } from '../../../../test/shared/mocking';
import { TaskRunnerAuthService } from '../task-runner-auth.service';
describe('TaskRunnerAuthService', () => {
config.set('taskRunners.authToken', 'random-secret');
const globalConfig = mockInstance(GlobalConfig, {
cache: {
backend: 'memory',
memory: {
maxSize: 1024,
ttl: 9999,
},
},
taskRunners: {
authToken: 'random-secret',
},
});
const TTL = 100;
const cacheService = new CacheService(globalConfig);
const authService = new TaskRunnerAuthService(globalConfig, cacheService, TTL);
beforeEach(() => {
jest.clearAllMocks();
});
describe('isValidAuthToken', () => {
it('should be valid for the configured token', () => {
expect(authService.isValidAuthToken('random-secret'));
});
it('should be invalid for anything else', () => {
expect(authService.isValidAuthToken('!random-secret'));
});
});
describe('createGrantToken', () => {
it('should generate a random token', async () => {
expect(typeof (await authService.createGrantToken())).toBe('string');
});
it('should store the generated token in cache', async () => {
// Arrange
const cacheSetSpy = jest.spyOn(cacheService, 'set');
// Act
const token = await authService.createGrantToken();
// Assert
expect(cacheSetSpy).toHaveBeenCalledWith(`grant-token:${token}`, '1', TTL);
});
});
describe('tryConsumeGrantToken', () => {
it('should return false for an invalid grant token', async () => {
expect(await authService.tryConsumeGrantToken('random-secret')).toBe(false);
});
it('should return true for a valid grant token', async () => {
// Arrange
const grantToken = await authService.createGrantToken();
// Act
expect(await authService.tryConsumeGrantToken(grantToken)).toBe(true);
});
it('should return false for a already used grant token', async () => {
// Arrange
const grantToken = await authService.createGrantToken();
// Act
expect(await authService.tryConsumeGrantToken(grantToken)).toBe(true);
expect(await authService.tryConsumeGrantToken(grantToken)).toBe(false);
});
it('should return false for an expired grant token', async () => {
// Arrange
const grantToken = await authService.createGrantToken();
// Act
await sleep(TTL + 1);
await retryUntil(async () =>
expect(await authService.tryConsumeGrantToken(grantToken)).toBe(false),
);
});
});
});