Merge pull request #5 from cschneider/SLING-8443
SLING-8443 - Simplify journal_available metric
* Improve test coverage
diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/shared/DistributionMetricsService.java b/src/main/java/org/apache/sling/distribution/journal/impl/shared/DistributionMetricsService.java
index 24474ac..a81630c 100644
--- a/src/main/java/org/apache/sling/distribution/journal/impl/shared/DistributionMetricsService.java
+++ b/src/main/java/org/apache/sling/distribution/journal/impl/shared/DistributionMetricsService.java
@@ -19,33 +19,25 @@
package org.apache.sling.distribution.journal.impl.shared;
import org.apache.sling.commons.metrics.Counter;
-import org.apache.sling.commons.metrics.Gauge;
import org.apache.sling.commons.metrics.Histogram;
import org.apache.sling.commons.metrics.Meter;
import org.apache.sling.commons.metrics.MetricsService;
import org.apache.sling.commons.metrics.Timer;
-import org.apache.sling.distribution.journal.JournalAvailable;
-import java.util.Dictionary;
-import java.util.Hashtable;
import java.util.concurrent.Callable;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
import static java.lang.String.format;
-import static org.osgi.service.component.annotations.ReferenceCardinality.OPTIONAL;
-import static org.osgi.service.component.annotations.ReferencePolicy.DYNAMIC;
@Component(service = DistributionMetricsService.class)
public class DistributionMetricsService {
- private static final String BASE_COMPONENT = "distribution.journal";
+
+ public static final String BASE_COMPONENT = "distribution.journal";
private static final String PUB_COMPONENT = BASE_COMPONENT + ".publisher";
@@ -88,12 +80,6 @@
private Counter queueCacheFetchCount;
- /** Marker service. Indicates journal availability */
- @Reference(cardinality = OPTIONAL, policy = DYNAMIC)
- private volatile JournalAvailable journalAvailable;
-
- private ServiceRegistration<Gauge> availableStatusReg;
-
@Activate
public void activate(BundleContext context) {
cleanupPackageRemovedCount = getCounter(getMetricName(PUB_COMPONENT, "cleanup_package_removed_count"));
@@ -114,18 +100,6 @@
sendStoredStatusDuration = getTimer(getMetricName(SUB_COMPONENT, "send_stored_status_duration"));
processQueueItemDuration = getTimer(getMetricName(SUB_COMPONENT, "process_queue_item_duration"));
packageDistributedDuration = getTimer(getMetricName(SUB_COMPONENT, "request_distributed_duration"));
- final Dictionary<String, String> regProps = new Hashtable<>();
- regProps.put(Constants.SERVICE_DESCRIPTION, "Journal Availablility Status");
- regProps.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
- regProps.put("name", getMetricName(BASE_COMPONENT, "journal_available"));
- availableStatusReg = context.registerService(Gauge.class, () -> journalAvailable != null, regProps);
- }
-
- @Deactivate
- public void deactivate() {
- if (availableStatusReg != null) {
- availableStatusReg.unregister();
- }
}
/**
diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableChecker.java b/src/main/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableChecker.java
index c0ad8f9..4fc2540 100644
--- a/src/main/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableChecker.java
+++ b/src/main/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableChecker.java
@@ -61,15 +61,6 @@
private volatile ServiceRegistration<JournalAvailable> reg;
- public JournalAvailableChecker(){
-
- }
-
- public JournalAvailableChecker(MessagingProvider provider, Topics topics) {
- this.provider = provider;
- this.topics = topics;
- }
-
@Activate
public void activate(BundleContext context) {
requireNonNull(provider);
diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableGauge.java b/src/main/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableGauge.java
new file mode 100644
index 0000000..deefbfd
--- /dev/null
+++ b/src/main/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableGauge.java
@@ -0,0 +1,39 @@
+/*
+ * 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.sling.distribution.journal.impl.shared;
+
+import org.apache.sling.commons.metrics.Gauge;
+import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+
+@Component(property = {
+ Constants.SERVICE_DESCRIPTION + "=Journal Availablility Status",
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+ "name=" + DistributionMetricsService.BASE_COMPONENT + ".journal_available"})
+public class JournalAvailableGauge implements Gauge<Boolean>{
+ @Reference
+ private JournalAvailableChecker journalChecker;
+
+ @Override
+ public Boolean getValue() {
+ return journalChecker.isAvailable();
+ }
+
+}
diff --git a/src/test/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableCheckerTest.java b/src/test/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableCheckerTest.java
index dc2ac70..3226b8e 100644
--- a/src/test/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableCheckerTest.java
+++ b/src/test/java/org/apache/sling/distribution/journal/impl/shared/JournalAvailableCheckerTest.java
@@ -18,6 +18,14 @@
*/
package org.apache.sling.distribution.journal.impl.shared;
+import static java.util.Collections.emptyMap;
+import static java.util.Collections.singletonMap;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.when;
+import static org.osgi.util.converter.Converters.standardConverter;
+
import java.util.Map;
import org.apache.sling.distribution.journal.JournalAvailable;
@@ -26,25 +34,21 @@
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
+import org.mockito.runners.MockitoJUnitRunner;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
-import static java.util.Collections.emptyMap;
-import static java.util.Collections.singletonMap;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
-import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.doThrow;
-import static org.osgi.util.converter.Converters.standardConverter;
-
+@RunWith(MockitoJUnitRunner.class)
public class JournalAvailableCheckerTest {
private static final String INVALID_TOPIC = "invalid_topic_name";
+ @InjectMocks
private JournalAvailableChecker checker;
@Spy
@@ -58,15 +62,13 @@
@Mock
private ServiceRegistration<JournalAvailable> reg;
-
+
@Before
public void before() throws Exception {
- MockitoAnnotations.initMocks(this);
doThrow(new MessagingException("topic is invalid"))
.when(provider).assertTopic(INVALID_TOPIC);
when(context.registerService(Mockito.eq(JournalAvailable.class), Mockito.any(JournalAvailable.class), Mockito.any()))
.thenReturn(reg);
- checker = new JournalAvailableChecker(provider, topics);
checker.activate(context);
}
diff --git a/src/test/java/org/apache/sling/distribution/journal/impl/shared/JournalAvalableGaugeTest.java b/src/test/java/org/apache/sling/distribution/journal/impl/shared/JournalAvalableGaugeTest.java
new file mode 100644
index 0000000..e3cfb61
--- /dev/null
+++ b/src/test/java/org/apache/sling/distribution/journal/impl/shared/JournalAvalableGaugeTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.sling.distribution.journal.impl.shared;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class JournalAvalableGaugeTest {
+
+ @Mock
+ JournalAvailableChecker journalChecker;
+
+ @InjectMocks
+ private JournalAvailableGauge journalAvailableGauge;
+
+ @Test
+ public void test() {
+ when(journalChecker.isAvailable()).thenReturn(true, false);
+ assertThat(journalAvailableGauge.getValue(), equalTo(true));
+ assertThat(journalAvailableGauge.getValue(), equalTo(false));
+ }
+
+}