diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2017-10-18 14:31:20 +0200 |
---|---|---|
committer | Grégoire Aubert <gregoire.aubert@sonarsource.com> | 2017-10-23 08:01:13 -0700 |
commit | 0f1db5a8a1d7a678d2ec14ed96b13af45bbcf989 (patch) | |
tree | 83b7e3e71eb3c60a96576265404ca306a217797d /server/sonar-server | |
parent | e385878da500a0f42c096c4607665ca7e8309248 (diff) | |
download | sonarqube-0f1db5a8a1d7a678d2ec14ed96b13af45bbcf989.tar.gz sonarqube-0f1db5a8a1d7a678d2ec14ed96b13af45bbcf989.zip |
SONAR-10002 add WS api/editions/clear_error_message
Diffstat (limited to 'server/sonar-server')
5 files changed, 152 insertions, 2 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/edition/EditionsWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/edition/EditionsWsModule.java index 7470ffc2a37..37027d6c5f0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/edition/EditionsWsModule.java +++ b/server/sonar-server/src/main/java/org/sonar/server/edition/EditionsWsModule.java @@ -21,6 +21,7 @@ package org.sonar.server.edition; import org.sonar.core.platform.Module; import org.sonar.server.edition.ws.ApplyLicenseAction; +import org.sonar.server.edition.ws.ClearErrorMessageAction; import org.sonar.server.edition.ws.EditionsWs; import org.sonar.server.edition.ws.FormDataAction; import org.sonar.server.edition.ws.PreviewAction; @@ -35,6 +36,7 @@ public class EditionsWsModule extends Module { ApplyLicenseAction.class, PreviewAction.class, FormDataAction.class, + ClearErrorMessageAction.class, UninstallAction.class, EditionsWs.class); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/edition/ws/ApplyLicenseAction.java b/server/sonar-server/src/main/java/org/sonar/server/edition/ws/ApplyLicenseAction.java index 9f9dd7e87d4..8fc65d10ff9 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/edition/ws/ApplyLicenseAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/edition/ws/ApplyLicenseAction.java @@ -62,7 +62,9 @@ public class ApplyLicenseAction implements EditionsWsAction { WebService.NewAction action = controller.createAction("apply_license") .setSince("6.7") .setPost(true) - .setDescription("Apply changes to SonarQube to match the specified license. Require 'Administer System' permission.") + .setDescription("Apply changes to SonarQube to match the specified license." + + " Clear error message of previous automatic install of an edition, if there is any." + + " Require 'Administer System' permission.") .setResponseExample(getClass().getResource("example-edition-apply_license.json")) .setHandler(this); diff --git a/server/sonar-server/src/main/java/org/sonar/server/edition/ws/ClearErrorMessageAction.java b/server/sonar-server/src/main/java/org/sonar/server/edition/ws/ClearErrorMessageAction.java new file mode 100644 index 00000000000..7c9ecb43491 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/edition/ws/ClearErrorMessageAction.java @@ -0,0 +1,56 @@ +/* + * SonarQube + * Copyright (C) 2009-2017 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.sonar.server.edition.ws; + +import org.sonar.api.server.ws.Request; +import org.sonar.api.server.ws.Response; +import org.sonar.api.server.ws.WebService; +import org.sonar.server.edition.MutableEditionManagementState; +import org.sonar.server.user.UserSession; + +public class ClearErrorMessageAction implements EditionsWsAction { + private final UserSession userSession; + private final MutableEditionManagementState editionManagementState; + + public ClearErrorMessageAction(UserSession userSession, MutableEditionManagementState editionManagementState) { + this.userSession = userSession; + this.editionManagementState = editionManagementState; + } + + @Override + public void define(WebService.NewController controller) { + WebService.NewAction action = controller.createAction("clear_error_message") + .setSince("6.7") + .setPost(true) + .setDescription("Clear error message of last install of an edition (if any). Require 'Administer System' permission.") + .setHandler(this); + } + + @Override + public void handle(Request request, Response response) throws Exception { + userSession + .checkLoggedIn() + .checkIsSystemAdministrator(); + + editionManagementState.clearInstallErrorMessage(); + + response.noContent(); + } +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/edition/EditionsWsModuleTest.java b/server/sonar-server/src/test/java/org/sonar/server/edition/EditionsWsModuleTest.java index 34ab5aa5fa3..0a801053276 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/edition/EditionsWsModuleTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/edition/EditionsWsModuleTest.java @@ -34,6 +34,6 @@ public class EditionsWsModuleTest { underTest.configure(container); assertThat(container.getPicoContainer().getComponentAdapters()) - .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 6); + .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 7); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/edition/ws/ClearErrorMessageActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/edition/ws/ClearErrorMessageActionTest.java new file mode 100644 index 00000000000..b387b7d19f5 --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/edition/ws/ClearErrorMessageActionTest.java @@ -0,0 +1,90 @@ +/* + * SonarQube + * Copyright (C) 2009-2017 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.sonar.server.edition.ws; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.Mockito; +import org.sonar.api.server.ws.WebService; +import org.sonar.server.edition.MutableEditionManagementState; +import org.sonar.server.exceptions.ForbiddenException; +import org.sonar.server.exceptions.UnauthorizedException; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.ws.TestRequest; +import org.sonar.server.ws.WsActionTester; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; + +public class ClearErrorMessageActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + private MutableEditionManagementState editionManagementState = Mockito.mock(MutableEditionManagementState.class); + private ClearErrorMessageAction underTest = new ClearErrorMessageAction(userSessionRule, editionManagementState); + private WsActionTester actionTester = new WsActionTester(underTest); + + @Test + public void verify_definition() { + WebService.Action def = actionTester.getDef(); + + assertThat(def.key()).isEqualTo("clear_error_message"); + assertThat(def.since()).isEqualTo("6.7"); + assertThat(def.isPost()).isTrue(); + assertThat(def.isInternal()).isFalse(); + assertThat(def.description()).isNotEmpty(); + assertThat(def.responseExample()).isNull(); + assertThat(def.params()).isEmpty(); + } + + @Test + public void request_fails_if_user_not_logged_in() { + userSessionRule.anonymous(); + TestRequest request = actionTester.newRequest(); + + expectedException.expect(UnauthorizedException.class); + expectedException.expectMessage("Authentication is required"); + + request.execute(); + } + + @Test + public void request_fails_if_user_is_not_system_administer() { + userSessionRule.logIn(); + TestRequest request = actionTester.newRequest(); + + expectedException.expect(ForbiddenException.class); + expectedException.expectMessage("Insufficient privileges"); + + request.execute(); + } + + @Test + public void request_clears_errorMessage_from_editionManagement_state() { + userSessionRule.logIn().setSystemAdministrator(); + + actionTester.newRequest().execute(); + + verify(editionManagementState).clearInstallErrorMessage(); + } +} |