]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5007 fix non-deterministic test
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 19 May 2014 07:36:50 +0000 (09:36 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 19 May 2014 07:36:50 +0000 (09:36 +0200)
sonar-server/src/main/java/org/sonar/server/rule2/index/RuleIndex.java
sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java
sonar-server/src/test/resources/org/sonar/server/rule2/ws/RulesWebServiceTest/search_2_rules.json

index f6f9cfa4537a5a5b4e1422a9db9ac47db7412969..3cb41566c71340b9ee7aa472b4c08434f14eeb8d 100644 (file)
@@ -210,6 +210,8 @@ public class RuleIndex extends BaseIndex<Rule, RuleDto, RuleKey> {
       esSearch.addSort(SortBuilders.scoreSort());
     } else {
       esSearch.addSort(RuleNormalizer.RuleField.UPDATED_AT.key(), SortOrder.DESC);
+      // deterministic sort when exactly the same updated_at (same millisecond)
+      esSearch.addSort(RuleNormalizer.RuleField.KEY.key(), SortOrder.ASC);
     }
 
     /* integrate Option's Pagination */
index 66d9733aae9ec93c697a133d92f09c8405f410ad..dda30b9df463e075ca53965849393993c7c91e2a 100644 (file)
  */
 package org.sonar.server.rule2.ws;
 
+import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.io.Resources;
+import org.apache.commons.io.IOUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
+import org.skyscreamer.jsonassert.JSONAssert;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
@@ -114,7 +118,10 @@ public class RulesWebServiceTest {
     WsTester.TestRequest request = wsTester.newGetRequest("api/rules2", "search");
     WsTester.Result result = request.execute();
 
-    result.assertJson(this.getClass(),"search_2_rules.json");
+    String json = result.outputAsString();
+    String expectedJson = Resources.toString(getClass().getResource("RulesWebServiceTest/search_2_rules.json"), Charsets.UTF_8);
+
+    JSONAssert.assertEquals(expectedJson, json, false);
   }
 
 
index bae661386c0352d4a081c80663dce4bb4a4a651c..873652cb513e194326114d5369c79d1979c5dde8 100644 (file)
@@ -1,4 +1,22 @@
 {"total": 2, "p": 1, "ps": 25, "rules": [
+  {
+    "key": "javascript:S001",
+    "repo": "javascript",
+    "lang": "js",
+    "name": "Rule S001",
+    "htmlDesc": "Description S001",
+    "status": "READY",
+    "template": false,
+    "internalKey": "InternalKeyS001",
+    "severity": "INFO",
+    "tags": [],
+    "sysTags": [],
+    "debtRemediationFunctionType": "LINEAR",
+    "debtRemediationFunctionCoefficient": "1h",
+    "debtRemediationFunctionOffset": "5min",
+    "params": [],
+    "actives": []
+  },
     {
         "key": "javascript:S002",
         "repo": "javascript",
         "debtRemediationFunctionOffset": "5min",
         "params": [],
         "actives": []
-    },
-    {
-        "key": "javascript:S001",
-        "repo": "javascript",
-        "lang": "js",
-        "name": "Rule S001",
-        "htmlDesc": "Description S001",
-        "status": "READY",
-        "template": false,
-        "internalKey": "InternalKeyS001",
-        "severity": "INFO",
-        "tags": [],
-        "sysTags": [],
-        "debtRemediationFunctionType": "LINEAR",
-        "debtRemediationFunctionCoefficient": "1h",
-        "debtRemediationFunctionOffset": "5min",
-        "params": [],
-        "actives": []
     }
 ]}