From: Simon Brandhof Date: Wed, 30 Apr 2014 13:47:33 +0000 (+0200) Subject: Cleanup org.sonar.server.rule2 X-Git-Tag: 4.4-RC1~1309 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3c37551b26940cce769b1de4139bfd131d9d5f97;p=sonarqube.git Cleanup org.sonar.server.rule2 --- diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleNormalizer.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleNormalizer.java index c0625daffe4..e11d98879a0 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleNormalizer.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleNormalizer.java @@ -19,17 +19,14 @@ */ 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 { 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); diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java b/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java index 758623a481c..cecb47d4631 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java @@ -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 diff --git a/sonar-server/src/main/java/org/sonar/server/search/Hit.java b/sonar-server/src/main/java/org/sonar/server/search/Hit.java index ddc3cc8ed56..ea373a4ec09 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/Hit.java +++ b/sonar-server/src/main/java/org/sonar/server/search/Hit.java @@ -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 { private Integer rank; - public Hit(Integer rank){ + public Hit(Integer rank) { this.fields = new HashMap(); this.rank = rank; } - public Map getFields(){ + public Map 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 index 1224ad021c5..00000000000 --- a/sonar-server/src/test/java/org/sonar/server/rule2/RuleIndexTest.java +++ /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(); -//// -//// } -//} diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java index 6c371ac2e88..f9c7f499ea2 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java @@ -19,107 +19,70 @@ */ 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()); - - } }