@ceramicnetwork/base-test-utils
Version:
Ceramic Test Utils
49 lines • 1.82 kB
JavaScript
import { randomCID, StreamID } from '@ceramicnetwork/streamid';
export class BaseTestUtils {
static randomCID(version = 1, codec = 0x71, hasher = 0x12) {
return randomCID(version, codec, hasher);
}
static randomStreamID() {
return new StreamID(0, BaseTestUtils.randomCID());
}
static async waitForConditionOrTimeout(predicate, timeoutMs = 1000 * 30, errMsgGenerator) {
const startTime = new Date();
const deadline = new Date(startTime.getTime() + timeoutMs);
let now = startTime;
while (now < deadline) {
await BaseTestUtils.delay(100);
now = new Date();
try {
const res = await predicate();
if (res) {
return;
}
}
catch (err) {
console.warn(err);
}
}
const baseErrMsg = `timed out after ${timeoutMs}ms waiting for condition to be true`;
if (!errMsgGenerator) {
throw new Error(baseErrMsg);
}
const customMsg = typeof errMsgGenerator == 'string' ? errMsgGenerator : errMsgGenerator();
throw new Error(baseErrMsg + ': ' + customMsg);
}
static async delay(ms, signal) {
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => resolve(), ms);
if (signal) {
const handleAbort = () => {
clearTimeout(timeout);
signal.removeEventListener('abort', handleAbort);
reject(signal.reason);
};
if (signal.aborted)
handleAbort();
signal.addEventListener('abort', handleAbort);
}
});
}
}
//# sourceMappingURL=index.js.map