]> source.dussan.org Git - sonarqube.git/commitdiff
Remove call to deprecated RuleDao from CE RuleCacheLoader
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 24 Jul 2015 12:44:52 +0000 (14:44 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Tue, 28 Jul 2015 06:02:49 +0000 (08:02 +0200)
server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleCacheLoader.java
server/sonar-server/src/test/java/org/sonar/server/computation/issue/RuleCacheLoaderTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistIssuesStepTest.java
sonar-db/src/main/java/org/sonar/db/rule/RuleDao.java
sonar-db/src/test/java/org/sonar/db/rule/RuleDaoTest.java

index f2111a61b6d2de5cfc0252a9cdc7d9cd2e742243..8f2443c5c7f6a50f32a054f4dc051835563b1211 100644 (file)
  */
 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<RuleKey, Rule> {
@@ -40,9 +41,9 @@ public class RuleCacheLoader implements CacheLoader<RuleKey, Rule> {
   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<RuleDto> dto = dbClient.ruleDao().selectByKey(session, key);
+      if (dto.isPresent()) {
+        return new RuleImpl(dto.get());
       }
       return null;
     } finally {
index 6157c0e634df51c6488e28dcaeb334f03a595ce8..fc490fa021f87645eb8e6fe8e6530c31d7b4b11f 100644 (file)
@@ -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.<RuleKey>emptyList());
       fail();
index af3435c22d450832040ad242a9bb426ee3b24b2f..dd8402998d7157f64118245ea3b02e0f769bdcc8 100644 (file)
@@ -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);
index b20552a3b6220395b167cdf396e2971fed2285fd..8be99ab58321147e1bb69d5aa37a4b2db195e7f6 100644 (file)
 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<RuleDto> 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<RuleDto> selectByKeys(final DbSession session, List<RuleKey> keys) {
+  public List<RuleDto> selectByKeys(DbSession session, List<RuleKey> keys) {
     return executeLargeInputs(keys, new KeyToDto(mapper(session)));
   }
 
index 80de551b89fdf6efd3cf98b408c291dae36bfd05..499e80f34b857c3a20588853fe1a57d2a1dbf043 100644 (file)
@@ -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<RuleDto> 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");