aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-ce-task-projectanalysis
diff options
context:
space:
mode:
authorBenjamin Campomenosi <109955405+benjamin-campomenosi-sonarsource@users.noreply.github.com>2023-06-28 11:12:04 +0200
committersonartech <sonartech@sonarsource.com>2023-06-28 20:03:01 +0000
commita6088983a2146ab1ef8bc1f942127ec1b203309e (patch)
tree67bd05506ae08b16d2488774a24d3c538b74e658 /server/sonar-ce-task-projectanalysis
parentcb1d5a94c220a335f43b7eda501f31ab723c9a0b (diff)
downloadsonarqube-a6088983a2146ab1ef8bc1f942127ec1b203309e.tar.gz
sonarqube-a6088983a2146ab1ef8bc1f942127ec1b203309e.zip
SONAR-19256 refactor project links to use entity
Diffstat (limited to 'server/sonar-ce-task-projectanalysis')
-rw-r--r--server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStepIT.java50
-rw-r--r--server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportLinksStepIT.java42
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStep.java14
3 files changed, 48 insertions, 58 deletions
diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStepIT.java
index 5f35be87610..c0469bda4b8 100644
--- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStepIT.java
+++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStepIT.java
@@ -19,6 +19,7 @@
*/
package org.sonar.ce.task.projectanalysis.step;
+import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mockito;
@@ -37,10 +38,11 @@ import org.sonar.core.util.UuidFactory;
import org.sonar.core.util.UuidFactoryFast;
import org.sonar.db.DbClient;
import org.sonar.db.DbTester;
-import org.sonar.db.component.ComponentDto;
+import org.sonar.db.component.ProjectData;
import org.sonar.db.component.ProjectLinkDto;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
+import org.sonar.server.project.Project;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -64,6 +66,8 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
@Rule
public BatchReportReaderRule reportReader = new BatchReportReaderRule();
+ private ProjectData project;
+
private PersistProjectLinksStep underTest = new PersistProjectLinksStep(analysisMetadataHolder, db.getDbClient(), treeRootHolder, reportReader, UuidFactoryFast.getInstance());
@Override
@@ -71,6 +75,12 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
return underTest;
}
+ @Before
+ public void setup(){
+ this.project = db.components().insertPrivateProject();
+ analysisMetadataHolder.setProject(Project.fromProjectDtoWithTags(project.getProjectDto()));
+ }
+
@Test
public void no_effect_if_branch_is_not_main() {
DbClient dbClient = mock(DbClient.class);
@@ -88,8 +98,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
@Test
public void add_links_on_project() {
mockBranch(true);
- treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build());
-
+ treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build());
// project
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
@@ -103,7 +112,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
underTest.execute(new TestComputationStepContext());
- assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), "ABCD"))
+ assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), project.projectUuid()))
.extracting(ProjectLinkDto::getType, ProjectLinkDto::getHref, ProjectLinkDto::getName)
.containsExactlyInAnyOrder(
tuple("homepage", "http://www.sonarqube.org", null),
@@ -115,10 +124,9 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
@Test
public void nothing_to_do_when_link_already_exists() {
mockBranch(true);
- ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")).getMainBranchComponent();
- db.componentLinks().insertProvidedLink(project, l -> l.setType("homepage").setName("Home").setHref("http://www.sonarqube.org"));
+ db.projectLinks().insertProvidedLink(project.getProjectDto(), l -> l.setType("homepage").setName("Home").setHref("http://www.sonarqube.org"));
- treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build());
+ treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
@@ -128,7 +136,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
underTest.execute(new TestComputationStepContext());
- assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), "ABCD"))
+ assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), project.projectUuid()))
.extracting(ProjectLinkDto::getType, ProjectLinkDto::getHref)
.containsExactlyInAnyOrder(tuple("homepage", "http://www.sonarqube.org"));
}
@@ -136,7 +144,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
@Test
public void do_not_add_links_on_module() {
mockBranch(true);
- treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build());
+ treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
.setType(ComponentType.PROJECT)
@@ -156,7 +164,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
@Test
public void do_not_add_links_on_file() {
mockBranch(true);
- treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").addChildren(
+ treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).addChildren(
ReportComponent.builder(Component.Type.FILE, 2).setUuid("BCDE").build())
.build());
@@ -179,10 +187,8 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
@Test
public void update_link() {
mockBranch(true);
- ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")).getMainBranchComponent();
- db.componentLinks().insertProvidedLink(project, l -> l.setType("homepage").setName("Home").setHref("http://www.sonar.org"));
-
- treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build());
+ analysisMetadataHolder.setProject(Project.fromProjectDtoWithTags(project.getProjectDto()));
+ treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
@@ -192,7 +198,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
underTest.execute(new TestComputationStepContext());
- assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), "ABCD"))
+ assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), project.getProjectDto().getUuid()))
.extracting(ProjectLinkDto::getType, ProjectLinkDto::getHref)
.containsExactlyInAnyOrder(tuple("homepage", "http://www.sonarqube.org"));
}
@@ -200,10 +206,9 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
@Test
public void delete_link() {
mockBranch(true);
- ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")).getMainBranchComponent();
- db.componentLinks().insertProvidedLink(project, l -> l.setType("homepage").setName("Home").setHref("http://www.sonar.org"));
+ db.projectLinks().insertProvidedLink(project.getProjectDto(), l -> l.setType("homepage").setName("Home").setHref("http://www.sonar.org"));
- treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build());
+ treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
@@ -218,10 +223,9 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
@Test
public void not_delete_custom_link() {
mockBranch(true);
- ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")).getMainBranchComponent();
- db.componentLinks().insertCustomLink(project);
+ db.projectLinks().insertCustomLink(project.getProjectDto());
- treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build());
+ treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
@@ -236,7 +240,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
@Test
public void fail_when_trying_to_add_same_link_type_multiple_times() {
mockBranch(true);
- treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build());
+ treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
@@ -247,7 +251,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest {
assertThatThrownBy(() -> underTest.execute(new TestComputationStepContext()))
.isInstanceOf(IllegalArgumentException.class)
- .hasMessage("Link of type 'homepage' has already been declared on component 'ABCD'");
+ .hasMessage("Link of type 'homepage' has already been declared on component '%s'".formatted(project.projectUuid()));
}
private void mockBranch(boolean isMain) {
diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportLinksStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportLinksStepIT.java
index 117e24e288b..693621a22ff 100644
--- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportLinksStepIT.java
+++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportLinksStepIT.java
@@ -24,14 +24,11 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.slf4j.event.Level;
-import org.sonar.api.resources.Qualifiers;
-import org.sonar.api.resources.Scopes;
import org.sonar.api.testfixtures.log.LogTester;
import org.sonar.api.utils.System2;
-import org.sonar.ce.task.projectexport.component.ComponentRepository;
import org.sonar.ce.task.step.TestComputationStepContext;
import org.sonar.db.DbTester;
-import org.sonar.db.component.ComponentDto;
+import org.sonar.db.component.ProjectData;
import org.sonar.db.component.ProjectLinkDto;
import org.sonar.db.project.ProjectDto;
import org.sonar.db.project.ProjectExportMapper;
@@ -41,40 +38,29 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.groups.Tuple.tuple;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import static org.sonar.db.component.ComponentDto.UUID_PATH_OF_ROOT;
public class ExportLinksStepIT {
private static final String PROJECT_UUID = "project_uuid";
- private static final ComponentDto PROJECT = new ComponentDto()
- // no id yet
- .setScope(Scopes.PROJECT)
- .setQualifier(Qualifiers.PROJECT)
- .setKey("the_project")
- .setName("The Project")
- .setDescription("The project description")
- .setEnabled(true)
- .setUuid(PROJECT_UUID)
- .setUuidPath(UUID_PATH_OF_ROOT)
- .setBranchUuid(PROJECT_UUID);
+
+ private ProjectDto projectDto;
@Rule
public DbTester db = DbTester.createWithExtensionMappers(System2.INSTANCE, true, ProjectExportMapper.class);
-
@Rule
public LogTester logTester = new LogTester();
private final FakeDumpWriter dumpWriter = new FakeDumpWriter();
private final ProjectHolder projectHolder = mock(ProjectHolder.class);
private final ExportLinksStep underTest = new ExportLinksStep(db.getDbClient(), projectHolder, dumpWriter);
- private ProjectDto project;
@Before
public void setUp() {
logTester.setLevel(Level.DEBUG);
- project = db.components().insertPublicProject(PROJECT).getProjectDto();
- when(projectHolder.projectDto()).thenReturn(project);
+ ProjectData project = db.components().insertPublicProject(PROJECT_UUID);
+ this.projectDto = project.getProjectDto();
+ when(projectHolder.projectDto()).thenReturn(projectDto);
}
@Test
@@ -87,9 +73,9 @@ public class ExportLinksStepIT {
@Test
public void export_links() {
- ProjectLinkDto link1 = db.componentLinks().insertCustomLink(project);
- ProjectLinkDto link2 = db.componentLinks().insertProvidedLink(project);
- db.componentLinks().insertCustomLink(db.components().insertPrivateProject().getProjectDto());
+ ProjectLinkDto link1 = db.projectLinks().insertCustomLink(projectDto);
+ ProjectLinkDto link2 = db.projectLinks().insertProvidedLink(projectDto);
+ db.projectLinks().insertCustomLink(db.components().insertPrivateProject().getProjectDto());
underTest.execute(new TestComputationStepContext());
@@ -103,10 +89,10 @@ public class ExportLinksStepIT {
@Test
public void throws_ISE_if_error() {
- db.componentLinks().insertCustomLink(project);
- db.componentLinks().insertProvidedLink(project);
- db.componentLinks().insertProvidedLink(project);
- db.componentLinks().insertCustomLink(db.components().insertPrivateProject().getProjectDto());
+ db.projectLinks().insertCustomLink(projectDto);
+ db.projectLinks().insertProvidedLink(projectDto);
+ db.projectLinks().insertProvidedLink(projectDto);
+ db.projectLinks().insertCustomLink(db.components().insertPrivateProject().getProjectDto());
dumpWriter.failIfMoreThan(2, DumpElement.LINKS);
@@ -117,7 +103,7 @@ public class ExportLinksStepIT {
@Test
public void test_all_fields() {
- ProjectLinkDto link = db.componentLinks().insertCustomLink(project, l -> l.setName("name").setHref("href").setType("type"));
+ ProjectLinkDto link = db.projectLinks().insertCustomLink(projectDto, l -> l.setName("name").setHref("href").setType("type"));
underTest.execute(new TestComputationStepContext());
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStep.java
index 9b9d055f0f1..a0f9c71c3cb 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStep.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStep.java
@@ -67,20 +67,20 @@ public class PersistProjectLinksStep implements ComputationStep {
}
try (DbSession session = dbClient.openSession(false)) {
- Component project = treeRootHolder.getRoot();
- ScannerReport.Component batchComponent = reportReader.readComponent(project.getReportAttributes().getRef());
- List<ProjectLinkDto> previousLinks = dbClient.projectLinkDao().selectByProjectUuid(session, project.getUuid());
- mergeLinks(session, project.getUuid(), batchComponent.getLinkList(), previousLinks);
+ Component rootComponent = treeRootHolder.getRoot();
+ ScannerReport.Component batchComponent = reportReader.readComponent(rootComponent.getReportAttributes().getRef());
+ List<ProjectLinkDto> previousLinks = dbClient.projectLinkDao().selectByProjectUuid(session, analysisMetadataHolder.getProject().getUuid());
+ mergeLinks(session, analysisMetadataHolder.getProject().getUuid(), batchComponent.getLinkList(), previousLinks);
session.commit();
}
}
- private void mergeLinks(DbSession session, String componentUuid, List<ScannerReport.ComponentLink> links, List<ProjectLinkDto> previousLinks) {
+ private void mergeLinks(DbSession session, String projectUuid, List<ScannerReport.ComponentLink> links, List<ProjectLinkDto> previousLinks) {
Set<String> linkType = new HashSet<>();
links.forEach(
link -> {
String type = convertType(link.getType());
- checkArgument(!linkType.contains(type), "Link of type '%s' has already been declared on component '%s'", type, componentUuid);
+ checkArgument(!linkType.contains(type), "Link of type '%s' has already been declared on component '%s'", type, projectUuid);
linkType.add(type);
Optional<ProjectLinkDto> previousLink = previousLinks.stream()
@@ -93,7 +93,7 @@ public class PersistProjectLinksStep implements ComputationStep {
dbClient.projectLinkDao().insert(session,
new ProjectLinkDto()
.setUuid(uuidFactory.create())
- .setProjectUuid(componentUuid)
+ .setProjectUuid(projectUuid)
.setType(type)
.setHref(link.getHref()));
}