From d8f977b4a4d2b3e3e6ab2316b8c6dec02c1c55dc Mon Sep 17 00:00:00 2001 From: Aurelien Poscia Date: Fri, 10 Feb 2023 10:47:32 +0100 Subject: [PATCH] SONAR-18397 add ITs for permanent users de-provisioning triggered by Azure (SCIM) --- .../sonar/scanner/report/ReportPublisher.java | 3 +- .../sonarqube/ws/client/DeleteRequest.java | 42 +++++++++++++++++++ .../org/sonarqube/ws/client/GetRequest.java | 10 ++++- .../sonarqube/ws/client/HttpConnector.java | 15 +++---- .../ws/client/RequestWithoutPayload.java | 36 ++++++++++++++++ .../org/sonarqube/ws/client/WsRequest.java | 2 +- .../ws/client/DeleteRequestTest.java | 40 ++++++++++++++++++ .../sonarqube/ws/client/GetRequestTest.java | 40 ++++++++++++++++++ .../sonarqube/ws/client/ServiceTester.java | 6 +-- 9 files changed, 181 insertions(+), 13 deletions(-) create mode 100644 sonar-ws/src/main/java/org/sonarqube/ws/client/DeleteRequest.java create mode 100644 sonar-ws/src/main/java/org/sonarqube/ws/client/RequestWithoutPayload.java create mode 100644 sonar-ws/src/test/java/org/sonarqube/ws/client/DeleteRequestTest.java create mode 100644 sonar-ws/src/test/java/org/sonarqube/ws/client/GetRequestTest.java diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisher.java index a4783bab3f4..8d9d88d29c3 100644 --- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisher.java +++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisher.java @@ -55,6 +55,7 @@ import org.sonarqube.ws.Ce; import org.sonarqube.ws.MediaTypes; import org.sonarqube.ws.client.HttpException; import org.sonarqube.ws.client.PostRequest; +import org.sonarqube.ws.client.RequestWithPayload.Part; import org.sonarqube.ws.client.WsResponse; import static java.net.URLEncoder.encode; @@ -201,7 +202,7 @@ public class ReportPublisher implements Startable { String upload(File report) { LOG.debug("Upload report"); long startTime = System.currentTimeMillis(); - PostRequest.Part filePart = new PostRequest.Part(MediaTypes.ZIP, report); + Part filePart = new Part(MediaTypes.ZIP, report); PostRequest post = new PostRequest("api/ce/submit") .setMediaType(MediaTypes.PROTOBUF) .setParam("projectKey", moduleHierarchy.root().key()) diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/DeleteRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/DeleteRequest.java new file mode 100644 index 00000000000..90f0e295f7c --- /dev/null +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/DeleteRequest.java @@ -0,0 +1,42 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonarqube.ws.client; + +import java.util.function.Function; +import okhttp3.Request; + +/** + * @since 5.3 + */ +public class DeleteRequest extends RequestWithoutPayload { + public DeleteRequest(String path) { + super(path); + } + + @Override + public Method getMethod() { + return Method.DELETE; + } + + @Override + Function addVerbToBuilder() { + return Request.Builder::delete; + } +} diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/GetRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/GetRequest.java index bc5a82d0e3c..e835346611d 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/GetRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/GetRequest.java @@ -19,10 +19,13 @@ */ package org.sonarqube.ws.client; +import java.util.function.Function; +import okhttp3.Request; + /** * @since 5.3 */ -public class GetRequest extends BaseRequest { +public class GetRequest extends RequestWithoutPayload { public GetRequest(String path) { super(path); } @@ -31,4 +34,9 @@ public class GetRequest extends BaseRequest { public Method getMethod() { return Method.GET; } + + @Override + Function addVerbToBuilder() { + return Request.Builder::get; + } } diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java index 92739e636f2..a4fec2726a4 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java @@ -109,8 +109,8 @@ public class HttpConnector implements WsConnector { @Override public WsResponse call(WsRequest httpRequest) { - if (httpRequest instanceof GetRequest) { - return get((GetRequest) httpRequest); + if (httpRequest instanceof RequestWithoutPayload) { + return executeRequest((RequestWithoutPayload) httpRequest); } if (httpRequest instanceof RequestWithPayload) { return executeRequest((RequestWithPayload) httpRequest); @@ -118,12 +118,13 @@ public class HttpConnector implements WsConnector { throw new IllegalArgumentException(format("Unsupported implementation: %s", httpRequest.getClass())); } - private WsResponse get(GetRequest getRequest) { - HttpUrl.Builder urlBuilder = prepareUrlBuilder(getRequest); - completeUrlQueryParameters(getRequest, urlBuilder); + private WsResponse executeRequest(RequestWithoutPayload request) { + HttpUrl.Builder urlBuilder = prepareUrlBuilder(request); + completeUrlQueryParameters(request, urlBuilder); - Request.Builder okRequestBuilder = prepareOkRequestBuilder(getRequest, urlBuilder).get(); - return new OkHttpResponse(doCall(prepareOkHttpClient(okHttpClient, getRequest), okRequestBuilder.build())); + Request.Builder okRequestBuilder = prepareOkRequestBuilder(request, urlBuilder); + okRequestBuilder = request.addVerbToBuilder().apply(okRequestBuilder); + return new OkHttpResponse(doCall(prepareOkHttpClient(okHttpClient, request), okRequestBuilder.build())); } private WsResponse executeRequest(RequestWithPayload request) { diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/RequestWithoutPayload.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/RequestWithoutPayload.java new file mode 100644 index 00000000000..d3ea011eeca --- /dev/null +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/RequestWithoutPayload.java @@ -0,0 +1,36 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonarqube.ws.client; + +import java.util.function.Function; +import okhttp3.Request; + +/** + * @since 5.3 + */ +public abstract class RequestWithoutPayload>> extends BaseRequest> { + + protected RequestWithoutPayload(String path) { + super(path); + } + + abstract Function addVerbToBuilder(); + +} diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/WsRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/WsRequest.java index c27274af5b2..2d4ab6d8438 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/WsRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/WsRequest.java @@ -51,6 +51,6 @@ public interface WsRequest { Headers getHeaders(); enum Method { - GET, POST, PATCH + GET, POST, PATCH, DELETE } } diff --git a/sonar-ws/src/test/java/org/sonarqube/ws/client/DeleteRequestTest.java b/sonar-ws/src/test/java/org/sonarqube/ws/client/DeleteRequestTest.java new file mode 100644 index 00000000000..24b3986bd65 --- /dev/null +++ b/sonar-ws/src/test/java/org/sonarqube/ws/client/DeleteRequestTest.java @@ -0,0 +1,40 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonarqube.ws.client; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DeleteRequestTest { + + private DeleteRequest deleteRequest = new DeleteRequest("path"); + + @Test + public void getMethod_shouldReturnDelete() { + assertThat(deleteRequest.getMethod()).isEqualTo(WsRequest.Method.DELETE); + } + + + @Test + public void addVerbToBuilder_shouldReturnNonNullResult() { + assertThat(deleteRequest.addVerbToBuilder()).isNotNull(); + } +} diff --git a/sonar-ws/src/test/java/org/sonarqube/ws/client/GetRequestTest.java b/sonar-ws/src/test/java/org/sonarqube/ws/client/GetRequestTest.java new file mode 100644 index 00000000000..2f5c66059ce --- /dev/null +++ b/sonar-ws/src/test/java/org/sonarqube/ws/client/GetRequestTest.java @@ -0,0 +1,40 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonarqube.ws.client; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class GetRequestTest { + + private GetRequest getRequest = new GetRequest("path"); + + @Test + public void getMethod_shouldReturnGet() { + assertThat(getRequest.getMethod()).isEqualTo(WsRequest.Method.GET); + } + + @Test + public void addVerbToBuilder_shouldReturnNonNullResult() { + assertThat(getRequest.addVerbToBuilder()).isNotNull(); + } + +} diff --git a/sonar-ws/src/test/java/org/sonarqube/ws/client/ServiceTester.java b/sonar-ws/src/test/java/org/sonarqube/ws/client/ServiceTester.java index 6898c537894..bb6d9040f26 100644 --- a/sonar-ws/src/test/java/org/sonarqube/ws/client/ServiceTester.java +++ b/sonar-ws/src/test/java/org/sonarqube/ws/client/ServiceTester.java @@ -140,10 +140,10 @@ public class ServiceTester extends ExternalResource { @CheckForNull public GetRequest getGetRequest() { assertSingleGetCall(); - return getCalls.iterator().next().getRequest(); + return (GetRequest) getCalls.iterator().next().getRequest(); } - public RequestAssert assertThat(GetRequest getRequest) { + public RequestAssert assertThat(GetRequest getRequest) { return new RequestAssert<>(getRequest); } @@ -189,7 +189,7 @@ public class ServiceTester extends ExternalResource { } @Immutable - public static final class GetCall extends CallWithParser { + public static final class GetCall extends CallWithParser> { public GetCall(GetRequest getRequest, @Nullable Parser parser) { super(getRequest, parser); -- 2.39.5