diff --git a/pom.xml b/pom.xml index 1a55a2c..28b8e9d 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ com.switcherapi switcher-client jar - 1.9.0 + 1.9.1 Switcher Client Switcher Client SDK for working with Switcher API diff --git a/src/main/java/com/switcherapi/client/model/SwitcherRequest.java b/src/main/java/com/switcherapi/client/model/SwitcherRequest.java index c5195a0..5e21bbe 100644 --- a/src/main/java/com/switcherapi/client/model/SwitcherRequest.java +++ b/src/main/java/com/switcherapi/client/model/SwitcherRequest.java @@ -9,7 +9,7 @@ import java.util.*; /** - * SwitcherRequest are the entry point to evaluate criteria and return the result. + * SwitcherRequest is the entry point to evaluate criteria and return the result. *
To execute a criteria evaluation, use one of the available methods: {@link #isItOn()}. * * @author Roger Floriano (petruki) @@ -19,12 +19,6 @@ * @see #submit() */ public final class SwitcherRequest extends SwitcherBuilder { - - public static final String KEY = "key"; - - public static final String SHOW_REASON = "showReason"; - - public static final String BYPASS_METRIC = "bypassMetric"; private final SwitcherExecutor switcherExecutor; @@ -150,7 +144,7 @@ private boolean canUseAsync() { private Optional getFromHistory() { for (SwitcherResult switcherResult : historyExecution) { - if (switcherResult.getEntry().equals(getEntry())) { + if (switcherResult.getEntry().equals(entry)) { return Optional.of(switcherResult); } } diff --git a/src/main/java/com/switcherapi/client/remote/ClientWS.java b/src/main/java/com/switcherapi/client/remote/ClientWS.java index c2a119f..cf10834 100644 --- a/src/main/java/com/switcherapi/client/remote/ClientWS.java +++ b/src/main/java/com/switcherapi/client/remote/ClientWS.java @@ -41,6 +41,21 @@ public interface ClientWS { * Returns array of switcher keys not found */ String CHECK_SWITCHERS = "%s/criteria/switchers_check"; + + /** + * Constant for query params (Switcher Key) + */ + String KEY = "key"; + + /** + * Constant for query params (Show Reason) + */ + String SHOW_REASON = "showReason"; + + /** + * Constant for query params (Bypass Metric) + */ + String BYPASS_METRIC = "bypassMetric"; /** * Returns the verification configured for a specific switcher (key) diff --git a/src/main/java/com/switcherapi/client/remote/ClientWSImpl.java b/src/main/java/com/switcherapi/client/remote/ClientWSImpl.java index ebc8217..9524a03 100644 --- a/src/main/java/com/switcherapi/client/remote/ClientWSImpl.java +++ b/src/main/java/com/switcherapi/client/remote/ClientWSImpl.java @@ -3,7 +3,6 @@ import com.switcherapi.client.SwitcherProperties; import com.switcherapi.client.exception.SwitcherRemoteException; import com.switcherapi.client.model.ContextKey; -import com.switcherapi.client.model.SwitcherRequest; import com.switcherapi.client.model.criteria.Snapshot; import com.switcherapi.client.remote.dto.*; @@ -47,9 +46,9 @@ public static ClientWS build(SwitcherProperties switcherProperties, ExecutorServ public CriteriaResponse executeCriteria(final CriteriaRequest criteriaRequest, final String token) { final String url = switcherProperties.getValue(ContextKey.URL); final WebTarget myResource = client.target(String.format(CRITERIA_URL, url)) - .queryParam(SwitcherRequest.KEY, criteriaRequest.getSwitcherKey()) - .queryParam(SwitcherRequest.SHOW_REASON, Boolean.TRUE) - .queryParam(SwitcherRequest.BYPASS_METRIC, criteriaRequest.isBypassMetric()); + .queryParam(KEY, criteriaRequest.getSwitcherKey()) + .queryParam(SHOW_REASON, Boolean.TRUE) + .queryParam(BYPASS_METRIC, criteriaRequest.isBypassMetric()); try { final Response response = myResource.request(MediaType.APPLICATION_JSON) diff --git a/src/main/java/com/switcherapi/client/service/local/SwitcherLocalService.java b/src/main/java/com/switcherapi/client/service/local/SwitcherLocalService.java index 2caf71c..de13f15 100644 --- a/src/main/java/com/switcherapi/client/service/local/SwitcherLocalService.java +++ b/src/main/java/com/switcherapi/client/service/local/SwitcherLocalService.java @@ -104,24 +104,24 @@ public boolean notifyChange(final String snapshotFile) { } @Override - public SwitcherResult executeCriteria(final SwitcherRequest switcher) { - SwitcherUtils.debug(logger, "[Local] request: {}", switcher); + public SwitcherResult executeCriteria(final SwitcherRequest switcherRequest) { + SwitcherUtils.debug(logger, "[Local] request: {}", switcherRequest); SwitcherResult response; try { - if (switcher.isRemote()) { - response = Mapper.mapFrom(this.clientRemote.executeCriteria(Mapper.mapFrom(switcher))); + if (switcherRequest.isRemote()) { + response = Mapper.mapFrom(this.clientRemote.executeCriteria(Mapper.mapFrom(switcherRequest)), switcherRequest); SwitcherUtils.debug(logger, "[Remote] response: {}", response); } else { - response = this.clientLocal.executeCriteria(switcher, this.domain); + response = this.clientLocal.executeCriteria(switcherRequest, this.domain); SwitcherUtils.debug(logger, "[Local] response: {}", response); } } catch (SwitcherKeyNotFoundException e) { - if (StringUtils.isBlank(switcher.getDefaultResult())) { + if (StringUtils.isBlank(switcherRequest.getDefaultResult())) { throw e; } - response = SwitcherFactory.buildFromDefault(switcher); + response = SwitcherFactory.buildFromDefault(switcherRequest); SwitcherUtils.debug(logger, "[Default] response: {}", response); } diff --git a/src/main/java/com/switcherapi/client/service/remote/SwitcherRemoteService.java b/src/main/java/com/switcherapi/client/service/remote/SwitcherRemoteService.java index 411e8c9..e34a983 100644 --- a/src/main/java/com/switcherapi/client/service/remote/SwitcherRemoteService.java +++ b/src/main/java/com/switcherapi/client/service/remote/SwitcherRemoteService.java @@ -39,17 +39,17 @@ public SwitcherRemoteService(final ClientRemote clientRemote, final SwitcherExec } @Override - public SwitcherResult executeCriteria(final SwitcherRequest switcher) { - SwitcherUtils.debug(logger, "[Remote] request: {}", switcher); + public SwitcherResult executeCriteria(final SwitcherRequest switcherRequest) { + SwitcherUtils.debug(logger, "[Remote] request: {}", switcherRequest); try { - final CriteriaResponse response = this.clientRemote.executeCriteria(Mapper.mapFrom(switcher)); + final CriteriaResponse response = this.clientRemote.executeCriteria(Mapper.mapFrom(switcherRequest)); SwitcherUtils.debug(logger, "[Remote] response: {}", response); - return Mapper.mapFrom(response); + return Mapper.mapFrom(response, switcherRequest); } catch (final SwitcherRemoteException e) { logger.error("Failed to execute criteria - Cause: {}", e.getMessage(), e.getCause()); - return tryExecuteLocalCriteria(switcher, e); + return tryExecuteLocalCriteria(switcherRequest, e); } } diff --git a/src/main/java/com/switcherapi/client/utils/Mapper.java b/src/main/java/com/switcherapi/client/utils/Mapper.java index 7b71b12..39843f4 100644 --- a/src/main/java/com/switcherapi/client/utils/Mapper.java +++ b/src/main/java/com/switcherapi/client/utils/Mapper.java @@ -17,12 +17,14 @@ public static CriteriaRequest mapFrom(final SwitcherRequest switcher) { return request; } - public static SwitcherResult mapFrom(final CriteriaResponse criteriaResponse) { + public static SwitcherResult mapFrom(final CriteriaResponse criteriaResponse, + final SwitcherRequest switcherRequest) { SwitcherResult switcherResult = new SwitcherResult(); switcherResult.setSwitcherKey(criteriaResponse.getSwitcherKey()); switcherResult.setResult(criteriaResponse.getResult()); switcherResult.setReason(criteriaResponse.getReason()); switcherResult.setMetadata(criteriaResponse.getMetadata()); + switcherResult.setEntry(switcherRequest.getEntry()); return switcherResult; } } diff --git a/src/test/java/com/switcherapi/client/SwitcherThrottleTest.java b/src/test/java/com/switcherapi/client/SwitcherThrottleTest.java index 94c8539..c1ffc18 100644 --- a/src/test/java/com/switcherapi/client/SwitcherThrottleTest.java +++ b/src/test/java/com/switcherapi/client/SwitcherThrottleTest.java @@ -48,16 +48,18 @@ void resetSwitcherContextState() { void shouldReturnTrue_withThrottle() { Switchers.initializeClient(); - // Throttled call + // Initial remote call givenResponse(generateMockAuth(10)); //auth - givenResponse(generateCriteriaResponse("true", false)); //criteria + givenResponse(generateCriteriaResponse("true", false)); //criteria - sync (cached) - // After throttle - givenResponse(generateCriteriaResponse("false", false)); //criteria + // Throttle period - should use cache + givenResponse(generateCriteriaResponse("false", false)); //criteria - async (background) + givenResponse(generateCriteriaResponse("false", false)); //criteria - async after 1 sec (background) //test Switcher switcher = Switchers .getSwitcher(Switchers.REMOTE_KEY) + .checkValue("value") .throttle(1000); for (int i = 0; i < 100; i++) { diff --git a/src/test/java/com/switcherapi/client/remote/ClientRemoteTest.java b/src/test/java/com/switcherapi/client/remote/ClientRemoteTest.java index ac1d4f9..c833481 100644 --- a/src/test/java/com/switcherapi/client/remote/ClientRemoteTest.java +++ b/src/test/java/com/switcherapi/client/remote/ClientRemoteTest.java @@ -74,13 +74,13 @@ void shouldExecuteCriteria() { SwitcherProperties switcherProperties = Switchers.getSwitcherProperties(); SwitcherValidator validatorService = new ValidatorService(); ClientLocal clientLocal = new ClientLocalService(validatorService); - SwitcherRequest switcher = new SwitcherRequest( + SwitcherRequest switcherRequest = new SwitcherRequest( "KEY", new SwitcherRemoteService(clientRemote, new SwitcherLocalService(clientRemote, clientLocal, switcherProperties)), switcherProperties); //test - SwitcherResult actual = Mapper.mapFrom(clientRemote.executeCriteria(Mapper.mapFrom(switcher))); + SwitcherResult actual = Mapper.mapFrom(clientRemote.executeCriteria(Mapper.mapFrom(switcherRequest)), switcherRequest); assertTrue(actual.isItOn()); }