diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2018-07-03 10:39:42 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2018-07-09 10:39:32 +0200 |
commit | 12349c8c275dc316e09451c4f468376e26be53b3 (patch) | |
tree | fd002acfd218ee326a9d14fe12a0043bbaf6ca8d /server | |
parent | 9fe95670207d2943eef87452dbc5b840faf1df65 (diff) | |
download | sonarqube-12349c8c275dc316e09451c4f468376e26be53b3.tar.gz sonarqube-12349c8c275dc316e09451c4f468376e26be53b3.zip |
clean up dependency on static IssueStorage#insertChanges
and move IssueStorage to server-common
Diffstat (limited to 'server')
23 files changed, 209 insertions, 751 deletions
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStep.java index 3d843d964bf..29ceb0278f9 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStep.java @@ -40,14 +40,16 @@ public class PersistIssuesStep implements ComputationStep { private final UpdateConflictResolver conflictResolver; private final RuleRepository ruleRepository; private final IssueCache issueCache; + private final IssueStorage issueStorage; public PersistIssuesStep(DbClient dbClient, System2 system2, UpdateConflictResolver conflictResolver, - RuleRepository ruleRepository, IssueCache issueCache) { + RuleRepository ruleRepository, IssueCache issueCache, IssueStorage issueStorage) { this.dbClient = dbClient; this.system2 = system2; this.conflictResolver = conflictResolver; this.ruleRepository = ruleRepository; this.issueCache = issueCache; + this.issueStorage = issueStorage; } @Override @@ -61,7 +63,7 @@ public class PersistIssuesStep implements ComputationStep { DefaultIssue issue = issues.next(); boolean saved = persistIssueIfRequired(mapper, issue); if (saved) { - IssueStorage.insertChanges(changeMapper, issue); + issueStorage.insertChanges(changeMapper, issue); } } dbSession.flushStatements(); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStepTest.java index ff98a1abbff..7ee3f25480a 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStepTest.java @@ -50,6 +50,7 @@ import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleTesting; import org.sonar.scanner.protocol.output.ScannerReport; +import org.sonar.server.issue.IssueStorage; import org.sonar.server.rule.ExternalRuleCreator; import org.sonar.server.util.cache.DiskCache; @@ -79,7 +80,6 @@ public class PersistIssuesStepTest extends BaseStepTest { private DbSession session = db.getSession(); private DbClient dbClient = db.getDbClient(); - private System2 system2; private IssueCache issueCache; private ComputationStep step; @@ -93,11 +93,11 @@ public class PersistIssuesStepTest extends BaseStepTest { @Before public void setup() throws Exception { issueCache = new IssueCache(temp.newFile(), System2.INSTANCE); - system2 = mock(System2.class); + System2 system2 = mock(System2.class); when(system2.now()).thenReturn(NOW); reportReader.setMetadata(ScannerReport.Metadata.getDefaultInstance()); - step = new PersistIssuesStep(dbClient, system2, new UpdateConflictResolver(), new RuleRepositoryImpl(externalRuleCreator, dbClient, analysisMetadataHolder), issueCache); + step = new PersistIssuesStep(dbClient, system2, new UpdateConflictResolver(), new RuleRepositoryImpl(externalRuleCreator, dbClient, analysisMetadataHolder), issueCache, new IssueStorage()); } @After diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java b/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java index 7c7445a0dc1..b22b9366b7e 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java +++ b/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java @@ -95,6 +95,7 @@ import org.sonar.server.extension.CoreExtensionBootstraper; import org.sonar.server.extension.CoreExtensionStopper; import org.sonar.server.favorite.FavoriteUpdater; import org.sonar.server.issue.IssueFieldsSetter; +import org.sonar.server.issue.IssueStorage; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; @@ -404,6 +405,7 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { ViewIndex.class, // issues + IssueStorage.class, IssueIndexer.class, IssueIteratorFactory.class, PermissionIndexer.class, diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java index 5802e313002..a62dcd12eca 100644 --- a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java +++ b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java @@ -97,7 +97,7 @@ public class ComputeEngineContainerImplTest { assertThat(picoContainer.getComponentAdapters()) .hasSize( CONTAINER_ITSELF - + 71 // level 4 + + 72 // level 4 + 6 // content of CeConfigurationModule + 4 // content of CeQueueModule + 4 // content of CeHttpModule diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueStorage.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueStorage.java new file mode 100644 index 00000000000..b7c6cbec18a --- /dev/null +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueStorage.java @@ -0,0 +1,47 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.issue; + +import org.sonar.core.issue.DefaultIssue; +import org.sonar.core.issue.DefaultIssueComment; +import org.sonar.core.issue.FieldDiffs; +import org.sonar.db.issue.IssueChangeDto; +import org.sonar.db.issue.IssueChangeMapper; + +public class IssueStorage { + public void insertChanges(IssueChangeMapper mapper, DefaultIssue issue) { + for (DefaultIssueComment comment : issue.defaultIssueComments()) { + if (comment.isNew()) { + IssueChangeDto changeDto = IssueChangeDto.of(comment); + mapper.insert(changeDto); + } + } + FieldDiffs diffs = issue.currentChange(); + if (issue.isCopied()) { + for (FieldDiffs d : issue.changes()) { + IssueChangeDto changeDto = IssueChangeDto.of(issue.key(), d); + mapper.insert(changeDto); + } + } else if (!issue.isNew() && diffs != null) { + IssueChangeDto changeDto = IssueChangeDto.of(issue.key(), diffs); + mapper.insert(changeDto); + } + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueUpdater.java index 0b23c24eee0..594ebc48dbd 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueUpdater.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueUpdater.java @@ -45,12 +45,12 @@ import static java.util.Collections.singletonList; public class IssueUpdater { private final DbClient dbClient; - private final IssueStorage issueStorage; + private final WebIssueStorage issueStorage; private final NotificationManager notificationService; private final IssueChangePostProcessor issueChangePostProcessor; - public IssueUpdater(DbClient dbClient, IssueStorage issueStorage, NotificationManager notificationService, - IssueChangePostProcessor issueChangePostProcessor) { + public IssueUpdater(DbClient dbClient, WebIssueStorage issueStorage, NotificationManager notificationService, + IssueChangePostProcessor issueChangePostProcessor) { this.dbClient = dbClient; this.issueStorage = issueStorage; this.notificationService = notificationService; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueStorage.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueStorage.java deleted file mode 100644 index 54a9365c940..00000000000 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueStorage.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2018 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.issue; - -import java.util.Collection; -import org.sonar.api.rules.RuleFinder; -import org.sonar.api.server.ServerSide; -import org.sonar.api.utils.System2; -import org.sonar.core.issue.DefaultIssue; -import org.sonar.db.DbClient; -import org.sonar.db.DbSession; -import org.sonar.db.component.ComponentDto; -import org.sonar.db.issue.IssueDto; -import org.sonar.server.issue.index.IssueIndexer; - -/** - * @since 3.6 - */ -@ServerSide -public class ServerIssueStorage extends IssueStorage { - - private final IssueIndexer indexer; - - public ServerIssueStorage(System2 system2, RuleFinder ruleFinder, DbClient dbClient, IssueIndexer indexer) { - super(system2, dbClient, ruleFinder); - this.indexer = indexer; - } - - @Override - protected IssueDto doInsert(DbSession session, long now, DefaultIssue issue) { - ComponentDto component = component(session, issue); - ComponentDto project = project(session, issue); - int ruleId = rule(issue).getId(); - IssueDto dto = IssueDto.toDtoForServerInsert(issue, component, project, ruleId, now); - - getDbClient().issueDao().insert(session, dto); - return dto; - } - - @Override - protected IssueDto doUpdate(DbSession session, long now, DefaultIssue issue) { - IssueDto dto = IssueDto.toDtoForUpdate(issue, now); - getDbClient().issueDao().update(session, dto); - return dto; - } - - @Override - protected void doAfterSave(DbSession dbSession, Collection<IssueDto> issues) { - indexer.commitAndIndexIssues(dbSession, issues); - } - - protected ComponentDto component(DbSession session, DefaultIssue issue) { - return getDbClient().componentDao().selectOrFailByUuid(session, issue.componentUuid()); - } - - protected ComponentDto project(DbSession session, DefaultIssue issue) { - return getDbClient().componentDao().selectOrFailByUuid(session, issue.projectUuid()); - } -} diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueStorage.java b/server/sonar-server/src/main/java/org/sonar/server/issue/WebIssueStorage.java index 05fd5b6bbb3..27f4b214b67 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueStorage.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/WebIssueStorage.java @@ -29,16 +29,16 @@ import java.util.stream.StreamSupport; import org.sonar.api.issue.Issue; import org.sonar.api.rules.Rule; import org.sonar.api.rules.RuleFinder; +import org.sonar.api.server.ServerSide; import org.sonar.api.utils.System2; import org.sonar.core.issue.DefaultIssue; -import org.sonar.core.issue.DefaultIssueComment; -import org.sonar.core.issue.FieldDiffs; import org.sonar.db.BatchSession; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.issue.IssueChangeDto; +import org.sonar.db.component.ComponentDto; import org.sonar.db.issue.IssueChangeMapper; import org.sonar.db.issue.IssueDto; +import org.sonar.server.issue.index.IssueIndexer; import static com.google.common.base.MoreObjects.firstNonNull; import static com.google.common.collect.Lists.newArrayList; @@ -51,19 +51,20 @@ import static org.sonar.core.util.stream.MoreCollectors.toSet; * <li>once at the end of scan, even on multi-module projects</li> * <li>on each server-side action initiated by UI or web service</li> * </ul> - * - * @since 3.6 */ -public abstract class IssueStorage { +@ServerSide +public class WebIssueStorage extends IssueStorage { private final System2 system2; private final RuleFinder ruleFinder; private final DbClient dbClient; + private final IssueIndexer indexer; - protected IssueStorage(System2 system2, DbClient dbClient, RuleFinder ruleFinder) { + public WebIssueStorage(System2 system2, DbClient dbClient, RuleFinder ruleFinder, IssueIndexer indexer) { this.system2 = system2; this.dbClient = dbClient; this.ruleFinder = ruleFinder; + this.indexer = indexer; } protected DbClient getDbClient() { @@ -103,8 +104,8 @@ public abstract class IssueStorage { .collect(toSet(issuesToInsert.size() + issuesToUpdate.size())); } - protected void doAfterSave(DbSession dbSession, Collection<IssueDto> issues) { - // overridden on server-side to index ES + private void doAfterSave(DbSession dbSession, Collection<IssueDto> issues) { + indexer.commitAndIndexIssues(dbSession, issues); } /** @@ -128,7 +129,23 @@ public abstract class IssueStorage { return inserted; } - protected abstract IssueDto doInsert(DbSession batchSession, long now, DefaultIssue issue); + private IssueDto doInsert(DbSession session, long now, DefaultIssue issue) { + ComponentDto component = component(session, issue); + ComponentDto project = project(session, issue); + int ruleId = rule(issue).getId(); + IssueDto dto = IssueDto.toDtoForServerInsert(issue, component, project, ruleId, now); + + getDbClient().issueDao().insert(session, dto); + return dto; + } + + ComponentDto component(DbSession session, DefaultIssue issue) { + return getDbClient().componentDao().selectOrFailByUuid(session, issue.componentUuid()); + } + + ComponentDto project(DbSession session, DefaultIssue issue) { + return getDbClient().componentDao().selectOrFailByUuid(session, issue.projectUuid()); + } /** * @return the keys of the updated issues @@ -149,25 +166,10 @@ public abstract class IssueStorage { return updated; } - protected abstract IssueDto doUpdate(DbSession batchSession, long now, DefaultIssue issue); - - public static void insertChanges(IssueChangeMapper mapper, DefaultIssue issue) { - for (DefaultIssueComment comment : issue.defaultIssueComments()) { - if (comment.isNew()) { - IssueChangeDto changeDto = IssueChangeDto.of(comment); - mapper.insert(changeDto); - } - } - FieldDiffs diffs = issue.currentChange(); - if (issue.isCopied()) { - for (FieldDiffs d : issue.changes()) { - IssueChangeDto changeDto = IssueChangeDto.of(issue.key(), d); - mapper.insert(changeDto); - } - } else if (!issue.isNew() && diffs != null) { - IssueChangeDto changeDto = IssueChangeDto.of(issue.key(), diffs); - mapper.insert(changeDto); - } + private IssueDto doUpdate(DbSession session, long now, DefaultIssue issue) { + IssueDto dto = IssueDto.toDtoForUpdate(issue, now); + getDbClient().issueDao().update(session, dto); + return dto; } protected Rule rule(Issue issue) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java index d24a6c03a08..32abb96c1a0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java @@ -55,7 +55,7 @@ import org.sonar.server.issue.Action; import org.sonar.server.issue.AddTagsAction; import org.sonar.server.issue.AssignAction; import org.sonar.server.issue.IssueChangePostProcessor; -import org.sonar.server.issue.IssueStorage; +import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.RemoveTagsAction; import org.sonar.server.issue.notification.IssueChangeNotification; import org.sonar.server.notification.NotificationManager; @@ -107,12 +107,12 @@ public class BulkChangeAction implements IssuesWsAction { private final System2 system2; private final UserSession userSession; private final DbClient dbClient; - private final IssueStorage issueStorage; + private final WebIssueStorage issueStorage; private final NotificationManager notificationService; private final List<Action> actions; private final IssueChangePostProcessor issueChangePostProcessor; - public BulkChangeAction(System2 system2, UserSession userSession, DbClient dbClient, IssueStorage issueStorage, + public BulkChangeAction(System2 system2, UserSession userSession, DbClient dbClient, WebIssueStorage issueStorage, NotificationManager notificationService, List<Action> actions, IssueChangePostProcessor issueChangePostProcessor) { this.system2 = system2; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueWsModule.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueWsModule.java index a434b524eed..981f13099c6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueWsModule.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueWsModule.java @@ -23,8 +23,8 @@ import org.sonar.core.platform.Module; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFinder; import org.sonar.server.issue.IssueQueryFactory; +import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.IssueUpdater; -import org.sonar.server.issue.ServerIssueStorage; import org.sonar.server.issue.TransitionService; import org.sonar.server.issue.workflow.FunctionExecutor; import org.sonar.server.issue.workflow.IssueWorkflow; @@ -40,7 +40,7 @@ public class IssueWsModule extends Module { IssueUpdater.class, IssueFinder.class, TransitionService.class, - ServerIssueStorage.class, + WebIssueStorage.class, IssueFieldsSetter.class, FunctionExecutor.class, IssueWorkflow.class, diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueStorageTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueStorageTest.java deleted file mode 100644 index 083689ee498..00000000000 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueStorageTest.java +++ /dev/null @@ -1,443 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2018 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.issue; - -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; -import org.junit.Test; -import org.sonar.api.rule.RuleKey; -import org.sonar.api.rules.Rule; -import org.sonar.api.rules.RuleFinder; -import org.sonar.api.rules.RuleQuery; -import org.sonar.api.rules.RuleType; -import org.sonar.api.utils.DateUtils; -import org.sonar.api.utils.Duration; -import org.sonar.api.utils.System2; -import org.sonar.core.issue.DefaultIssue; -import org.sonar.core.issue.DefaultIssueComment; -import org.sonar.core.issue.IssueChangeContext; -import org.sonar.db.DbClient; -import org.sonar.db.DbSession; -import org.sonar.db.DbTester; -import org.sonar.db.component.ComponentDto; -import org.sonar.db.issue.IssueDto; -import org.sonar.db.issue.IssueMapper; -import org.sonar.db.rule.RuleDefinitionDto; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.sonar.db.component.ComponentTesting.newFileDto; -import static org.sonar.db.component.ComponentTesting.newModuleDto; - -public class IssueStorageTest { - - private static final System2 system2 = System2.INSTANCE; - - @org.junit.Rule - public DbTester db = DbTester.create(System2.INSTANCE); - - private DbClient dbClient = db.getDbClient(); - - @Test - public void batch_insert_new_issues() { - FakeBatchSaver saver = new FakeBatchSaver(dbClient, new FakeRuleFinder()); - - DefaultIssueComment comment = DefaultIssueComment.create("ABCDE", "user_uuid", "the comment"); - // override generated key - comment.setKey("FGHIJ"); - - Date date = DateUtils.parseDateTime("2013-05-18T12:00:00+0000"); - DefaultIssue issue = new DefaultIssue() - .setKey("ABCDE") - .setType(RuleType.BUG) - .setNew(true) - - .setRuleKey(RuleKey.of("squid", "AvoidCycle")) - .setLine(5000) - .setEffort(Duration.create(10L)) - .setResolution("OPEN") - .setStatus("OPEN") - .setSeverity("BLOCKER") - .setAttribute("foo", "bar") - .addComment(comment) - .setCreationDate(date) - .setUpdateDate(date) - .setCloseDate(date) - - .setComponentUuid("uuid-100") - .setProjectUuid("uuid-10") - .setComponentKey("struts:Action"); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(0); - assertThat(db.countRowsOfTable("issue_changes")).isEqualTo(0); - - saver.save(issue); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(1); - assertThat(db.countRowsOfTable("issue_changes")).isEqualTo(1); - } - - @Test - public void batch_insert_new_issues_with_session() { - FakeBatchSaver saver = new FakeBatchSaver(dbClient, new FakeRuleFinder()); - - DefaultIssueComment comment = DefaultIssueComment.create("ABCDE", "user_uuid", "the comment"); - // override generated key - comment.setKey("FGHIJ"); - - Date date = DateUtils.parseDateTime("2013-05-18T12:00:00+0000"); - DefaultIssue issue = new DefaultIssue() - .setKey("ABCDE") - .setType(RuleType.BUG) - .setNew(true) - - .setRuleKey(RuleKey.of("squid", "AvoidCycle")) - .setLine(5000) - .setEffort(Duration.create(10L)) - .setResolution("OPEN") - .setStatus("OPEN") - .setSeverity("BLOCKER") - .setAttribute("foo", "bar") - .addComment(comment) - .setCreationDate(date) - .setUpdateDate(date) - .setCloseDate(date) - - .setComponentUuid("uuid-100") - .setProjectUuid("uuid-10") - .setComponentKey("struts:Action"); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(0); - assertThat(db.countRowsOfTable("issue_changes")).isEqualTo(0); - - saver.save(db.getSession(), issue); - db.getSession().commit(); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(1); - assertThat(db.countRowsOfTable("issue_changes")).isEqualTo(1); - } - - @Test - public void server_insert_new_issues_with_session() { - ComponentDto project = new ComponentDto().setId(10L).setUuid("uuid-10"); - ComponentDto component = new ComponentDto().setId(100L).setUuid("uuid-100"); - FakeServerSaver saver = new FakeServerSaver(dbClient, new FakeRuleFinder(), component, project); - - DefaultIssueComment comment = DefaultIssueComment.create("ABCDE", "user_uuid", "the comment"); - // override generated key - comment.setKey("FGHIJ"); - - Date date = DateUtils.parseDateTime("2013-05-18T12:00:00+0000"); - DefaultIssue issue = new DefaultIssue() - .setKey("ABCDE") - .setType(RuleType.BUG) - .setNew(true) - - .setRuleKey(RuleKey.of("squid", "AvoidCycle")) - .setLine(5000) - .setEffort(Duration.create(10L)) - .setResolution("OPEN") - .setStatus("OPEN") - .setSeverity("BLOCKER") - .setAttribute("foo", "bar") - .addComment(comment) - .setCreationDate(date) - .setUpdateDate(date) - .setCloseDate(date) - - .setComponentKey("struts:Action") - .setComponentUuid("component-uuid") - .setProjectUuid("project-uuid"); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(0); - assertThat(db.countRowsOfTable("issue_changes")).isEqualTo(0); - - saver.save(db.getSession(), issue); - db.getSession().commit(); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(1); - assertThat(db.countRowsOfTable("issue_changes")).isEqualTo(1); - } - - @Test - public void batch_update_issues() { - FakeBatchSaver saver = new FakeBatchSaver(dbClient, new FakeRuleFinder()); - - RuleDefinitionDto rule = db.rules().insert(); - ComponentDto project = db.components().insertMainBranch(); - ComponentDto module = db.components().insertComponent(newModuleDto(project)); - ComponentDto file = db.components().insertComponent(newFileDto(module)); - - Date date = DateUtils.parseDateTime("2013-05-18T12:00:00+0000"); - DefaultIssue issue = new DefaultIssue() - .setKey("ABCDE") - .setType(RuleType.BUG) - .setNew(true) - .setRuleKey(rule.getKey()) - .setProjectUuid(project.uuid()) - .setComponentUuid(file.uuid()) - .setLine(5000) - .setEffort(Duration.create(10L)) - .addComment(DefaultIssueComment.create("ABCDE", "user_uuid", "first comment")) - .setResolution("OPEN") - .setStatus("OPEN") - .setSeverity("BLOCKER") - .setAttribute("foo", "bar") - .setCreationDate(date) - .setUpdateDate(date) - .setCloseDate(date); - - saver.save(issue); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(1); - assertThat(db.countRowsOfTable("issue_changes")).isEqualTo(1); - - DefaultIssue updated = new DefaultIssue() - .setKey(issue.key()) - .setType(RuleType.VULNERABILITY) - .setNew(false) - .setChanged(true) - - // updated fields - .setLine(issue.getLine() + 10) - .setProjectUuid("foo") - .setEffort(Duration.create(issue.effortInMinutes() + 10L)) - .setChecksum("FFFFF") - .setAuthorLogin("simon") - .setAssigneeUuid("loic") - .setFieldChange(IssueChangeContext.createUser(new Date(), "user_uuid"), "severity", "INFO", "BLOCKER") - .addComment(DefaultIssueComment.create("ABCDE", "user_uuid", "the comment")) - .setResolution("FIXED") - .setStatus("RESOLVED") - .setSeverity("MAJOR") - .setAttribute("fox", "bax") - .setCreationDate(DateUtils.addDays(date, 1)) - .setUpdateDate(DateUtils.addDays(date, 1)) - .setCloseDate(DateUtils.addDays(date, 1)) - - // unmodifiable fields - .setRuleKey(RuleKey.of("xxx", "unknown")) - .setComponentKey("struts:Action") - .setProjectKey("struts"); - - saver.save(updated); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(1); - assertThat(db.selectFirst("select * from issues")) - .containsEntry("ASSIGNEE", updated.assignee()) - .containsEntry("AUTHOR_LOGIN", updated.authorLogin()) - .containsEntry("CHECKSUM", updated.checksum()) - .containsEntry("COMPONENT_UUID", issue.componentUuid()) - .containsEntry("EFFORT", updated.effortInMinutes()) - .containsEntry("ISSUE_ATTRIBUTES", "fox=bax") - .containsEntry("ISSUE_TYPE", (byte) 3) - .containsEntry("KEE", issue.key()) - .containsEntry("LINE", (long) updated.line()) - .containsEntry("PROJECT_UUID", updated.projectUuid()) - .containsEntry("RESOLUTION", updated.resolution()) - .containsEntry("STATUS", updated.status()) - .containsEntry("SEVERITY", updated.severity()); - - List<Map<String, Object>> rows = db.select("select * from issue_changes order by id"); - assertThat(rows).hasSize(3); - assertThat(rows.get(0)) - .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") - .containsExactlyInAnyOrder("first comment", "comment", "user_uuid"); - assertThat(rows.get(1)) - .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") - .containsExactlyInAnyOrder("the comment", "comment", "user_uuid"); - assertThat(rows.get(2)) - .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") - .containsExactlyInAnyOrder("severity=INFO|BLOCKER", "diff", "user_uuid"); - } - - @Test - public void server_update_issues() { - ComponentDto project = new ComponentDto().setId(10L).setUuid("whatever-uuid"); - ComponentDto component = new ComponentDto().setId(100L).setUuid("whatever-uuid-2"); - FakeServerSaver saver = new FakeServerSaver(dbClient, new FakeRuleFinder(), component, project); - - RuleDefinitionDto rule = db.rules().insert(); - - Date date = DateUtils.parseDateTime("2013-05-18T12:00:00+0000"); - DefaultIssue issue = new DefaultIssue() - .setKey("ABCDE") - .setType(RuleType.BUG) - .setNew(true) - .setRuleKey(rule.getKey()) - .setProjectUuid(project.uuid()) - .setComponentUuid(component.uuid()) - .setLine(5000) - .setEffort(Duration.create(10L)) - .addComment(DefaultIssueComment.create("ABCDE", "user_uuid", "first comment")) - .setResolution("OPEN") - .setStatus("OPEN") - .setSeverity("BLOCKER") - .setAttribute("foo", "bar") - .setCreationDate(date) - .setUpdateDate(date) - .setCloseDate(date); - - saver.save(issue); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(1); - assertThat(db.countRowsOfTable("issue_changes")).isEqualTo(1); - - DefaultIssue updated = new DefaultIssue() - .setKey(issue.key()) - .setType(RuleType.VULNERABILITY) - .setNew(false) - .setChanged(true) - - // updated fields - .setLine(issue.getLine() + 10) - .setProjectUuid("foo") - .setEffort(Duration.create(issue.effortInMinutes() + 10L)) - .setChecksum("FFFFF") - .setAuthorLogin("simon") - .setAssigneeUuid("loic") - .setFieldChange(IssueChangeContext.createUser(new Date(), "user_uuid"), "severity", "INFO", "BLOCKER") - .addComment(DefaultIssueComment.create("ABCDE", "user_uuid", "the comment")) - .setResolution("FIXED") - .setStatus("RESOLVED") - .setSeverity("MAJOR") - .setAttribute("fox", "bax") - .setCreationDate(DateUtils.addDays(date, 1)) - .setUpdateDate(DateUtils.addDays(date, 1)) - .setCloseDate(DateUtils.addDays(date, 1)) - - // unmodifiable fields - .setRuleKey(RuleKey.of("xxx", "unknown")) - .setComponentKey("struts:Action") - .setProjectKey("struts"); - - saver.save(updated); - - assertThat(db.countRowsOfTable("issues")).isEqualTo(1); - assertThat(db.selectFirst("select * from issues")) - .containsEntry("ASSIGNEE", updated.assignee()) - .containsEntry("AUTHOR_LOGIN", updated.authorLogin()) - .containsEntry("CHECKSUM", updated.checksum()) - .containsEntry("COMPONENT_UUID", issue.componentUuid()) - .containsEntry("EFFORT", updated.effortInMinutes()) - .containsEntry("ISSUE_ATTRIBUTES", "fox=bax") - .containsEntry("ISSUE_TYPE", (byte) 3) - .containsEntry("KEE", issue.key()) - .containsEntry("LINE", (long) updated.line()) - .containsEntry("PROJECT_UUID", updated.projectUuid()) - .containsEntry("RESOLUTION", updated.resolution()) - .containsEntry("STATUS", updated.status()) - .containsEntry("SEVERITY", updated.severity()); - - List<Map<String, Object>> rows = db.select("select * from issue_changes order by id"); - assertThat(rows).hasSize(3); - assertThat(rows.get(0)) - .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") - .containsExactlyInAnyOrder("first comment", "comment", "user_uuid"); - assertThat(rows.get(1)) - .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") - .containsExactlyInAnyOrder("the comment", "comment", "user_uuid"); - assertThat(rows.get(2)) - .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") - .containsExactlyInAnyOrder("severity=INFO|BLOCKER", "diff", "user_uuid"); - } - - static class FakeBatchSaver extends IssueStorage { - - protected FakeBatchSaver(DbClient dbClient, RuleFinder ruleFinder) { - super(system2, dbClient, ruleFinder); - } - - @Override - protected IssueDto doInsert(DbSession session, long now, DefaultIssue issue) { - int ruleId = rule(issue).getId(); - IssueDto dto = IssueDto.toDtoForComputationInsert(issue, ruleId, now); - - session.getMapper(IssueMapper.class).insert(dto); - return dto; - } - - @Override - protected IssueDto doUpdate(DbSession session, long now, DefaultIssue issue) { - IssueDto dto = IssueDto.toDtoForUpdate(issue, now); - session.getMapper(IssueMapper.class).update(dto); - return dto; - } - } - - static class FakeServerSaver extends IssueStorage { - - private final ComponentDto component; - private final ComponentDto project; - - protected FakeServerSaver(DbClient dbClient, RuleFinder ruleFinder, ComponentDto component, ComponentDto project) { - super(system2, dbClient, ruleFinder); - this.component = component; - this.project = project; - } - - @Override - protected IssueDto doInsert(DbSession session, long now, DefaultIssue issue) { - int ruleId = rule(issue).getId(); - IssueDto dto = IssueDto.toDtoForServerInsert(issue, component, project, ruleId, now); - - session.getMapper(IssueMapper.class).insert(dto); - return dto; - } - - @Override - protected IssueDto doUpdate(DbSession session, long now, DefaultIssue issue) { - IssueDto dto = IssueDto.toDtoForUpdate(issue, now); - session.getMapper(IssueMapper.class).update(dto); - return dto; - } - } - - static class FakeRuleFinder implements RuleFinder { - - @Override - public Rule findById(int ruleId) { - return null; - } - - @Override - public Rule findByKey(String repositoryKey, String key) { - return null; - } - - @Override - public Rule findByKey(RuleKey key) { - Rule rule = new Rule().setRepositoryKey(key.repository()).setKey(key.rule()); - rule.setId(200); - return rule; - } - - @Override - public Rule find(RuleQuery query) { - return null; - } - - @Override - public Collection<Rule> findAll(RuleQuery query) { - return null; - } - } -} diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java index 470dfc44e0b..868165a38b3 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java @@ -80,7 +80,7 @@ public class IssueUpdaterTest { private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient)); private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private IssueUpdater underTest = new IssueUpdater(dbClient, - new ServerIssueStorage(system2, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), dbClient, issueIndexer), notificationManager, issueChangePostProcessor); + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer), notificationManager, issueChangePostProcessor); @Test public void update_issue() { diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueStorageTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/WebIssueStorageTest.java index d03f432197e..6ab8b736b5d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueStorageTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/WebIssueStorageTest.java @@ -39,6 +39,8 @@ import org.sonar.core.issue.IssueChangeContext; import org.sonar.db.DbClient; import org.sonar.db.DbTester; import org.sonar.db.component.ComponentDto; +import org.sonar.db.component.ComponentTesting; +import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.server.issue.index.IssueIndexer; @@ -48,7 +50,7 @@ import static org.mockito.Mockito.when; import static org.sonar.db.component.ComponentTesting.newFileDto; import static org.sonar.db.component.ComponentTesting.newModuleDto; -public class ServerIssueStorageTest { +public class WebIssueStorageTest { private System2 system2 = mock(System2.class); @@ -57,7 +59,7 @@ public class ServerIssueStorageTest { private DbClient dbClient = dbTester.getDbClient(); - private ServerIssueStorage underTest = new ServerIssueStorage(system2, new FakeRuleFinder(), dbClient, mock(IssueIndexer.class)); + private WebIssueStorage underTest = new WebIssueStorage(system2, dbClient, new FakeRuleFinder(), mock(IssueIndexer.class)); @Before public void setupDbClient() { @@ -66,20 +68,24 @@ public class ServerIssueStorageTest { @Test public void load_component_id_from_db() { - dbTester.prepareDbUnit(getClass(), "load_component_id_from_db.xml"); + OrganizationDto organization = dbTester.organizations().insert(); + ComponentDto project = dbTester.components().insertPublicProject(organization); + ComponentDto file = dbTester.components().insertComponent(ComponentTesting.newFileDto(project)); - long componentId = underTest.component(dbTester.getSession(), new DefaultIssue().setComponentUuid("BCDE")).getId(); + long componentId = underTest.component(dbTester.getSession(), new DefaultIssue().setComponentUuid(file.uuid())).getId(); - assertThat(componentId).isEqualTo(100); + assertThat(componentId).isEqualTo(file.getId()); } @Test public void load_project_id_from_db() { - dbTester.prepareDbUnit(getClass(), "load_project_id_from_db.xml"); + OrganizationDto organization = dbTester.organizations().insert(); + ComponentDto project = dbTester.components().insertPublicProject(organization); + dbTester.components().insertComponent(ComponentTesting.newFileDto(project)); - long projectId = underTest.project(dbTester.getSession(), new DefaultIssue().setProjectUuid("ABCD")).getId(); + long projectId = underTest.project(dbTester.getSession(), new DefaultIssue().setProjectUuid(project.uuid())).getId(); - assertThat(projectId).isEqualTo(1); + assertThat(projectId).isEqualTo(project.getId()); } @Test @@ -96,40 +102,40 @@ public class ServerIssueStorageTest { Date date = DateUtils.parseDateTime("2013-05-18T12:00:00+0000"); DefaultIssue issue = new DefaultIssue() - .setKey(issueKey) - .setType(RuleType.BUG) - .setNew(true) - .setRuleKey(rule.getKey()) - .setProjectUuid(project.uuid()) - .setComponentUuid(file.uuid()) - .setLine(5000) - .setEffort(Duration.create(10L)) - .setResolution("OPEN") - .setStatus("OPEN") - .setSeverity("BLOCKER") - .setAttribute("foo", "bar") - .addComment(comment) - .setCreationDate(date) - .setUpdateDate(date) - .setCloseDate(date); + .setKey(issueKey) + .setType(RuleType.BUG) + .setNew(true) + .setRuleKey(rule.getKey()) + .setProjectUuid(project.uuid()) + .setComponentUuid(file.uuid()) + .setLine(5000) + .setEffort(Duration.create(10L)) + .setResolution("OPEN") + .setStatus("OPEN") + .setSeverity("BLOCKER") + .setAttribute("foo", "bar") + .addComment(comment) + .setCreationDate(date) + .setUpdateDate(date) + .setCloseDate(date); underTest.save(issue); assertThat(dbTester.countRowsOfTable("issues")).isEqualTo(1); assertThat(dbTester.selectFirst("select * from issues")) - .containsEntry("PROJECT_UUID", project.uuid()) - .containsEntry("COMPONENT_UUID", file.uuid()) - .containsEntry("KEE", issue.key()) - .containsEntry("RESOLUTION", issue.resolution()) - .containsEntry("STATUS", issue.status()) - .containsEntry("SEVERITY", issue.severity()); + .containsEntry("PROJECT_UUID", project.uuid()) + .containsEntry("COMPONENT_UUID", file.uuid()) + .containsEntry("KEE", issue.key()) + .containsEntry("RESOLUTION", issue.resolution()) + .containsEntry("STATUS", issue.status()) + .containsEntry("SEVERITY", issue.severity()); assertThat(dbTester.countRowsOfTable("issue_changes")).isEqualTo(1); assertThat(dbTester.selectFirst("select * from issue_changes")) - .containsEntry("KEE", comment.key()) - .containsEntry("ISSUE_KEY", issue.key()) - .containsEntry("CHANGE_DATA", comment.markdownText()) - .containsEntry("USER_LOGIN", comment.userUuid()); + .containsEntry("KEE", comment.key()) + .containsEntry("ISSUE_KEY", issue.key()) + .containsEntry("CHANGE_DATA", comment.markdownText()) + .containsEntry("USER_LOGIN", comment.userUuid()); } @Test @@ -141,21 +147,21 @@ public class ServerIssueStorageTest { Date date = DateUtils.parseDateTime("2013-05-18T12:00:00+0000"); DefaultIssue issue = new DefaultIssue() - .setKey("ABCDE") - .setType(RuleType.BUG) - .setNew(true) - .setRuleKey(rule.getKey()) - .setProjectUuid(project.uuid()) - .setComponentUuid(file.uuid()) - .setLine(5000) - .setEffort(Duration.create(10L)) - .setResolution("OPEN") - .setStatus("OPEN") - .setSeverity("BLOCKER") - .setAttribute("foo", "bar") - .setCreationDate(date) - .setUpdateDate(date) - .setCloseDate(date); + .setKey("ABCDE") + .setType(RuleType.BUG) + .setNew(true) + .setRuleKey(rule.getKey()) + .setProjectUuid(project.uuid()) + .setComponentUuid(file.uuid()) + .setLine(5000) + .setEffort(Duration.create(10L)) + .setResolution("OPEN") + .setStatus("OPEN") + .setSeverity("BLOCKER") + .setAttribute("foo", "bar") + .setCreationDate(date) + .setUpdateDate(date) + .setCloseDate(date); underTest.save(issue); @@ -163,59 +169,59 @@ public class ServerIssueStorageTest { assertThat(dbTester.countRowsOfTable("issue_changes")).isEqualTo(0); DefaultIssue updated = new DefaultIssue() - .setKey(issue.key()) - .setType(RuleType.VULNERABILITY) - .setNew(false) - .setChanged(true) - - // updated fields - .setLine(issue.getLine() + 10) - .setProjectUuid("foo") - .setEffort(Duration.create(issue.effortInMinutes() + 10L)) - .setChecksum("FFFFF") - .setAuthorLogin("simon") - .setAssigneeUuid("loic") - .setFieldChange(IssueChangeContext.createUser(new Date(), "user_uuid"), "severity", "INFO", "BLOCKER") - .addComment(DefaultIssueComment.create("ABCDE", "user_uuid", "the comment")) - .setResolution("FIXED") - .setStatus("RESOLVED") - .setSeverity("MAJOR") - .setAttribute("fox", "bax") - .setCreationDate(DateUtils.addDays(date, 1)) - .setUpdateDate(DateUtils.addDays(date, 1)) - .setCloseDate(DateUtils.addDays(date, 1)) - - // unmodifiable fields - .setRuleKey(RuleKey.of("xxx", "unknown")) - .setComponentKey("struts:Action") - .setProjectKey("struts"); + .setKey(issue.key()) + .setType(RuleType.VULNERABILITY) + .setNew(false) + .setChanged(true) + + // updated fields + .setLine(issue.getLine() + 10) + .setProjectUuid("foo") + .setEffort(Duration.create(issue.effortInMinutes() + 10L)) + .setChecksum("FFFFF") + .setAuthorLogin("simon") + .setAssigneeUuid("loic") + .setFieldChange(IssueChangeContext.createUser(new Date(), "user_uuid"), "severity", "INFO", "BLOCKER") + .addComment(DefaultIssueComment.create("ABCDE", "user_uuid", "the comment")) + .setResolution("FIXED") + .setStatus("RESOLVED") + .setSeverity("MAJOR") + .setAttribute("fox", "bax") + .setCreationDate(DateUtils.addDays(date, 1)) + .setUpdateDate(DateUtils.addDays(date, 1)) + .setCloseDate(DateUtils.addDays(date, 1)) + + // unmodifiable fields + .setRuleKey(RuleKey.of("xxx", "unknown")) + .setComponentKey("struts:Action") + .setProjectKey("struts"); underTest.save(updated); assertThat(dbTester.countRowsOfTable("issues")).isEqualTo(1); assertThat(dbTester.selectFirst("select * from issues")) - .containsEntry("ASSIGNEE", updated.assignee()) - .containsEntry("AUTHOR_LOGIN", updated.authorLogin()) - .containsEntry("CHECKSUM", updated.checksum()) - .containsEntry("COMPONENT_UUID", issue.componentUuid()) - .containsEntry("EFFORT", updated.effortInMinutes()) - .containsEntry("ISSUE_ATTRIBUTES", "fox=bax") - .containsEntry("ISSUE_TYPE", (byte) 3) - .containsEntry("KEE", issue.key()) - .containsEntry("LINE", (long) updated.line()) - .containsEntry("PROJECT_UUID", updated.projectUuid()) - .containsEntry("RESOLUTION", updated.resolution()) - .containsEntry("STATUS", updated.status()) - .containsEntry("SEVERITY", updated.severity()); + .containsEntry("ASSIGNEE", updated.assignee()) + .containsEntry("AUTHOR_LOGIN", updated.authorLogin()) + .containsEntry("CHECKSUM", updated.checksum()) + .containsEntry("COMPONENT_UUID", issue.componentUuid()) + .containsEntry("EFFORT", updated.effortInMinutes()) + .containsEntry("ISSUE_ATTRIBUTES", "fox=bax") + .containsEntry("ISSUE_TYPE", (byte) 3) + .containsEntry("KEE", issue.key()) + .containsEntry("LINE", (long) updated.line()) + .containsEntry("PROJECT_UUID", updated.projectUuid()) + .containsEntry("RESOLUTION", updated.resolution()) + .containsEntry("STATUS", updated.status()) + .containsEntry("SEVERITY", updated.severity()); List<Map<String, Object>> rows = dbTester.select("select * from issue_changes order by id"); assertThat(rows).hasSize(2); assertThat(rows.get(0)) - .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") - .containsExactlyInAnyOrder("the comment", "comment", "user_uuid"); + .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") + .containsExactlyInAnyOrder("the comment", "comment", "user_uuid"); assertThat(rows.get(1)) - .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") - .containsExactlyInAnyOrder("severity=INFO|BLOCKER", "diff", "user_uuid"); + .extracting("CHANGE_DATA", "CHANGE_TYPE", "USER_LOGIN") + .containsExactlyInAnyOrder("severity=INFO|BLOCKER", "diff", "user_uuid"); } static class FakeRuleFinder implements RuleFinder { diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java index d3a7499eafb..261022da01a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java @@ -42,8 +42,8 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFinder; +import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.IssueUpdater; -import org.sonar.server.issue.ServerIssueStorage; import org.sonar.server.issue.TestIssueChangePostProcessor; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; @@ -92,7 +92,7 @@ public class AddCommentActionTest { private IssueDbTester issueDbTester = new IssueDbTester(dbTester); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient)); - private ServerIssueStorage serverIssueStorage = new ServerIssueStorage(system2, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), dbClient, issueIndexer); + private WebIssueStorage serverIssueStorage = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer); private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private IssueUpdater issueUpdater = new IssueUpdater(dbClient, serverIssueStorage, mock(NotificationManager.class), issueChangePostProcessor); private OperationResponseWriter responseWriter = mock(OperationResponseWriter.class); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java index fa8786037e6..3b39486e0b5 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java @@ -38,8 +38,8 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFinder; +import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.IssueUpdater; -import org.sonar.server.issue.ServerIssueStorage; import org.sonar.server.issue.TestIssueChangePostProcessor; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; @@ -85,7 +85,7 @@ public class AssignActionTest { private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private AssignAction underTest = new AssignAction(system2, userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(), new IssueUpdater(dbClient, - new ServerIssueStorage(system2, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), dbClient, issueIndexer), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer), mock(NotificationManager.class), issueChangePostProcessor), responseWriter); private WsActionTester ws = new WsActionTester(underTest); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java index 1ddcfc86886..ea19e99cda7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java @@ -48,8 +48,7 @@ import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.issue.Action; import org.sonar.server.issue.IssueFieldsSetter; -import org.sonar.server.issue.IssueStorage; -import org.sonar.server.issue.ServerIssueStorage; +import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.TestIssueChangePostProcessor; import org.sonar.server.issue.TransitionService; import org.sonar.server.issue.index.IssueIndexer; @@ -115,7 +114,7 @@ public class BulkChangeActionTest { private IssueFieldsSetter issueFieldsSetter = new IssueFieldsSetter(); private IssueWorkflow issueWorkflow = new IssueWorkflow(new FunctionExecutor(issueFieldsSetter), issueFieldsSetter); - private IssueStorage issueStorage = new ServerIssueStorage(system2, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), dbClient, + private WebIssueStorage issueStorage = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient))); private NotificationManager notificationManager = mock(NotificationManager.class); private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java index e724bd99d7f..5f28b486e1a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java @@ -44,8 +44,8 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFinder; +import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.IssueUpdater; -import org.sonar.server.issue.ServerIssueStorage; import org.sonar.server.issue.TestIssueChangePostProcessor; import org.sonar.server.issue.TransitionService; import org.sonar.server.issue.index.IssueIndexer; @@ -108,7 +108,7 @@ public class DoTransitionActionTest { private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient)); private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private IssueUpdater issueUpdater = new IssueUpdater(dbClient, - new ServerIssueStorage(system2, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), dbClient, issueIndexer), mock(NotificationManager.class), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer), mock(NotificationManager.class), issueChangePostProcessor); private ComponentDto project; private ComponentDto file; diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java index 7f7ac38fbc0..64a150793f3 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java @@ -42,8 +42,8 @@ import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFinder; +import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.IssueUpdater; -import org.sonar.server.issue.ServerIssueStorage; import org.sonar.server.issue.TestIssueChangePostProcessor; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; @@ -93,7 +93,7 @@ public class SetSeverityActionTest { private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private WsActionTester tester = new WsActionTester(new SetSeverityAction(userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(), new IssueUpdater(dbClient, - new ServerIssueStorage(system2, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), dbClient, issueIndexer), mock(NotificationManager.class), issueChangePostProcessor), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer), mock(NotificationManager.class), issueChangePostProcessor), responseWriter)); @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java index 384f85e4d00..1f4aa2f20c5 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java @@ -44,8 +44,8 @@ import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFinder; +import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.IssueUpdater; -import org.sonar.server.issue.ServerIssueStorage; import org.sonar.server.issue.TestIssueChangePostProcessor; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; @@ -90,7 +90,7 @@ public class SetTagsActionTest { private WsActionTester ws = new WsActionTester(new SetTagsAction(userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(), new IssueUpdater(dbClient, - new ServerIssueStorage(system2, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), dbClient, issueIndexer), mock(NotificationManager.class), issueChangePostProcessor), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer), mock(NotificationManager.class), issueChangePostProcessor), responseWriter)); @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java index 710fa2131ab..89a15bb2da0 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java @@ -42,8 +42,8 @@ import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFinder; +import org.sonar.server.issue.WebIssueStorage; import org.sonar.server.issue.IssueUpdater; -import org.sonar.server.issue.ServerIssueStorage; import org.sonar.server.issue.TestIssueChangePostProcessor; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; @@ -96,7 +96,7 @@ public class SetTypeActionTest { private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private WsActionTester tester = new WsActionTester(new SetTypeAction(userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(), new IssueUpdater(dbClient, - new ServerIssueStorage(system2, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), dbClient, issueIndexer), mock(NotificationManager.class), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer), mock(NotificationManager.class), issueChangePostProcessor), responseWriter, system2)); diff --git a/server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/empty.xml b/server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/empty.xml deleted file mode 100644 index 5ed00ba028b..00000000000 --- a/server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/empty.xml +++ /dev/null @@ -1 +0,0 @@ -<dataset></dataset>
\ No newline at end of file diff --git a/server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/load_component_id_from_db.xml b/server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/load_component_id_from_db.xml deleted file mode 100644 index 222670b1485..00000000000 --- a/server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/load_component_id_from_db.xml +++ /dev/null @@ -1,43 +0,0 @@ -<dataset> - - <organizations uuid="org1" - kee="org1_key" - name="org1_name" - guarded="[false]" - new_project_private="[false]" - default_quality_gate_uuid="DEFAULT_QG" - created_at="1000" - updated_at="2000"/> - - <projects organization_uuid="org1" - uuid="ABCD" - uuid_path="NOT_USED" - root_uuid="ABCD" - project_uuid="ABCD" - id="10" - scope="PRJ" - qualifier="TRK" - kee="struts" - name="Struts" - private="[false]"/> - <snapshots id="10" - uuid="u10" - component_uuid="ABCD" - islast="[true]"/> - - <projects organization_uuid="org1" - uuid="BCDE" - uuid_path="NOT_USED" - root_uuid="ABCD" - project_uuid="ABCD" - id="100" - scope="FIL" - qualifier="CLA" - kee="struts:Action" - name="Action" - private="[false]"/> - <snapshots id="100" - uuid="u100" - component_uuid="BCDE" - islast="[true]"/> -</dataset> diff --git a/server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/load_project_id_from_db.xml b/server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/load_project_id_from_db.xml deleted file mode 100644 index f3cfd334264..00000000000 --- a/server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/load_project_id_from_db.xml +++ /dev/null @@ -1,37 +0,0 @@ -<dataset> - - <organizations uuid="org1" - kee="org1_key" - name="org1_name" - guarded="[false]" - new_project_private="[false]" - default_quality_gate_uuid="DEFAULT_QG" - created_at="1000" - updated_at="2000"/> - - <projects organization_uuid="org1" - uuid="ABCD" - uuid_path="NOT_USED" - id="1" - kee="struts" - root_uuid="ABCD" - project_uuid="ABCD" - private="[false]"/> - <projects organization_uuid="org1" - uuid="BCDE" - uuid_path="NOT_USED" - id="2" - kee="struts:Action.java" - root_uuid="ABCD" - project_uuid="ABCD" - private="[false]"/> - - <snapshots id="1" - uuid="u1" - component_uuid="ABCD" - islast="[true]"/> - <snapshots id="2" - uuid="u2" - component_uuid="BCDE" - islast="[true]"/> -</dataset> |