From: Simon Brandhof Date: Fri, 24 Jul 2015 12:44:52 +0000 (+0200) Subject: Remove call to deprecated RuleDao from CE RuleCacheLoader X-Git-Tag: 5.2-RC1~942 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c24960fb4118de3791637c054b0a661772e7af16;p=sonarqube.git Remove call to deprecated RuleDao from CE RuleCacheLoader --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleCacheLoader.java b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleCacheLoader.java index f2111a61b6d..8f2443c5c7f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleCacheLoader.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleCacheLoader.java @@ -19,13 +19,14 @@ */ package org.sonar.server.computation.issue; +import com.google.common.base.Optional; import java.util.Collection; import java.util.Map; import org.sonar.api.rule.RuleKey; +import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.MyBatis; import org.sonar.db.rule.RuleDto; -import org.sonar.server.db.DbClient; import org.sonar.server.util.cache.CacheLoader; public class RuleCacheLoader implements CacheLoader { @@ -40,9 +41,9 @@ public class RuleCacheLoader implements CacheLoader { public Rule load(RuleKey key) { DbSession session = dbClient.openSession(false); try { - RuleDto dto = dbClient.deprecatedRuleDao().getNullableByKey(session, key); - if (dto != null) { - return new RuleImpl(dto); + Optional dto = dbClient.ruleDao().selectByKey(session, key); + if (dto.isPresent()) { + return new RuleImpl(dto.get()); } return null; } finally { diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/issue/RuleCacheLoaderTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/issue/RuleCacheLoaderTest.java index 6157c0e634d..fc490fa021f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/issue/RuleCacheLoaderTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/issue/RuleCacheLoaderTest.java @@ -26,13 +26,10 @@ import org.junit.experimental.categories.Category; import org.sonar.api.rule.RuleKey; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; -import org.sonar.server.db.DbClient; -import org.sonar.server.rule.db.RuleDao; import org.sonar.test.DbTests; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; -import static org.mockito.Mockito.mock; @Category(DbTests.class) public class RuleCacheLoaderTest { @@ -48,8 +45,7 @@ public class RuleCacheLoaderTest { @Test public void load_by_key() { dbTester.prepareDbUnit(getClass(), "shared.xml"); - DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new RuleDao(mock(System2.class))); - RuleCacheLoader loader = new RuleCacheLoader(dbClient); + RuleCacheLoader loader = new RuleCacheLoader(dbTester.getDbClient()); Rule javaRule = loader.load(RuleKey.of("java", "JAV01")); assertThat(javaRule.getName()).isEqualTo("Java One"); @@ -62,8 +58,7 @@ public class RuleCacheLoaderTest { @Test public void load_by_keys_is_not_supported() { - DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new RuleDao(mock(System2.class))); - RuleCacheLoader loader = new RuleCacheLoader(dbClient); + RuleCacheLoader loader = new RuleCacheLoader(dbTester.getDbClient()); try { loader.loadAll(Collections.emptyList()); fail(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistIssuesStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistIssuesStepTest.java index af3435c22d4..dd8402998d7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistIssuesStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistIssuesStepTest.java @@ -36,13 +36,13 @@ import org.sonar.core.issue.FieldDiffs; import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.issue.IssueDao; +import org.sonar.db.rule.RuleDao; import org.sonar.server.computation.batch.BatchReportReaderRule; import org.sonar.server.computation.issue.IssueCache; import org.sonar.server.computation.issue.RuleCacheLoader; import org.sonar.server.computation.issue.RuleRepositoryImpl; import org.sonar.server.computation.issue.UpdateConflictResolver; import org.sonar.server.db.DbClient; -import org.sonar.server.rule.db.RuleDao; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -79,7 +79,7 @@ public class PersistIssuesStepTest extends BaseStepTest { public void setup() throws Exception { dbTester.truncateTables(); session = dbTester.myBatis().openSession(false); - dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new IssueDao(dbTester.myBatis()), new RuleDao(system2)); + dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new IssueDao(dbTester.myBatis()), new RuleDao()); issueCache = new IssueCache(temp.newFile(), System2.INSTANCE); system2 = mock(System2.class); when(system2.now()).thenReturn(NOW); diff --git a/sonar-db/src/main/java/org/sonar/db/rule/RuleDao.java b/sonar-db/src/main/java/org/sonar/db/rule/RuleDao.java index b20552a3b62..8be99ab5832 100644 --- a/sonar-db/src/main/java/org/sonar/db/rule/RuleDao.java +++ b/sonar-db/src/main/java/org/sonar/db/rule/RuleDao.java @@ -20,21 +20,35 @@ package org.sonar.db.rule; import com.google.common.base.Function; +import com.google.common.base.Optional; import java.util.List; import javax.annotation.Nonnull; import org.sonar.api.rule.RuleKey; import org.sonar.db.Dao; import org.sonar.db.DbSession; +import org.sonar.db.RowNotFoundException; import static org.sonar.db.DatabaseUtils.executeLargeInputs; public class RuleDao implements Dao { + public Optional selectByKey(DbSession session, RuleKey key) { + return Optional.fromNullable(mapper(session).selectByKey(key)); + } + + public RuleDto selectOrFailByKey(DbSession session, RuleKey key) { + RuleDto rule = mapper(session).selectByKey(key); + if (rule == null) { + throw new RowNotFoundException(String.format("Rule with key '%s' does not exist", key)); + } + return rule; + } + /** * Select rules by keys, whatever their status. Returns an empty list * if the list of {@code keys} is empty, without any db round trip. */ - public List selectByKeys(final DbSession session, List keys) { + public List selectByKeys(DbSession session, List keys) { return executeLargeInputs(keys, new KeyToDto(mapper(session))); } diff --git a/sonar-db/src/test/java/org/sonar/db/rule/RuleDaoTest.java b/sonar-db/src/test/java/org/sonar/db/rule/RuleDaoTest.java index 80de551b89f..499e80f34b8 100644 --- a/sonar-db/src/test/java/org/sonar/db/rule/RuleDaoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/rule/RuleDaoTest.java @@ -19,6 +19,7 @@ */ package org.sonar.db.rule; +import com.google.common.base.Optional; import java.util.Collections; import java.util.List; import org.junit.Rule; @@ -28,6 +29,7 @@ import org.junit.rules.ExpectedException; import org.sonar.api.rule.RuleKey; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; +import org.sonar.db.RowNotFoundException; import org.sonar.test.DbTests; import static java.util.Arrays.asList; @@ -44,6 +46,35 @@ public class RuleDaoTest { RuleDao underTest = dbTester.getDbClient().ruleDao(); + @Test + public void selectByKey() { + dbTester.prepareDbUnit(getClass(), "shared.xml"); + + assertThat(underTest.selectByKey(dbTester.getSession(), RuleKey.of("NOT", "FOUND")).isPresent()).isFalse(); + + Optional rule = underTest.selectByKey(dbTester.getSession(), RuleKey.of("java", "S001")); + assertThat(rule.isPresent()).isTrue(); + assertThat(rule.get().getId()).isEqualTo(1); + } + + @Test + public void selectOrFailByKey() { + dbTester.prepareDbUnit(getClass(), "shared.xml"); + + RuleDto rule = underTest.selectOrFailByKey(dbTester.getSession(), RuleKey.of("java", "S001")); + assertThat(rule.getId()).isEqualTo(1); + } + + @Test + public void selectOrFailByKey_fails_if_rule_not_found() { + thrown.expect(RowNotFoundException.class); + thrown.expectMessage("Rule with key 'NOT:FOUND' does not exist"); + + dbTester.prepareDbUnit(getClass(), "shared.xml"); + + underTest.selectOrFailByKey(dbTester.getSession(), RuleKey.of("NOT", "FOUND")); + } + @Test public void selectByKeys() { dbTester.prepareDbUnit(getClass(), "shared.xml");