aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-ce-task-projectanalysis
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2019-10-23 15:33:39 -0500
committerSonarTech <sonartech@sonarsource.com>2020-01-31 20:46:09 +0100
commitace9a50d55d831ec71b7db421aa04d1198392c6c (patch)
tree3bf598bfe3f760d45310b2a65d014a53370a9930 /server/sonar-ce-task-projectanalysis
parent1ff9a01fd6e822793ef223f9ce259b15d17eecc4 (diff)
downloadsonarqube-ace9a50d55d831ec71b7db421aa04d1198392c6c.tar.gz
sonarqube-ace9a50d55d831ec71b7db421aa04d1198392c6c.zip
SONAR-12689 Separate storage of projects/apps from their components and branches
Diffstat (limited to 'server/sonar-ce-task-projectanalysis')
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ProjectPersister.java74
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplTest.java18
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ConfigurationRepositoryTest.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ProjectPersisterTest.java115
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ReferenceBranchComponentUuidsTest.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/SiblingComponentsWithOpenIssuesTest.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/ProjectTrackerBaseLazyInputTest.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMergerTest.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStepTest.java4
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportPersistComponentsStepTest.java16
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/SendIssueNotificationsStepTest.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ValidateProjectStepTest.java4
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepTest.java6
17 files changed, 237 insertions, 36 deletions
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ProjectPersister.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ProjectPersister.java
new file mode 100644
index 00000000000..645ca0ddb73
--- /dev/null
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ProjectPersister.java
@@ -0,0 +1,74 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 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.ce.task.projectanalysis.component;
+
+import org.apache.commons.lang.StringUtils;
+import org.sonar.api.utils.System2;
+import org.sonar.db.DbClient;
+import org.sonar.db.DbSession;
+import org.sonar.db.project.ProjectDto;
+
+/**
+ * Creates or updates the data in table {@code PROJECTS} for the current root.
+ */
+public class ProjectPersister {
+ private final DbClient dbClient;
+ private final TreeRootHolder treeRootHolder;
+ private final System2 system2;
+
+ public ProjectPersister(DbClient dbClient, TreeRootHolder treeRootHolder, System2 system2) {
+ this.dbClient = dbClient;
+ this.treeRootHolder = treeRootHolder;
+ this.system2 = system2;
+ }
+
+ public void persist(DbSession dbSession) {
+ if (shouldSkip(treeRootHolder.getRoot())) {
+ return;
+ }
+
+ ProjectDto dbProjectDto = dbClient.projectDao().selectProjectByKey(dbSession, treeRootHolder.getRoot().getKey())
+ .orElseThrow(() -> new IllegalStateException("Project has been deleted by end-user during analysis"));
+ ProjectDto projectDto = toProjectDto(treeRootHolder.getRoot());
+
+ if (hasChanged(dbProjectDto, projectDto)) {
+ // insert or update in projects table
+ dbClient.projectDao().update(dbSession, projectDto);
+ }
+ }
+
+ private boolean shouldSkip(Component rootComponent) {
+ return !rootComponent.getType().equals(Component.Type.PROJECT) && !rootComponent.getType().equals(Component.Type.PROJECT_VIEW);
+ }
+
+ private boolean hasChanged(ProjectDto dbProject, ProjectDto newProject) {
+ return !StringUtils.equals(dbProject.getName(), newProject.getName()) ||
+ !StringUtils.equals(dbProject.getDescription(), newProject.getDescription());
+ }
+
+ private ProjectDto toProjectDto(Component root) {
+ ProjectDto projectDto = new ProjectDto();
+ projectDto.setUuid(root.getUuid());
+ projectDto.setName(root.getName());
+ projectDto.setDescription(root.getDescription());
+ projectDto.setUpdatedAt(system2.now());
+ return projectDto;
+ }
+}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java
index 6a5e0d89229..c9107ed7d00 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java
@@ -34,6 +34,7 @@ import org.sonar.ce.task.projectanalysis.component.BranchPersisterImpl;
import org.sonar.ce.task.projectanalysis.component.ConfigurationRepositoryImpl;
import org.sonar.ce.task.projectanalysis.component.DbIdsRepositoryImpl;
import org.sonar.ce.task.projectanalysis.component.DisabledComponentsHolderImpl;
+import org.sonar.ce.task.projectanalysis.component.ProjectPersister;
import org.sonar.ce.task.projectanalysis.component.ReferenceBranchComponentUuids;
import org.sonar.ce.task.projectanalysis.component.ReportModulesPath;
import org.sonar.ce.task.projectanalysis.component.SiblingComponentsWithOpenIssues;
@@ -284,6 +285,7 @@ public final class ProjectAnalysisTaskContainerPopulator implements ContainerPop
BaseIssuesLoader.class,
IssueTrackingDelegator.class,
BranchPersisterImpl.class,
+ ProjectPersister.class,
SiblingsIssuesLoader.class,
SiblingsIssueMerger.class,
NewCodePeriodResolver.class,
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java
index f53c5ad1ca0..2ed3f307a52 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java
@@ -44,6 +44,7 @@ import org.sonar.ce.task.projectanalysis.component.MutableDisabledComponentsHold
import org.sonar.ce.task.projectanalysis.component.PathAwareCrawler;
import org.sonar.ce.task.projectanalysis.component.PathAwareVisitor;
import org.sonar.ce.task.projectanalysis.component.PathAwareVisitorAdapter;
+import org.sonar.ce.task.projectanalysis.component.ProjectPersister;
import org.sonar.ce.task.projectanalysis.component.TreeRootHolder;
import org.sonar.ce.task.step.ComputationStep;
import org.sonar.core.util.stream.MoreCollectors;
@@ -71,11 +72,12 @@ public class PersistComponentsStep implements ComputationStep {
private final MutableDisabledComponentsHolder disabledComponentsHolder;
private final AnalysisMetadataHolder analysisMetadataHolder;
private final BranchPersister branchPersister;
+ private final ProjectPersister projectPersister;
public PersistComponentsStep(DbClient dbClient, TreeRootHolder treeRootHolder,
MutableDbIdsRepository dbIdsRepository, System2 system2,
MutableDisabledComponentsHolder disabledComponentsHolder, AnalysisMetadataHolder analysisMetadataHolder,
- BranchPersister branchPersister) {
+ BranchPersister branchPersister, ProjectPersister projectPersister) {
this.dbClient = dbClient;
this.treeRootHolder = treeRootHolder;
this.dbIdsRepository = dbIdsRepository;
@@ -83,6 +85,7 @@ public class PersistComponentsStep implements ComputationStep {
this.disabledComponentsHolder = disabledComponentsHolder;
this.analysisMetadataHolder = analysisMetadataHolder;
this.branchPersister = branchPersister;
+ this.projectPersister = projectPersister;
}
@Override
@@ -94,6 +97,7 @@ public class PersistComponentsStep implements ComputationStep {
public void execute(ComputationStep.Context context) {
try (DbSession dbSession = dbClient.openSession(false)) {
branchPersister.persist(dbSession);
+ projectPersister.persist(dbSession);
String projectUuid = treeRootHolder.getRoot().getUuid();
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplTest.java
index 730f0324343..4359d0d8950 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplTest.java
@@ -105,7 +105,7 @@ public class BranchPersisterImplTest {
// add project and branch in table PROJECTS
ComponentDto mainComponent = ComponentTesting.newPrivateProjectDto(dbTester.organizations().insert(), MAIN.getUuid()).setDbKey(MAIN.getKey());
- ComponentDto component = ComponentTesting.newProjectBranch(mainComponent, new BranchDto().setUuid(BRANCH1.getUuid()).setKey(BRANCH1.getKey()).setBranchType(BRANCH));
+ ComponentDto component = ComponentTesting.newBranchComponent(mainComponent, new BranchDto().setUuid(BRANCH1.getUuid()).setKey(BRANCH1.getKey()).setBranchType(BRANCH));
dbTester.getDbClient().componentDao().insert(dbTester.getSession(), mainComponent, component);
dbTester.commit();
// set project in metadata
@@ -117,7 +117,7 @@ public class BranchPersisterImplTest {
dbTester.getSession().commit();
- assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(2);
+ assertThat(dbTester.countRowsOfTable("components")).isEqualTo(2);
Optional<BranchDto> branchDto = dbTester.getDbClient().branchDao().selectByUuid(dbTester.getSession(), BRANCH1.getUuid());
assertThat(branchDto).isPresent();
assertThat(branchDto.get().getBranchType()).isEqualTo(BRANCH);
@@ -131,7 +131,7 @@ public class BranchPersisterImplTest {
public void main_branch_is_excluded_from_branch_purge_by_default() {
analysisMetadataHolder.setBranch(createBranch(BRANCH, true, "master"));
treeRootHolder.setRoot(MAIN);
- dbTester.components().insertMainBranch(p -> p.setDbKey(MAIN.getDbKey()).setUuid(MAIN.getUuid()));
+ dbTester.components().insertPublicProject(p -> p.setDbKey(MAIN.getDbKey()).setUuid(MAIN.getUuid()));
dbTester.commit();
underTest.persist(dbTester.getSession());
@@ -146,8 +146,8 @@ public class BranchPersisterImplTest {
analysisMetadataHolder.setBranch(createBranch(BRANCH, false, "BRANCH_KEY"));
treeRootHolder.setRoot(BRANCH1);
- ComponentDto mainComponent = dbTester.components().insertMainBranch(p -> p.setDbKey(MAIN.getDbKey()).setUuid(MAIN.getUuid()));
- ComponentDto component = ComponentTesting.newProjectBranch(mainComponent, new BranchDto().setUuid(BRANCH1.getUuid()).setKey(BRANCH1.getKey()).setBranchType(BRANCH));
+ ComponentDto mainComponent = dbTester.components().insertPublicProject(p -> p.setDbKey(MAIN.getDbKey()).setUuid(MAIN.getUuid()));
+ ComponentDto component = ComponentTesting.newBranchComponent(mainComponent, new BranchDto().setUuid(BRANCH1.getUuid()).setKey(BRANCH1.getKey()).setBranchType(BRANCH));
dbTester.getDbClient().componentDao().insert(dbTester.getSession(), component);
dbTester.commit();
@@ -163,8 +163,8 @@ public class BranchPersisterImplTest {
analysisMetadataHolder.setBranch(createBranch(BRANCH, false, "BRANCH_KEY"));
treeRootHolder.setRoot(BRANCH1);
- ComponentDto mainComponent = dbTester.components().insertMainBranch(p -> p.setDbKey(MAIN.getDbKey()).setUuid(MAIN.getUuid()));
- ComponentDto component = ComponentTesting.newProjectBranch(mainComponent, new BranchDto().setUuid(BRANCH1.getUuid()).setKey(BRANCH1.getKey()).setBranchType(BRANCH));
+ ComponentDto mainComponent = dbTester.components().insertPublicProject(p -> p.setDbKey(MAIN.getDbKey()).setUuid(MAIN.getUuid()));
+ ComponentDto component = ComponentTesting.newBranchComponent(mainComponent, new BranchDto().setUuid(BRANCH1.getUuid()).setKey(BRANCH1.getKey()).setBranchType(BRANCH));
dbTester.getDbClient().componentDao().insert(dbTester.getSession(), component);
dbTester.commit();
@@ -188,7 +188,7 @@ public class BranchPersisterImplTest {
// add project and branch in table PROJECTS
ComponentDto mainComponent = ComponentTesting.newPrivateProjectDto(dbTester.organizations().insert(), MAIN.getUuid()).setDbKey(MAIN.getKey());
- ComponentDto component = ComponentTesting.newProjectBranch(mainComponent, new BranchDto().setUuid(BRANCH1.getUuid()).setKey(BRANCH1.getKey()).setBranchType(PULL_REQUEST));
+ ComponentDto component = ComponentTesting.newBranchComponent(mainComponent, new BranchDto().setUuid(BRANCH1.getUuid()).setKey(BRANCH1.getKey()).setBranchType(PULL_REQUEST));
dbTester.getDbClient().componentDao().insert(dbTester.getSession(), mainComponent, component);
dbTester.commit();
// set project in metadata
@@ -201,7 +201,7 @@ public class BranchPersisterImplTest {
dbTester.getSession().commit();
- assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(2);
+ assertThat(dbTester.countRowsOfTable("components")).isEqualTo(2);
Optional<BranchDto> branchDto = dbTester.getDbClient().branchDao().selectByUuid(dbTester.getSession(), BRANCH1.getUuid());
assertThat(branchDto).isPresent();
assertThat(branchDto.get().getBranchType()).isEqualTo(PULL_REQUEST);
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ConfigurationRepositoryTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ConfigurationRepositoryTest.java
index b40925e9e88..6c8b5144e8c 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ConfigurationRepositoryTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ConfigurationRepositoryTest.java
@@ -121,7 +121,7 @@ public class ConfigurationRepositoryTest {
@Test
public void branch_settings() {
- ComponentDto project = db.components().insertMainBranch();
+ ComponentDto project = db.components().insertPublicProject();
ComponentDto branchDto = db.components().insertProjectBranch(project);
Branch branch = mock(Branch.class);
when(branch.getName()).thenReturn(branchDto.getBranch());
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ProjectPersisterTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ProjectPersisterTest.java
new file mode 100644
index 00000000000..af89af4648a
--- /dev/null
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ProjectPersisterTest.java
@@ -0,0 +1,115 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 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.ce.task.projectanalysis.component;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.sonar.api.impl.utils.TestSystem2;
+import org.sonar.api.utils.System2;
+import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolderRule;
+import org.sonar.db.DbTester;
+import org.sonar.db.project.ProjectDto;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+import static org.sonar.ce.task.projectanalysis.component.Component.Type.PROJECT;
+import static org.sonar.ce.task.projectanalysis.component.Component.Type.VIEW;
+import static org.sonar.ce.task.projectanalysis.component.ReportComponent.builder;
+
+public class ProjectPersisterTest {
+ private final static Component ROOT = builder(PROJECT, 1)
+ .setUuid("PROJECT_UUID")
+ .setKey("PROJECT_KEY")
+ .setDescription("PROJECT_DESC")
+ .setName("PROJECT_NAME")
+ .build();
+
+ @Rule
+ public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule();
+ @Rule
+ public DbTester dbTester = DbTester.create(System2.INSTANCE);
+ @Rule
+ public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
+ @Rule
+ public ExpectedException exception = ExpectedException.none();
+ public TestSystem2 system2 = new TestSystem2();
+
+ private ProjectPersister underTest = new ProjectPersister(dbTester.getDbClient(), treeRootHolder, system2);
+
+ @Before
+ public void prepare() {
+ treeRootHolder.setRoot(ROOT);
+ system2.setNow(1000L);
+ }
+
+ @Test
+ public void skip_portfolios() {
+ Component root = ViewsComponent.builder(VIEW, 1).build();
+ TreeRootHolder treeRootHolder = mock(TreeRootHolder.class);
+ when(treeRootHolder.getRoot()).thenReturn(root);
+ new ProjectPersister(dbTester.getDbClient(), treeRootHolder, system2).persist(dbTester.getSession());
+ verify(treeRootHolder).getRoot();
+ verifyNoMoreInteractions(treeRootHolder);
+
+ }
+
+ @Test
+ public void update_description() {
+ ProjectDto p1 = dbTester.components().insertPublicProjectDto(dbTester.getDefaultOrganization(),
+ c -> c.setUuid("PROJECT_UUID").setDbKey(ROOT.getKey()).setName(ROOT.getName()).setDescription("OLD_DESC"));
+
+ assertProject("OLD_DESC", ROOT.getName(), p1.getUpdatedAt());
+ underTest.persist(dbTester.getSession());
+ assertProject(ROOT.getDescription(), ROOT.getName(), 1000L);
+ }
+
+ @Test
+ public void update_name() {
+ ProjectDto p1 = dbTester.components().insertPublicProjectDto(dbTester.getDefaultOrganization(),
+ c -> c.setUuid("PROJECT_UUID").setDbKey(ROOT.getKey()).setName("OLD_NAME").setDescription(ROOT.getDescription()));
+
+ assertProject(ROOT.getDescription(), "OLD_NAME", p1.getUpdatedAt());
+ underTest.persist(dbTester.getSession());
+ assertProject(ROOT.getDescription(), ROOT.getName(), 1000L);
+ }
+
+ @Test
+ public void dont_update() {
+ ProjectDto p1 = dbTester.components().insertPublicProjectDto(dbTester.getDefaultOrganization(),
+ c -> c.setUuid("PROJECT_UUID").setDbKey(ROOT.getKey()).setName(ROOT.getName()).setDescription(ROOT.getDescription()));
+
+ assertProject(ROOT.getDescription(), ROOT.getName(), p1.getUpdatedAt());
+ underTest.persist(dbTester.getSession());
+ assertProject(ROOT.getDescription(), ROOT.getName(), p1.getUpdatedAt());
+ }
+
+ private void assertProject(String description, String name, long updated) {
+ assertThat(dbTester.getDbClient().projectDao().selectProjectByKey(dbTester.getSession(), ROOT.getKey()).get())
+ .extracting(ProjectDto::getName, ProjectDto::getDescription, ProjectDto::getUpdatedAt)
+ .containsExactly(name, description, updated);
+
+ }
+}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ReferenceBranchComponentUuidsTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ReferenceBranchComponentUuidsTest.java
index 7f04822a3d2..dd4b8d83478 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ReferenceBranchComponentUuidsTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/ReferenceBranchComponentUuidsTest.java
@@ -62,7 +62,7 @@ public class ReferenceBranchComponentUuidsTest {
analysisMetadataHolder.setProject(project);
analysisMetadataHolder.setBranch(branch);
- ComponentDto projectDto = db.components().insertMainBranch();
+ ComponentDto projectDto = db.components().insertPublicProject();
when(project.getUuid()).thenReturn(projectDto.uuid());
branch1 = db.components().insertProjectBranch(projectDto, b -> b.setKey("branch1"));
branch2 = db.components().insertProjectBranch(projectDto, b -> b.setKey("branch2"));
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/SiblingComponentsWithOpenIssuesTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/SiblingComponentsWithOpenIssuesTest.java
index 6079985d17a..bce2e086cd8 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/SiblingComponentsWithOpenIssuesTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/SiblingComponentsWithOpenIssuesTest.java
@@ -63,7 +63,7 @@ public class SiblingComponentsWithOpenIssuesTest {
@Before
public void setUp() {
- ComponentDto project = db.components().insertMainBranch();
+ ComponentDto project = db.components().insertPublicProject();
branch1 = db.components().insertProjectBranch(project, b -> b.setKey("branch1"), b -> b.setBranchType(BranchType.BRANCH));
branch1pr1 = db.components().insertProjectBranch(project,
@@ -157,7 +157,7 @@ public class SiblingComponentsWithOpenIssuesTest {
@Test
public void should_find_sibling_components_with_open_issues_from_pullrequest() {
- ComponentDto project = db.components().insertMainBranch();
+ ComponentDto project = db.components().insertPublicProject();
setRoot(project);
setBranch(BranchType.BRANCH);
@@ -176,7 +176,7 @@ public class SiblingComponentsWithOpenIssuesTest {
@Test
public void should_not_find_sibling_components_on_derived_branch() {
- ComponentDto project = db.components().insertMainBranch();
+ ComponentDto project = db.components().insertPublicProject();
setRoot(project);
setBranch(BranchType.BRANCH);
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/ProjectTrackerBaseLazyInputTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/ProjectTrackerBaseLazyInputTest.java
index f6f23259141..740c4f0f592 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/ProjectTrackerBaseLazyInputTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/ProjectTrackerBaseLazyInputTest.java
@@ -74,7 +74,7 @@ public class ProjectTrackerBaseLazyInputTest {
public void prepare() {
rule = dbTester.rules().insert();
ruleRepositoryRule.add(rule.getKey());
- rootProjectDto = dbTester.components().insertMainBranch();
+ rootProjectDto = dbTester.components().insertPublicProject();
ReportComponent rootProject = ReportComponent.builder(Component.Type.FILE, 1)
.setKey(rootProjectDto.getDbKey())
.setUuid(rootProjectDto.uuid()).build();
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMergerTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMergerTest.java
index 3d0ac23eda5..5df924d9aa7 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMergerTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMergerTest.java
@@ -109,7 +109,7 @@ public class SiblingsIssueMergerTest {
copier = new SiblingsIssueMerger(new SiblingsIssuesLoader(new SiblingComponentsWithOpenIssues(treeRootHolder, metadataHolder, dbClient), dbClient, componentIssuesLoader),
tracker,
issueLifecycle);
- projectDto = db.components().insertMainBranch(p -> p.setDbKey(PROJECT_KEY).setUuid(PROJECT_UUID));
+ projectDto = db.components().insertPublicProject(p -> p.setDbKey(PROJECT_KEY).setUuid(PROJECT_UUID));
branch1Dto = db.components().insertProjectBranch(projectDto, b -> b.setKey("myBranch1")
.setBranchType(BranchType.PULL_REQUEST)
.setMergeBranchUuid(projectDto.uuid()));
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java
index 148aaa2f448..3c5307a120a 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java
@@ -196,7 +196,7 @@ public class BuildComponentTreeStepTest {
@Test
public void generate_keys_when_using_existing_branch() {
- ComponentDto projectDto = dbTester.components().insertMainBranch();
+ ComponentDto projectDto = dbTester.components().insertPublicProject();
ComponentDto branchDto = dbTester.components().insertProjectBranch(projectDto);
Branch branch = mock(Branch.class);
when(branch.getName()).thenReturn(branchDto.getBranch());
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java
index 104674857b0..b58ffb3c481 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java
@@ -103,7 +103,7 @@ public class LoadPeriodsStepTest extends BaseStepTest {
@Before
public void setUp() {
organization = dbTester.organizations().insert();
- project = dbTester.components().insertMainBranch(organization);
+ project = dbTester.components().insertPublicProject(organization);
when(analysisMetadataHolder.isBranch()).thenReturn(true);
when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false);
@@ -241,7 +241,7 @@ public class LoadPeriodsStepTest extends BaseStepTest {
@Test
public void throw_ISE_when_specific_analysis_is_set_but_does_not_exist_in_DB() {
OrganizationDto organization = dbTester.organizations().insert();
- ComponentDto project = dbTester.components().insertMainBranch(organization);
+ ComponentDto project = dbTester.components().insertPublicProject(organization);
setProjectPeriod(project.uuid(), NewCodePeriodType.SPECIFIC_ANALYSIS, "nonexistent");
setupRoot(project);
@@ -253,7 +253,7 @@ public class LoadPeriodsStepTest extends BaseStepTest {
@Test
public void throw_ISE_when_specific_analysis_is_set_but_does_not_belong_to_current_project() {
- ComponentDto otherProject = dbTester.components().insertMainBranch(organization);
+ ComponentDto otherProject = dbTester.components().insertPublicProject(organization);
SnapshotDto otherProjectAnalysis = dbTester.components().insertSnapshot(otherProject);
setBranchPeriod(project.uuid(), project.uuid(), NewCodePeriodType.SPECIFIC_ANALYSIS, otherProjectAnalysis.getUuid());
setupRoot(project);
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStepTest.java
index 905d47fb769..d4da264cdc2 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStepTest.java
@@ -28,6 +28,7 @@ import org.sonar.ce.task.projectanalysis.component.BranchPersister;
import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.ce.task.projectanalysis.component.MutableDbIdsRepository;
import org.sonar.ce.task.projectanalysis.component.MutableDisabledComponentsHolder;
+import org.sonar.ce.task.projectanalysis.component.ProjectPersister;
import org.sonar.ce.task.projectanalysis.component.TreeRootHolder;
import org.sonar.ce.task.step.TestComputationStepContext;
import org.sonar.db.DbClient;
@@ -69,6 +70,7 @@ public class PersistComponentsStepTest {
System2.INSTANCE,
mock(MutableDisabledComponentsHolder.class),
mock(AnalysisMetadataHolder.class),
- mock(BranchPersister.class)).execute(new TestComputationStepContext());
+ mock(BranchPersister.class),
+ mock(ProjectPersister.class)).execute(new TestComputationStepContext());
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportPersistComponentsStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportPersistComponentsStepTest.java
index e666a663eae..71f2cbcf44a 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportPersistComponentsStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportPersistComponentsStepTest.java
@@ -38,6 +38,7 @@ import org.sonar.ce.task.projectanalysis.component.DefaultBranchImpl;
import org.sonar.ce.task.projectanalysis.component.FileAttributes;
import org.sonar.ce.task.projectanalysis.component.MutableDbIdsRepositoryRule;
import org.sonar.ce.task.projectanalysis.component.MutableDisabledComponentsHolder;
+import org.sonar.ce.task.projectanalysis.component.ProjectPersister;
import org.sonar.ce.task.projectanalysis.component.ReportComponent;
import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule;
import org.sonar.ce.task.step.ComputationStep;
@@ -95,7 +96,8 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
db.organizations().insertForUuid(ORGANIZATION_UUID);
BranchPersister branchPersister = mock(BranchPersister.class);
- underTest = new PersistComponentsStep(dbClient, treeRootHolder, dbIdsRepository, system2, disabledComponentsHolder, analysisMetadataHolder, branchPersister);
+ ProjectPersister projectPersister = mock(ProjectPersister.class);
+ underTest = new PersistComponentsStep(dbClient, treeRootHolder, dbIdsRepository, system2, disabledComponentsHolder, analysisMetadataHolder, branchPersister, projectPersister);
}
@Override
@@ -123,7 +125,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
underTest.execute(new TestComputationStepContext());
- assertThat(db.countRowsOfTable("projects")).isEqualTo(3);
+ assertThat(db.countRowsOfTable("components")).isEqualTo(3);
ComponentDto directoryDto = dbClient.componentDao().selectByKey(db.getSession(), "PROJECT_KEY:src/main/java/dir").get();
assertThat(directoryDto.getOrganizationUuid()).isEqualTo(ORGANIZATION_UUID);
@@ -185,7 +187,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
underTest.execute(new TestComputationStepContext());
- assertThat(db.countRowsOfTable("projects")).isEqualTo(3);
+ assertThat(db.countRowsOfTable("components")).isEqualTo(3);
ComponentDto directoryDto = dbClient.componentDao().selectByKey(db.getSession(), "PROJECT_KEY:src/main/java/dir").get();
assertThat(directoryDto.getOrganizationUuid()).isEqualTo(ORGANIZATION_UUID);
@@ -365,7 +367,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
underTest.execute(new TestComputationStepContext());
- assertThat(db.countRowsOfTable("projects")).isEqualTo(3);
+ assertThat(db.countRowsOfTable("components")).isEqualTo(3);
ComponentDto projectReloaded = dbClient.componentDao().selectByKey(db.getSession(), project.getDbKey()).get();
assertThat(projectReloaded.getId()).isEqualTo(project.getId());
@@ -414,7 +416,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
underTest.execute(new TestComputationStepContext());
- assertThat(db.countRowsOfTable("projects")).isEqualTo(3);
+ assertThat(db.countRowsOfTable("components")).isEqualTo(3);
assertThat(dbClient.componentDao().selectByKey(db.getSession(), project.getDbKey()).get().getId()).isEqualTo(project.getId());
assertThat(dbClient.componentDao().selectByKey(db.getSession(), "PROJECT_KEY:src/main/java/dir").get().getId()).isEqualTo(directory.getId());
assertThat(dbClient.componentDao().selectByKey(db.getSession(), "PROJECT_KEY:src/main/java/dir/Foo.java").get().getId()).isEqualTo(file.getId());
@@ -476,7 +478,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
dbClient.componentDao().applyBChangesForRootComponentUuid(db.getSession(), project.uuid());
db.commit();
- assertThat(db.countRowsOfTable("projects")).isEqualTo(3);
+ assertThat(db.countRowsOfTable("components")).isEqualTo(3);
ComponentDto directoryReloaded = dbClient.componentDao().selectByKey(db.getSession(), "PROJECT_KEY:src/main/java/dir").get();
assertThat(directoryReloaded).isNotNull();
@@ -548,7 +550,7 @@ public class ReportPersistComponentsStepTest extends BaseStepTest {
underTest.execute(new TestComputationStepContext());
- assertThat(db.countRowsOfTable("projects")).isEqualTo(3);
+ assertThat(db.countRowsOfTable("components")).isEqualTo(3);
assertThat(dbClient.componentDao().selectByKey(db.getSession(), project.getDbKey()).get().getId()).isEqualTo(project.getId());
assertThat(dbClient.componentDao().selectByKey(db.getSession(), "PROJECT_KEY:src/main/java/dir").get().getId()).isEqualTo(removedDirectory.getId());
assertThat(dbClient.componentDao().selectByKey(db.getSession(), "PROJECT_KEY:src/main/java/dir/Foo.java").get().getId()).isEqualTo(removedFile.getId());
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/SendIssueNotificationsStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/SendIssueNotificationsStepTest.java
index 2c34348cc4f..11be48ed072 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/SendIssueNotificationsStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/SendIssueNotificationsStepTest.java
@@ -101,7 +101,7 @@ import static org.sonar.db.component.BranchType.PULL_REQUEST;
import static org.sonar.db.component.ComponentTesting.newBranchDto;
import static org.sonar.db.component.ComponentTesting.newFileDto;
import static org.sonar.db.component.ComponentTesting.newPrivateProjectDto;
-import static org.sonar.db.component.ComponentTesting.newProjectBranch;
+import static org.sonar.db.component.ComponentTesting.newBranchComponent;
import static org.sonar.db.issue.IssueTesting.newIssue;
import static org.sonar.db.organization.OrganizationTesting.newOrganizationDto;
import static org.sonar.db.rule.RuleTesting.newRule;
@@ -560,7 +560,7 @@ public class SendIssueNotificationsStepTest extends BaseStepTest {
private void sendIssueChangeNotificationOnBranch(long issueCreatedAt) {
ComponentDto project = newPrivateProjectDto(newOrganizationDto());
- ComponentDto branch = newProjectBranch(project, newBranchDto(project).setKey(BRANCH_NAME));
+ ComponentDto branch = newBranchComponent(project, newBranchDto(project).setKey(BRANCH_NAME));
ComponentDto file = newFileDto(branch);
treeRootHolder.setRoot(builder(Type.PROJECT, 2).setKey(branch.getDbKey()).setPublicKey(branch.getKey()).setName(branch.longName()).setUuid(branch.uuid()).addChildren(
builder(Type.FILE, 11).setKey(file.getDbKey()).setPublicKey(file.getKey()).setName(file.longName()).build()).build());
@@ -692,7 +692,7 @@ public class SendIssueNotificationsStepTest extends BaseStepTest {
}
private ComponentDto setUpBranch(ComponentDto project, BranchType branchType) {
- ComponentDto branch = newProjectBranch(project, newBranchDto(project, branchType).setKey(BRANCH_NAME));
+ ComponentDto branch = newBranchComponent(project, newBranchDto(project, branchType).setKey(BRANCH_NAME));
ComponentDto file = newFileDto(branch);
treeRootHolder.setRoot(builder(Type.PROJECT, 2).setKey(branch.getDbKey()).setPublicKey(branch.getKey()).setName(branch.longName()).setUuid(branch.uuid()).addChildren(
builder(Type.FILE, 11).setKey(file.getDbKey()).setPublicKey(file.getKey()).setName(file.longName()).build()).build());
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ValidateProjectStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ValidateProjectStepTest.java
index f6ede0e98a1..42a52d6d3a5 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ValidateProjectStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ValidateProjectStepTest.java
@@ -69,7 +69,7 @@ public class ValidateProjectStepTest {
@Test
public void fail_if_pr_is_targeting_branch_with_modules() {
- ComponentDto masterProject = dbTester.components().insertMainBranch();
+ ComponentDto masterProject = dbTester.components().insertPublicProject();
ComponentDto mergeBranch = dbTester.components().insertProjectBranch(masterProject, b -> b.setKey("mergeBranch"));
dbClient.componentDao().insert(dbTester.getSession(), ComponentTesting.newModuleDto(mergeBranch));
setBranch(BranchType.PULL_REQUEST, mergeBranch.uuid());
@@ -86,7 +86,7 @@ public class ValidateProjectStepTest {
@Test
public void dont_fail_for_long_forked_from_master_with_modules() {
- ComponentDto masterProject = dbTester.components().insertMainBranch();
+ ComponentDto masterProject = dbTester.components().insertPublicProject();
dbClient.componentDao().insert(dbTester.getSession(), ComponentTesting.newModuleDto(masterProject));
setBranch(BranchType.BRANCH, masterProject.uuid());
dbTester.getSession().commit();
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepTest.java
index 11e583ccc27..fe5c7f40f8e 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepTest.java
@@ -36,6 +36,7 @@ import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.ce.task.projectanalysis.component.DefaultBranchImpl;
import org.sonar.ce.task.projectanalysis.component.MutableDbIdsRepositoryRule;
import org.sonar.ce.task.projectanalysis.component.MutableDisabledComponentsHolder;
+import org.sonar.ce.task.projectanalysis.component.ProjectPersister;
import org.sonar.ce.task.projectanalysis.component.ProjectViewAttributes;
import org.sonar.ce.task.projectanalysis.component.SubViewAttributes;
import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule;
@@ -104,7 +105,8 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest {
dbTester.organizations().insertForUuid(ORGANIZATION_UUID);
analysisMetadataHolder.setBranch(new DefaultBranchImpl());
BranchPersister branchPersister = mock(BranchPersister.class);
- underTest = new PersistComponentsStep(dbClient, treeRootHolder, dbIdsRepository, system2, disabledComponentsHolder, analysisMetadataHolder, branchPersister);
+ ProjectPersister projectPersister = mock(ProjectPersister.class);
+ underTest = new PersistComponentsStep(dbClient, treeRootHolder, dbIdsRepository, system2, disabledComponentsHolder, analysisMetadataHolder, branchPersister, projectPersister);
}
@Override
@@ -482,7 +484,7 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest {
}
private void assertRowsCountInTableProjects(int rowCount) {
- assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(rowCount);
+ assertThat(dbTester.countRowsOfTable("components")).isEqualTo(rowCount);
}
private void assertDtoNotUpdated(String componentKey) {