aboutsummaryrefslogtreecommitdiffstats
path: root/appc-metric
diff options
context:
space:
mode:
authorJoss Armstrong <joss.armstrong@ericsson.com>2019-02-25 10:32:13 +0000
committerTakamune Cho <takamune.cho@att.com>2019-02-26 15:33:58 +0000
commitb0b57534dd4e69913753b9acf1c3a495b7738f6a (patch)
tree199ce34fd017a217588986d69e1e3152fe54ae61 /appc-metric
parent423a91b62f381167bf7852c4ac987b96ba06f35c (diff)
Fix for casting/subclassing in MetricRegistry
Put in code to avoid cast exceptions from this class and updated tests Issue-ID: APPC-1480 Change-Id: I8b54d93e52eb523f08d13e874b4d18d05feede6b Signed-off-by: Joss Armstrong <joss.armstrong@ericsson.com>
Diffstat (limited to 'appc-metric')
-rw-r--r--appc-metric/appc-metric-bundle/src/main/java/org/onap/appc/metricservice/impl/MetricRegistryImpl.java19
-rw-r--r--appc-metric/appc-metric-bundle/src/test/java/org/onap/appc/metricservice/impl/MetricRegistryImplTest.java32
2 files changed, 40 insertions, 11 deletions
diff --git a/appc-metric/appc-metric-bundle/src/main/java/org/onap/appc/metricservice/impl/MetricRegistryImpl.java b/appc-metric/appc-metric-bundle/src/main/java/org/onap/appc/metricservice/impl/MetricRegistryImpl.java
index 48d1c6fac..d371fed43 100644
--- a/appc-metric/appc-metric-bundle/src/main/java/org/onap/appc/metricservice/impl/MetricRegistryImpl.java
+++ b/appc-metric/appc-metric-bundle/src/main/java/org/onap/appc/metricservice/impl/MetricRegistryImpl.java
@@ -25,9 +25,10 @@
package org.onap.appc.metricservice.impl;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-
import org.onap.appc.metricservice.MetricRegistry;
import org.onap.appc.metricservice.metric.Counter;
import org.onap.appc.metricservice.metric.Metric;
@@ -40,6 +41,8 @@ import org.onap.appc.metricservice.policy.impl.PolicyBuilderFactoryImpl;
public class MetricRegistryImpl implements MetricRegistry {
private String name;
+ // Map can contain Counters, DispatchingFunctionMetrics and DMaapRequestCounterMetrics
+ // and there are methods to retrieve only the 'Counter' types
private Map<String, Metric> concurrentMetricMap = new ConcurrentHashMap<>();
public MetricRegistryImpl(String name) {
@@ -68,12 +71,22 @@ public class MetricRegistryImpl implements MetricRegistry {
@Override
public Counter counter(String value) {
- return (Counter)concurrentMetricMap.get(value);
+ Metric metric = concurrentMetricMap.get(value);
+ if (metric instanceof Counter) {
+ return (Counter)metric;
+ }
+ else return null;
}
@Override
public Counter[] counters() {
- return (Counter[])concurrentMetricMap.values().toArray();
+ List<Counter> counterList = new ArrayList<>();
+ for (Metric m: concurrentMetricMap.values()) {
+ if (m instanceof Counter) {
+ counterList.add((Counter) m);
+ }
+ }
+ return counterList.toArray(new Counter[counterList.size()]);
}
@Override
diff --git a/appc-metric/appc-metric-bundle/src/test/java/org/onap/appc/metricservice/impl/MetricRegistryImplTest.java b/appc-metric/appc-metric-bundle/src/test/java/org/onap/appc/metricservice/impl/MetricRegistryImplTest.java
index 09e5ba954..0bde7f7df 100644
--- a/appc-metric/appc-metric-bundle/src/test/java/org/onap/appc/metricservice/impl/MetricRegistryImplTest.java
+++ b/appc-metric/appc-metric-bundle/src/test/java/org/onap/appc/metricservice/impl/MetricRegistryImplTest.java
@@ -29,30 +29,46 @@ import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.onap.appc.metricservice.metric.Counter;
-import org.onap.appc.metricservice.metric.Metric;
+import org.onap.appc.metricservice.metric.MetricType;
import org.onap.appc.metricservice.metric.impl.DefaultPrimitiveCounter;
+import org.onap.appc.metricservice.metric.impl.DispatchingFuntionMetricImpl;
public class MetricRegistryImplTest {
- private static final String NAME = "NAME";
+ private static final String METRIC_NAME = "METRIC_NAME";
+ private static final String COUNTER_NAME = "COUNTER_NAME";
private MetricRegistryImpl registry;
+ private DispatchingFuntionMetricImpl metric;
+ private DefaultPrimitiveCounter counter;
+
@Before
public void setup() {
registry = new MetricRegistryImpl(null);
+ counter = new DefaultPrimitiveCounter(COUNTER_NAME, null);
+ metric = new DispatchingFuntionMetricImpl(METRIC_NAME, MetricType.COUNTER, 0, 0);
+
}
@Test
public void testRegister() {
- Metric metric = new DefaultPrimitiveCounter(NAME, null);
- assertNull(registry.counter(NAME));
+ assertEquals(0, registry.counters().length);
+ assertEquals(0, registry.metrics().length);
+ assertNull(registry.counter(COUNTER_NAME));
+ assertTrue(registry.register(counter));
+ assertFalse(registry.register(counter));
+ assertTrue(registry.counter(COUNTER_NAME) instanceof Counter);
+ assertSame(counter, registry.counter(COUNTER_NAME));
assertTrue(registry.register(metric));
- assertFalse(registry.register(metric));
- assertTrue(registry.counter(NAME) instanceof Counter);
- assertSame(metric, registry.metric(NAME));
+ assertSame(metric, registry.metric(METRIC_NAME));
+ assertEquals(1, registry.counters().length);
+ assertEquals(2, registry.metrics().length);
}
@Test
- public void testCounter() {
+ public void testDispose() {
+ registry.register(metric);
+ registry.register(counter);
+ assertEquals(2, registry.metrics().length);
registry.dispose();
assertEquals(0, registry.metrics().length);
}