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 f15ddd75a7d2d033bf1bd59ccc38af40bab52c9f Author: Tran Tien Duc <[email protected]> AuthorDate: Thu Dec 12 14:32:39 2019 +0700 JAMES-3007 MetricFactory test contract --- .../james/metrics/api/MetricFactoryContract.java | 58 ++++++++++++++++++++++ .../dropwizard/DropWizardMetricFactoryTest.java | 41 +++++++++++++++ .../metrics/logger/DefaultMetricFactoryTest.java | 45 +++++++++++++++++ .../metrics/tests/RecordingMetricFactoryTest.java | 15 +++++- 4 files changed, 158 insertions(+), 1 deletion(-) diff --git a/metrics/metrics-api/src/test/java/org/apache/james/metrics/api/MetricFactoryContract.java b/metrics/metrics-api/src/test/java/org/apache/james/metrics/api/MetricFactoryContract.java new file mode 100644 index 0000000..5db31fa --- /dev/null +++ b/metrics/metrics-api/src/test/java/org/apache/james/metrics/api/MetricFactoryContract.java @@ -0,0 +1,58 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.metrics.api; + +import org.assertj.core.api.SoftAssertions; +import org.junit.jupiter.api.Test; + +public interface MetricFactoryContract { + + String NAME_1 = "name 1"; + String NAME_2 = "name 2"; + + MetricFactory testee(); + + @Test + default void generateWithSameNameShouldReturnMetricsWithCorrelatedCounter() { + Metric metric1 = testee().generate(NAME_1); + Metric anotherMetric1 = testee().generate(NAME_1); + + metric1.add(47); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(metric1.getCount()).isEqualTo(47); + softly.assertThat(anotherMetric1.getCount()).isEqualTo(47); + }); + } + + @Test + default void generateWithDifferentNamesShouldReturnIndependentMetrics() { + Metric metric1 = testee().generate(NAME_1); + Metric metric2 = testee().generate(NAME_2); + + metric1.increment(); + metric2.decrement(); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(metric1.getCount()).isEqualTo(1); + softly.assertThat(metric2.getCount()).isEqualTo(-1); + }); + } +} \ No newline at end of file diff --git a/metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactoryTest.java b/metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactoryTest.java new file mode 100644 index 0000000..75aada0 --- /dev/null +++ b/metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactoryTest.java @@ -0,0 +1,41 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.metrics.dropwizard; + +import org.apache.james.metrics.api.MetricFactory; +import org.apache.james.metrics.api.MetricFactoryContract; +import org.junit.jupiter.api.BeforeEach; + +import com.codahale.metrics.MetricRegistry; + +class DropWizardMetricFactoryTest implements MetricFactoryContract { + + private DropWizardMetricFactory testee; + + @BeforeEach + void setUp() { + testee = new DropWizardMetricFactory(new MetricRegistry()); + } + + @Override + public MetricFactory testee() { + return testee; + } +} \ No newline at end of file diff --git a/metrics/metrics-logger/src/test/java/org/apache/james/metrics/logger/DefaultMetricFactoryTest.java b/metrics/metrics-logger/src/test/java/org/apache/james/metrics/logger/DefaultMetricFactoryTest.java new file mode 100644 index 0000000..25359b6 --- /dev/null +++ b/metrics/metrics-logger/src/test/java/org/apache/james/metrics/logger/DefaultMetricFactoryTest.java @@ -0,0 +1,45 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.metrics.logger; + +import org.apache.james.metrics.api.MetricFactory; +import org.apache.james.metrics.api.MetricFactoryContract; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; + +class DefaultMetricFactoryTest implements MetricFactoryContract { + + private DefaultMetricFactory testee; + + @Disabled("JAMES-3007 Current DefaultMetricFactory doesn't support this") + @Override + public void generateWithSameNameShouldReturnMetricsWithCorrelatedCounter() { + } + + @BeforeEach + void setUp() { + testee = new DefaultMetricFactory(); + } + + @Override + public MetricFactory testee() { + return testee; + } +} \ No newline at end of file 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 9365774..066d33b 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 @@ -25,12 +25,15 @@ import java.time.Duration; import java.util.concurrent.atomic.AtomicInteger; import org.apache.james.metrics.api.Metric; +import org.apache.james.metrics.api.MetricFactory; +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 { +class RecordingMetricFactoryTest implements MetricFactoryContract { private static final String TIME_METRIC_NAME = "timerMetric"; private static final String METRIC_NAME = "metric"; @@ -44,6 +47,16 @@ class RecordingMetricFactoryTest { testee = new RecordingMetricFactory(); } + @Override + public MetricFactory testee() { + 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); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
