From e3b4152afad73825c08a72c7e17432fb97638970 Mon Sep 17 00:00:00 2001 From: Godin Date: Wed, 8 Dec 2010 17:06:32 +0000 Subject: [PATCH] SONAR-1987: Ignore incorrect rule params --- .../server/configuration/RulesBackup.java | 15 ++++++++++---- .../server/configuration/RulesBackupTest.java | 20 ++++++++++++++++++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/configuration/RulesBackup.java b/sonar-server/src/main/java/org/sonar/server/configuration/RulesBackup.java index f97cee3685b..5a9112237d9 100644 --- a/sonar-server/src/main/java/org/sonar/server/configuration/RulesBackup.java +++ b/sonar-server/src/main/java/org/sonar/server/configuration/RulesBackup.java @@ -34,10 +34,7 @@ import org.sonar.api.rules.RuleParam; import org.sonar.api.rules.RulePriority; import org.sonar.jpa.dao.RulesDao; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class RulesBackup implements Backupable { private Collection rules; @@ -96,6 +93,16 @@ public class RulesBackup implements Backupable { LoggerFactory.getLogger(getClass()).error("Unable to find parent rule " + parent.getRepositoryKey() + ":" + parent.getKey()); continue; } + + for (Iterator irp = rule.getParams().iterator(); irp.hasNext();) { + RuleParam param = irp.next(); + RuleParam matchingRPInDb = rulesDao.getRuleParam(matchingParentRuleInDb, param.getKey()); + if (matchingRPInDb == null) { + LoggerFactory.getLogger(getClass()).error("Unable to find rule parameter in parent " + param.getKey()); + irp.remove(); + } + } + rule.setParent(matchingParentRuleInDb); Rule matchingRuleInDb = session.getSingleResult(Rule.class, "pluginName", rule.getRepositoryKey(), diff --git a/sonar-server/src/test/java/org/sonar/server/configuration/RulesBackupTest.java b/sonar-server/src/test/java/org/sonar/server/configuration/RulesBackupTest.java index f5d32822f83..1d51c3fd775 100644 --- a/sonar-server/src/test/java/org/sonar/server/configuration/RulesBackupTest.java +++ b/sonar-server/src/test/java/org/sonar/server/configuration/RulesBackupTest.java @@ -24,11 +24,14 @@ import org.junit.Test; import org.sonar.api.rules.Rule; import org.sonar.api.rules.RuleParam; import org.sonar.api.rules.RulePriority; +import org.sonar.jpa.dao.RulesDao; import org.sonar.jpa.test.AbstractDbUnitTestCase; import java.util.Arrays; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -45,6 +48,7 @@ public class RulesBackupTest extends AbstractDbUnitTestCase { sonarConfig = new SonarConfig(); rule = Rule.create("repo", "key", "name").setDescription("description"); + rule.createParameter("param").setDefaultValue("value"); } private Rule createUserRule() { @@ -101,10 +105,24 @@ public class RulesBackupTest extends AbstractDbUnitTestCase { } @Test - public void shouldNotFailIfNoParentRule() { + public void shouldIgnoreIncorrectRule() { sonarConfig.setRules(Arrays.asList(createUserRule())); rulesBackup.importXml(sonarConfig); assertThat(getSession().getResults(Rule.class).size(), is(0)); } + + @Test + public void shouldIgnoreIncorrectParam() { + Rule rule = Rule.create("repo", "key", "name").setDescription("description"); + getSession().save(rule); + sonarConfig.setRules(Arrays.asList(createUserRule())); + rulesBackup.importXml(sonarConfig); + + assertThat(getSession().getResults(Rule.class).size(), is(2)); + RulesDao rulesDao = getDao().getRulesDao(); + Rule importedRule = rulesDao.getRuleByKey("repo", "key2"); + assertThat(importedRule, notNullValue()); + assertThat(rulesDao.getRuleParam(importedRule, "param"), nullValue()); + } } -- 2.39.5