diff --git a/agrirouter-api-java-impl/pom.xml b/agrirouter-api-java-impl/pom.xml index c712135d..87dff26b 100644 --- a/agrirouter-api-java-impl/pom.xml +++ b/agrirouter-api-java-impl/pom.xml @@ -62,6 +62,12 @@ org.glassfish.jersey.inject jersey-hk2 + + org.junit.jupiter + junit-jupiter-params + 5.1.0 + test + org.eclipse.paho org.eclipse.paho.client.mqttv3 diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryService.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryService.java index 6a0409ff..6b769d6f 100644 --- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryService.java +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryService.java @@ -13,6 +13,7 @@ import com.dke.data.agrirouter.impl.NonEnvironmentalService; import com.dke.data.agrirouter.impl.common.MessageIdService; import com.dke.data.agrirouter.impl.messaging.rest.MessageSender; +import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import java.util.Collections; import java.util.Objects; @@ -50,7 +51,10 @@ public void send(MessageQueryParameters parameters) { MessageSender.MessageSenderResponse response = this.sendMessage(sendMessageParameters); this.getNativeLogger().trace("Validate message response."); - this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + int status = response.getNativeResponse().getStatus(); + if (!ResponseStatusChecker.isStatusInSuccessRange(status)) { + this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + } this.logMethodEnd(); } diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java index 9507b2ce..6db4f47c 100644 --- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java @@ -13,6 +13,7 @@ import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; import com.dke.data.agrirouter.impl.common.MessageIdService; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; +import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import java.util.Collections; import java.util.Objects; @@ -38,7 +39,10 @@ public void send(DeleteMessageParameters parameters) { MessageSenderResponse response = this.sendMessage(sendMessageParameters); - this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + int status = response.getNativeResponse().getStatus(); + if (!ResponseStatusChecker.isStatusInSuccessRange(status)) { + this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + } } private String encodeMessage(DeleteMessageParameters parameters) { diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java index 6d1c10f8..0fa398ba 100644 --- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java @@ -25,6 +25,7 @@ import com.dke.data.agrirouter.impl.common.UtcTimeService; import com.dke.data.agrirouter.impl.messaging.encoding.DecodeMessageServiceImpl; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; +import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import java.util.*; import org.apache.http.HttpStatus; @@ -56,7 +57,10 @@ public void send(MessageConfirmationParameters parameters) { MessageSenderResponse response = this.sendMessage(sendMessageParameters); - this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + int status = response.getNativeResponse().getStatus(); + if (!ResponseStatusChecker.isStatusInSuccessRange(status)) { + this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + } } private String encodeMessage(MessageConfirmationParameters parameters) { diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java index 3ea0ed49..366ca048 100644 --- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java @@ -3,6 +3,7 @@ import com.dke.data.agrirouter.api.enums.CertificationType; import com.dke.data.agrirouter.api.service.parameters.FetchMessageParameters; import com.dke.data.agrirouter.impl.RequestFactory; +import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import java.util.Optional; import javax.ws.rs.core.Response; @@ -28,7 +29,11 @@ default Optional poll(FetchMessageParameters parameters, int maxTries, l CertificationType.valueOf( parameters.getOnboardingResponse().getAuthentication().getType())) .get(); - this.assertResponseStatusIsValid(response, HttpStatus.SC_OK); + + if (!ResponseStatusChecker.isStatusInSuccessRange(response.getStatus())) { + this.assertResponseStatusIsValid(response, HttpStatus.SC_OK); + } + String entityContent = response.readEntity(String.class); if (!StringUtils.equalsIgnoreCase(entityContent, EMPTY_CONTENT)) { return Optional.of(entityContent); diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java index 2540bf66..5607e6a5 100644 --- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java @@ -2,6 +2,7 @@ import com.dke.data.agrirouter.api.service.messaging.SendMessageService; import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; +import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import org.apache.http.HttpStatus; @@ -12,6 +13,9 @@ public class SendMessageServiceImpl public void send(SendMessageParameters parameters) { parameters.validate(); MessageSenderResponse response = this.sendMessage(parameters); - this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + int status = response.getNativeResponse().getStatus(); + if (!ResponseStatusChecker.isStatusInSuccessRange(status)) { + this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + } } } diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java index d1961891..f2c67f1d 100644 --- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java @@ -15,6 +15,7 @@ import com.dke.data.agrirouter.impl.EnvironmentalService; import com.dke.data.agrirouter.impl.common.MessageIdService; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; +import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import java.util.ArrayList; import java.util.Collections; @@ -42,7 +43,10 @@ public void send(SetCapabilitiesParameters parameters) { MessageSenderResponse response = this.sendMessage(sendMessageParameters); - this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + int status = response.getNativeResponse().getStatus(); + if (!ResponseStatusChecker.isStatusInSuccessRange(status)) { + this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK); + } } private String encodeMessage(SetCapabilitiesParameters parameters) { diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/RegistrationRequestServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/RegistrationRequestServiceImpl.java index 194dfbe0..c5a11adb 100644 --- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/RegistrationRequestServiceImpl.java +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/RegistrationRequestServiceImpl.java @@ -7,6 +7,7 @@ import com.dke.data.agrirouter.impl.EnvironmentalService; import com.dke.data.agrirouter.impl.RequestFactory; import com.dke.data.agrirouter.impl.common.CookieResolverService; +import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import com.gargoylesoftware.htmlunit.util.Cookie; import java.util.Set; @@ -43,10 +44,12 @@ public RegistrationRequestResponse getRegistrationCode(RegistrationRequestParame Response response = RequestFactory.request(url, cookies).get(); this.getNativeLogger().debug("Validating response | {}.", response); - this.assertResponseStatusIsValid(response, HttpStatus.SC_OK); + if (!ResponseStatusChecker.isStatusInSuccessRange(response.getStatus())) { + this.assertResponseStatusIsValid(response, HttpStatus.SC_OK); + } this.getNativeLogger() - .info("END | Fetching registration code from agrirouter | '{}'.", parameters); + .info("END | Fetching registration code from agrirouter | '{}'.", parameters); return response.readEntity(RegistrationRequestResponse.class); } } diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java index 33353606..fd5cf5d5 100644 --- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java @@ -14,6 +14,7 @@ import com.dke.data.agrirouter.impl.RequestFactory; import com.dke.data.agrirouter.impl.common.signing.SecurityKeyCreationService; import com.dke.data.agrirouter.impl.onboard.AbstractOnboardingService; +import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import com.google.gson.Gson; import java.security.InvalidKeyException; @@ -94,10 +95,13 @@ private void verify( securedOnboardingParameters.getApplicationId(), encodedSignature) .post(Entity.entity(jsonBody, MediaType.APPLICATION_JSON_TYPE)); - try { - this.assertResponseStatusIsValid(response, HttpStatus.SC_OK); - } catch (UnexpectedHttpStatusException e) { - throw new CouldNotVerifySecuredOnboardingRequestException(e); + + if (!ResponseStatusChecker.isStatusInSuccessRange(response.getStatus())) { + try { + this.assertResponseStatusIsValid(response, HttpStatus.SC_OK); + } catch (UnexpectedHttpStatusException e) { + throw new CouldNotVerifySecuredOnboardingRequestException(e); + } } } diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/RegistrationRequestServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/RegistrationRequestServiceImpl.java index 79bf19ac..af5820f9 100644 --- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/RegistrationRequestServiceImpl.java +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/RegistrationRequestServiceImpl.java @@ -13,6 +13,7 @@ import com.dke.data.agrirouter.impl.common.CookieResolverService; import com.dke.data.agrirouter.impl.common.StateIdService; import com.dke.data.agrirouter.impl.onboard.OnboardingServiceImpl; +import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; @@ -78,7 +79,11 @@ public RegistrationRequestResponse getRegistrationCode( HtmlAnchor anchorByHref = page.getAnchorByHref("javascript:{}"); final Page redirectPage = anchorByHref.click(); - assertResponseStatusIsValid(redirectPage.getWebResponse(), HttpStatus.SC_OK); + + int status = redirectPage.getWebResponse().getStatusCode(); + if (!ResponseStatusChecker.isStatusInSuccessRange(status)) { + this.assertResponseStatusIsValid(redirectPage.getWebResponse(), HttpStatus.SC_OK); + } URL redirectPageUrl = redirectPage.getUrl(); return this.extractAuthenticationResults(redirectPageUrl); diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseStatusChecker.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseStatusChecker.java new file mode 100644 index 00000000..b664b28e --- /dev/null +++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseStatusChecker.java @@ -0,0 +1,8 @@ +package com.dke.data.agrirouter.impl.validation; + +public class ResponseStatusChecker { + + public static boolean isStatusInSuccessRange(int status) { + return status >= 200 && status <= 299; + } +} diff --git a/agrirouter-api-java-impl/src/test/java/com/dke/data/agrirouter/impl/validation/RangeCheckerTest.java b/agrirouter-api-java-impl/src/test/java/com/dke/data/agrirouter/impl/validation/RangeCheckerTest.java new file mode 100644 index 00000000..f7a6d2e4 --- /dev/null +++ b/agrirouter-api-java-impl/src/test/java/com/dke/data/agrirouter/impl/validation/RangeCheckerTest.java @@ -0,0 +1,29 @@ +package com.dke.data.agrirouter.impl.validation; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class RangeCheckerTest { + + @ParameterizedTest + @ValueSource(ints = {200, 201, 202, 203, 204, 205, 206, 207, 208, 226}) + void givenSuccessStatus_CheckStatusInSuccessRange_ShouldReturnTrue(int status) { + assertTrue(ResponseStatusChecker.isStatusInSuccessRange(status)); + } + + @Test + void givenAnyStatus2XX_CheckStatusInSuccessRange_ShouldReturnTrue() { + for (int actualStatus = 200; actualStatus <= 299; actualStatus++) { + assertTrue(ResponseStatusChecker.isStatusInSuccessRange(actualStatus)); + } + } + + @Test + void givenOtherStatus_CheckStatusInSuccessRange_ShouldReturnFalse() { + assertFalse(ResponseStatusChecker.isStatusInSuccessRange(404)); + } +}