summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2016-03-16 13:31:51 +0100
committerJulien Lancelot <julien.lancelot@sonarsource.com>2016-03-16 13:31:51 +0100
commit134615af2ee0a4ec871149d7d19e894fae6498a4 (patch)
treec8642d280a14200e649237e453eeb47c4627ef0e /server
parente8523b755dc8360a8a5dcf30932d4a840344d3e3 (diff)
downloadsonarqube-134615af2ee0a4ec871149d7d19e894fae6498a4.tar.gz
sonarqube-134615af2ee0a4ec871149d7d19e894fae6498a4.zip
SONAR-7330 Rule was not re-indexed in ES when beeing deleted
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterMediumTest.java28
2 files changed, 30 insertions, 6 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java
index 48afa7f3f11..e96d2db66da 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java
@@ -22,6 +22,7 @@ package org.sonar.server.rule;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.server.ServerSide;
+import org.sonar.api.utils.System2;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.rule.RuleDto;
@@ -32,11 +33,13 @@ import org.sonar.server.rule.index.RuleIndexer;
@ServerSide
public class RuleDeleter {
+ private final System2 system2;
private final RuleIndexer ruleIndexer;
private final DbClient dbClient;
private final RuleActivator ruleActivator;
- public RuleDeleter(RuleIndexer ruleIndexer, DbClient dbClient, RuleActivator ruleActivator) {
+ public RuleDeleter(System2 system2, RuleIndexer ruleIndexer, DbClient dbClient, RuleActivator ruleActivator) {
+ this.system2 = system2;
this.ruleIndexer = ruleIndexer;
this.dbClient = dbClient;
this.ruleActivator = ruleActivator;
@@ -56,10 +59,11 @@ public class RuleDeleter {
}
rule.setStatus(RuleStatus.REMOVED);
+ rule.setUpdatedAt(system2.now());
dbClient.ruleDao().update(dbSession, rule);
dbSession.commit();
- ruleIndexer.setEnabled(true).index();
+ ruleIndexer.index();
} finally {
dbSession.close();
diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterMediumTest.java
index e72bf59befc..7bdff24f593 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterMediumTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterMediumTest.java
@@ -40,7 +40,9 @@ import org.sonar.server.qualityprofile.RuleActivation;
import org.sonar.server.qualityprofile.RuleActivator;
import org.sonar.server.qualityprofile.index.ActiveRuleDoc;
import org.sonar.server.qualityprofile.index.ActiveRuleIndex;
+import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
import org.sonar.server.rule.index.RuleIndex;
+import org.sonar.server.rule.index.RuleIndexer;
import org.sonar.server.rule.index.RuleQuery;
import org.sonar.server.tester.ServerTester;
import org.sonar.server.tester.UserSessionRule;
@@ -50,6 +52,8 @@ import static org.assertj.core.api.Assertions.assertThat;
// TODO replace ServerTester by EsTester / DbTester
public class RuleDeleterMediumTest {
+ static final long PAST = 10000L;
+
@ClassRule
public static ServerTester tester = new ServerTester().withEsIndexes();
@@ -59,12 +63,16 @@ public class RuleDeleterMediumTest {
DbClient db = tester.get(DbClient.class);
RuleDao dao = tester.get(RuleDao.class);
RuleIndex index = tester.get(RuleIndex.class);
+ RuleIndexer ruleIndexer = tester.get(RuleIndexer.class);
+ ActiveRuleIndexer activeRuleIndexer = tester.get(ActiveRuleIndexer.class);
RuleDeleter deleter = tester.get(RuleDeleter.class);
DbSession dbSession = tester.get(DbClient.class).openSession(false);
@Before
public void before() {
tester.clearDbAndIndexes();
+ ruleIndexer.setEnabled(true);
+ activeRuleIndexer.setEnabled(true);
}
@After
@@ -75,11 +83,17 @@ public class RuleDeleterMediumTest {
@Test
public void delete_custom_rule() {
// Create template rule
- RuleDto templateRule = RuleTesting.newTemplateRule(RuleKey.of("xoo", "T1")).setLanguage("xoo");
+ RuleDto templateRule = RuleTesting.newTemplateRule(RuleKey.of("xoo", "T1"))
+ .setLanguage("xoo")
+ .setCreatedAt(PAST)
+ .setUpdatedAt(PAST);
dao.insert(dbSession, templateRule);
// Create custom rule
- RuleDto customRule = RuleTesting.newCustomRule(templateRule).setLanguage("xoo");
+ RuleDto customRule = RuleTesting.newCustomRule(templateRule)
+ .setLanguage("xoo")
+ .setCreatedAt(PAST)
+ .setUpdatedAt(PAST);
dao.insert(dbSession, customRule);
// Create a quality profile
@@ -87,6 +101,8 @@ public class RuleDeleterMediumTest {
db.qualityProfileDao().insert(dbSession, profileDto);
dbSession.commit();
dbSession.clearCache();
+ ruleIndexer.index();
+ activeRuleIndexer.index();
// Activate the custom rule
activate(new RuleActivation(customRule.getKey()).setSeverity(Severity.BLOCKER), QProfileTesting.XOO_P1_KEY);
@@ -98,6 +114,7 @@ public class RuleDeleterMediumTest {
RuleDto customRuleReloaded = dao.selectOrFailByKey(dbSession, customRule.getKey());
assertThat(customRuleReloaded).isNotNull();
assertThat(customRuleReloaded.getStatus()).isEqualTo(RuleStatus.REMOVED);
+ assertThat(customRuleReloaded.getUpdatedAt()).isNotEqualTo(PAST);
// Verify there's no more active rule from custom rule
List<ActiveRuleDoc> activeRules = Lists.newArrayList(tester.get(ActiveRuleIndex.class).findByProfile(profileDto.getKey()));
@@ -110,10 +127,12 @@ public class RuleDeleterMediumTest {
@Test
public void delete_manual_rule() {
// Create manual rule
- RuleDto manualRule = RuleTesting.newManualRule("Manual_Rule");
+ RuleDto manualRule = RuleTesting.newManualRule("Manual_Rule")
+ .setCreatedAt(PAST)
+ .setUpdatedAt(PAST);
dao.insert(dbSession, manualRule);
-
dbSession.commit();
+ ruleIndexer.index();
// Delete manual rule
deleter.delete(manualRule.getKey());
@@ -122,6 +141,7 @@ public class RuleDeleterMediumTest {
RuleDto result = dao.selectOrFailByKey(dbSession, manualRule.getKey());
assertThat(result).isNotNull();
assertThat(result.getStatus()).isEqualTo(RuleStatus.REMOVED);
+ assertThat(result.getUpdatedAt()).isNotEqualTo(PAST);
// Verify in index
assertThat(index.search(new RuleQuery(), new SearchOptions()).getIds()).isEmpty();