diff options
author | Simon Brandhof <simon.brandhof@sonarsource.com> | 2015-09-18 11:27:06 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@sonarsource.com> | 2015-09-18 23:49:44 +0200 |
commit | 8b80e32f4e020ecc82b6e4fd6fd01b5d9374167a (patch) | |
tree | 46cfd62c29832a887a914de4a37b5f0485da7ecd /server | |
parent | 4f109df6d8e53e6a2db17bbfcdb9d38332256930 (diff) | |
download | sonarqube-8b80e32f4e020ecc82b6e4fd6fd01b5d9374167a.tar.gz sonarqube-8b80e32f4e020ecc82b6e4fd6fd01b5d9374167a.zip |
SONAR-6834 support project branches
Diffstat (limited to 'server')
4 files changed, 47 insertions, 9 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ReportSubmitter.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ReportSubmitter.java index 1fe382e9b51..6bb18ed6ae1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/ReportSubmitter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ReportSubmitter.java @@ -24,6 +24,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang.StringUtils; import org.sonar.api.resources.Qualifiers; import org.sonar.api.server.ServerSide; +import org.sonar.core.component.ComponentKeys; import org.sonar.core.permission.GlobalPermissions; import org.sonar.db.ce.CeTaskTypes; import org.sonar.db.component.ComponentDto; @@ -47,13 +48,15 @@ public class ReportSubmitter { this.componentService = componentService; } - public CeTask submit(String projectKey, @Nullable String projectName, InputStream reportInput) { + public CeTask submit(String projectKey, @Nullable String projectBranch, @Nullable String projectName, InputStream reportInput) { userSession.checkGlobalPermission(GlobalPermissions.SCAN_EXECUTION); - ComponentDto project = componentService.getNullableByKey(projectKey); + String effectiveProjectKey = ComponentKeys.createKey(projectKey, projectBranch); + ComponentDto project = componentService.getNullableByKey(effectiveProjectKey); if (project == null) { // the project does not exist -> requires to provision it NewComponent newProject = new NewComponent(projectKey, StringUtils.defaultIfBlank(projectName, projectKey)); + newProject.setBranch(projectBranch); newProject.setQualifier(Qualifiers.PROJECT); // no need to verify the permission "provisionning" as it's already handled by componentService project = componentService.create(newProject); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/CeSubmitWsAction.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/CeSubmitWsAction.java index 86c25391ce9..d230c2d0cbb 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/CeSubmitWsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/CeSubmitWsAction.java @@ -19,6 +19,7 @@ */ package org.sonar.server.computation.ws; +import com.google.common.base.Strings; import java.io.InputStream; import org.apache.commons.lang.StringUtils; import org.sonar.api.server.ws.Request; @@ -37,6 +38,7 @@ import org.sonarqube.ws.WsCe; public class CeSubmitWsAction implements CeWsAction { public static final String PARAM_PROJECT_KEY = "projectKey"; + public static final String PARAM_PROJECT_BRANCH = "projectBranch"; public static final String PARAM_PROJECT_NAME = "projectName"; public static final String PARAM_REPORT_DATA = "report"; @@ -64,6 +66,11 @@ public class CeSubmitWsAction implements CeWsAction { .setExampleValue("my_project"); action + .createParam(PARAM_PROJECT_BRANCH) + .setDescription("Optional branch of project") + .setExampleValue("branch-1.x"); + + action .createParam(PARAM_PROJECT_NAME) .setRequired(false) .setDescription("Optional name of the project, used only if the project does not exist yet.") @@ -78,10 +85,11 @@ public class CeSubmitWsAction implements CeWsAction { @Override public void handle(Request wsRequest, Response wsResponse) throws Exception { String projectKey = wsRequest.mandatoryParam(PARAM_PROJECT_KEY); + String projectBranch = Strings.emptyToNull(wsRequest.param(PARAM_PROJECT_BRANCH)); String projectName = StringUtils.defaultIfBlank(wsRequest.param(PARAM_PROJECT_NAME), projectKey); InputStream reportInput = wsRequest.paramAsInputStream(PARAM_REPORT_DATA); - CeTask task = reportSubmitter.submit(projectKey, projectName, reportInput); + CeTask task = reportSubmitter.submit(projectKey, projectBranch, projectName, reportInput); reportProcessingScheduler.startAnalysisTaskNow(); WsCe.SubmitResponse submitResponse = WsCe.SubmitResponse.newBuilder() diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ReportSubmitterTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ReportSubmitterTest.java index f9f3948f61f..856c691211e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/ReportSubmitterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ReportSubmitterTest.java @@ -28,8 +28,10 @@ import org.sonar.core.permission.GlobalPermissions; import org.sonar.db.ce.CeTaskTypes; import org.sonar.db.component.ComponentDto; import org.sonar.server.component.ComponentService; +import org.sonar.server.component.NewComponent; import org.sonar.server.tester.UserSessionRule; +import static org.mockito.Matchers.any; import static org.mockito.Matchers.argThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -51,7 +53,7 @@ public class ReportSubmitterTest { userSession.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); when(componentService.getNullableByKey("MY_PROJECT")).thenReturn(new ComponentDto().setUuid("P1")); - underTest.submit("MY_PROJECT", "My Project", IOUtils.toInputStream("{binary}")); + underTest.submit("MY_PROJECT", null, "My Project", IOUtils.toInputStream("{binary}")); verify(queue).submit(argThat(new TypeSafeMatcher<CeTaskSubmit>() { @Override @@ -66,4 +68,28 @@ public class ReportSubmitterTest { } })); } + + @Test + public void provision_project_if_does_not_exist() throws Exception { + when(queue.prepareSubmit()).thenReturn(new CeTaskSubmit("TASK_1")); + userSession.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION, GlobalPermissions.PROVISIONING); + when(componentService.getNullableByKey("MY_PROJECT")).thenReturn(null); + when(componentService.create(any(NewComponent.class))).thenReturn(new ComponentDto().setUuid("P1")); + + underTest.submit("MY_PROJECT", null, "My Project", IOUtils.toInputStream("{binary}")); + + verify(queue).submit(argThat(new TypeSafeMatcher<CeTaskSubmit>() { + @Override + protected boolean matchesSafely(CeTaskSubmit submit) { + return submit.getType().equals(CeTaskTypes.REPORT) && submit.getComponentUuid().equals("P1") && + submit.getUuid().equals("TASK_1"); + } + + @Override + public void describeTo(Description description) { + + } + })); + + } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/CeSubmitWsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/CeSubmitWsActionTest.java index deb1921077a..667df7baabb 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/CeSubmitWsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/CeSubmitWsActionTest.java @@ -21,6 +21,7 @@ package org.sonar.server.computation.ws; import java.io.InputStream; import org.junit.Test; +import org.mockito.Matchers; import org.sonar.core.util.Protobuf; import org.sonar.db.ce.CeTaskTypes; import org.sonar.server.computation.CeTask; @@ -49,7 +50,7 @@ public class CeSubmitWsActionTest { @Test public void submit_task_to_the_queue_and_ask_for_immediate_processing() { CeTask task = new CeTask("TASK_1", CeTaskTypes.REPORT, "PROJECT_1", "robert"); - when(reportSubmitter.submit(eq("my_project"), eq("My Project"), any(InputStream.class))).thenReturn(task); + when(reportSubmitter.submit(eq("my_project"), Matchers.isNull(String.class), eq("My Project"), any(InputStream.class))).thenReturn(task); TestResponse wsResponse = tester.newRequest() .setParam("projectKey", "my_project") @@ -59,7 +60,7 @@ public class CeSubmitWsActionTest { .setMethod("POST") .execute(); - verify(reportSubmitter).submit(eq("my_project"), eq("My Project"), any(InputStream.class)); + verify(reportSubmitter).submit(eq("my_project"), Matchers.isNull(String.class), eq("My Project"), any(InputStream.class)); verify(reportProcessingScheduler).startAnalysisTaskNow(); // verify the protobuf response @@ -71,7 +72,7 @@ public class CeSubmitWsActionTest { @Test public void test_response_example() { CeTask task = new CeTask("TASK_1", CeTaskTypes.REPORT, "PROJECT_1", "robert"); - when(reportSubmitter.submit(eq("my_project"), eq("My Project"), any(InputStream.class))).thenReturn(task); + when(reportSubmitter.submit(eq("my_project"), Matchers.isNull(String.class), eq("My Project"), any(InputStream.class))).thenReturn(task); TestResponse wsResponse = tester.newRequest() .setParam("projectKey", "my_project") @@ -90,7 +91,7 @@ public class CeSubmitWsActionTest { @Test public void project_name_is_optional() { CeTask task = new CeTask("TASK_1", CeTaskTypes.REPORT, "PROJECT_1", "robert"); - when(reportSubmitter.submit(eq("my_project"), eq("my_project"), any(InputStream.class))).thenReturn(task); + when(reportSubmitter.submit(eq("my_project"), Matchers.isNull(String.class), eq("my_project"), any(InputStream.class))).thenReturn(task); tester.newRequest() .setParam("projectKey", "my_project") @@ -99,7 +100,7 @@ public class CeSubmitWsActionTest { .setMethod("POST") .execute(); - verify(reportSubmitter).submit(eq("my_project"), eq("my_project"), any(InputStream.class)); + verify(reportSubmitter).submit(eq("my_project"), Matchers.isNull(String.class), eq("my_project"), any(InputStream.class)); } } |