From 7298efea1b742e3ad3c22134fbbf688e2c6f8f00 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Fri, 23 May 2014 12:32:24 +0200 Subject: [PATCH] SONAR-5007 add tests for RegisterQualityProfiles --- .../RegisterQualityProfiles.java | 15 ++++-- .../RegisterQualityProfilesMediumTest.java | 53 +++++++++++++------ .../org/sonar/server/tester/ServerTester.java | 4 +- 3 files changed, 51 insertions(+), 21 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java index 079e834df8d..2f8247aa008 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java @@ -163,12 +163,21 @@ public class RegisterQualityProfiles implements ServerComponent { private void setDefault(String language, List profiles, DbSession session) { String propertyKey = "sonar.profile." + language; - if (settings.getString(propertyKey) == null) { + + boolean upToDate = false; + String currentDefault = settings.getString(propertyKey); + if (currentDefault != null) { + for (RulesProfile profile : profiles) { + if (StringUtils.equals(currentDefault, profile.getName())) { + upToDate = true; + } + } + } + + if (!upToDate) { String defaultProfileName = defaultProfileName(profiles); LOGGER.info("Set default " + language + " profile: " + defaultProfileName); settings.saveProperty(propertyKey, defaultProfileName); - } else { - //TODO check that the declared default profile exists, else fix } } diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesMediumTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesMediumTest.java index ad402a28ad4..6088d8a7dc2 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesMediumTest.java @@ -35,17 +35,16 @@ import org.sonar.api.utils.ValidationMessages; import org.sonar.core.persistence.DbSession; import org.sonar.core.properties.PropertiesDao; import org.sonar.core.properties.PropertyDto; -import org.sonar.core.properties.PropertyQuery; import org.sonar.core.qualityprofile.db.ActiveRuleDto; import org.sonar.core.qualityprofile.db.ActiveRuleKey; import org.sonar.core.qualityprofile.db.ActiveRuleParamDto; import org.sonar.core.qualityprofile.db.QualityProfileDao; import org.sonar.core.qualityprofile.db.QualityProfileKey; import org.sonar.server.db.DbClient; +import org.sonar.server.platform.Platform; import org.sonar.server.qualityprofile.persistence.ActiveRuleDao; import org.sonar.server.tester.ServerTester; -import java.util.List; import java.util.Map; import static com.google.common.collect.Lists.newArrayList; @@ -79,10 +78,7 @@ public class RegisterQualityProfilesMediumTest { assertThat(qualityProfileDao.getByKey(qualityProfileKey, dbSession)).isNotNull(); // Check Default Profile - PropertiesDao propertiesDao = dbClient().propertiesDao(); - List xooDefault = propertiesDao.selectByQuery(PropertyQuery.builder().setKey("sonar.profile.xoo").build(), dbSession); - assertThat(xooDefault).hasSize(1); - assertThat(xooDefault.get(0).getValue()).isEqualTo("Basic"); + verifyProperty("sonar.profile.xoo", "Basic"); // Check ActiveRules in DB ActiveRuleDao activeRuleDao = dbClient().activeRuleDao(); @@ -119,11 +115,7 @@ public class RegisterQualityProfilesMediumTest { tester = new ServerTester().addComponents(new SimpleProfileDefinition("one", false), new SimpleProfileDefinition("two", true)); tester.start(); - dbSession = dbClient().openSession(false); - PropertiesDao propertiesDao = dbClient().propertiesDao(); - List props = propertiesDao.selectByQuery(PropertyQuery.builder().setKey("sonar.profile.xoo").build(), dbSession); - assertThat(props).hasSize(1); - assertThat(props.get(0).getValue()).isEqualTo("two"); + verifyProperty("sonar.profile.xoo", "two"); } @Test @@ -131,11 +123,42 @@ public class RegisterQualityProfilesMediumTest { tester = new ServerTester().addComponents(new SimpleProfileDefinition("Sonar way", false), new SimpleProfileDefinition("Other way", false)); tester.start(); - dbSession = dbClient().openSession(false); + verifyProperty("sonar.profile.xoo", "Sonar way"); + } + + @Test + public void fix_default_profile_if_invalid() throws Exception { + tester = new ServerTester().addComponents(new SimpleProfileDefinition("one", true)); + tester.start(); + PropertiesDao propertiesDao = dbClient().propertiesDao(); - List props = propertiesDao.selectByQuery(PropertyQuery.builder().setKey("sonar.profile.xoo").build(), dbSession); - assertThat(props).hasSize(1); - assertThat(props.get(0).getValue()).isEqualTo("Sonar way"); + propertiesDao.updateProperties("sonar.profile.xoo", "one", "invalid"); + // -> properties are corrupted. Default profile "invalid" does not exist + verifyProperty("sonar.profile.xoo", "invalid"); + + tester.get(Platform.class).restart(); + // restart must resolve the pb + verifyProperty("sonar.profile.xoo", "one"); + } + + @Test + public void do_not_reset_default_profile_if_still_valid() throws Exception { + tester = new ServerTester().addComponents(new SimpleProfileDefinition("one", true), new SimpleProfileDefinition("two", false)); + tester.start(); + + PropertiesDao propertiesDao = dbClient().propertiesDao(); + propertiesDao.updateProperties("sonar.profile.xoo", "one", "two"); + verifyProperty("sonar.profile.xoo", "two"); + + tester.get(Platform.class).restart(); + // restart must keep "two" as default profile, even if "one" is marked as it + verifyProperty("sonar.profile.xoo", "two"); + } + + private void verifyProperty(String key, String value) { + PropertyDto prop = dbClient().propertiesDao().selectGlobalProperty(key); + assertThat(prop).isNotNull(); + assertThat(prop.getValue()).isEqualTo(value); } private DbClient dbClient() { diff --git a/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java b/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java index 6fa838d1765..c47027039e3 100644 --- a/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java +++ b/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java @@ -115,9 +115,7 @@ public class ServerTester extends ExternalResource { * This method should not be called by test when ServerTester is annotated with {@link org.junit.Rule} */ public void stop() { - if (platform.isStarted()) { - platform.doStop(); - } + platform.doStop(); FileUtils.deleteQuietly(homeDir); } -- 2.39.5