diff --git a/src/envoy-context-store.ts b/src/envoy-context-store.ts index 0c2d5a0..815a700 100644 --- a/src/envoy-context-store.ts +++ b/src/envoy-context-store.ts @@ -31,6 +31,7 @@ class NodeInfo { } const store = new Map(); +let enabled = false; /** * clean up will decrease the reference count. @@ -72,7 +73,12 @@ const asyncHook = asyncHooks.createHook({ * i.e. put it in your application's start. */ function enable() { - asyncHook.enable(); + if (!enabled) { + asyncHook.enable(); + enabled = true; + } else { + console.trace("[envoy-node] You want to enable the enabled store"); + } } /** @@ -81,8 +87,13 @@ function enable() { * This function is not intended to be call in the application life cycle. */ function disable() { - asyncHook.disable(); - store.clear(); + if (enabled) { + asyncHook.disable(); + store.clear(); + enabled = false; + } else { + console.trace("[envoy-node] You want to disable the disabled store"); + } } function markContext(triggerAsyncId: number, context: EnvoyContext) { @@ -143,9 +154,14 @@ function get(): EnvoyContext | undefined { return getContext(asyncId); } +function isEnabled() { + return enabled; +} + export default { enable, disable, set, - get + get, + isEnabled }; diff --git a/test/envoy-context-store.test.ts b/test/envoy-context-store.test.ts index 41161ca..e7e9e3b 100644 --- a/test/envoy-context-store.test.ts +++ b/test/envoy-context-store.test.ts @@ -55,6 +55,7 @@ describe("Envoy context store", () => { return data; }); store.enable(); + expect(store.isEnabled()).toBeTruthy(); for (const data of testData) { await root(data); } @@ -82,4 +83,17 @@ describe("Envoy context store", () => { expect(console.trace).toBeCalled(); console.trace = originalTrace; }); + + it("should trace error when enable / disable twice", () => { + const originalTrace = console.trace; + console.trace = jest.fn(); + store.enable(); + store.enable(); + expect(console.trace).toBeCalled(); + console.trace = jest.fn(); + store.disable(); + store.disable(); + expect(console.trace).toBeCalled(); + console.trace = originalTrace; + }); });