@lsdsoftware/s3-log-store
Version:
Efficiently store and retrieve log-structured data (append only) in S3
60 lines (53 loc) • 1.79 kB
text/typescript
import * as s3 from "@aws-sdk/client-s3";
import { describe, expect } from "@service-broker/test-utils";
import assert from "assert";
import { makeS3Store } from "./s3-store.js";
describe('s3-store', ({ beforeEach, afterEach, test }) => {
assert(
process.env.S3_PROFILE &&
process.env.S3_REGION &&
process.env.S3_BUCKET
)
const config = {
profile: process.env.S3_PROFILE,
region: process.env.S3_REGION,
bucket: process.env.S3_BUCKET
}
const client = new s3.S3Client(config)
let folder: string
let store: ReturnType<typeof makeS3Store>
beforeEach(async () => {
folder = 's3logstore-test-' + Math.random().toString(36).slice(2)
store = makeS3Store({ clientConfig: config, bucket: config.bucket, folder })
})
afterEach(async () => {
const { Contents } = await client.send(new s3.ListObjectsV2Command({
Bucket: config.bucket,
Prefix: folder + '/'
}))
if (Contents?.length) {
await client.send(new s3.DeleteObjectsCommand({
Bucket: config.bucket,
Delete: { Objects: Contents.map(({ Key }) => ({ Key })) }
}))
}
})
test('main', async () => {
expect(await store.getMaxSeqNum('aa'), 0)
await store.getFile('aa', 1)
.then(
() => { throw new Error('!throwAsExpected') },
err => expect(err.Code, 'NoSuchKey')
)
await store.putFile('aa', 1, Buffer.from('uno'))
await store.putFile('aa', 2, Buffer.from('dos'))
expect(await store.getMaxSeqNum('aa'), 2)
expect(await store.getFile('aa', 1), Buffer.from('uno'))
expect(await store.getFile('aa', 2), Buffer.from('dos'))
await store.getFile('aa', 3)
.then(
() => { throw new Error('!throwAsExpected') },
err => expect(err.Code, 'NoSuchKey')
)
})
})