diff --git a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/HttpUtils.kt b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/HttpUtils.kt index a0fcf761..67e8601b 100644 --- a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/HttpUtils.kt +++ b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/HttpUtils.kt @@ -279,7 +279,7 @@ suspend fun PartnerRepository.checkToken( isCredentialsServerTokenValid(token) if (!validToken) { - throw OcpiClientInvalidParametersException("Invalid server token (token A allowed: $allowTokenA): $token") + throw HttpException(HttpStatus.UNAUTHORIZED, "Invalid server token (token A allowed: $allowTokenA)") } } diff --git a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/OcpiToolkitExceptions.kt b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/OcpiToolkitExceptions.kt index 9e3b10cb..2053304e 100644 --- a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/OcpiToolkitExceptions.kt +++ b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/OcpiToolkitExceptions.kt @@ -9,3 +9,10 @@ class OcpiToolkitUnknownEndpointException( already registered, make sure that the partnerRepository works properly. """.trimIndent() ) + +class OcpiToolkitResponseParsingException( + urlCalled: String, + cause: Throwable +) : Exception( + "Response cannot be parsed. URL='$urlCalled', error='${cause.message}'" +) diff --git a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt index edcef130..58b2d32c 100644 --- a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt +++ b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt @@ -1,14 +1,10 @@ package com.izivia.ocpi.toolkit.modules.versions -import com.izivia.ocpi.toolkit.common.OcpiResponseBody -import com.izivia.ocpi.toolkit.common.authenticate -import com.izivia.ocpi.toolkit.common.parseBody -import com.izivia.ocpi.toolkit.common.withRequiredHeaders +import com.izivia.ocpi.toolkit.common.* import com.izivia.ocpi.toolkit.modules.credentials.repositories.PartnerRepository import com.izivia.ocpi.toolkit.modules.versions.domain.Version import com.izivia.ocpi.toolkit.transport.TransportClientBuilder -import com.izivia.ocpi.toolkit.transport.domain.HttpMethod -import com.izivia.ocpi.toolkit.transport.domain.HttpRequest +import com.izivia.ocpi.toolkit.transport.domain.* /** * Used to get the versions of a partner @@ -39,6 +35,15 @@ class VersionsClient( allowTokenA = true ) ) - .parseBody() + .also { + if (it.status != HttpStatus.OK) throw HttpException(it.status, parseHttpStatus(it.status.code).name) + } + .runCatching { + this.parseBody>>() + } + .onFailure { + throw OcpiToolkitResponseParsingException(serverVersionsEndpointUrl, it) + } + .getOrThrow() } } diff --git a/ocpi-toolkit-2.2.1/src/test/kotlin/com/izivia/ocpi/toolkit/tests/integration/CredentialsIntegrationTests.kt b/ocpi-toolkit-2.2.1/src/test/kotlin/com/izivia/ocpi/toolkit/tests/integration/CredentialsIntegrationTests.kt index 91839cb9..d2afd8ac 100644 --- a/ocpi-toolkit-2.2.1/src/test/kotlin/com/izivia/ocpi/toolkit/tests/integration/CredentialsIntegrationTests.kt +++ b/ocpi-toolkit-2.2.1/src/test/kotlin/com/izivia/ocpi/toolkit/tests/integration/CredentialsIntegrationTests.kt @@ -21,6 +21,7 @@ import com.izivia.ocpi.toolkit.transport.domain.HttpStatus import com.mongodb.client.MongoCollection import com.mongodb.client.MongoDatabase import kotlinx.coroutines.runBlocking +import org.eclipse.jetty.client.HttpResponseException import org.junit.jupiter.api.Test import org.litote.kmongo.eq import org.litote.kmongo.getCollection @@ -29,6 +30,7 @@ import strikt.api.expectThat import strikt.api.expectThrows import strikt.assertions.* import java.util.* +import java.util.concurrent.ExecutionException class CredentialsIntegrationTests : BaseServerIntegrationTest() { @@ -179,9 +181,11 @@ class CredentialsIntegrationTests : BaseServerIntegrationTest() { credentialsClientService.register() } .isFailure() - .isA() - .get { statusCode } - .isEqualTo(OcpiStatus.CLIENT_INVALID_PARAMETERS.code) + .isA() + .get { this.cause } + .isA() + .get { this.response.status } + .isEqualTo(HttpStatus.UNAUTHORIZED.code) receiverServer.partnerCollection.deleteOne(Partner::url eq senderServer.versionsEndpoint) receiverServer.partnerCollection.insertOne( @@ -196,9 +200,11 @@ class CredentialsIntegrationTests : BaseServerIntegrationTest() { credentialsClientService.register() } .isFailure() - .isA() - .get { statusCode } - .isEqualTo(OcpiStatus.CLIENT_INVALID_PARAMETERS.code) + .isA() + .get { this.cause } + .isA() + .get { this.response.status } + .isEqualTo(HttpStatus.UNAUTHORIZED.code) } @Test