]> source.dussan.org Git - sonarqube.git/commitdiff
Cleanup org.sonar.server.rule2
authorSimon Brandhof <simon.brandhof@gmail.com>
Wed, 30 Apr 2014 13:47:33 +0000 (15:47 +0200)
committerSimon Brandhof <simon.brandhof@gmail.com>
Wed, 30 Apr 2014 13:47:33 +0000 (15:47 +0200)
sonar-server/src/main/java/org/sonar/server/rule2/RuleNormalizer.java
sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java
sonar-server/src/main/java/org/sonar/server/search/Hit.java
sonar-server/src/test/java/org/sonar/server/rule2/RuleIndexTest.java [deleted file]
sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java

index c0625daffe4577467c09986cf34056ef23ebf2b8..e11d98879a029bfe579d62e6138840687dc05df8 100644 (file)
  */
 package org.sonar.server.rule2;
 
-import org.sonar.check.Cardinality;
-
 import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.sonar.api.rule.RuleKey;
+import org.sonar.check.Cardinality;
 import org.sonar.core.qualityprofile.db.ActiveRuleDao;
 import org.sonar.core.rule.RuleDto;
 import org.sonar.server.search.BaseNormalizer;
 
 import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 
 import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
 
@@ -94,7 +91,7 @@ public class RuleNormalizer extends BaseNormalizer<RuleDto, RuleKey> {
     indexField(RuleField.STATUS.key(), rule.getStatus(), document);
     indexField(RuleField.LANGUAGE.key(), rule.getLanguage(), document);
     indexField(RuleField.INTERNAL_KEY.key(), rule.getConfigKey(), document);
-    indexField(RuleField.TEMPLATE.key(), rule.getCardinality()==Cardinality.MULTIPLE, document);
+    indexField(RuleField.TEMPLATE.key(), rule.getCardinality() == Cardinality.MULTIPLE, document);
 
     indexField(RuleField.TAGS.key(), rule.getName(), document);
     indexField(RuleField.SYSTEM_TAGS.key(), rule.getName(), document);
index 758623a481c97b5e5930064b6f96947fa1150823..cecb47d4631e2db3d714b23ae484de272b0e55c5 100644 (file)
@@ -27,6 +27,7 @@ import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.api.utils.text.JsonWriter;
 import org.sonar.server.rule2.RuleIndex;
+import org.sonar.server.rule2.RuleNormalizer;
 import org.sonar.server.rule2.RuleQuery;
 import org.sonar.server.rule2.RuleService;
 import org.sonar.server.search.Hit;
@@ -94,7 +95,7 @@ public class SearchAction implements RequestHandler {
       .createParam("fields")
       .setDescription("Comma-separated list of the fields to be returned in response. All the fields are returned by default.")
       .setPossibleValues(RuleIndex.PUBLIC_FIELDS)
-      .setExampleValue("key,name");
+      .setExampleValue(String.format("%s,%s,%s", RuleNormalizer.RuleField.KEY, RuleNormalizer.RuleField.REPOSITORY, RuleNormalizer.RuleField.LANGUAGE));
   }
 
   @Override
index ddc3cc8ed56f30fb0a8d75a1b689d371f72c8bad..ea373a4ec09e7fd6c9a9c2e5c4e1e4b775e14737 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.server.search;
 
+import javax.annotation.CheckForNull;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -28,16 +29,27 @@ public class Hit implements Comparable<Hit> {
 
   private Integer rank;
 
-  public Hit(Integer rank){
+  public Hit(Integer rank) {
     this.fields = new HashMap<String, Object>();
     this.rank = rank;
   }
 
-  public Map<String, Object> getFields(){
+  public Map<String, Object> getFields() {
     return this.fields;
   }
 
-  public Integer getRank(){
+  @CheckForNull
+  public Object getField(String key) {
+    return this.fields.get(key);
+  }
+
+  @CheckForNull
+  public String getFieldAsString(String key) {
+    Object val = this.fields.get(key);
+    return val == null ? null : val.toString();
+  }
+
+  public Integer getRank() {
     return this.rank;
   }
 
diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/RuleIndexTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/RuleIndexTest.java
deleted file mode 100644 (file)
index 1224ad0..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-//package org.sonar.server.rule2;
-//
-//import com.github.tlrx.elasticsearch.test.annotations.ElasticsearchNode;
-//import com.github.tlrx.elasticsearch.test.support.junit.runners.ElasticsearchRunner;
-//import org.elasticsearch.node.Node;
-//import org.junit.Before;
-//import org.junit.Ignore;
-//import org.junit.runner.RunWith;
-//import org.sonar.server.es.ESNode;
-//import org.sonar.server.search.BaseIndex;
-//
-//@RunWith(ElasticsearchRunner.class)
-//@Ignore("Same problem as with BaseIndex test")
-//public class RuleIndexTest {
-//
-//  private static final String TEST_NODE_NAME = "es_node_for_tests";
-//
-//  @ElasticsearchNode(name = TEST_NODE_NAME,
-//      clusterName = BaseIndex.ES_CLUSTER_NAME,
-//      local = true, data = true)
-//  private Node node;
-//
-//  private ESNode esNode;
-//
-//  @Before
-//  public void setUp() throws Exception {
-//    esNode = new ESNode(fileSystem, settings)
-//  }
-////
-////  private RuleIndex getRuleIndex(){
-////    LocalNonBlockingWorkQueue queue = new LocalNonBlockingWorkQueue();
-////    Settings settings = new Settings();
-////    settings.setProperty("sonar.log.profilingLevel", "BASIC");
-////    RuleIndex rindex =  new RuleIndex(queue, null, new Profiling(settings));
-////    return rindex;
-////  }
-////
-////  @After
-////  public void tearDown() {
-////    if (node != null && !node.isClosed()) {
-////      node.close();
-////    }
-////  }
-////
-////  @Test
-////  public void test_ruleIndex_conencts_to_es() {
-////
-////    RuleIndex ruleIndex = getRuleIndex();
-////    ruleIndex.connect();
-////
-////    assertThat(node.client().admin().cluster().prepareClusterStats().get().getNodesStats().getCounts().getTotal())
-////      .isEqualTo(ruleIndex.getNodesStats().getCounts().getTotal());
-////
-////    ruleIndex.stop();
-////
-////  }
-//}
index 6c371ac2e88dfdad70937a2cc1dd9b019398099b..f9c7f499ea2467b7e7f357abc98049afd88716d4 100644 (file)
  */
 package org.sonar.server.rule2;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
+import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
 import org.sonar.api.utils.DateUtils;
 import org.sonar.check.Cardinality;
-import org.sonar.core.qualityprofile.db.ActiveRuleDao;
-import org.sonar.core.qualityprofile.db.ActiveRuleDto;
 import org.sonar.core.rule.RuleDto;
 import org.sonar.server.search.Hit;
 import org.sonar.server.tester.ServerTester;
 
-import java.util.Date;
-
 import static org.fest.assertions.Assertions.assertThat;
 
-@Ignore
 public class RuleMediumTest {
 
   @Rule
-  public ServerTester tester = new ServerTester()
-    // .setProperty("sonar.log.profilingLevel", "FULL")
-    .setProperty("sonar.es.http.port", "8888");
+  public ServerTester tester = new ServerTester();
 
-  private RuleDto dto;
-  private ActiveRuleDto adto;
+  @Test
+  public void persist_and_index_new_rule() {
+    // insert db
+    RuleKey ruleKey = RuleKey.of("javascript", "S001");
+    RuleDao dao = tester.get(RuleDao.class);
+    dao.insert(newRuleDto(ruleKey));
 
-  @Before
-  public void setup() {
-    dto = getRuleDto(1);
-    adto = getActiveRuleDto(dto);
-  }
+    // verify that rule is persisted in db
+    RuleDto persistedDto = dao.selectByKey(ruleKey);
+    assertThat(persistedDto).isNotNull();
+    assertThat(persistedDto.getId()).isGreaterThanOrEqualTo(0);
+    assertThat(persistedDto.getRuleKey()).isEqualTo(ruleKey.rule());
+    assertThat(persistedDto.getLanguage()).isEqualTo("js");
 
-  @After
-  public void teardown() {
-    tester.stop();
+    // verify that rule is indexed in es
+    RuleIndex index = tester.get(RuleIndex.class);
+    Hit hit = index.getByKey(ruleKey);
+    assertThat(hit).isNotNull();
+    assertThat(hit.getFieldAsString(RuleNormalizer.RuleField.REPOSITORY.key())).isEqualTo(ruleKey.repository());
+    assertThat(hit.getFieldAsString(RuleNormalizer.RuleField.KEY.key())).isEqualTo(ruleKey.rule());
+    assertThat(hit.getFieldAsString(RuleNormalizer.RuleField.LANGUAGE.key())).isEqualTo("js");
+    assertThat(hit.getFieldAsString(RuleNormalizer.RuleField.NAME.key())).isEqualTo("Rule S001");
+    assertThat(hit.getFieldAsString(RuleNormalizer.RuleField.DESCRIPTION.key())).isEqualTo("Description S001");
+    assertThat(hit.getFieldAsString(RuleNormalizer.RuleField.STATUS.key())).isEqualTo(RuleStatus.READY.toString());
   }
 
-  private ActiveRuleDto getActiveRuleDto(RuleDto dto) {
-    return new ActiveRuleDto()
-      .setId(1)
-      .setNoteCreatedAt(new Date())
-      .setNoteData("Note data, and some more note and here too.")
-      .setRuleId(dto.getId())
-      .setProfileId(1)
-      .setParentId(0)
-      .setSeverity(3);
-  }
 
-  private RuleDto getRuleDto(int id) {
+  private RuleDto newRuleDto(RuleKey ruleKey) {
     return new RuleDto()
-      // .setId(id)
-      .setRuleKey("NewRuleKey=" + id)
-      .setRepositoryKey("plugin")
-      .setName("new name")
-      .setDescription("new description")
-      .setStatus(org.sonar.api.rules.Rule.STATUS_DEPRECATED)
-      .setConfigKey("NewConfigKey")
+      .setRuleKey(ruleKey.rule())
+      .setRepositoryKey(ruleKey.repository())
+      .setName("Rule " + ruleKey.rule())
+      .setDescription("Description " + ruleKey.rule())
+      .setStatus(RuleStatus.READY.toString())
+      .setConfigKey("InternalKey" + ruleKey.rule())
       .setSeverity(Severity.INFO)
-      .setCardinality(Cardinality.MULTIPLE)
-      .setLanguage("dart")
-      .setParentId(3)
-      .setSubCharacteristicId(100)
-      .setDefaultSubCharacteristicId(101)
+      .setCardinality(Cardinality.SINGLE)
+      .setLanguage("js")
       .setRemediationFunction("linear")
       .setDefaultRemediationFunction("linear_offset")
       .setRemediationCoefficient("1h")
       .setDefaultRemediationCoefficient("5d")
       .setRemediationOffset("5min")
       .setDefaultRemediationOffset("10h")
-      .setEffortToFixDescription("squid.S115.effortToFix")
+      .setEffortToFixDescription(ruleKey.repository() + "." + ruleKey.rule() + ".effortToFix")
       .setCreatedAt(DateUtils.parseDate("2013-12-16"))
       .setUpdatedAt(DateUtils.parseDate("2013-12-17"));
   }
-
-  @Test
-  public void test_dao_queue_es_search_loop() {
-
-    RuleDao dao = tester.get(RuleDao.class);
-    ActiveRuleDao adao = tester.get(ActiveRuleDao.class);
-    RuleIndex index = tester.get(RuleIndex.class);
-
-    dao.insert(dto);
-
-    Hit hit = index.getByKey(dto.getKey());
-    assertThat(hit.getFields().get(RuleNormalizer.RuleField.KEY.key())).isEqualTo(dto.getRuleKey().toString());
-  }
-
-  @Test
-  @Ignore
-  public void test_ruleservice_getByKey() {
-    RuleService service = tester.get(RuleService.class);
-    RuleDao dao = tester.get(RuleDao.class);
-
-    dao.insert(dto);
-
-    org.sonar.server.rule2.Rule rule = service.getByKey(dto.getKey());
-
-    assertThat(rule.key()).isEqualTo(dto.getKey());
-
-  }
 }