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