UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

195 lines • 7.73 kB
import dbInit from '../helpers/database-init.js'; import getLogger from '../../fixtures/no-logger.js'; import { SYSTEM_USER_ID, } from '../../../lib/types/index.js'; import { ApiTokenType } from '../../../lib/types/model.js'; import { DEFAULT_ENV, randomId } from '../../../lib/util/index.js'; let stores; let db; beforeAll(async () => { db = await dbInit('api_token_store_serial', getLogger); stores = db.stores; }); beforeEach(async () => { await stores.apiTokenStore.deleteAll(); }); afterAll(async () => { await db.destroy(); }); test('get token is undefined when not exist', async () => { const token = await stores.apiTokenStore.get('abcde123'); expect(token).toBeUndefined(); }); test('get token returns the token when exists', async () => { const newToken = await stores.apiTokenStore.insert({ secret: 'abcde321', environment: DEFAULT_ENV, type: ApiTokenType.ADMIN, projects: [], tokenName: 'admin-test-token', }, SYSTEM_USER_ID); const foundToken = await stores.apiTokenStore.get('abcde321'); expect(foundToken).toBeDefined(); expect(foundToken.secret).toBe(newToken.secret); expect(foundToken.environment).toBe(newToken.environment); expect(foundToken.tokenName).toBe(newToken.tokenName); expect(foundToken.type).toBe(newToken.type); }); describe('count deprecated tokens', () => { test('should return 0 if there is no legacy or orphaned tokens', async () => { await stores.projectStore.create({ id: 'test', name: 'test', }); await stores.apiTokenStore.insert({ secret: '*:*.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178', environment: DEFAULT_ENV, type: ApiTokenType.ADMIN, projects: [], tokenName: 'admin-token', }, SYSTEM_USER_ID); await stores.apiTokenStore.insert({ secret: 'default:development.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178', environment: DEFAULT_ENV, type: ApiTokenType.BACKEND, projects: ['default'], tokenName: 'client-token', }, SYSTEM_USER_ID); await stores.apiTokenStore.insert({ secret: '*:development.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178', environment: DEFAULT_ENV, type: ApiTokenType.BACKEND, projects: [], tokenName: 'client-wildcard-token', }, SYSTEM_USER_ID); await stores.apiTokenStore.insert({ secret: '[]:production.3d6bdada42ddbd63a019d26955178be44368985f7fb3237c584ef86f', environment: DEFAULT_ENV, type: ApiTokenType.FRONTEND, projects: ['default', 'test'], tokenName: 'frontend-token', }, SYSTEM_USER_ID); const deprecatedTokens = await stores.apiTokenStore.countDeprecatedTokens(); expect(deprecatedTokens).toEqual({ activeLegacyTokens: 0, activeOrphanedTokens: 0, legacyTokens: 0, orphanedTokens: 0, }); }); test('should return 1 for legacy tokens', async () => { await stores.apiTokenStore.insert({ secret: 'be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178', environment: DEFAULT_ENV, type: ApiTokenType.ADMIN, projects: [], tokenName: 'admin-test-token', }, SYSTEM_USER_ID); const deprecatedTokens = await stores.apiTokenStore.countDeprecatedTokens(); expect(deprecatedTokens).toEqual({ activeLegacyTokens: 0, activeOrphanedTokens: 0, legacyTokens: 1, orphanedTokens: 0, }); }); test('should return 1 for orphaned tokens', async () => { await stores.apiTokenStore.insert({ secret: 'deleted-project:development.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178', environment: DEFAULT_ENV, type: ApiTokenType.BACKEND, projects: [], tokenName: 'admin-test-token', }, SYSTEM_USER_ID); const deprecatedTokens = await stores.apiTokenStore.countDeprecatedTokens(); expect(deprecatedTokens).toEqual({ activeLegacyTokens: 0, activeOrphanedTokens: 0, legacyTokens: 0, orphanedTokens: 1, }); }); test('should not count wildcard tokens as orphaned', async () => { await stores.apiTokenStore.insert({ secret: '*:*.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178', environment: DEFAULT_ENV, type: ApiTokenType.BACKEND, projects: [], tokenName: 'client-test-token', }, SYSTEM_USER_ID); const deprecatedTokens = await stores.apiTokenStore.countDeprecatedTokens(); expect(deprecatedTokens).toEqual({ activeLegacyTokens: 0, activeOrphanedTokens: 0, legacyTokens: 0, orphanedTokens: 0, }); }); test('should count active tokens based on seen_at', async () => { const legacyTokenSecret = 'be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178'; const orphanedTokenSecret = '[]:production.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178'; await stores.apiTokenStore.insert({ secret: legacyTokenSecret, environment: DEFAULT_ENV, type: ApiTokenType.ADMIN, projects: [], tokenName: 'admin-test-token', }, SYSTEM_USER_ID); await stores.apiTokenStore.insert({ secret: orphanedTokenSecret, environment: DEFAULT_ENV, type: ApiTokenType.FRONTEND, projects: [], tokenName: 'frontend-test-token', }, SYSTEM_USER_ID); await stores.apiTokenStore.markSeenAt([ legacyTokenSecret, orphanedTokenSecret, ]); const deprecatedTokens = await stores.apiTokenStore.countDeprecatedTokens(); expect(deprecatedTokens).toEqual({ activeLegacyTokens: 1, activeOrphanedTokens: 1, legacyTokens: 1, orphanedTokens: 1, }); }); }); describe('count project tokens', () => { test('counts only tokens belonging to the specified project', async () => { const project = await stores.projectStore.create({ id: randomId(), name: 'project A', }); const store = stores.apiTokenStore; await store.insert({ secret: `default:default.${randomId()}`, environment: DEFAULT_ENV, type: ApiTokenType.BACKEND, projects: ['default'], tokenName: 'token1', }, SYSTEM_USER_ID); await store.insert({ secret: `*:*.${randomId()}`, environment: DEFAULT_ENV, type: ApiTokenType.BACKEND, projects: ['*'], tokenName: 'token2', }, SYSTEM_USER_ID); await store.insert({ secret: `${project.id}:default.${randomId()}`, environment: DEFAULT_ENV, type: ApiTokenType.BACKEND, projects: [project.id], tokenName: 'token3', }, SYSTEM_USER_ID); await store.insert({ secret: `[]:default.${randomId()}`, environment: DEFAULT_ENV, type: ApiTokenType.BACKEND, projects: [project.id, 'default'], tokenName: 'token4', }, SYSTEM_USER_ID); expect(await store.countProjectTokens(project.id)).toBe(2); }); }); //# sourceMappingURL=api-token-store.e2e.test.js.map