Skip to content

Commit 84ecde9

Browse files
authored
fix: don't reload already cached secrets (#2)
1 parent ca72529 commit 84ecde9

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

lib/secretmanager.service.spec.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ import { SecretManagerService } from './secretmanager.service'
77
jest.mock('./secretloader.service')
88
describe('SecretManagerService', () => {
99
let secretManagerService: SecretManagerService
10+
let secretLoaderService: SecretLoaderService
1011
const preloadedSecrets = {
1112
'project/test-project/secrets/some-secret/versions/latest': 'some-secret',
1213
}
1314
beforeEach(async () => {
1415
jest.resetAllMocks()
1516
// eslint-disable-next-line @typescript-eslint/no-explicit-any
16-
const secretLoaderService = new SecretLoaderService(null as any)
17+
secretLoaderService = new SecretLoaderService(null as any)
1718
;(secretLoaderService.loadSecret as jest.Mock).mockImplementationOnce(() => 'some-secret')
1819

1920
const moduleRef = await Test.createTestingModule({
@@ -60,4 +61,16 @@ describe('SecretManagerService', () => {
6061
await secretManagerService.loadSecretDynamic(secret)
6162
expect(secretManagerService.getSecret(secret)).toEqual('some-secret')
6263
})
64+
65+
it('does not do external lookups for cached secrets', async () => {
66+
const secret = 'project/test-project/secrets/no-secret/versions/latest'
67+
expect(() => {
68+
secretManagerService.getSecret(secret)
69+
}).toThrow(SecretNotLoadedException)
70+
71+
await secretManagerService.loadSecretDynamic(secret)
72+
await secretManagerService.loadSecretDynamic(secret)
73+
expect(secretLoaderService.loadSecret).toHaveBeenCalledTimes(1)
74+
expect(secretManagerService.getSecret(secret)).toEqual('some-secret')
75+
})
6376
})

lib/secretmanager.service.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ export class SecretManagerService {
2424
}
2525

2626
public async loadSecretDynamic(secret: string) {
27+
if (this.secrets[secret]) {
28+
return this.secrets[secret]
29+
}
2730
const value = await this.secretLoaderService.loadSecret(secret)
2831
this.secrets = {
2932
...this.secrets,

0 commit comments

Comments
 (0)