UNPKG

@daiso-tech/core

Version:

The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.

95 lines 3.73 kB
/* eslint-disable @typescript-eslint/no-unused-vars */ /** * @module CircuitBreaker */ import {} from "vitest"; import { BACKOFFS, } from "../../../backoff-policies/implementations/_module.js"; import {} from "../../../circuit-breaker/contracts/_module.js"; import { BREAKER_POLICIES, } from "../../../circuit-breaker/implementations/policies/_module.js"; import {} from "../../../time-span/contracts/_module.js"; import { TimeSpan } from "../../../time-span/implementations/_module.js"; import { delay } from "../../../utilities/_module.js"; /** * @group TestUtilities */ const circuitBreakerPolicySettings = { type: BREAKER_POLICIES.SAMPLING, failureThreshold: 0.2, successThreshold: 0.8, timeSpan: TimeSpan.fromMinutes(1), sampleTimeSpan: TimeSpan.fromSeconds(10), minimumRps: 5, }; /** * @group TestUtilities */ const backoffPolicySettings = { type: BACKOFFS.CONSTANT, delay: TimeSpan.fromMilliseconds(50), jitter: null, }; /** * IMPORT_PATH: `"@daiso-tech/core/circuit-breaker/test-utilities"` * @group TestUtilities * * @example * ```ts * import { beforeEach, describe, expect, test } from "vitest"; * import { DatabaseCircuitBreakerAdapter } from "@daiso-tech/core/circuit-breaker/database-circuit-breaker-adapter"; * import { SamplingBreaker } from "@daiso-tech/core/circuit-breaker/policies"; * import { samplingBreakerTestSuite } from "@daiso-tech/core/circuit-breaker/test-utilities"; * import { constantBackoff } from "@daiso-tech/core/backoff-policies"; * import { MemoryCircuitBreakerStorageAdapter } from "@daiso-tech/core/circuit-breaker/memory-circuit-breaker-storage-adapter"; * * describe("sampling-breaker class: DatabaseCircuitBreakerAdapter", () => { * samplingBreakerTestSuite({ * createAdapter: () => { * const adapter = new DatabaseCircuitBreakerAdapter({ * adapter: new MemoryCircuitBreakerStorageAdapter(), * backoffPolicy: constantBackoff( * samplingBreakerTestSuite.backoffPolicySettings, * ), * circuitBreakerPolicy: new SamplingBreaker( * samplingBreakerTestSuite.circuitBreakerPolicySettings, * ), * }); * return adapter; * }, * beforeEach, * describe, * expect, * test, * }); * }); * ``` */ export function samplingBreakerTestSuite(settings) { const { expect, test, createAdapter, describe, beforeEach: beforeEach_, delayBuffer = TimeSpan.fromMilliseconds(10), } = settings; let adapter; const waitTime = TimeSpan.fromTimeSpan(backoffPolicySettings.delay); describe("sampling-breaker ICircuitBreakerAdapter tests:", () => { beforeEach_(async () => { adapter = await createAdapter(); }); const KEY = "a"; async function delayWithBuffer(timeSpan) { await delay(TimeSpan.fromTimeSpan(timeSpan).addTimeSpan(delayBuffer)); } describe("method: getState", () => { test.todo("Write tests!!!"); }); describe("method: updateState / trackFailure / trackSuccess", () => { test.todo("Write tests!!!"); }); describe("method: updateState / trackFailure / isolate", () => { test.todo("Write tests!!!"); }); describe("method: updateState / trackFailure / reset", () => { test.todo("Write tests!!!"); }); }); } samplingBreakerTestSuite.circuitBreakerPolicySettings = circuitBreakerPolicySettings; samplingBreakerTestSuite.backoffPolicySettings = backoffPolicySettings; //# sourceMappingURL=sampling-breaker.test-suite.js.map