From 4843873e45a93f52c75c0970a4f6b22de3018e68 Mon Sep 17 00:00:00 2001 From: Peter Csajtai Date: Fri, 7 Jul 2023 11:54:58 +0200 Subject: [PATCH 1/3] Fix always firing onConfigChanged hook --- src/ConfigServiceBase.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/ConfigServiceBase.ts b/src/ConfigServiceBase.ts index 52b876c..a4e2daa 100644 --- a/src/ConfigServiceBase.ts +++ b/src/ConfigServiceBase.ts @@ -99,16 +99,15 @@ export abstract class ConfigServiceBase { const success = fetchResult.status === FetchStatus.Fetched; if (success || fetchResult.config.timestamp > latestConfig.timestamp && (!fetchResult.config.isEmpty || latestConfig.isEmpty)) { + await this.options.cache.set(this.cacheKey, fetchResult.config); - latestConfig = fetchResult.config; - - await this.options.cache.set(this.cacheKey, latestConfig); - - this.onConfigUpdated(latestConfig); + this.onConfigUpdated(fetchResult.config); - if (success) { - this.onConfigChanged(latestConfig); + if (success && fetchResult.config.configJson != latestConfig.configJson) { + this.onConfigChanged(fetchResult.config); } + + latestConfig = fetchResult.config; } return [fetchResult, latestConfig]; From 88a21a05de701076a475b71a235599357b40a3de Mon Sep 17 00:00:00 2001 From: Peter Csajtai Date: Fri, 7 Jul 2023 12:18:21 +0200 Subject: [PATCH 2/3] Update ConfigServiceBase.ts --- src/ConfigServiceBase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ConfigServiceBase.ts b/src/ConfigServiceBase.ts index a4e2daa..714efe9 100644 --- a/src/ConfigServiceBase.ts +++ b/src/ConfigServiceBase.ts @@ -103,7 +103,7 @@ export abstract class ConfigServiceBase { this.onConfigUpdated(fetchResult.config); - if (success && fetchResult.config.configJson != latestConfig.configJson) { + if (success && (fetchResult.config.httpETag != latestConfig.httpETag || fetchResult.config.configJson != latestConfig.configJson)) { this.onConfigChanged(fetchResult.config); } From 896b2d67ffc84796d86c6d4aa09a101bf64e1e39 Mon Sep 17 00:00:00 2001 From: Peter Csajtai Date: Fri, 7 Jul 2023 12:22:22 +0200 Subject: [PATCH 3/3] Add test --- test/ConfigCatClientTests.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/ConfigCatClientTests.ts b/test/ConfigCatClientTests.ts index d27b683..988185c 100644 --- a/test/ConfigCatClientTests.ts +++ b/test/ConfigCatClientTests.ts @@ -496,6 +496,24 @@ describe("ConfigCatClient", () => { assert.equal(configChangedEventCount, 3); }); + it("Initialization With AutoPollOptions - config doesn't change - should fire configChanged only once", async () => { + + const configCatKernel: FakeConfigCatKernel = { configFetcher: new FakeConfigFetcher(), sdkType: "common", sdkVersion: "1.0.0" }; + let configChangedEventCount = 0; + const pollIntervalSeconds = 1; + const userOptions: IAutoPollOptions = { + logger: null, + pollIntervalSeconds, + setupHooks: hooks => hooks.on("configChanged", () => configChangedEventCount++) + }; + const options: AutoPollOptions = new AutoPollOptions("APIKEY", "common", "1.0.0", userOptions, null); + new ConfigCatClient(options, configCatKernel); + + await delay(2.5 * pollIntervalSeconds * 1000); + + assert.equal(configChangedEventCount, 1); + }); + it("Initialization With AutoPollOptions - with maxInitWaitTimeSeconds - getValueAsync should wait", async () => { const maxInitWaitTimeSeconds = 2;