summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2015-09-18 11:27:06 +0200
committerSimon Brandhof <simon.brandhof@sonarsource.com>2015-09-18 23:49:44 +0200
commit8b80e32f4e020ecc82b6e4fd6fd01b5d9374167a (patch)
tree46cfd62c29832a887a914de4a37b5f0485da7ecd /server
parent4f109df6d8e53e6a2db17bbfcdb9d38332256930 (diff)
downloadsonarqube-8b80e32f4e020ecc82b6e4fd6fd01b5d9374167a.tar.gz
sonarqube-8b80e32f4e020ecc82b6e4fd6fd01b5d9374167a.zip
SONAR-6834 support project branches
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/ReportSubmitter.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/ws/CeSubmitWsAction.java10
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/ReportSubmitterTest.java28
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/ws/CeSubmitWsActionTest.java11
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));
}
}