Add AaaCertRpcServiceImpl unit tests 82/53282/2
authormatthieu cauffiez <mcauffiez@inocybe.com>
Tue, 14 Mar 2017 15:09:35 +0000 (11:09 -0400)
committerMohamed El-Serngawy <melserngawy@inocybe.ca>
Thu, 16 Mar 2017 21:09:58 +0000 (21:09 +0000)
Change-Id: I912a8a9dfaa21061731e3abe088a6075a350e3f6
Signed-off-by: matthieu cauffiez <mcauffiez@inocybe.com>
aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/AaaCertMdsalProviderTest.java
aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/AaaCertRpcServiceImplTest.java [new file with mode: 0644]
aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/TestUtils.java

index db2d4bf24399fd66f1d97893c0c76fe0e99212e7..dbd9e6a699e39f436464a4a672f1249a70e4c1ff 100644 (file)
@@ -8,8 +8,6 @@
 
 package org.opendaylight.aaa.cert.test;
 
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.CheckedFuture;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -18,11 +16,6 @@ import org.opendaylight.aaa.cert.impl.KeyStoreConstant;
 import org.opendaylight.aaa.cert.impl.ODLKeyTool;
 import org.opendaylight.aaa.cert.utils.KeyStoresDataUtils;
 import org.opendaylight.aaa.encrypt.AAAEncryptionService;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.cipher.suite.CipherSuites;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.cipher.suite.CipherSuitesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.key.stores.SslData;
@@ -30,7 +23,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.yangtools.yang.binding.DataObject;
 
 import java.io.File;
 import java.security.KeyStore;
