UNPKG

@backstage/backend-test-utils

Version:

Test helpers library for Backstage backends

54 lines (48 loc) 1.69 kB
'use strict'; 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