This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit de85ed1c5386e616b61648c6c4c8aec6ac223da3
Author: Tran Tien Duc <[email protected]>
AuthorDate: Thu Dec 12 14:58:55 2019 +0700

    JAMES-3007 Improve RecordingMetricFactory
    
    to satisfy the contract
---
 .../apache/james/metrics/tests/RecordingMetric.java   | 19 ++++++++++---------
 .../james/metrics/tests/RecordingMetricFactory.java   | 13 +++++++++----
 .../metrics/tests/RecordingMetricFactoryTest.java     |  6 ------
 .../james/metrics/tests/RecordingMetricTest.java      |  6 +-----
 .../james/queue/api/MailQueueMetricContract.java      |  6 +++++-
 5 files changed, 25 insertions(+), 25 deletions(-)

diff --git 
a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java
 
b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java
index 78baea4..e004e86 100644
--- 
a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java
+++ 
b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java
@@ -20,37 +20,38 @@
 package org.apache.james.metrics.tests;
 
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Consumer;
 
 import org.apache.james.metrics.api.Metric;
 
 public class RecordingMetric implements Metric {
     private final AtomicInteger value;
-    private final Consumer<Integer> publishCallback;
 
-    public RecordingMetric(Consumer<Integer> publishCallback) {
-        this.value = new AtomicInteger();
-        this.publishCallback = publishCallback;
+    RecordingMetric() {
+        this(new AtomicInteger());
+    }
+
+    RecordingMetric(AtomicInteger value) {
+        this.value = value;
     }
 
     @Override
     public void increment() {
-        publishCallback.accept(value.incrementAndGet());
+        value.incrementAndGet();
     }
 
     @Override
     public void decrement() {
-        publishCallback.accept(value.decrementAndGet());
+        value.decrementAndGet();
     }
 
     @Override
     public void add(int i) {
-        publishCallback.accept(value.addAndGet(i));
+        value.addAndGet(i);
     }
 
     @Override
     public void remove(int i) {
-        publishCallback.accept(value.addAndGet(-1 * i));
+        value.addAndGet(-1 * i);
     }
 
     @Override
diff --git 
a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
 
b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
index f18b9a6..24438d5 100644
--- 
a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
+++ 
b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
@@ -23,6 +23,7 @@ import java.time.Duration;
 import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.james.metrics.api.Metric;
 import org.apache.james.metrics.api.MetricFactory;
@@ -35,11 +36,15 @@ import com.google.common.collect.Multimaps;
 
 public class RecordingMetricFactory implements MetricFactory {
     private final Multimap<String, Duration> executionTimes = 
Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
-    private final ConcurrentHashMap<String, Integer> counters = new 
ConcurrentHashMap<>();
+    private final ConcurrentHashMap<String, AtomicInteger> counters = new 
ConcurrentHashMap<>();
 
     @Override
     public Metric generate(String name) {
-        return new RecordingMetric(executionValue -> counters.put(name, 
executionValue));
+        return new RecordingMetric(atomicCounterFor(name));
+    }
+
+    private AtomicInteger atomicCounterFor(String name) {
+        return counters.computeIfAbsent(name, currentName -> new 
AtomicInteger());
     }
 
     @Override
@@ -64,12 +69,12 @@ public class RecordingMetricFactory implements 
MetricFactory {
     }
 
     public int countFor(String name) {
-        return counters.getOrDefault(name, 0);
+        return atomicCounterFor(name).get();
     }
 
     public Map<String, Integer> countForPrefixName(String prefixName) {
         return counters.entrySet().stream()
             .filter(entry -> entry.getKey().startsWith(prefixName))
-            .collect(Guavate.toImmutableMap(Map.Entry::getKey, 
Map.Entry::getValue));
+            .collect(Guavate.toImmutableMap(Map.Entry::getKey, e -> 
e.getValue().get()));
     }
 }
diff --git 
a/metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricFactoryTest.java
 
b/metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricFactoryTest.java
index 066d33b..eb39585 100644
--- 
a/metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricFactoryTest.java
+++ 
b/metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricFactoryTest.java
@@ -30,7 +30,6 @@ import org.apache.james.metrics.api.MetricFactoryContract;
 import org.apache.james.metrics.api.TimeMetric;
 import org.apache.james.util.concurrency.ConcurrentTestRunner;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 class RecordingMetricFactoryTest implements MetricFactoryContract {
@@ -52,11 +51,6 @@ class RecordingMetricFactoryTest implements 
MetricFactoryContract {
         return testee;
     }
 
-    @Disabled("Current RecordingMetricFactory doesn't support this")
-    @Override
-    public void generateWithSameNameShouldReturnMetricsWithCorrelatedCounter() 
{
-    }
-
     @Test
     void executionTimesForATimeMetricShouldBeStoreMultipleTime() throws 
InterruptedException {
         TimeMetric timeMetric1 = testee.timer(TIME_METRIC_NAME);
diff --git 
a/metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricTest.java
 
b/metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricTest.java
index 8b45440..682fa31 100644
--- 
a/metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricTest.java
+++ 
b/metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricTest.java
@@ -19,21 +19,17 @@
 
 package org.apache.james.metrics.tests;
 
-import java.util.function.Consumer;
-
 import org.apache.james.metrics.api.Metric;
 import org.apache.james.metrics.api.MetricContract;
 import org.junit.jupiter.api.BeforeEach;
 
 class RecordingMetricTest implements MetricContract {
 
-    private static final Consumer<Integer> NO_CALLBACK = counterValue -> {};
-
     private RecordingMetric testee;
 
     @BeforeEach
     void setUp() {
-        testee = new RecordingMetric(NO_CALLBACK);
+        testee = new RecordingMetric();
     }
 
     @Override
diff --git 
a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueMetricContract.java
 
b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueMetricContract.java
index 96bc150..aa210ea 100644
--- 
a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueMetricContract.java
+++ 
b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueMetricContract.java
@@ -104,7 +104,11 @@ public interface MailQueueMetricContract extends 
MailQueueContract {
                 assertThat(values.values()).element(0).isEqualTo(2);
             });
         
assertThat(testSystem.getMetricFactory().countForPrefixName(DEQUEUED_METRIC_NAME_PREFIX))
-            .hasSize(0);
+            .hasSize(1)
+            .satisfies(values -> {
+                assertThat(values.values()).hasSize(1);
+                assertThat(values.values()).element(0).isEqualTo(0);
+            });
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to