aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2018-07-03 10:39:42 +0200
committersonartech <sonartech@sonarsource.com>2018-07-09 10:39:32 +0200
commit12349c8c275dc316e09451c4f468376e26be53b3 (patch)
treefd002acfd218ee326a9d14fe12a0043bbaf6ca8d /server
parent9fe95670207d2943eef87452dbc5b840faf1df65 (diff)
downloadsonarqube-12349c8c275dc316e09451c4f468376e26be53b3.tar.gz
sonarqube-12349c8c275dc316e09451c4f468376e26be53b3.zip
clean up dependency on static IssueStorage#insertChanges
and move IssueStorage to server-common
Diffstat (limited to 'server')
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStep.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStepTest.java6
-rw-r--r--server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java2
-rw-r--r--server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java2
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/issue/IssueStorage.java47
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/IssueUpdater.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueStorage.java76
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/WebIssueStorage.java (renamed from server/sonar-server/src/main/java/org/sonar/server/issue/IssueStorage.java)60
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueWsModule.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/IssueStorageTest.java443
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/WebIssueStorageTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueStorageTest.java)190
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java5
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java4
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/empty.xml1
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/load_component_id_from_db.xml43
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/load_project_id_from_db.xml37
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>