diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-17 18:01:28 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-21 15:26:22 +0200 |
commit | 07e7caec293ab173dd7659289b60fee216eae941 (patch) | |
tree | 13a3372151815c8b9c4699405d0b8423e77a0498 /server | |
parent | 3e0fcb4f76bc349293a8c6128dd1b2b77bfc1beb (diff) | |
download | sonarqube-07e7caec293ab173dd7659289b60fee216eae941.tar.gz sonarqube-07e7caec293ab173dd7659289b60fee216eae941.zip |
SONAR-5696: Snapshot switch moved from batch to server side
Diffstat (limited to 'server')
38 files changed, 1120 insertions, 162 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/UploadReportAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/UploadReportAction.java index bf3249ddc83..204fee1efa2 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/UploadReportAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/UploadReportAction.java @@ -34,6 +34,7 @@ public class UploadReportAction implements RequestHandler { public static final String UPLOAD_REPORT_ACTION = "upload_report"; static final String PARAM_PROJECT_KEY = "project"; + static final String PARAM_SNAPSHOT = "snapshot"; private final AnalysisReportQueue analysisReportQueue; private final ComputationService computationService; @@ -58,13 +59,20 @@ public class UploadReportAction implements RequestHandler { .setRequired(true) .setDescription("Project key") .setExampleValue("org.codehaus.sonar:sonar"); + + action + .createParam(PARAM_SNAPSHOT) + .setRequired(true) + .setDescription("Snapshot id") + .setExampleValue("123"); } @Override public void handle(Request request, Response response) throws Exception { String projectKey = request.mandatoryParam(PARAM_PROJECT_KEY); + String snapshotId = request.mandatoryParam(PARAM_SNAPSHOT); - analysisReportQueue.add(projectKey); + analysisReportQueue.add(projectKey, Long.valueOf(snapshotId)); // TODO remove synchronization as soon as it won't break ITs ! (new AnalysisReportTask(analysisReportQueue, computationService)).run(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/db/SnapshotDao.java b/server/sonar-server/src/main/java/org/sonar/server/component/db/SnapshotDao.java index f6ec2f20591..1bc35c43525 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/db/SnapshotDao.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/db/SnapshotDao.java @@ -21,6 +21,7 @@ package org.sonar.server.component.db; import org.sonar.api.ServerComponent; +import org.sonar.api.resources.Scopes; import org.sonar.api.utils.System2; import org.sonar.core.component.SnapshotDto; import org.sonar.core.component.db.SnapshotMapper; @@ -30,6 +31,8 @@ import org.sonar.server.db.BaseDao; import javax.annotation.CheckForNull; +import java.util.List; + public class SnapshotDao extends BaseDao<SnapshotMapper, SnapshotDto, Long> implements ServerComponent, DaoComponent { public SnapshotDao(System2 system) { @@ -47,4 +50,34 @@ public class SnapshotDao extends BaseDao<SnapshotMapper, SnapshotDto, Long> impl mapper(session).insert(item); return item; } + + @CheckForNull + public SnapshotDto getLastSnapshot(DbSession session, SnapshotDto snapshot) { + return mapper(session).selectLastSnapshot(snapshot.getResourceId()); + } + + @CheckForNull + public SnapshotDto getLastSnapshotOlderThan(DbSession session, SnapshotDto snapshot) { + return mapper(session).selectLastSnapshotOlderThan(snapshot.getResourceId(), snapshot.getCreatedAt()); + } + + public List<SnapshotDto> findSnapshotAndChildrenOfProjectScope(DbSession session, SnapshotDto snapshot) { + return mapper(session).selectSnapshotAndChildrenOfScope(snapshot.getId(), Scopes.PROJECT); + } + + public int updateSnapshotAndChildrenLastFlagAndStatus(DbSession session, SnapshotDto snapshot, boolean isLast, String status) { + Long rootId = snapshot.getId(); + String path = snapshot.getPath() + snapshot.getId() + ".%"; + Long pathRootId = snapshot.getRootId() == null ? snapshot.getId() : snapshot.getRootId(); + + return mapper(session).updateSnapshotAndChildrenLastFlagAndStatus(rootId, pathRootId, path, isLast, status); + } + + public int updateSnapshotAndChildrenLastFlag(DbSession session, SnapshotDto snapshot, boolean isLast) { + Long rootId = snapshot.getId(); + String path = snapshot.getPath() + snapshot.getId() + ".%"; + Long pathRootId = snapshot.getRootId() == null ? snapshot.getId() : snapshot.getRootId(); + + return mapper(session).updateSnapshotAndChildrenLastFlag(rootId, pathRootId, path, isLast); + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java index f9cc23c91bb..64c2c2c146c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java @@ -49,10 +49,10 @@ public class AnalysisReportQueue implements ServerComponent { this.dao = dbClient.analysisReportDao(); } - public AnalysisReportDto add(String projectKey) { + public AnalysisReportDto add(String projectKey, Long snapshotId) { UserSession.get().checkGlobalPermission(GlobalPermissions.SCAN_EXECUTION); - AnalysisReportDto report = newPendingAnalysisReport(projectKey); + AnalysisReportDto report = newPendingAnalysisReport(projectKey).setSnapshotId(snapshotId); DbSession session = dbClient.openSession(false); try { checkThatProjectExistsInDatabase(projectKey, session); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportStep.java new file mode 100644 index 00000000000..2408bf3b402 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportStep.java @@ -0,0 +1,29 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.computation; + +import org.sonar.api.ServerComponent; +import org.sonar.core.computation.db.AnalysisReportDto; +import org.sonar.core.persistence.DbSession; + +public interface AnalysisReportStep extends ServerComponent { + void execute(DbSession session, AnalysisReportDto analysisReportDto); +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java index 9fd68840e95..e0dc2742290 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java @@ -20,61 +20,39 @@ package org.sonar.server.computation; -import com.google.common.collect.ImmutableMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.sonar.api.ServerComponent; import org.sonar.core.computation.db.AnalysisReportDto; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; import org.sonar.server.db.DbClient; -import org.sonar.server.issue.index.IssueAuthorizationIndex; -import org.sonar.server.issue.index.IssueIndex; -import org.sonar.server.permission.InternalPermissionService; -import org.sonar.server.search.IndexClient; /** * since 5.0 */ public class ComputationService implements ServerComponent { - private static final Logger LOG = LoggerFactory.getLogger(ComputationService.class); - private final DbClient dbClient; - private final IndexClient index; - private final InternalPermissionService permissionService; + private final SynchronizeProjectPermissionsStep synchronizeProjectPermissionsStep; + private final IndexProjectIssuesStep indexProjectIssuesStep; + private final SwitchSnapshotStep switchSnapshotStep; - public ComputationService(DbClient dbClient, IndexClient index, InternalPermissionService permissionService) { + public ComputationService(DbClient dbClient, SynchronizeProjectPermissionsStep synchronizeProjectPermissionsStep, + IndexProjectIssuesStep indexProjectIssuesStep, SwitchSnapshotStep switchSnapshotStep) { this.dbClient = dbClient; - this.index = index; - this.permissionService = permissionService; + this.synchronizeProjectPermissionsStep = synchronizeProjectPermissionsStep; + this.indexProjectIssuesStep = indexProjectIssuesStep; + this.switchSnapshotStep = switchSnapshotStep; } public void analyzeReport(AnalysisReportDto report) { // Synchronization of lot of data can only be done with a batch session for the moment DbSession session = dbClient.openSession(true); - String projectKey = report.getProjectKey(); try { - synchronizeProjectPermissionsIfNotFound(session, projectKey); - indexProjectIssues(session, projectKey); + synchronizeProjectPermissionsStep.execute(session, report); + indexProjectIssuesStep.execute(session, report); + switchSnapshotStep.execute(session, report); } finally { MyBatis.closeQuietly(session); } - - LOG.info(String.format("Analysis of %s successfully finished.", report)); - } - - private void indexProjectIssues(DbSession session, String projectKey) { - dbClient.issueDao().synchronizeAfter(session, - index.get(IssueIndex.class).getLastSynchronization(), - ImmutableMap.of("project", projectKey)); - session.commit(); - } - - private void synchronizeProjectPermissionsIfNotFound(DbSession session, String projectKey) { - if (index.get(IssueAuthorizationIndex.class).getNullableByKey(projectKey) == null) { - permissionService.synchronizePermissions(session, projectKey); - session.commit(); - } } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/IndexProjectIssuesStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/IndexProjectIssuesStep.java new file mode 100644 index 00000000000..f49ad6c3fea --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/IndexProjectIssuesStep.java @@ -0,0 +1,51 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.computation; + +import com.google.common.collect.ImmutableMap; +import org.sonar.core.computation.db.AnalysisReportDto; +import org.sonar.core.persistence.DbSession; +import org.sonar.server.db.DbClient; +import org.sonar.server.issue.index.IssueIndex; +import org.sonar.server.search.IndexClient; + +public class IndexProjectIssuesStep implements AnalysisReportStep { + + private final DbClient dbClient; + private final IndexClient index; + + public IndexProjectIssuesStep(DbClient dbClient, IndexClient index) { + this.dbClient = dbClient; + this.index = index; + } + + @Override + public void execute(DbSession session, AnalysisReportDto report) { + indexProjectIssues(session, report.getProjectKey()); + } + + private void indexProjectIssues(DbSession session, String projectKey) { + dbClient.issueDao().synchronizeAfter(session, + index.get(IssueIndex.class).getLastSynchronization(), + ImmutableMap.of("project", projectKey)); + session.commit(); + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/SwitchSnapshotStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/SwitchSnapshotStep.java new file mode 100644 index 00000000000..7e0f0a6e955 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/SwitchSnapshotStep.java @@ -0,0 +1,65 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.computation; + +import org.sonar.core.component.SnapshotDto; +import org.sonar.core.computation.db.AnalysisReportDto; +import org.sonar.core.persistence.DbSession; +import org.sonar.server.component.db.SnapshotDao; + +import java.util.List; + +public class SwitchSnapshotStep implements AnalysisReportStep { + + private SnapshotDao dao; + + public SwitchSnapshotStep(SnapshotDao dao) { + this.dao = dao; + } + + @Override + public void execute(DbSession session, AnalysisReportDto report) { + disablePreviousSnapshot(session, report); + enableCurrentSnapshot(session, report); + } + + private void disablePreviousSnapshot(DbSession session, AnalysisReportDto report) { + SnapshotDto referenceSnapshot = dao.getByKey(session, report.getSnapshotId()); + + List<SnapshotDto> snapshots = dao.findSnapshotAndChildrenOfProjectScope(session, referenceSnapshot); + for (SnapshotDto snapshot : snapshots) { + SnapshotDto previousLastSnapshot = dao.getLastSnapshot(session, snapshot); + if (previousLastSnapshot != null) { + dao.updateSnapshotAndChildrenLastFlag(session, previousLastSnapshot, false); + session.commit(); + } + } + } + + private void enableCurrentSnapshot(DbSession session, AnalysisReportDto report) { + SnapshotDto snapshot = dao.getByKey(session, report.getSnapshotId()); + SnapshotDto previousLastSnapshot = dao.getLastSnapshot(session, snapshot); + + boolean isLast = previousLastSnapshot == null || previousLastSnapshot.getCreatedAt().before(snapshot.getCreatedAt()); + dao.updateSnapshotAndChildrenLastFlagAndStatus(session, snapshot, isLast, SnapshotDto.STATUS_PROCESSED); + session.commit(); + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/SynchronizeProjectPermissionsStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/SynchronizeProjectPermissionsStep.java new file mode 100644 index 00000000000..559ce11566a --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/SynchronizeProjectPermissionsStep.java @@ -0,0 +1,50 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.computation; + +import org.sonar.core.computation.db.AnalysisReportDto; +import org.sonar.core.persistence.DbSession; +import org.sonar.server.issue.index.IssueAuthorizationIndex; +import org.sonar.server.permission.InternalPermissionService; +import org.sonar.server.search.IndexClient; + +public class SynchronizeProjectPermissionsStep implements AnalysisReportStep { + + private final IndexClient index; + private final InternalPermissionService permissionService; + + public SynchronizeProjectPermissionsStep(IndexClient index, InternalPermissionService permissionService) { + this.index = index; + this.permissionService = permissionService; + } + + @Override + public void execute(DbSession session, AnalysisReportDto report) { + synchronizeProjectPermissionsIfNotFound(session, report.getProjectKey()); + } + + private void synchronizeProjectPermissionsIfNotFound(DbSession session, String projectKey) { + if (index.get(IssueAuthorizationIndex.class).getNullableByKey(projectKey) == null) { + permissionService.synchronizePermissions(session, projectKey); + session.commit(); + } + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java index 17e57f42b99..87001f174ec 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java @@ -85,10 +85,7 @@ import org.sonar.server.component.DefaultRubyComponentService; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.component.db.SnapshotDao; import org.sonar.server.component.ws.*; -import org.sonar.server.computation.AnalysisReportQueue; -import org.sonar.server.computation.AnalysisReportTaskCleaner; -import org.sonar.server.computation.AnalysisReportTaskLauncher; -import org.sonar.server.computation.ComputationService; +import org.sonar.server.computation.*; import org.sonar.server.computation.db.AnalysisReportDao; import org.sonar.server.computation.ws.ActiveAnalysisReportsAction; import org.sonar.server.computation.ws.AnalysisReportHistorySearchAction; @@ -274,7 +271,7 @@ class ServerComponents { ActivityNormalizer.class, ActivityIndex.class, ActivityDao.class - )); + )); components.addAll(CorePropertyDefinitions.all()); components.addAll(DatabaseMigrations.CLASSES); components.addAll(DaoUtils.getDaoClasses()); @@ -307,7 +304,7 @@ class ServerComponents { // ws RestartHandler.class, SystemWs.class - ); + ); } /** @@ -324,7 +321,7 @@ class ServerComponents { HttpDownloader.class, UriReader.class, ServerIdGenerator.class - ); + ); } void startLevel4Components(ComponentContainer pico) { @@ -593,6 +590,9 @@ class ServerComponents { // Compute engine pico.addSingleton(ComputationService.class); + pico.addSingleton(SwitchSnapshotStep.class); + pico.addSingleton(SynchronizeProjectPermissionsStep.class); + pico.addSingleton(IndexProjectIssuesStep.class); pico.add(AnalysisReportQueue.class); pico.addSingleton(AnalysisReportTaskLauncher.class); pico.addSingleton(AnalysisReportWebService.class); diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java index aad5183a402..596c076891c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java @@ -65,6 +65,6 @@ public class UploadReportActionMediumTest { WebService.Action restoreProfiles = controller.action(UploadReportAction.UPLOAD_REPORT_ACTION); assertThat(restoreProfiles).isNotNull(); - assertThat(restoreProfiles.params()).hasSize(1); + assertThat(restoreProfiles.params()).hasSize(2); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionTest.java index 05171c67759..cd56bdf181e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionTest.java @@ -28,7 +28,6 @@ import org.sonar.server.computation.AnalysisReportQueue; import org.sonar.server.computation.AnalysisReportTaskLauncher; import org.sonar.server.computation.ComputationService; -import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; public class UploadReportActionTest { @@ -53,11 +52,12 @@ public class UploadReportActionTest { public void verify_that_computation_service_is_called() throws Exception { Response response = mock(Response.class); Request request = mock(Request.class); - when(request.mandatoryParam(anyString())).thenReturn(DEFAULT_PROJECT_KEY); + when(request.mandatoryParam(UploadReportAction.PARAM_PROJECT_KEY)).thenReturn(DEFAULT_PROJECT_KEY); + when(request.mandatoryParam(UploadReportAction.PARAM_SNAPSHOT)).thenReturn("123"); sut.handle(request, response); - verify(queue).add(DEFAULT_PROJECT_KEY); + verify(queue).add(DEFAULT_PROJECT_KEY, 123L); verify(analysisTaskLauncher).startAnalysisTaskNow(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/SnapshotTesting.java b/server/sonar-server/src/test/java/org/sonar/server/component/SnapshotTesting.java index 845728744e5..ee5ac9102a1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/SnapshotTesting.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/SnapshotTesting.java @@ -20,6 +20,7 @@ package org.sonar.server.component; +import org.sonar.api.utils.DateUtils; import org.sonar.core.component.ComponentDto; import org.sonar.core.component.SnapshotDto; @@ -42,4 +43,35 @@ public class SnapshotTesting { .setLast(true); } + public static SnapshotDto defaultSnapshot() { + return new SnapshotDto() + .setResourceId(3L) + .setRootProjectId(1L) + .setParentId(2L) + .setRootId(1L) + .setStatus("P") + .setLast(true) + .setPurgeStatus(1) + .setDepth(1) + .setScope("DIR") + .setQualifier("PAC") + .setVersion("2.1-SNAPSHOT") + .setPath("1.2.") + .setPeriodMode(1, "days1") + .setPeriodMode(2, "days2") + .setPeriodMode(3, "days3") + .setPeriodMode(4, "days4") + .setPeriodMode(5, "days5") + .setPeriodParam(1, "30") + .setPeriodParam(2, "31") + .setPeriodParam(3, "32") + .setPeriodParam(4, "33") + .setPeriodParam(5, "34") + .setPeriodDate(1, DateUtils.parseDate("2011-09-24")) + .setPeriodDate(2, DateUtils.parseDate("2011-09-25")) + .setPeriodDate(3, DateUtils.parseDate("2011-09-26")) + .setPeriodDate(4, DateUtils.parseDate("2011-09-27")) + .setPeriodDate(5, DateUtils.parseDate("2011-09-28")) + .setBuildDate(DateUtils.parseDate("2011-09-29")); + } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/db/SnapshotDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/db/SnapshotDaoTest.java index 0499b0f5389..bd7f44380f5 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/db/SnapshotDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/db/SnapshotDaoTest.java @@ -29,9 +29,12 @@ import org.sonar.core.component.SnapshotDto; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.persistence.DbSession; +import java.util.List; + import static org.fest.assertions.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.sonar.server.component.SnapshotTesting.defaultSnapshot; public class SnapshotDaoTest extends AbstractDaoTestCase { @@ -101,35 +104,7 @@ public class SnapshotDaoTest extends AbstractDaoTestCase { when(system2.now()).thenReturn(DateUtils.parseDate("2014-06-18").getTime()); - SnapshotDto dto = new SnapshotDto() - .setResourceId(3L) - .setRootProjectId(1L) - .setParentId(2L) - .setRootId(1L) - .setStatus("P") - .setLast(true) - .setPurgeStatus(1) - .setDepth(1) - .setScope("DIR") - .setQualifier("PAC") - .setVersion("2.1-SNAPSHOT") - .setPath("1.2.") - .setPeriodMode(1, "days1") - .setPeriodMode(2, "days2") - .setPeriodMode(3, "days3") - .setPeriodMode(4, "days4") - .setPeriodMode(5, "days5") - .setPeriodParam(1, "30") - .setPeriodParam(2, "31") - .setPeriodParam(3, "32") - .setPeriodParam(4, "33") - .setPeriodParam(5, "34") - .setPeriodDate(1, DateUtils.parseDate("2011-09-24")) - .setPeriodDate(2, DateUtils.parseDate("2011-09-25")) - .setPeriodDate(3, DateUtils.parseDate("2011-09-26")) - .setPeriodDate(4, DateUtils.parseDate("2011-09-27")) - .setPeriodDate(5, DateUtils.parseDate("2011-09-28")) - .setBuildDate(DateUtils.parseDate("2011-09-29")); + SnapshotDto dto = defaultSnapshot(); dao.insert(session, dto); session.commit(); @@ -138,4 +113,102 @@ public class SnapshotDaoTest extends AbstractDaoTestCase { checkTables("insert", "snapshots"); } + @Test + public void lastSnapshot_returns_null_when_no_last_snapshot() { + setupData("empty"); + + SnapshotDto snapshot = dao.getLastSnapshot(session, defaultSnapshot()); + + assertThat(snapshot).isNull(); + } + + @Test + public void lastSnapshot_from_one_resource() { + setupData("snapshots"); + + SnapshotDto snapshot = dao.getLastSnapshot(session, defaultSnapshot().setResourceId(2L)); + + assertThat(snapshot).isNotNull(); + assertThat(snapshot.getId()).isEqualTo(4L); + } + + @Test + public void lastSnapshot_from_one_resource_without_last_is_null() { + setupData("snapshots"); + + SnapshotDto snapshot = dao.getLastSnapshot(session, defaultSnapshot().setResourceId(5L)); + + assertThat(snapshot).isNull(); + } + + @Test + public void no_last_snapshot_older_than_another_one_in_a_empty_table() { + setupData("empty"); + + SnapshotDto snapshot = dao.getLastSnapshotOlderThan(session, defaultSnapshot()); + + assertThat(snapshot).isNull(); + } + + @Test + public void last_snapshot_older__than_a_reference() { + setupData("snapshots"); + + SnapshotDto referenceSnapshot = defaultSnapshot().setResourceId(1L); + referenceSnapshot.setCreatedAt(DateUtils.parseDate("2008-12-03")); + SnapshotDto snapshot = dao.getLastSnapshotOlderThan(session, referenceSnapshot); + + assertThat(snapshot).isNotNull(); + assertThat(snapshot.getId()).isEqualTo(1L); + } + + @Test + public void last_snapshot_earlier__than_a_reference() { + setupData("snapshots"); + + SnapshotDto referenceSnapshot = defaultSnapshot().setResourceId(1L); + referenceSnapshot.setCreatedAt(DateUtils.parseDate("2008-12-01")); + SnapshotDto snapshot = dao.getLastSnapshotOlderThan(session, referenceSnapshot); + + assertThat(snapshot).isNull(); + } + + @Test + public void snapshot_and_child_retrieved() { + setupData("snapshots"); + + List<SnapshotDto> snapshots = dao.findSnapshotAndChildrenOfProjectScope(session, defaultSnapshot().setId(1L)); + + assertThat(snapshots).isNotEmpty(); + assertThat(snapshots).onProperty("id").containsOnly(1L, 6L); + } + + @Test + public void set_snapshot_and_children_to_false_and_status_processed() { + setupData("snapshots"); + SnapshotDto snapshot = defaultSnapshot().setId(1L); + + dao.updateSnapshotAndChildrenLastFlagAndStatus(session, snapshot, false, SnapshotDto.STATUS_PROCESSED); + session.commit(); + + List<SnapshotDto> snapshots = dao.findSnapshotAndChildrenOfProjectScope(session, snapshot); + assertThat(snapshots).hasSize(2); + assertThat(snapshots).onProperty("id").containsOnly(1L, 6L); + assertThat(snapshots).onProperty("last").containsOnly(false); + assertThat(snapshots).onProperty("status").containsOnly(SnapshotDto.STATUS_PROCESSED); + } + + @Test + public void set_snapshot_and_children_isLast_flag_to_false() { + setupData("snapshots"); + SnapshotDto snapshot = defaultSnapshot().setId(1L); + + dao.updateSnapshotAndChildrenLastFlag(session, snapshot, false); + session.commit(); + + List<SnapshotDto> snapshots = dao.findSnapshotAndChildrenOfProjectScope(session, snapshot); + assertThat(snapshots).hasSize(2); + assertThat(snapshots).onProperty("id").containsOnly(1L, 6L); + assertThat(snapshots).onProperty("last").containsOnly(false); + } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java index 416bc54d3c8..84a1392e57e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java @@ -84,13 +84,14 @@ public class AnalysisReportQueueMediumTest { @Test public void create_analysis_report_and_retrieve_it() { insertPermissionsForProject(DEFAULT_PROJECT_KEY); - sut.add(DEFAULT_PROJECT_KEY); + sut.add(DEFAULT_PROJECT_KEY, 123L); List<AnalysisReportDto> reports = sut.findByProjectKey(DEFAULT_PROJECT_KEY); AnalysisReportDto report = reports.get(0); assertThat(reports).hasSize(1); assertThat(report.getProjectKey()).isEqualTo(DEFAULT_PROJECT_KEY); + assertThat(report.getSnapshotId()).isEqualTo(123L); } private ComponentDto insertPermissionsForProject(String projectKey) { @@ -111,9 +112,9 @@ public class AnalysisReportQueueMediumTest { insertPermissionsForProject("2"); insertPermissionsForProject("3"); - sut.add(DEFAULT_PROJECT_KEY); - sut.add("2"); - sut.add("3"); + sut.add(DEFAULT_PROJECT_KEY, 123L); + sut.add("2", 123L); + sut.add("3", 123L); AnalysisReportDto firstBookedReport = sut.bookNextAvailable(); AnalysisReportDto secondBookedReport = sut.bookNextAvailable(); @@ -136,9 +137,9 @@ public class AnalysisReportQueueMediumTest { public void all() { insertPermissionsForProject(DEFAULT_PROJECT_KEY); - sut.add(DEFAULT_PROJECT_KEY); - sut.add(DEFAULT_PROJECT_KEY); - sut.add(DEFAULT_PROJECT_KEY); + sut.add(DEFAULT_PROJECT_KEY, 123L); + sut.add(DEFAULT_PROJECT_KEY, 123L); + sut.add(DEFAULT_PROJECT_KEY, 123L); List<AnalysisReportDto> reports = sut.all(); @@ -148,7 +149,7 @@ public class AnalysisReportQueueMediumTest { @Test public void remove_remove_from_queue_and_log_a_new_activity() { insertPermissionsForProject(DEFAULT_PROJECT_KEY); - sut.add(DEFAULT_PROJECT_KEY); + sut.add(DEFAULT_PROJECT_KEY, 123L); AnalysisReportDto report = sut.bookNextAvailable(); report.setStatus(SUCCESS); @@ -167,7 +168,7 @@ public class AnalysisReportQueueMediumTest { MockUserSession.set().setLogin("gandalf").addProjectPermissions(UserRole.USER, project.key()); - sut.add(project.getKey()); + sut.add(project.getKey(), 123L); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceTest.java new file mode 100644 index 00000000000..2910df14971 --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceTest.java @@ -0,0 +1,70 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.computation; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.InOrder; +import org.sonar.core.computation.db.AnalysisReportDto; +import org.sonar.core.persistence.DbSession; +import org.sonar.server.db.DbClient; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.*; + +public class ComputationServiceTest { + + private ComputationService sut; + + private DbClient dbClient; + private IndexProjectIssuesStep indexProjectIssuesStep; + private SynchronizeProjectPermissionsStep synchronizeProjectPermissionsStep; + private SwitchSnapshotStep switchSnapshotStep; + + @Before + public void before() { + this.dbClient = mock(DbClient.class); + + this.indexProjectIssuesStep = mock(IndexProjectIssuesStep.class); + this.synchronizeProjectPermissionsStep = mock(SynchronizeProjectPermissionsStep.class); + this.switchSnapshotStep = mock(SwitchSnapshotStep.class); + + this.sut = new ComputationService(dbClient, synchronizeProjectPermissionsStep, indexProjectIssuesStep, switchSnapshotStep); + } + + @Test + public void all_my_steps_are_called_in_the_right_order() { + sut.analyzeReport(AnalysisReportDto.newForTests(1L)); + + InOrder inOrder = inOrder(indexProjectIssuesStep, synchronizeProjectPermissionsStep, switchSnapshotStep); + + inOrder.verify(synchronizeProjectPermissionsStep).execute(any(DbSession.class), any(AnalysisReportDto.class)); + inOrder.verify(indexProjectIssuesStep).execute(any(DbSession.class), any(AnalysisReportDto.class)); + inOrder.verify(switchSnapshotStep).execute(any(DbSession.class), any(AnalysisReportDto.class)); + } + + @Test(expected = IllegalStateException.class) + public void computation_service_rethrows_exceptions() { + doThrow(IllegalStateException.class).when(switchSnapshotStep).execute(any(DbSession.class), any(AnalysisReportDto.class)); + + sut.analyzeReport(AnalysisReportDto.newForTests(1L)); + } +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/IndexProjectIssuesStepTest.java index 69e9dbba298..608f7020e3b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/IndexProjectIssuesStepTest.java @@ -42,8 +42,6 @@ import org.sonar.server.db.DbClient; import org.sonar.server.issue.IssueQuery; import org.sonar.server.issue.IssueTesting; import org.sonar.server.issue.db.IssueDao; -import org.sonar.server.issue.index.IssueAuthorizationDoc; -import org.sonar.server.issue.index.IssueAuthorizationIndex; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.platform.BackendCleanup; import org.sonar.server.rule.RuleTesting; @@ -60,13 +58,14 @@ import java.util.List; import static com.google.common.collect.Lists.newArrayList; import static org.fest.assertions.Assertions.assertThat; -public class ComputationServiceMediumTest { +public class IndexProjectIssuesStepTest { + private static final String DEFAULT_PROJECT_KEY = "123456789-987654321"; @ClassRule public static ServerTester tester = new ServerTester(); - private ComputationService sut; + private IndexProjectIssuesStep sut; private AnalysisReportQueue queue; private DbClient db; @@ -80,7 +79,7 @@ public class ComputationServiceMediumTest { session = db.openSession(false); queue = tester.get(AnalysisReportQueue.class); - sut = tester.get(ComputationService.class); + sut = tester.get(IndexProjectIssuesStep.class); UserDto connectedUser = new UserDto().setLogin("gandalf").setName("Gandalf"); db.userDao().insert(session, connectedUser); @@ -118,10 +117,10 @@ public class ComputationServiceMediumTest { clearIssueIndexToSimulateBatchInsertWithoutIndexing(); - queue.add(DEFAULT_PROJECT_KEY); + queue.add(DEFAULT_PROJECT_KEY, 123L); AnalysisReportDto report = queue.bookNextAvailable(); - sut.analyzeReport(report); + sut.execute(session, report); // Check that the issue has well be indexed in E/S assertThat(tester.get(IssueIndex.class).getNullableByKey(issue.getKey())).isNotNull(); @@ -144,19 +143,6 @@ public class ComputationServiceMediumTest { } @Test - public void add_project_issue_permission_in_index() throws Exception { - ComponentDto project = insertPermissionsForProject(DEFAULT_PROJECT_KEY); - - queue.add(DEFAULT_PROJECT_KEY); - List<AnalysisReportDto> reports = queue.findByProjectKey(DEFAULT_PROJECT_KEY); - - sut.analyzeReport(reports.get(0)); - - IssueAuthorizationDoc issueAuthorizationIndex = tester.get(IssueAuthorizationIndex.class).getNullableByKey(project.getKey()); - assertThat(issueAuthorizationIndex).isNotNull(); - } - - @Test public void index_a_lot_of_issues() throws Exception { ComponentDto project = insertPermissionsForProject(DEFAULT_PROJECT_KEY); db.issueAuthorizationDao().synchronizeAfter(session, new Date(0)); @@ -179,10 +165,10 @@ public class ComputationServiceMediumTest { clearIssueIndexToSimulateBatchInsertWithoutIndexing(); - queue.add(DEFAULT_PROJECT_KEY); + queue.add(DEFAULT_PROJECT_KEY, 123L); List<AnalysisReportDto> reports = queue.findByProjectKey(DEFAULT_PROJECT_KEY); - sut.analyzeReport(reports.get(0)); + sut.execute(session, reports.get(0)); session.commit(); session.clearCache(); @@ -190,9 +176,4 @@ public class ComputationServiceMediumTest { Result<Issue> issueIndex = tester.get(IssueIndex.class).search(IssueQuery.builder().build(), new QueryContext()); assertThat(issueIndex.getTotal()).isEqualTo(2001); } - - @Test(expected = IllegalStateException.class) - public void exceptions_thrown_are_transmitted() { - sut.analyzeReport(new AnalysisReportDto()); - } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/SwitchSnapshotStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/SwitchSnapshotStepTest.java new file mode 100644 index 00000000000..d4cbf8ac4b6 --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/SwitchSnapshotStepTest.java @@ -0,0 +1,70 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.computation; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.api.utils.DateUtils; +import org.sonar.api.utils.System2; +import org.sonar.core.computation.db.AnalysisReportDto; +import org.sonar.core.persistence.DbSession; +import org.sonar.core.persistence.MyBatis; +import org.sonar.core.persistence.TestDatabase; +import org.sonar.server.component.db.SnapshotDao; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class SwitchSnapshotStepTest { + @Rule + public TestDatabase db = new TestDatabase(); + + private DbSession session; + private SwitchSnapshotStep sut; + private SnapshotDao dao; + + @Before + public void before() { + this.session = db.myBatis().openSession(false); + + System2 system2 = mock(System2.class); + when(system2.now()).thenReturn(DateUtils.parseDate("2011-09-29").getTime()); + this.sut = new SwitchSnapshotStep(new SnapshotDao(system2)); + this.dao = new SnapshotDao(system2); + } + + @After + public void after() { + MyBatis.closeQuietly(session); + } + + @Test + public void one_switch_with_a_snapshot_and_his_children() { + db.prepareDbUnit(getClass(), "snapshots.xml"); + + sut.execute(session, AnalysisReportDto.newForTests(1L).setSnapshotId(1L)); + session.commit(); + + db.assertDbUnit(getClass(), "snapshots-result.xml", "snapshots"); + } +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/SynchronizeProjectPermissionsStepMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/SynchronizeProjectPermissionsStepMediumTest.java new file mode 100644 index 00000000000..0a40266086f --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/SynchronizeProjectPermissionsStepMediumTest.java @@ -0,0 +1,108 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.computation; + +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.sonar.api.security.DefaultGroups; +import org.sonar.api.web.UserRole; +import org.sonar.core.component.ComponentDto; +import org.sonar.core.computation.db.AnalysisReportDto; +import org.sonar.core.permission.GlobalPermissions; +import org.sonar.core.permission.PermissionFacade; +import org.sonar.core.persistence.DbSession; +import org.sonar.core.persistence.MyBatis; +import org.sonar.core.user.UserDto; +import org.sonar.server.db.DbClient; +import org.sonar.server.issue.index.IssueAuthorizationDoc; +import org.sonar.server.issue.index.IssueAuthorizationIndex; +import org.sonar.server.tester.ServerTester; +import org.sonar.server.user.MockUserSession; + +import java.util.List; + +import static org.fest.assertions.Assertions.assertThat; + +public class SynchronizeProjectPermissionsStepMediumTest { + private static final String DEFAULT_PROJECT_KEY = "123456789-987654321"; + + @ClassRule + public static ServerTester tester = new ServerTester(); + + private SynchronizeProjectPermissionsStep sut; + + private AnalysisReportQueue queue; + private DbClient db; + private DbSession session; + private MockUserSession userSession; + + @Before + public void setUp() throws Exception { + tester.clearDbAndIndexes(); + db = tester.get(DbClient.class); + session = db.openSession(false); + queue = tester.get(AnalysisReportQueue.class); + + sut = tester.get(SynchronizeProjectPermissionsStep.class); + + UserDto connectedUser = new UserDto().setLogin("gandalf").setName("Gandalf"); + db.userDao().insert(session, connectedUser); + + userSession = MockUserSession.set() + .setLogin(connectedUser.getLogin()) + .setUserId(connectedUser.getId().intValue()) + .setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + + session.commit(); + } + + @After + public void after() { + MyBatis.closeQuietly(session); + } + + private ComponentDto insertPermissionsForProject(String projectKey) { + ComponentDto project = new ComponentDto().setKey(projectKey); + db.componentDao().insert(session, project); + + tester.get(PermissionFacade.class).insertGroupPermission(project.getId(), DefaultGroups.ANYONE, UserRole.USER, session); + userSession.addProjectPermissions(UserRole.USER, project.key()); + + session.commit(); + + return project; + } + + @Test + public void add_project_issue_permission_in_index() throws Exception { + ComponentDto project = insertPermissionsForProject(DEFAULT_PROJECT_KEY); + + queue.add(DEFAULT_PROJECT_KEY, 123L); + List<AnalysisReportDto> reports = queue.findByProjectKey(DEFAULT_PROJECT_KEY); + + sut.execute(session, reports.get(0)); + + IssueAuthorizationDoc issueAuthorizationIndex = tester.get(IssueAuthorizationIndex.class).getNullableByKey(project.getKey()); + assertThat(issueAuthorizationIndex).isNotNull(); + } +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java index 3228a0dfc12..6fd0a31bd02 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java @@ -44,10 +44,11 @@ import static org.sonar.core.computation.db.AnalysisReportDto.Status.WORKING; public class AnalysisReportDaoTest { private static final String DEFAULT_PROJECT_KEY = "123456789-987654321"; private static final String DEFAULT_PROJECT_NAME = "default project name"; + private static final long DEFAULT_SNAPSHOT_ID = 123L; @Rule public TestDatabase db = new TestDatabase(); - private AnalysisReportDao dao; + private AnalysisReportDao sut; private DbSession session; private System2 system2; @@ -55,7 +56,7 @@ public class AnalysisReportDaoTest { public void before() { this.session = db.myBatis().openSession(false); this.system2 = mock(System2.class); - this.dao = new AnalysisReportDao(system2); + this.sut = new AnalysisReportDao(system2); when(system2.now()).thenReturn(DateUtils.parseDate("2014-09-26").getTime()); @@ -72,13 +73,14 @@ public class AnalysisReportDaoTest { AnalysisReportDto report = new AnalysisReportDto() .setProjectKey(DEFAULT_PROJECT_KEY) .setProjectName(DEFAULT_PROJECT_NAME) + .setSnapshotId(DEFAULT_SNAPSHOT_ID) .setData("data-project") .setStatus(PENDING); report.setCreatedAt(DateUtils.parseDate("2014-09-24")) .setUpdatedAt(DateUtils.parseDate("2014-09-25")); - dao.insert(session, report); - dao.insert(session, report); + sut.insert(session, report); + sut.insert(session, report); session.commit(); db.assertDbUnit(getClass(), "insert-result.xml", "analysis_reports"); @@ -88,7 +90,7 @@ public class AnalysisReportDaoTest { public void update_all_to_status() { db.prepareDbUnit(getClass(), "update-all-to-status-pending.xml"); - dao.cleanWithUpdateAllToPendingStatus(session); + sut.cleanWithUpdateAllToPendingStatus(session); session.commit(); db.assertDbUnit(getClass(), "update-all-to-status-pending-result.xml", "analysis_reports"); @@ -98,7 +100,7 @@ public class AnalysisReportDaoTest { public void truncate() { db.prepareDbUnit(getClass(), "any-analysis-reports.xml"); - dao.cleanWithTruncate(session); + sut.cleanWithTruncate(session); session.commit(); db.assertDbUnit(getClass(), "truncate-result.xml", "analysis_reports"); @@ -109,7 +111,7 @@ public class AnalysisReportDaoTest { db.prepareDbUnit(getClass(), "select.xml"); final String projectKey = "123456789-987654321"; - List<AnalysisReportDto> reports = dao.findByProjectKey(session, projectKey); + List<AnalysisReportDto> reports = sut.findByProjectKey(session, projectKey); AnalysisReportDto report = reports.get(0); assertThat(reports).hasSize(1); @@ -122,7 +124,7 @@ public class AnalysisReportDaoTest { db.prepareDbUnit(getClass(), "select.xml"); final String projectKey = "987654321-123456789"; - List<AnalysisReportDto> reports = dao.findByProjectKey(session, projectKey); + List<AnalysisReportDto> reports = sut.findByProjectKey(session, projectKey); assertThat(reports).hasSize(2); } @@ -132,7 +134,7 @@ public class AnalysisReportDaoTest { db.prepareDbUnit(getClass(), "select_oldest_available_report.xml"); final String projectKey = "123456789-987654321"; - AnalysisReportDto nextAvailableReport = dao.getNextAvailableReport(session); + AnalysisReportDto nextAvailableReport = sut.getNextAvailableReport(session); assertThat(nextAvailableReport.getId()).isEqualTo(2); assertThat(nextAvailableReport.getProjectKey()).isEqualTo(projectKey); @@ -143,7 +145,7 @@ public class AnalysisReportDaoTest { db.prepareDbUnit(getClass(), "select_oldest_available_report_with_working_reports_older.xml"); final String projectKey = "123456789-987654321"; - AnalysisReportDto nextAvailableReport = dao.getNextAvailableReport(session); + AnalysisReportDto nextAvailableReport = sut.getNextAvailableReport(session); assertThat(nextAvailableReport.getId()).isEqualTo(2); assertThat(nextAvailableReport.getProjectKey()).isEqualTo(projectKey); @@ -153,7 +155,7 @@ public class AnalysisReportDaoTest { public void null_when_no_available_pending_report_because_working_report_on_the_same_project() { db.prepareDbUnit(getClass(), "select-with-no-available-report.xml"); - AnalysisReportDto nextAvailableReport = dao.getNextAvailableReport(session); + AnalysisReportDto nextAvailableReport = sut.getNextAvailableReport(session); assertThat(nextAvailableReport).isNull(); } @@ -162,7 +164,7 @@ public class AnalysisReportDaoTest { public void getById_maps_all_the_fields_except_report_data() { db.prepareDbUnit(getClass(), "select.xml"); - AnalysisReportDto report = dao.getById(session, 1L); + AnalysisReportDto report = sut.getById(session, 1L); assertThat(report.getId()).isEqualTo(1L); assertThat(report.getStatus()).isEqualTo(WORKING); assertThat(report.getProjectKey()).isEqualTo("123456789-987654321"); @@ -175,14 +177,14 @@ public class AnalysisReportDaoTest { public void getById_returns_null_when_id_not_found() { db.prepareDbUnit(getClass(), "select.xml"); - AnalysisReportDto report = dao.getById(session, 4L); + AnalysisReportDto report = sut.getById(session, 4L); assertThat(report).isNull(); } @Test(expected = NullPointerException.class) public void nullPointerExc_when_trying_to_book_a_report_without_id() { - dao.bookAnalysisReport(session, new AnalysisReportDto()); + sut.bookAnalysisReport(session, new AnalysisReportDto()); } @Test @@ -190,7 +192,7 @@ public class AnalysisReportDaoTest { db.prepareDbUnit(getClass(), "one_busy_report_analysis.xml"); AnalysisReportDto report = newDefaultReport(); - AnalysisReportDto reportBooked = dao.bookAnalysisReport(session, report); + AnalysisReportDto reportBooked = sut.bookAnalysisReport(session, report); assertThat(reportBooked).isNull(); } @@ -202,7 +204,7 @@ public class AnalysisReportDaoTest { db.prepareDbUnit(getClass(), "one_available_analysis.xml"); AnalysisReportDto report = newDefaultReport(); - AnalysisReportDto reportBooked = dao.bookAnalysisReport(session, report); + AnalysisReportDto reportBooked = sut.bookAnalysisReport(session, report); assertThat(reportBooked.getId()).isEqualTo(1L); assertThat(reportBooked.getStatus()).isEqualTo(WORKING); @@ -214,7 +216,7 @@ public class AnalysisReportDaoTest { db.prepareDbUnit(getClass(), "one_available_analysis_but_another_busy_on_same_project.xml"); AnalysisReportDto report = newDefaultReport(); - AnalysisReportDto reportBooked = dao.bookAnalysisReport(session, report); + AnalysisReportDto reportBooked = sut.bookAnalysisReport(session, report); assertThat(reportBooked).isNotNull(); } @@ -224,7 +226,7 @@ public class AnalysisReportDaoTest { db.prepareDbUnit(getClass(), "book_available_report_analysis_while_having_one_working_on_another_project.xml"); AnalysisReportDto report = newDefaultReport(); - AnalysisReportDto reportBooked = dao.bookAnalysisReport(session, report); + AnalysisReportDto reportBooked = sut.bookAnalysisReport(session, report); assertThat(reportBooked.getId()).isEqualTo(1L); } @@ -233,7 +235,7 @@ public class AnalysisReportDaoTest { public void delete_one_analysis_report() { db.prepareDbUnit(getClass(), "one_analysis_report.xml"); - dao.delete(session, newDefaultReport()); + sut.delete(session, newDefaultReport()); session.commit(); db.assertDbUnit(getClass(), "truncate-result.xml", "analysis_reports"); @@ -243,7 +245,7 @@ public class AnalysisReportDaoTest { public void getById_maps_all_the_fields_except_the_data() { db.prepareDbUnit(getClass(), "one_analysis_report.xml"); - AnalysisReportDto report = dao.getById(session, 1L); + AnalysisReportDto report = sut.getById(session, 1L); assertThat(report.getProjectKey()).isEqualTo(DEFAULT_PROJECT_KEY); assertThat(report.getProjectName()).isEqualTo(DEFAULT_PROJECT_NAME); @@ -258,7 +260,7 @@ public class AnalysisReportDaoTest { public void findAll_one_analysis_report() { db.prepareDbUnit(getClass(), "one_analysis_report.xml"); - List<AnalysisReportDto> reports = dao.findAll(session); + List<AnalysisReportDto> reports = sut.findAll(session); assertThat(reports).hasSize(1); } @@ -267,7 +269,7 @@ public class AnalysisReportDaoTest { public void findAll_empty_table() { db.prepareDbUnit(getClass(), "empty.xml"); - List<AnalysisReportDto> reports = dao.findAll(session); + List<AnalysisReportDto> reports = sut.findAll(session); assertThat(reports).isEmpty(); } @@ -276,24 +278,24 @@ public class AnalysisReportDaoTest { public void findAll_three_analysis_reports() { db.prepareDbUnit(getClass(), "three_analysis_reports.xml"); - List<AnalysisReportDto> reports = dao.findAll(session); + List<AnalysisReportDto> reports = sut.findAll(session); assertThat(reports).hasSize(3); } @Test(expected = UnsupportedOperationException.class) public void doGetNullableByKey_is_not_implemented_yet() { - dao.doGetNullableByKey(session, "ANY_STRING"); + sut.doGetNullableByKey(session, "ANY_STRING"); } @Test(expected = UnsupportedOperationException.class) public void getSynchronizationParams_is_not_implemented_yet() { - dao.getSynchronizationParams(new Date(), new HashMap<String, String>()); + sut.getSynchronizationParams(new Date(), new HashMap<String, String>()); } @Test(expected = UnsupportedOperationException.class) public void doUpdate_is_not_implemented_yet() { - dao.doUpdate(session, new AnalysisReportDto()); + sut.doUpdate(session, new AnalysisReportDto()); } private AnalysisReportDto newDefaultReport() { diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/AnalysisReportHistorySearchActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/AnalysisReportHistorySearchActionMediumTest.java index cde60a2d6f8..fe9231efe01 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/AnalysisReportHistorySearchActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/AnalysisReportHistorySearchActionMediumTest.java @@ -80,9 +80,9 @@ public class AnalysisReportHistorySearchActionMediumTest { @Test public void add_and_try_to_retrieve_activities() throws Exception { insertPermissionsForProject(DEFAULT_PROJECT_KEY); - queue.add(DEFAULT_PROJECT_KEY); - queue.add(DEFAULT_PROJECT_KEY); - queue.add(DEFAULT_PROJECT_KEY); + queue.add(DEFAULT_PROJECT_KEY, 123L); + queue.add(DEFAULT_PROJECT_KEY, 123L); + queue.add(DEFAULT_PROJECT_KEY, 123L); List<AnalysisReportDto> reports = queue.all(); for (AnalysisReportDto report : reports) { @@ -116,7 +116,7 @@ public class AnalysisReportHistorySearchActionMediumTest { @Test(expected = ForbiddenException.class) public void user_rights_is_not_enough_throw_ForbiddenException() throws Exception { insertPermissionsForProject(DEFAULT_PROJECT_KEY); - queue.add(DEFAULT_PROJECT_KEY); + queue.add(DEFAULT_PROJECT_KEY, 123L); AnalysisReportDto report = queue.all().get(0); report.succeed(); diff --git a/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/snapshots.xml b/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/snapshots.xml new file mode 100644 index 00000000000..9781e1280fc --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/snapshots.xml @@ -0,0 +1,65 @@ +<dataset> + + <!-- PROJECT_ID = 1 --> + <snapshots id="1" project_id="1" parent_snapshot_id="2" root_project_id="1" root_snapshot_id="1" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="2" project_id="1" parent_snapshot_id="2" root_project_id="1" root_snapshot_id="3" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="3" project_id="1" parent_snapshot_id="2" root_project_id="1" root_snapshot_id="3" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + + + <!-- PROJECT_ID = 2 --> + <snapshots id="4" project_id="2" parent_snapshot_id="2" root_project_id="1" root_snapshot_id="3" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + + <!-- PROJECT_ID = 3 – no last snapshot --> + <snapshots id="5" project_id="3" parent_snapshot_id="2" root_project_id="1" root_snapshot_id="3" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + + <!-- Child of snapshot id=1 --> + <snapshots id="6" project_id="55" parent_snapshot_id="2" root_project_id="1" root_snapshot_id="1" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> +</dataset> diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/SwitchSnapshotStepTest/snapshots-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/SwitchSnapshotStepTest/snapshots-result.xml new file mode 100644 index 00000000000..c4b90750ee0 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/SwitchSnapshotStepTest/snapshots-result.xml @@ -0,0 +1,149 @@ +<dataset> + + <!-- NEW SNAPSHOT --> + <snapshots id="1" project_id="123" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="2" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="3" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- PROJECT_ID = 3 – no last snapshot --> + <snapshots id="4" project_id="3" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- Child of snapshot id=1 --> + <snapshots id="5" project_id="55" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + + <!-- LAST FLAGGED SNAPSHOT --> + <snapshots id="21" project_id="123" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="22" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="23" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- PROJECT_ID = 3 – no last snapshot --> + <snapshots id="24" project_id="3" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- Child of snapshot id=1 --> + <snapshots id="25" project_id="55" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + + <!-- OLD SNAPSHOT --> + <snapshots id="46" project_id="123" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="47" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="48" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- PROJECT_ID = 3 – no last snapshot --> + <snapshots id="49" project_id="3" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- Child of snapshot id=1 --> + <snapshots id="50" project_id="55" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> +</dataset> diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/SwitchSnapshotStepTest/snapshots.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/SwitchSnapshotStepTest/snapshots.xml new file mode 100644 index 00000000000..642ac79c026 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/SwitchSnapshotStepTest/snapshots.xml @@ -0,0 +1,149 @@ +<dataset> + + <!-- NEW SNAPSHOT --> + <snapshots id="1" project_id="123" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="U" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="2" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="U" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="3" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="U" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- PROJECT_ID = 3 – no last snapshot --> + <snapshots id="4" project_id="3" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="U" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- Child of snapshot id=1 --> + <snapshots id="5" project_id="55" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1" + status="U" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + + <!-- LAST FLAGGED SNAPSHOT --> + <snapshots id="21" project_id="123" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="22" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="23" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- PROJECT_ID = 3 – no last snapshot --> + <snapshots id="24" project_id="3" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- Child of snapshot id=1 --> + <snapshots id="25" project_id="55" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21" + status="P" islast="[true]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + + <!-- OLD SNAPSHOT --> + <snapshots id="46" project_id="123" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="47" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <snapshots id="48" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- PROJECT_ID = 3 – no last snapshot --> + <snapshots id="49" project_id="3" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> + <!-- Child of snapshot id=1 --> + <snapshots id="50" project_id="55" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46" + status="P" islast="[false]" purge_status="1" + period1_mode="days1" period1_param="30" period1_date="2011-09-24" + period2_mode="days2" period2_param="31" period2_date="2011-09-25" + period3_mode="days3" period3_param="32" period3_date="2011-09-26" + period4_mode="days4" period4_param="33" period4_date="2011-09-27" + period5_mode="days5" period5_param="34" period5_date="2011-09-28" + depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29" + version="2.1-SNAPSHOT" path="1.2."/> +</dataset> diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/any-analysis-reports.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/any-analysis-reports.xml index aee179291e8..cb5e9a70c3f 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/any-analysis-reports.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/any-analysis-reports.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-24" @@ -12,6 +13,7 @@ id="2" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-25" @@ -21,6 +23,7 @@ id="3" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-26" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/book_available_report_analysis_while_having_one_working_on_another_project.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/book_available_report_analysis_while_having_one_working_on_another_project.xml index 9e385b61b43..001dfb1cd18 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/book_available_report_analysis_while_having_one_working_on_another_project.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/book_available_report_analysis_while_having_one_working_on_another_project.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-24" @@ -12,6 +13,7 @@ id="2" project_key="987654321-123456789" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-23" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml index 7b8a4ffafb4..816774bdb21 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-24" @@ -12,6 +13,7 @@ id="2" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-24" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml index d4ba0f3aa38..7a384fef8bf 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-24" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis.xml index a383f62333b..8dfd1864cd9 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-24" @@ -12,6 +13,7 @@ id="2" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-24" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis_but_another_busy_on_same_project.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis_but_another_busy_on_same_project.xml index 96fec9d6891..122cffa4607 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis_but_another_busy_on_same_project.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis_but_another_busy_on_same_project.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-24" @@ -12,6 +13,7 @@ id="2" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-23" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_busy_report_analysis.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_busy_report_analysis.xml index ff70f9cd9e9..423acd8cd6f 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_busy_report_analysis.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_busy_report_analysis.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-24" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select-with-no-available-report.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select-with-no-available-report.xml index ea8b0295a36..9e7dfcc8966 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select-with-no-available-report.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select-with-no-available-report.xml @@ -3,6 +3,7 @@ id="1" project_key="111111111-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-25" @@ -12,6 +13,7 @@ id="2" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-24" @@ -22,6 +24,7 @@ id="3" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-25" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml index 106fd9d1a81..eb3156a8d6e 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-24" @@ -12,6 +13,7 @@ id="2" project_key="987654321-123456789" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-25" @@ -21,6 +23,7 @@ id="3" project_key="987654321-123456789" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-26" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report.xml index 723b1a310e7..c5ebf921ae6 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report.xml @@ -3,6 +3,7 @@ id="1" project_key="111111111-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-25" @@ -12,6 +13,7 @@ id="2" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-24" @@ -21,6 +23,7 @@ id="3" project_key="333333333-123456789" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-25" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report_with_working_reports_older.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report_with_working_reports_older.xml index baab9454bbc..a5f42f4fbc3 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report_with_working_reports_older.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report_with_working_reports_older.xml @@ -3,6 +3,7 @@ id="1" project_key="111111111-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-23" @@ -12,6 +13,7 @@ id="2" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-24" @@ -21,6 +23,7 @@ id="3" project_key="333333333-123456789" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-25" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/three_analysis_reports.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/three_analysis_reports.xml index 106fd9d1a81..eb3156a8d6e 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/three_analysis_reports.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/three_analysis_reports.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-24" @@ -12,6 +13,7 @@ id="2" project_key="987654321-123456789" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-25" @@ -21,6 +23,7 @@ id="3" project_key="987654321-123456789" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-26" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml index edc1eabb95b..ee97b8c8c3b 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml @@ -1,28 +1,9 @@ -<!-- - ~ SonarQube, open source software quality management tool. - ~ Copyright (C) 2008-2014 SonarSource - ~ mailto:contact AT sonarsource DOT com - ~ - ~ SonarQube 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. - ~ - ~ SonarQube 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. - --> - <dataset> <analysis_reports id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-24" @@ -32,6 +13,7 @@ id="2" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-25" @@ -41,6 +23,7 @@ id="3" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-26" diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml index aee179291e8..cb5e9a70c3f 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml @@ -3,6 +3,7 @@ id="1" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-24" @@ -12,6 +13,7 @@ id="2" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="WORKING" created_at="2014-09-25" @@ -21,6 +23,7 @@ id="3" project_key="123456789-987654321" project_name="default project name" + snapshot_id="123" report_data="data-project" report_status="PENDING" created_at="2014-09-26" diff --git a/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/706_add_snapshot_id_to_analysis_reports.rb b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/706_add_snapshot_id_to_analysis_reports.rb new file mode 100644 index 00000000000..4b571f83112 --- /dev/null +++ b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/706_add_snapshot_id_to_analysis_reports.rb @@ -0,0 +1,30 @@ +# +# SonarQube, open source software quality management tool. +# Copyright (C) 2008-2014 SonarSource +# mailto:contact AT sonarsource DOT com +# +# SonarQube 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. +# +# SonarQube 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. +# + +# +# SonarQube 5.0 +# SONAR-5696 +# +class AddSnapshotIdToAnalysisReports < ActiveRecord::Migration + def self.up + add_column 'analysis_reports', :snapshot_id, :integer, :null => false + end +end + |