aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/exponential-backoff/src/jitter
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts31
-rw-r--r--node_modules/exponential-backoff/src/jitter/full/full.jitter.ts4
-rw-r--r--node_modules/exponential-backoff/src/jitter/jitter.factory.ts16
-rw-r--r--node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts9
-rw-r--r--node_modules/exponential-backoff/src/jitter/no/no.jitter.ts3
5 files changed, 63 insertions, 0 deletions
diff --git a/node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts b/node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts
new file mode 100644
index 0000000..003d08d
--- /dev/null
+++ b/node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts
@@ -0,0 +1,31 @@
+import { fullJitter } from './full.jitter';
+
+describe(`Testing ${fullJitter.name}`, () => {
+ const delay = 100;
+
+ function arrayWith5FullJitterDelays() {
+ return Array(5).fill(delay).map(fullJitter)
+ }
+
+ describe(`when calling #fullJitter on the same delay multiple times`, () => {
+ it('all the delays are greater than or equal to 0', () => {
+ arrayWith5FullJitterDelays()
+ .forEach(value => expect(value).toBeGreaterThanOrEqual(0));
+ })
+
+ it('all the delays are less than or equal to the original delay', () => {
+ arrayWith5FullJitterDelays()
+ .forEach(value => expect(value).toBeLessThanOrEqual(delay));
+ })
+
+ it('the delays are not equal to one another', () => {
+ const delays = arrayWith5FullJitterDelays();
+ expect(new Set(delays).size).not.toBe(1);
+ })
+
+ it('the delays are integers', () => {
+ arrayWith5FullJitterDelays()
+ .forEach(value => expect(Number.isInteger(value)).toBe(true))
+ })
+ })
+}) \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts b/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts
new file mode 100644
index 0000000..b3c447b
--- /dev/null
+++ b/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts
@@ -0,0 +1,4 @@
+export function fullJitter(delay: number) {
+ const jitteredDelay = Math.random() * delay;
+ return Math.round(jitteredDelay);
+} \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/jitter/jitter.factory.ts b/node_modules/exponential-backoff/src/jitter/jitter.factory.ts
new file mode 100644
index 0000000..b549887
--- /dev/null
+++ b/node_modules/exponential-backoff/src/jitter/jitter.factory.ts
@@ -0,0 +1,16 @@
+import { IBackOffOptions } from "../options";
+import { fullJitter } from "./full/full.jitter";
+import { noJitter } from "./no/no.jitter";
+
+export type Jitter = (delay: number) => number;
+
+export function JitterFactory(options: IBackOffOptions): Jitter {
+ switch (options.jitter) {
+ case "full":
+ return fullJitter;
+
+ case "none":
+ default:
+ return noJitter;
+ }
+}
diff --git a/node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts b/node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts
new file mode 100644
index 0000000..1d56524
--- /dev/null
+++ b/node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts
@@ -0,0 +1,9 @@
+import { noJitter } from './no.jitter';
+
+describe(`Testing ${noJitter.name}`, () => {
+ it(`when calling #noJitter with a delay,
+ it returns the same delay`, () => {
+ const delay = 100;
+ expect(noJitter(delay)).toBe(delay);
+ })
+}) \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts b/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts
new file mode 100644
index 0000000..bc1b56f
--- /dev/null
+++ b/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts
@@ -0,0 +1,3 @@
+export function noJitter(delay: number) {
+ return delay;
+} \ No newline at end of file