101 lines
2.8 KiB
TypeScript
101 lines
2.8 KiB
TypeScript
/**
|
|
* SSM Parameter Store integration tests.
|
|
*/
|
|
|
|
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
import {
|
|
SSMClient,
|
|
PutParameterCommand,
|
|
GetParameterCommand,
|
|
DeleteParameterCommand,
|
|
GetParametersByPathCommand,
|
|
DescribeParametersCommand,
|
|
} from '@aws-sdk/client-ssm';
|
|
import { makeClient, uniqueName } from './setup';
|
|
|
|
describe('SSM', () => {
|
|
let ssm: SSMClient;
|
|
let paramPath: string;
|
|
|
|
beforeAll(() => {
|
|
ssm = makeClient(SSMClient);
|
|
paramPath = `/floci/test/${uniqueName()}`;
|
|
});
|
|
|
|
afterAll(async () => {
|
|
// Cleanup any remaining parameters
|
|
try {
|
|
await ssm.send(new DeleteParameterCommand({ Name: `${paramPath}/p1` }));
|
|
} catch {
|
|
// ignore
|
|
}
|
|
try {
|
|
await ssm.send(new DeleteParameterCommand({ Name: `${paramPath}/secret` }));
|
|
} catch {
|
|
// ignore
|
|
}
|
|
});
|
|
|
|
it('should put and get a String parameter', async () => {
|
|
const name = `${paramPath}/p1`;
|
|
await ssm.send(
|
|
new PutParameterCommand({ Name: name, Value: 'hello', Type: 'String' })
|
|
);
|
|
|
|
const response = await ssm.send(new GetParameterCommand({ Name: name }));
|
|
expect(response.Parameter?.Value).toBe('hello');
|
|
});
|
|
|
|
it('should put and get a SecureString parameter', async () => {
|
|
const name = `${paramPath}/secret`;
|
|
await ssm.send(
|
|
new PutParameterCommand({ Name: name, Value: 's3cr3t', Type: 'SecureString' })
|
|
);
|
|
|
|
const response = await ssm.send(
|
|
new GetParameterCommand({ Name: name, WithDecryption: true })
|
|
);
|
|
expect(response.Parameter?.Value).toBe('s3cr3t');
|
|
});
|
|
|
|
it('should get parameters by path', async () => {
|
|
const response = await ssm.send(
|
|
new GetParametersByPathCommand({ Path: paramPath, Recursive: true })
|
|
);
|
|
expect(response.Parameters?.length).toBeGreaterThanOrEqual(2);
|
|
});
|
|
|
|
it('should describe parameters', async () => {
|
|
const response = await ssm.send(new DescribeParametersCommand({}));
|
|
expect(response.Parameters?.length).toBeGreaterThanOrEqual(2);
|
|
});
|
|
|
|
it('should overwrite parameter', async () => {
|
|
const name = `${paramPath}/p1`;
|
|
await ssm.send(
|
|
new PutParameterCommand({
|
|
Name: name,
|
|
Value: 'updated',
|
|
Type: 'String',
|
|
Overwrite: true,
|
|
})
|
|
);
|
|
|
|
const response = await ssm.send(new GetParameterCommand({ Name: name }));
|
|
expect(response.Parameter?.Value).toBe('updated');
|
|
});
|
|
|
|
it('should fail for missing parameter', async () => {
|
|
await expect(
|
|
ssm.send(new GetParameterCommand({ Name: `${paramPath}/missing` }))
|
|
).rejects.toThrow();
|
|
});
|
|
|
|
it('should delete parameter', async () => {
|
|
const name = `${paramPath}/p1`;
|
|
await ssm.send(new DeleteParameterCommand({ Name: name }));
|
|
|
|
await expect(ssm.send(new GetParameterCommand({ Name: name }))).rejects.toThrow();
|
|
});
|
|
});
|