import org.sonar.server.rule2.RuleNormalizer.RuleField;
import javax.annotation.CheckForNull;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public RuleKey key() {
String repo = (String) fields.get(RuleField.REPOSITORY.key());
String key = (String) fields.get(RuleField.KEY.key());
- if(repo == null || key == null
- || repo.isEmpty() || key.isEmpty()){
+ if (repo == null || key == null
+ || repo.isEmpty() || key.isEmpty()) {
throw new IllegalStateException("Missing values for RuleKey in RuleDoc");
} else {
return RuleKey.of(repo, key);
@Override
@CheckForNull
public Date createdAt() {
- return (Date) fields.get(RuleField.CREATED_AT.key());
+ SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
+ try {
+ return sdf.parse((String) fields.get(RuleField.CREATED_AT.key()));
+ } catch (ParseException e) {
+ throw new IllegalStateException("Cannot parse date", e);
+ }
}
@Override
@CheckForNull
public Date updatedAt() {
- return (Date) fields.get(RuleField.UPDATED_AT.key());
+ SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
+ try {
+ return sdf.parse((String) fields.get(RuleField.UPDATED_AT.key()));
+ } catch (ParseException e) {
+ throw new IllegalStateException("Cannot parse date", e);
+ }
}
}
addMatchField(mapping, RuleField.SEVERITY.key(), "string");
addMatchField(mapping, RuleField.STATUS.key(), "string");
+ mapping.startObject(RuleField.CREATED_AT.key())
+ .field("type", "date")
+ .field("format", "date_time")
+ .endObject();
+
+ mapping.startObject(RuleField.UPDATED_AT.key())
+ .field("type", "date")
+ .field("format", "date_time")
+ .endObject();
+
mapping.startObject(RuleField.NAME.key())
.field("type", "multi_field")
.startObject("fields")
SearchResponse esResult = esSearch.get();
- Result<R> result = new Result<R>(esResult)
- .setTotal((int) esResult.getHits().totalHits())
- .setTime(esResult.getTookInMillis());
+ Result<R> result = new Result<R>(esResult);
- for (SearchHit hit : esResult.getHits()) {
- result.getHits().add(this.getSearchResult(hit));
+ if(esResult != null){
+ result
+ .setTotal((int) esResult.getHits().totalHits())
+ .setTime(esResult.getTookInMillis());
+
+ for (SearchHit hit : esResult.getHits()) {
+ result.getHits().add(this.getSearchResult(hit));
+ }
}
return result;
GetResponse result = getClient().prepareGet(this.getIndexName(),
this.indexDefinition.getIndexType(), this.getKeyValue(key))
.get();
- return this.getSearchResult(result.getSourceAsMap());
+ return this.getSearchResult(result.getSource());
}
private void insertDocument(UpdateRequest request, K key) throws Exception {
public class RuleServiceMediumTest {
@ClassRule
- public static ServerTester tester = new ServerTester();
+ public static ServerTester tester = new ServerTester()
+ .setProperty("sonar.es.http.port","9200");
MyBatis myBatis = tester.get(MyBatis.class);
RuleDao dao = tester.get(RuleDao.class);
}
@Test
- public void insert_in_db_and_index_in_es() {
+ public void insert_in_db_and_index_in_es() throws InterruptedException {
// insert db
RuleKey ruleKey = RuleKey.of("javascript", "S001");
dao.insert(newRuleDto(ruleKey), dbSession);
// verify that rule is indexed in es
index.refresh();
+
+// Thread.sleep(10000000);
+
+
Rule hit = index.getByKey(ruleKey);
assertThat(hit).isNotNull();
assertThat(hit.key().repository()).isEqualTo(ruleKey.repository());
assertThat(hit.name()).isEqualTo("Rule S001");
assertThat(hit.htmlDescription()).isEqualTo("Description S001");
assertThat(hit.status()).isEqualTo(RuleStatus.READY);
- //TODO fix date in ES
-// assertThat(hit.createdAt()).isNotNull();
-// assertThat(hit.updatedAt()).isNotNull();
+ assertThat(hit.createdAt()).isNotNull();
+ assertThat(hit.updatedAt()).isNotNull();
assertThat(hit.internalKey()).isEqualTo("InternalKeyS001");
assertThat(hit.severity()).isEqualTo("INFO");
assertThat(hit.template()).isFalse();