Convert mdsal-eos-dom-simple to a JPMS module 78/93678/4
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 8 Nov 2020 09:55:26 +0000 (10:55 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 8 Nov 2020 11:44:53 +0000 (12:44 +0100)
This is a simple implementation of the DOMEntityOwnershipService
contract. Turn it into a JPMS module, removing the internal package
visibility and exposing DI class from a separate package.

Since we are in the area, also clean up UT, eliminating unneeded
mocking.

JIRA: MDSAL-638
Change-Id: Ifd0b0a6575e39b619868b251abfce6d2a2a340d5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
entityownership/mdsal-eos-dom-simple/pom.xml
entityownership/mdsal-eos-dom-simple/src/main/java/module-info.java [new file with mode: 0644]
entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java
entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/di/LocalDOMEntityOwnershipService.java [new file with mode: 0644]
entityownership/mdsal-eos-dom-simple/src/test/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipServiceTest.java

index b21d50c0452ddcdab56c5d12af91f1fd37f61ac4..35064cc411daae4e6794d2d8964a8dc5355f5d3e 100644 (file)
         <dependency>
             <groupId>org.kohsuke.metainf-services</groupId>
             <artifactId>metainf-services</artifactId>
-            <optional>true</optional>
         </dependency>
         <dependency>
-            <groupId>javax.inject</groupId>
+            <groupId>com.guicedee.services</groupId>
             <artifactId>javax.inject</artifactId>
             <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>osgi.cmpn</artifactId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/entityownership/mdsal-eos-dom-simple/src/main/java/module-info.java b/entityownership/mdsal-eos-dom-simple/src/main/java/module-info.java
new file mode 100644 (file)
index 0000000..6b0d7d8
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
+import org.opendaylight.mdsal.eos.dom.simple.SimpleDOMEntityOwnershipService;
+
+module org.opendaylight.mdsal.eos.dom.simple {
+    exports org.opendaylight.mdsal.eos.dom.simple.di;
+
+    requires org.opendaylight.yangtools.concepts;
+    requires org.opendaylight.mdsal.eos.dom.api;
+    requires org.slf4j;
+
+    provides DOMEntityOwnershipService with SimpleDOMEntityOwnershipService;
+
+    // Annotations
+    requires static com.github.spotbugs.annotations;
+    requires static org.eclipse.jdt.annotation;
+    requires static org.checkerframework.checker.qual;
+    requires static javax.inject;
+    requires static metainf.services;
+    requires static org.osgi.service.component.annotations;
+}
index f58b33136ade7172a29da05f8de713726611f278..8399c4898236f50719eb8d83b4dd3eb75de9f955 100644 (file)
@@ -23,7 +23,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
 import java.util.Optional;
 import java.util.UUID;
-import javax.inject.Singleton;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.kohsuke.MetaInfServices;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
@@ -41,16 +40,9 @@ import org.osgi.service.component.annotations.Component;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/**
- * Simple {@link DOMEntityOwnershipService} operating as an isolated island. It has no awareness of the world outside
- * of itself.
- *
- * @author Robert Varga
- */
 @MetaInfServices
-@Singleton
 @Component(immediate = true)
-public final class SimpleDOMEntityOwnershipService implements DOMEntityOwnershipService {
+public class SimpleDOMEntityOwnershipService implements DOMEntityOwnershipService {
     private static final Logger LOG = LoggerFactory.getLogger(SimpleDOMEntityOwnershipService.class);
 
     @GuardedBy("entities")
diff --git a/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/di/LocalDOMEntityOwnershipService.java b/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/di/LocalDOMEntityOwnershipService.java
new file mode 100644 (file)
index 0000000..95f7603
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.mdsal.eos.dom.simple.di;
+
+import com.google.common.annotations.Beta;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
+import org.opendaylight.mdsal.eos.dom.simple.SimpleDOMEntityOwnershipService;
+
+/**
+ * Simple {@link DOMEntityOwnershipService} operating as an isolated island. It has no awareness of the world outside
+ * of itself.
+ *
+ * @author Robert Varga
+ */
+@Beta
+@Singleton
+public class LocalDOMEntityOwnershipService extends SimpleDOMEntityOwnershipService {
+    @Inject
+    public LocalDOMEntityOwnershipService() {
+        // Exposed for DI
+    }
+}
index 0021f9866a43bdeb5ed70b61baa23e767d766aa8..c38ae6b95e9ab952ade8f9fe7ca17be184396b23 100644 (file)
@@ -16,13 +16,13 @@ import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
 
 import java.util.Optional;
 import java.util.UUID;
-import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
@@ -33,19 +33,15 @@ import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
 
+@RunWith(MockitoJUnitRunner.StrictStubs.class)
 public class SimpleDOMEntityOwnershipServiceTest {
-    private static final String FOO_TYPE = "foo";
-    private static final String BAR_TYPE = "bar";
+    public static final String FOO_TYPE = "foo";
+    public static final String BAR_TYPE = "bar";
 
-    private static final DOMEntity FOO_FOO_ENTITY = new DOMEntity(FOO_TYPE, "foo");
-    private static final DOMEntity FOO_BAR_ENTITY = new DOMEntity(FOO_TYPE, "bar");
+    public static final DOMEntity FOO_FOO_ENTITY = new DOMEntity(FOO_TYPE, "foo");
+    public static final DOMEntity FOO_BAR_ENTITY = new DOMEntity(FOO_TYPE, "bar");
 
-    private DOMEntityOwnershipService service;
-
-    @Before
-    public void setUp() {
-        service = new SimpleDOMEntityOwnershipService();
-    }
+    public final DOMEntityOwnershipService service = new SimpleDOMEntityOwnershipService();
 
     @Test
     public void testNonExistingEntity() {
@@ -88,9 +84,7 @@ public class SimpleDOMEntityOwnershipServiceTest {
 
         // Mismatched type, not triggered
         final DOMEntityOwnershipListener barListener = mock(DOMEntityOwnershipListener.class);
-        doNothing().when(barListener).ownershipChanged(any(DOMEntityOwnershipChange.class));
         final DOMEntityOwnershipListenerRegistration barReg = service.registerListener(BAR_TYPE, barListener);
-        verifyZeroInteractions(barListener);
 
         // Matching type should be triggered
         final DOMEntityOwnershipListener fooListener = mock(DOMEntityOwnershipListener.class);
@@ -107,7 +101,6 @@ public class SimpleDOMEntityOwnershipServiceTest {
         reset(fooListener);
         doNothing().when(fooListener).ownershipChanged(any(DOMEntityOwnershipChange.class));
         entityReg.close();
-        verifyZeroInteractions(barListener);
         verify(fooListener).ownershipChanged(fooCaptor.capture());
         fooChange = fooCaptor.getValue();
         assertEquals(FOO_FOO_ENTITY, fooChange.getEntity());