From 7c7110e35238ec8a4330adb9ab9f019c2631bc7a Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Wed, 6 May 2026 19:56:20 -0700 Subject: [PATCH 1/4] feat: improved AsyncSwitcher performance, bump deps --- pom.xml | 4 ++-- .../switcherapi/client/model/AsyncSwitcher.java | 4 +++- src/test/resources/simplelogger.properties | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/test/resources/simplelogger.properties diff --git a/pom.xml b/pom.xml index 915210e..addeb1e 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ - 2.13.2 + 2.14.0 3.20.0 3.13.0 2.0.17 @@ -69,7 +69,7 @@ 3.12.0 3.5.5 3.2.8 - 5.5.0.6356 + 5.6.0.6792 0.8.14 0.10.0 diff --git a/src/main/java/com/switcherapi/client/model/AsyncSwitcher.java b/src/main/java/com/switcherapi/client/model/AsyncSwitcher.java index 2b4aaed..5febab0 100644 --- a/src/main/java/com/switcherapi/client/model/AsyncSwitcher.java +++ b/src/main/java/com/switcherapi/client/model/AsyncSwitcher.java @@ -47,7 +47,9 @@ public AsyncSwitcher(final Switcher switcher, long delay) { * Switcher result for the Switcher executions map. */ public void execute() { - SwitcherUtils.debug(logger, "nextRun: {} - currentTimeMillis: {}", nextRun, System.currentTimeMillis()); + if (logger.isDebugEnabled()) { + SwitcherUtils.debug(logger, "nextRun: {} - currentTimeMillis: {}", nextRun, System.currentTimeMillis()); + } if (nextRun < System.currentTimeMillis()) { SwitcherUtils.debug(logger, "Running AsyncSwitcher"); diff --git a/src/test/resources/simplelogger.properties b/src/test/resources/simplelogger.properties new file mode 100644 index 0000000..3666514 --- /dev/null +++ b/src/test/resources/simplelogger.properties @@ -0,0 +1,17 @@ +# SLF4J SimpleLogger configuration +# https://www.slf4j.org/api/org/slf4j/simple/SimpleLogger.html + +# Default log level for all loggers +org.slf4j.simpleLogger.defaultLogLevel=info + +# DEBUG for the playground and the client library +org.slf4j.simpleLogger.log.com.switcherapi.playground=debug +org.slf4j.simpleLogger.log.com.switcherapi.client=debug + +# Date/time format +org.slf4j.simpleLogger.showDateTime=true +org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss.SSS + +# Show the logger name (abbreviated) +org.slf4j.simpleLogger.showShortLogName=true + From 71305b67e03be81b70aae4290b76e834a1f7db9a Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Wed, 6 May 2026 20:07:33 -0700 Subject: [PATCH 2/4] test: changed log level to info --- src/test/resources/simplelogger.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/resources/simplelogger.properties b/src/test/resources/simplelogger.properties index 3666514..4a78434 100644 --- a/src/test/resources/simplelogger.properties +++ b/src/test/resources/simplelogger.properties @@ -6,7 +6,7 @@ org.slf4j.simpleLogger.defaultLogLevel=info # DEBUG for the playground and the client library org.slf4j.simpleLogger.log.com.switcherapi.playground=debug -org.slf4j.simpleLogger.log.com.switcherapi.client=debug +org.slf4j.simpleLogger.log.com.switcherapi.client=info # Date/time format org.slf4j.simpleLogger.showDateTime=true From 62cf077a3efa83db9086a5ad13e6533650b311de Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Wed, 6 May 2026 20:09:21 -0700 Subject: [PATCH 3/4] Revert "test: changed log level to info" This reverts commit 71305b67e03be81b70aae4290b76e834a1f7db9a. --- src/test/resources/simplelogger.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/resources/simplelogger.properties b/src/test/resources/simplelogger.properties index 4a78434..3666514 100644 --- a/src/test/resources/simplelogger.properties +++ b/src/test/resources/simplelogger.properties @@ -6,7 +6,7 @@ org.slf4j.simpleLogger.defaultLogLevel=info # DEBUG for the playground and the client library org.slf4j.simpleLogger.log.com.switcherapi.playground=debug -org.slf4j.simpleLogger.log.com.switcherapi.client=info +org.slf4j.simpleLogger.log.com.switcherapi.client=debug # Date/time format org.slf4j.simpleLogger.showDateTime=true From ad70b831e43cf6121b3abe0a1c935a9910052c28 Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Wed, 6 May 2026 20:14:42 -0700 Subject: [PATCH 4/4] test: fix resource lock during snapshot auto update tests --- .../SwitcherSnapshotAutoUpdate2Test.java | 72 +++++++++++++++++++ .../SwitcherSnapshotAutoUpdateTest.java | 31 -------- 2 files changed, 72 insertions(+), 31 deletions(-) create mode 100644 src/test/java/com/switcherapi/client/SwitcherSnapshotAutoUpdate2Test.java diff --git a/src/test/java/com/switcherapi/client/SwitcherSnapshotAutoUpdate2Test.java b/src/test/java/com/switcherapi/client/SwitcherSnapshotAutoUpdate2Test.java new file mode 100644 index 0000000..1ead8b4 --- /dev/null +++ b/src/test/java/com/switcherapi/client/SwitcherSnapshotAutoUpdate2Test.java @@ -0,0 +1,72 @@ +package com.switcherapi.client; + +import com.switcherapi.Switchers; +import com.switcherapi.fixture.CountDownHelper; +import com.switcherapi.fixture.MockWebServerHelper; +import mockwebserver3.QueueDispatcher; +import org.apache.commons.lang3.StringUtils; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.nio.file.Paths; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class SwitcherSnapshotAutoUpdate2Test extends MockWebServerHelper { + + private static final String SNAPSHOTS_LOCAL = Paths.get(StringUtils.EMPTY).toAbsolutePath() + "/src/test/resources/update"; + + @BeforeAll + static void setup() throws IOException { + setupMockServer(); + Switchers.loadProperties(); + } + + @AfterAll + static void tearDown() { + tearDownMockServer(); + SwitcherContextBase.terminateSnapshotAutoUpdateWorker(); + } + + @BeforeEach + void restoreStubs() { + ((QueueDispatcher) mockBackEnd.getDispatcher()).clear(); + SwitcherContextBase.terminateSnapshotAutoUpdateWorker(); + + CountDownHelper.wait(1); + } + + @Test + void shouldNotKillThread_whenAPI_wentLocal() { + //given + givenResponse(generateMockAuth(10)); //auth + givenResponse(generateSnapshotResponse("default_outdated.json", SNAPSHOTS_LOCAL)); //graphql + + //that + Switchers.configure(ContextBuilder.builder(true) + .context(Switchers.class.getName()) + .url(String.format("http://localhost:%s", mockBackEnd.getPort())) + .apiKey("[API_KEY]") + .environment("generated_mock_default_6") + .local(true) + .snapshotAutoLoad(true) + .snapshotAutoUpdateInterval("1s")); + + Switchers.initializeClient(); + assertEquals(1, Switchers.getSnapshotVersion()); + + CountDownHelper.wait(1); + + //given - API is remote again + givenResponse(generateCheckSnapshotVersionResponse(Boolean.toString(false))); //criteria/snapshot_check + givenResponse(generateSnapshotResponse("default.json", SNAPSHOTS_LOCAL)); //graphql + + //test + CountDownHelper.wait(2); + assertEquals(2, Switchers.getSnapshotVersion()); + } + +} diff --git a/src/test/java/com/switcherapi/client/SwitcherSnapshotAutoUpdateTest.java b/src/test/java/com/switcherapi/client/SwitcherSnapshotAutoUpdateTest.java index c8a5f6f..daab30d 100644 --- a/src/test/java/com/switcherapi/client/SwitcherSnapshotAutoUpdateTest.java +++ b/src/test/java/com/switcherapi/client/SwitcherSnapshotAutoUpdateTest.java @@ -185,37 +185,6 @@ void shouldUpdateSnapshot_remote_inMemory() { @Test @Order(5) - void shouldNotKillThread_whenAPI_wentLocal() { - //given - givenResponse(generateMockAuth(10)); //auth - givenResponse(generateSnapshotResponse("default_outdated.json", SNAPSHOTS_LOCAL)); //graphql - - //that - Switchers.configure(ContextBuilder.builder(true) - .context(Switchers.class.getName()) - .url(String.format("http://localhost:%s", mockBackEnd.getPort())) - .apiKey("[API_KEY]") - .environment("generated_mock_default_6") - .local(true) - .snapshotAutoLoad(true) - .snapshotAutoUpdateInterval("1s")); - - Switchers.initializeClient(); - assertEquals(1, Switchers.getSnapshotVersion()); - - CountDownHelper.wait(1); - - //given - API is remote again - givenResponse(generateCheckSnapshotVersionResponse(Boolean.toString(false))); //criteria/snapshot_check - givenResponse(generateSnapshotResponse("default.json", SNAPSHOTS_LOCAL)); //graphql - - //test - CountDownHelper.wait(2); - assertEquals(2, Switchers.getSnapshotVersion()); - } - - @Test - @Order(6) void shouldRestartSnapshotAutoUpdate_whenAlreadySetup() { //given - initialize (snapshot autoload) givenResponse(generateMockAuth(10)); //auth