From: matthieu cauffiez Date: Tue, 14 Mar 2017 15:09:35 +0000 (-0400) Subject: Add AaaCertRpcServiceImpl unit tests X-Git-Tag: release/carbon~26 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=e784d9961691578cfae937df849dd59aab36fbd9;p=aaa.git Add AaaCertRpcServiceImpl unit tests Change-Id: I912a8a9dfaa21061731e3abe088a6075a350e3f6 Signed-off-by: matthieu cauffiez --- diff --git a/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/AaaCertMdsalProviderTest.java b/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/AaaCertMdsalProviderTest.java index db2d4bf24..dbd9e6a69 100644 --- a/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/AaaCertMdsalProviderTest.java +++ b/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/AaaCertMdsalProviderTest.java @@ -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 dataObjectOptional = mock(Optional.class); - when(dataObjectOptional.get()).thenReturn(sslData); - when(dataObjectOptional.isPresent()).thenReturn(true); - final CheckedFuture, 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 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 index 000000000..9a3349aae --- /dev/null +++ b/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/AaaCertRpcServiceImplTest.java @@ -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 = 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> 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> result = new AaaCertRpcServiceImpl(aaaCertServiceConfig, mockDataBroker(unsignedSslData), + aaaEncryptionService).setODLCertifcate(input); + assertTrue(result.get().isSuccessful()); + } + + @Test + public void getODLCertificateTest() throws Exception { + Future> 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> 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> result = new AaaCertRpcServiceImpl(aaaCertServiceConfig, mockDataBroker(unsignedSslData), + aaaEncryptionService).setNodeCertifcate(input); + assertTrue(result.get().isSuccessful()); + } +} diff --git a/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/TestUtils.java b/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/TestUtils.java index 9cdfa0b24..a4d10f91c 100644 --- a/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/TestUtils.java +++ b/aaa-cert/src/test/java/org/opendaylight/aaa/cert/test/TestUtils.java @@ -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 dataObjectOptional = mock(Optional.class); + when(dataObjectOptional.get()).thenReturn(sslData); + when(dataObjectOptional.isPresent()).thenReturn(true); + final CheckedFuture, 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 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; + } }