@backstage/backend-test-utils
Version:
Test helpers library for Backstage backends
54 lines (48 loc) • 1.69 kB
JavaScript
;
var Keyv = require('keyv');
var node_crypto = require('node:crypto');
var waitForReady = require('../util/waitForReady.cjs.js');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
var Keyv__default = /*#__PURE__*/_interopDefaultCompat(Keyv);
async function attemptKeyvConnection(createStore, connection, label) {
let keyv;
await waitForReady.waitForReady(async () => {
const store = createStore(connection);
const attemptKeyv = new Keyv__default.default({ store });
let succeeded = false;
try {
const value = node_crypto.randomUUID();
await attemptKeyv.set("test", value);
succeeded = await attemptKeyv.get("test") === value;
if (succeeded) {
keyv = attemptKeyv;
}
return succeeded;
} finally {
if (!succeeded) {
await attemptKeyv.disconnect();
}
}
}, label);
return keyv;
}
async function startRedisLikeContainer(image, store, createStore) {
const { GenericContainer } = require("testcontainers");
const container = await new GenericContainer(image).withExposedPorts(6379).start();
const host = container.getHost();
const port = container.getMappedPort(6379);
const connection = `redis://${host}:${port}`;
const keyv = await attemptKeyvConnection(createStore, connection, store);
return {
store,
connection,
keyv,
stop: async () => {
await keyv.disconnect();
await container.stop({ timeout: 1e4 });
}
};
}
exports.attemptKeyvConnection = attemptKeyvConnection;
exports.startRedisLikeContainer = startRedisLikeContainer;
//# sourceMappingURL=helpers.cjs.js.map