@@ -45,6 +37,7 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.isA;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.opendaylight.aaa.cert.test.TestUtils.mockDataBroker;
 
 public class AaaCertMdsalProviderTest {
     private static final String alias = TestUtils.dummyAlias;
@@ -67,26 +60,6 @@ public class AaaCertMdsalProviderTest {
         Security.addProvider(new BouncyCastleProvider());
     }
 
-    private static DataBroker mockDataBroker(SslData sslData) throws Exception {
-        final Optional<DataObject> dataObjectOptional = mock(Optional.class);
-        when(dataObjectOptional.get()).thenReturn(sslData);
-        when(dataObjectOptional.isPresent()).thenReturn(true);
-        final CheckedFuture<Optional<DataObject>, ReadFailedException> checkReadFuture = mock(CheckedFuture.class);
-        when(checkReadFuture.checkedGet()).thenReturn(dataObjectOptional);
-        when(checkReadFuture.get()).thenReturn(dataObjectOptional);
-        final ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);
-        when(readOnlyTransaction.read(any(), any())).thenReturn(checkReadFuture);
-
-        final CheckedFuture<Void, TransactionCommitFailedException> checkWriteFuture = mock(CheckedFuture.class);
-        final WriteTransaction writeTransaction = mock(WriteTransaction.class);
-        when(writeTransaction.submit()).thenReturn(checkWriteFuture);
-
-        final DataBroker dataBrokerInit = mock(DataBroker.class);
-        when(dataBrokerInit.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
-        when(dataBrokerInit.newWriteOnlyTransaction()).thenReturn(writeTransaction);
-        return dataBrokerInit;
-    }
-
     @BeforeClass
     public static void setUpBeforeClass() throws Exception {
         // Setup tests
diff --git a/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/AaaCertRpcServiceImplTest.java b/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/AaaCertRpcServiceImplTest.java
new file mode 100644 (file)
index 0000000..9a3349a
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2016 Inocybe Technologies. 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.aaa.cert.test;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.opendaylight.aaa.cert.impl.AaaCertRpcServiceImpl;
+import org.opendaylight.aaa.cert.impl.KeyStoreConstant;
+import org.opendaylight.aaa.cert.impl.ODLKeyTool;
+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.CipherSuites;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.cipher.suite.CipherSuitesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.key.stores.SslData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.key.stores.SslDataBuilder;
+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.rpc.rev151215.*;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+import java.io.File;
+import java.security.Security;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.Future;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.isA;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.opendaylight.aaa.cert.test.TestUtils.mockDataBroker;
+
+public class AaaCertRpcServiceImplTest {
+    private static final String alias = TestUtils.dummyAlias;
+    private static final String bundleName = "opendaylight";
+    private static final String certificate = TestUtils.dummyCert;
+    private static final String cipherSuiteName = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256";
+    private static final String[] cipherSuitesArray = {cipherSuiteName};
+    private static final String dName = "CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA";
+    private static final String odlName = "odlTest.jks";
+    private static final String password = "passWord";
+    private static final String protocol = "SSLv2Hello";
+    private static final String testPath = "target" + File.separator + "test" + File.separator;
+    private static final String trustName = "trustTest.jks";
+    private static AAAEncryptionService aaaEncryptionService;
+    private static SslData signedSslData;
+    private static SslData unsignedSslData;
+    private static AaaCertRpcServiceImpl aaaCertRpcService;
+    private static AaaCertServiceConfig aaaCertServiceConfig;
+
+    static {
+        Security.addProvider(new BouncyCastleProvider());
+    }
+
+    @BeforeClass
+    public static void setUpBeforeClass() throws Exception {
+        // Setup tests
+        final AAAEncryptionService aaaEncryptionServiceInit = mock(AAAEncryptionService.class);
+        final ODLKeyTool odlKeyTool = new ODLKeyTool(testPath);
+        final KeyStoresDataUtils keyStoresDataUtils = new KeyStoresDataUtils(aaaEncryptionServiceInit);
+
+        final OdlKeystore signedOdlKeystore = keyStoresDataUtils.createOdlKeystore(odlName, alias, password,
+                dName, KeyStoreConstant.DEFAULT_SIGN_ALG, KeyStoreConstant.DEFAULT_KEY_ALG,
+                KeyStoreConstant.DEFAULT_VALIDITY, KeyStoreConstant.DEFAULT_KEY_SIZE, odlKeyTool);
+        final TrustKeystore signedTrustKeyStore = keyStoresDataUtils.createTrustKeystore(trustName, password,
+                signedOdlKeystore.getKeystoreFile());
+        final TrustKeystore unsignedTrustKeyStore = keyStoresDataUtils.createTrustKeystore(trustName,password, odlKeyTool);
+
+        final CipherSuites cipherSuite = new CipherSuitesBuilder()
+                .setSuiteName(cipherSuiteName)
+                .build();
+
+        final List<CipherSuites> cipherSuites =  new ArrayList<>(Arrays.asList(cipherSuite));
+
+        signedSslData = new SslDataBuilder()
+                .setCipherSuites(cipherSuites)
+                .setOdlKeystore(signedOdlKeystore)
+                .setTrustKeystore(signedTrustKeyStore)
+                .setTlsProtocols(protocol)
+                .build();
+
+        final OdlKeystore unsignedOdlKeystore = new OdlKeystoreBuilder()
+                .setAlias(alias)
+                .setDname(dName)
+                .setName(odlName)
+                .setStorePassword(password)
+                .setValidity(KeyStoreConstant.DEFAULT_VALIDITY)
+                .setKeyAlg(KeyStoreConstant.DEFAULT_KEY_ALG)
+                .setKeysize(KeyStoreConstant.DEFAULT_KEY_SIZE)
+                .setSignAlg(KeyStoreConstant.DEFAULT_SIGN_ALG)
+                .setKeystoreFile(unsignedTrustKeyStore.getKeystoreFile())
+                .build();
+
+        unsignedSslData = new SslDataBuilder()
+                .setOdlKeystore(unsignedOdlKeystore)
+                .setTrustKeystore(unsignedTrustKeyStore)
+                .build();
+
+        when(aaaEncryptionServiceInit.decrypt(unsignedTrustKeyStore.getKeystoreFile())).thenReturn(unsignedTrustKeyStore.getKeystoreFile());
+        when(aaaEncryptionServiceInit.decrypt(signedOdlKeystore.getKeystoreFile())).thenReturn(signedOdlKeystore.getKeystoreFile());
+        when(aaaEncryptionServiceInit.decrypt(isA(String.class))).thenReturn(password);
+        aaaEncryptionService = aaaEncryptionServiceInit;
+
+        final AaaCertServiceConfig aaaCertServiceConfigInit = mock(AaaCertServiceConfig.class);
+        when(aaaCertServiceConfigInit.isUseConfig()).thenReturn(true);
+        when(aaaCertServiceConfigInit.isUseMdsal()).thenReturn(true);
+        aaaCertServiceConfig = aaaCertServiceConfigInit;
+
+        // Create class
+        aaaCertRpcService = new AaaCertRpcServiceImpl(aaaCertServiceConfig, mockDataBroker(signedSslData), aaaEncryptionService);
+        assertNotNull(aaaCertRpcService);
+    }
+
+    @Test
+    public void getNodeCertifcateTest() throws Exception {
+        final GetNodeCertifcateInput nodeCertifcateInput = mock(GetNodeCertifcateInput.class);
+        when(nodeCertifcateInput.getNodeAlias()).thenReturn(alias);
+        Future<RpcResult<GetNodeCertifcateOutput>> result = aaaCertRpcService.getNodeCertifcate(nodeCertifcateInput);
+        assertTrue(result.get().isSuccessful());
+        final String cert = result.get().getResult().getNodeCert();
+        assertTrue(cert != null && !cert.isEmpty());
+        assertTrue(!cert.contains(KeyStoreConstant.END_CERTIFICATE));
+    }
+
+    @Test
+    public void setODLCertifcateTest() throws Exception {
+        final SetODLCertifcateInput input = mock(SetODLCertifcateInput.class);
+        when(input.getOdlCertAlias()).thenReturn(alias);
+        when(input.getOdlCert()).thenReturn(certificate);
+        Future<RpcResult<Void>> result = new AaaCertRpcServiceImpl(aaaCertServiceConfig, mockDataBroker(unsignedSslData),
+                aaaEncryptionService).setODLCertifcate(input);
+        assertTrue(result.get().isSuccessful());
+    }
+
+    @Test
+    public void getODLCertificateTest() throws Exception {
+        Future<RpcResult<GetODLCertificateOutput>> result = aaaCertRpcService.getODLCertificate();
+        assertTrue(result.get().isSuccessful());
+        final String cert = result.get().getResult().getOdlCert();
+        assertTrue(cert != null && !cert.isEmpty());
+        assertTrue(!cert.contains(KeyStoreConstant.END_CERTIFICATE));
+    }
+
+    @Test
+    public void getODLCertificateReq() throws Exception {
+        Future<RpcResult<GetODLCertificateReqOutput>> result = aaaCertRpcService.getODLCertificateReq();
+        assertTrue(result.get().isSuccessful());
+        final String cert = result.get().getResult().getOdlCertReq();
+        assertTrue(cert != null && !cert.isEmpty());
+        assertTrue(!cert.contains(KeyStoreConstant.END_CERTIFICATE_REQUEST));
+    }
+
+    @Test
+    public void setNodeCertifcate() throws Exception {
+        final SetNodeCertifcateInput input = mock(SetNodeCertifcateInput.class);
+        when(input.getNodeAlias()).thenReturn(alias);
+        when(input.getNodeCert()).thenReturn(certificate);
+        Future<RpcResult<Void>> result = new AaaCertRpcServiceImpl(aaaCertServiceConfig, mockDataBroker(unsignedSslData),
+                aaaEncryptionService).setNodeCertifcate(input);
+        assertTrue(result.get().isSuccessful());
+    }
+}
index 9cdfa0b24eacc18162c0fabf8b8b32813d4d7a2f..a4d10f91c790df66374b1af76457b33aad30369c 100644 (file)
@@ -7,11 +7,24 @@
  */
 package org.opendaylight.aaa.cert.test;
 
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
 import org.opendaylight.aaa.cert.impl.KeyStoreConstant;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.mdsal.rev160321.key.stores.SslData;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 /**
- * Utilities for test, the certicate needs to be update yearly.
- * last update: 8 march 2017
+ * Utilities for test, the certicate needs to be updated yearly.
+ * Last update: 8 march 2017
  */
 
 public class TestUtils {
@@ -32,4 +45,24 @@ public class TestUtils {
             "fkSa9vQkUowgHAxW//7NOOTonnQPi2gH6ubaOCG4ZeXTwqHy47DGA0c8z" +
             "2Q="+
             KeyStoreConstant.END_CERTIFICATE;
+
+    public static DataBroker mockDataBroker(SslData sslData) throws Exception {
+        final Optional<DataObject> dataObjectOptional = mock(Optional.class);
+        when(dataObjectOptional.get()).thenReturn(sslData);
+        when(dataObjectOptional.isPresent()).thenReturn(true);
+        final CheckedFuture<Optional<DataObject>, ReadFailedException> checkReadFuture = mock(CheckedFuture.class);
+        when(checkReadFuture.checkedGet()).thenReturn(dataObjectOptional);
+        when(checkReadFuture.get()).thenReturn(dataObjectOptional);
+        final ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);
+        when(readOnlyTransaction.read(any(), any())).thenReturn(checkReadFuture);
+
+        final CheckedFuture<Void, TransactionCommitFailedException> checkWriteFuture = mock(CheckedFuture.class);
+        final WriteTransaction writeTransaction = mock(WriteTransaction.class);
+        when(writeTransaction.submit()).thenReturn(checkWriteFuture);
+
+        final DataBroker dataBrokerInit = mock(DataBroker.class);
+        when(dataBrokerInit.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
+        when(dataBrokerInit.newWriteOnlyTransaction()).thenReturn(writeTransaction);
+        return dataBrokerInit;
+    }
 }