]> source.dussan.org Git - sonarqube.git/commitdiff
Improve assertions in server benchmarks
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 4 Mar 2015 08:51:33 +0000 (09:51 +0100)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 4 Mar 2015 08:52:21 +0000 (09:52 +0100)
server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/Benchmark.java
server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/IssueIndexBenchmarkTest.java
server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/SourceDbBenchmarkTest.java
server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/SourceIndexBenchmarkTest.java

index 05ddb828634cfa38e0dd5f03cc85519d0c6ca853..a6003b576b0684052e5c52f63393750662d2bc51 100644 (file)
@@ -40,9 +40,14 @@ public class Benchmark extends ErrorCollector {
     }
   }
 
-  public void expectLessThanOrEqualTo(String label, long val, long max) {
+  public void expectAround(String label, long val, long expect, double marginPercents) {
     if (ENABLED) {
-      checkThat(label, val, Matchers.lessThan(max));
+      if (marginPercents > 0.2) {
+        throw new IllegalArgumentException("Error margin must be less than 0.2 (20%). Has: " + marginPercents);
+      }
+      long min = (long) (expect * (1.0 - marginPercents));
+      long max = (long) (expect * (1.0 + marginPercents));
+      checkThat(label, val, Matchers.allOf(Matchers.greaterThan(min), Matchers.lessThan(max)));
     }
   }
 
index 4d2a9de9f5bf3efcef9a523a659a721cd1a44d9a..c10ee9983ef28660cc65d24b31e4ffe2cc3b66c6 100644 (file)
@@ -112,7 +112,7 @@ public class IssueIndexBenchmarkTest {
     long period = System.currentTimeMillis() - start;
     long throughputPerSecond = 1000 * issues.count.get() / period;
     LOGGER.info(String.format("%d issues indexed in %d ms (%d docs/second)", issues.count.get(), period, throughputPerSecond));
-    benchmark.expectBetween("Throughput to index issues", throughputPerSecond, 3000, 3400);
+    benchmark.expectAround("Throughput to index issues", throughputPerSecond, 3000, 0.04);
 
     // be sure that physical files do not evolve during estimation of size
     tester.get(EsClient.class).prepareOptimize("issues").get();
index 3d6dbf326450ef97cd4eb9cfdd99a68cb73d1729..34dbdf0e3ccccc49c51f47d9e36e592c8fe88a48 100644 (file)
@@ -53,6 +53,9 @@ public class SourceDbBenchmarkTest {
   @Rule
   public DbTester dbTester = new DbTester();
 
+  @Rule
+  public Benchmark benchmark = new Benchmark();
+
   @Test
   public void benchmark() throws Exception {
     prepareTable();
@@ -81,6 +84,7 @@ public class SourceDbBenchmarkTest {
       long period = end - start;
       long throughputPerSecond = 1000L * counter.get() / period;
       LOGGER.info(String.format("%d FILE_SOURCES rows scrolled in %d ms (%d rows/second)", counter.get(), period, throughputPerSecond));
+      benchmark.expectAround("Throughput to scroll FILE_SOURCES", throughputPerSecond, 120, 0.04);
 
     } finally {
       DbUtils.closeQuietly(connection);
index 7ed033e45a9ed8c77618aa48bd6d2e67320dea6c..6480c4ef0dfc5b27f00b50e97142f502bf2a6cb2 100644 (file)
@@ -88,7 +88,7 @@ public class SourceIndexBenchmarkTest {
     long nbLines = files.count.get() * LINES_PER_FILE;
     long throughputPerSecond = 1000L * nbLines / period;
     LOGGER.info(String.format("%d lines indexed in %d ms (%d docs/second)", nbLines, period, throughputPerSecond));
-    benchmark.expectBetween("Throughput to index source lines", throughputPerSecond, 7500, 8000);
+    benchmark.expectAround("Throughput to index source lines", throughputPerSecond, 7800, 0.04);
 
     // be sure that physical files do not evolve during estimation of size
     tester.get(EsClient.class).prepareOptimize(SourceLineIndexDefinition.INDEX).get();