Instantiate AaaCertRpcService from code 61/104261/7
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 5 Feb 2023 18:17:21 +0000 (19:17 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 6 Feb 2023 14:32:52 +0000 (15:32 +0100)
As a first step, eliminate duplicate examination of configuration
and instantiate/register AaaCertRpcServiceImpl from
CertificateManagerService, where we have the backing IAaaCertProvider
available.

JIRA: AAA-206
Change-Id: Id8fbdf1c3fafa9c2388d46f0374baec88dc53382
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
aaa-cert/src/main/java/org/opendaylight/aaa/cert/impl/AaaCertRpcServiceImpl.java
aaa-cert/src/main/java/org/opendaylight/aaa/cert/impl/CertificateManagerService.java
aaa-cert/src/main/resources/OSGI-INF/blueprint/aaaCert.xml
aaa-cert/src/test/java/org/opendaylight/aaa/cert/impl/AaaCertRpcServiceImplTest.java

index 317fb96c3741a8663e930c74705f232ac1bb618c..f02bfc76064c7e68eb7ebbbb3837cfc380ae7f10 100644 (file)
@@ -7,12 +7,12 @@
  */
 package org.opendaylight.aaa.cert.impl;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.base.Strings;
 import com.google.common.util.concurrent.ListenableFuture;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.aaa.cert.api.IAaaCertProvider;
-import org.opendaylight.aaa.encrypt.AAAEncryptionService;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.AaaCertServiceConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rpc.rev151215.AaaCertRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rpc.rev151215.GetNodeCertificateInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rpc.rev151215.GetNodeCertificateOutput;
@@ -43,34 +43,14 @@ import org.slf4j.LoggerFactory;
  * the shiro.ini file for more info.
  *
  * @author mserngawy
- *
  */
-public class AaaCertRpcServiceImpl implements AaaCertRpcService {
-
+final class AaaCertRpcServiceImpl implements AaaCertRpcService {
     private static final Logger LOG = LoggerFactory.getLogger(AaaCertRpcServiceImpl.class);
 
     private final IAaaCertProvider aaaCertProvider;
 
-    public AaaCertRpcServiceImpl(final AaaCertServiceConfig aaaCertServiceConfig, final DataBroker dataBroker,
-            final AAAEncryptionService encryptionSrv) {
-        if (aaaCertServiceConfig.getUseConfig()) {
-            if (aaaCertServiceConfig.getUseMdsal()) {
-                aaaCertProvider = new DefaultMdsalSslData(new AaaCertMdsalProvider(dataBroker, encryptionSrv),
-                        aaaCertServiceConfig.getBundleName(), aaaCertServiceConfig.getCtlKeystore(),
-                        aaaCertServiceConfig.getTrustKeystore());
-                LOG.debug("Using default mdsal SslData as aaaCertProvider");
-            } else {
-                aaaCertProvider = new AaaCertProvider(aaaCertServiceConfig.getCtlKeystore(),
-                        aaaCertServiceConfig.getTrustKeystore());
-                LOG.debug("Using default keystore files as aaaCertProvider");
-            }
-            LOG.info("AaaCert Rpc Service has been initialized");
-        } else {
-            aaaCertProvider = null;
-            LOG.info(
-                    "AaaCert Rpc Service has not been initialized,"
-                    + "change the initial aaa-cert-config data and restart Opendaylight");
-        }
+    AaaCertRpcServiceImpl(final @NonNull IAaaCertProvider aaaCertProvider) {
+        this.aaaCertProvider = requireNonNull(aaaCertProvider);
     }
 
     @Override
index b9e47dc7b250d217848453bfc96dac3b6a8c1021..d08f5691316f5f626854a60d26a05e2e97d3959f 100644 (file)
@@ -31,12 +31,15 @@ import org.opendaylight.aaa.cert.api.IAaaCertProvider;
 import org.opendaylight.aaa.cert.api.ICertificateManager;
 import org.opendaylight.aaa.encrypt.AAAEncryptionService;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.AaaCertServiceConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.AaaCertServiceConfigBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.CtlKeystore;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.CtlKeystoreBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.TrustKeystore;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.TrustKeystoreBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rpc.rev151215.AaaCertRpcService;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -49,20 +52,19 @@ import org.xml.sax.SAXException;
  * to which AaaCertProvider is used.
  *
  * @author mserngawy
- *
  */
-public class CertificateManagerService implements ICertificateManager {
-
+public class CertificateManagerService implements ICertificateManager, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(CertificateManagerService.class);
-
     private static final String DEFAULT_CONFIG_FILE_PATH = "etc" + File.separator + "opendaylight" + File.separator
             + "datastore" + File.separator + "initial" + File.separator + "config" + File.separator
             + "aaa-cert-config.xml";
     private static final int PWD_LENGTH = 12;
+
     private final IAaaCertProvider aaaCertProvider;
+    private final Registration reg;
 
-    public CertificateManagerService(AaaCertServiceConfig aaaCertServiceConfig, final DataBroker dataBroker,
-            final AAAEncryptionService encryptionSrv) {
+    public CertificateManagerService(final RpcProviderService rpcProviderService, final DataBroker dataBroker,
+            final AAAEncryptionService encryptionSrv, AaaCertServiceConfig aaaCertServiceConfig) {
         if (aaaCertServiceConfig == null) {
             throw new IllegalArgumentException("Certificate Manager service configuration is null");
         }
@@ -93,11 +95,21 @@ public class CertificateManagerService implements ICertificateManager {
             }
             aaaCertProvider.createKeyStores();
             LOG.info("Certificate Manager service has been initialized");
+            reg = rpcProviderService.registerRpcImplementation(AaaCertRpcService.class,
+                new AaaCertRpcServiceImpl(aaaCertProvider));
+            LOG.info("AaaCert Rpc Service has been initialized");
         } else {
             aaaCertProvider = null;
-            LOG.info(
-                    "Certificate Manager service has not been initialized,"
-                    + " change the initial aaa-cert-config data and restart Opendaylight");
+            reg = null;
+            LOG.info("Certificate Manager service has not been initialized, change the initial aaa-cert-config data "
+                + "and restart Opendaylight");
+        }
+    }
+
+    @Override
+    public void close() {
+        if (reg != null) {
+            reg.close();
         }
     }
 
index eb11deeac71087694937d85dc42082e2a35992a1..be0df1b543d8e1369b7046b539b8f0363ef6a84f 100644 (file)
@@ -7,23 +7,15 @@
   </odl:clustered-app-config>
 
   <reference id="dataBroker" interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
-
+  <reference id="rpcProviderService" interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/>
   <reference id="encryService" interface="org.opendaylight.aaa.encrypt.AAAEncryptionService"/>
 
-  <bean id="certManager" class="org.opendaylight.aaa.cert.impl.CertificateManagerService">
-      <argument ref="aaaCertDefaultConfig"/>
+  <bean id="certManager" class="org.opendaylight.aaa.cert.impl.CertificateManagerService" destroy-method="close">
+      <argument ref="rpcProviderService"/>
       <argument ref="dataBroker"/>
       <argument ref="encryService"/>
-  </bean>
-
-  <service ref="certManager" interface="org.opendaylight.aaa.cert.api.ICertificateManager" odl:type="default-certificate-manager"/>
-
-  <bean id="aaaCertRpcService" class="org.opendaylight.aaa.cert.impl.AaaCertRpcServiceImpl">
       <argument ref="aaaCertDefaultConfig"/>
-      <argument ref="dataBroker"/>
-      <argument ref="encryService"/>
   </bean>
-
-  <odl:rpc-implementation ref="aaaCertRpcService" />
+  <service ref="certManager" interface="org.opendaylight.aaa.cert.api.ICertificateManager" odl:type="default-certificate-manager"/>
 
 </blueprint>
index d27d2723f86481f3d620d1c290d332cace6a3048..e54b7f657fbd01f8654fedcce609e11da5d76dee 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.aaa.cert.impl;
 
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
@@ -22,6 +21,7 @@ import java.util.List;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.opendaylight.aaa.cert.api.IAaaCertProvider;
 import org.opendaylight.aaa.cert.utils.KeyStoresDataUtils;
 import org.opendaylight.aaa.encrypt.AAAEncryptionService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.cipher.suite.CipherSuitesBuilder;
@@ -30,8 +30,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev1603
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.ssl.data.OdlKeystore;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.ssl.data.OdlKeystoreBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.ssl.data.TrustKeystore;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.AaaCertServiceConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.AaaCertServiceConfigBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rpc.rev151215.GetNodeCertificateInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rpc.rev151215.GetODLCertificateInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rpc.rev151215.GetODLCertificateReqInputBuilder;
@@ -49,11 +47,6 @@ public class AaaCertRpcServiceImplTest {
     private static final String PROTOCOL = "SSLv2Hello";
     private static final String TEST_PATH = "target" + File.separator + "test" + File.separator;
     private static final String TRUST_NAME = "trustTest.jks";
-    private static final AaaCertServiceConfig CONFIG = new AaaCertServiceConfigBuilder()
-        .setUseConfig(true)
-        .setUseMdsal(true)
-        .setBundleName(BUNDLE_NAME)
-        .build();
 
     private static AAAEncryptionService aaaEncryptionService;
     private static SslData signedSslData;
@@ -111,9 +104,7 @@ public class AaaCertRpcServiceImplTest {
         aaaEncryptionService = aaaEncryptionServiceInit;
 
         // Create class
-        aaaCertRpcService = new AaaCertRpcServiceImpl(CONFIG, mockDataBroker(signedSslData),
-                aaaEncryptionService);
-        assertNotNull(aaaCertRpcService);
+        aaaCertRpcService = new AaaCertRpcServiceImpl(mockMdsalProvider(signedSslData));
     }
 
     @Test
@@ -129,7 +120,7 @@ public class AaaCertRpcServiceImplTest {
     @Test
     public void setODLCertificateTest() throws Exception {
         final var result = Futures.getDone(
-            new AaaCertRpcServiceImpl(CONFIG, mockDataBroker(unsignedSslData), aaaEncryptionService)
+            new AaaCertRpcServiceImpl(mockMdsalProvider(unsignedSslData))
                 .setODLCertificate(
                     new SetODLCertificateInputBuilder().setOdlCertAlias(ALIAS).setOdlCert(CERTIFICATE).build()));
         assertTrue(result.isSuccessful());
@@ -158,9 +149,14 @@ public class AaaCertRpcServiceImplTest {
     @Test
     public void setNodeCertificate() throws Exception {
         final var result = Futures.getDone(
-            new AaaCertRpcServiceImpl(CONFIG, mockDataBroker(unsignedSslData), aaaEncryptionService)
+            new AaaCertRpcServiceImpl(mockMdsalProvider(unsignedSslData))
                 .setNodeCertificate(
                     new SetNodeCertificateInputBuilder().setNodeAlias(ALIAS).setNodeCert(CERTIFICATE).build()));
         assertTrue(result.isSuccessful());
     }
+
+    private static IAaaCertProvider mockMdsalProvider(final SslData sslData) throws Exception {
+        return new DefaultMdsalSslData(new AaaCertMdsalProvider(mockDataBroker(sslData), aaaEncryptionService),
+            BUNDLE_NAME, null, null);
+    }
 }