From 17e3e813d0e134c71a66a8bdb755306656afaaf2 Mon Sep 17 00:00:00 2001 From: Lathish Date: Wed, 20 Jun 2018 12:24:04 +0100 Subject: Unit test cases for ansible impl package Change-Id: I2d035b548f9cfd866ed9966ac6dbf4e496723afc Issue-ID: APPC-533 Signed-off-by: Lathish --- .../ansible/impl/TestAnsibleAdapterImpl.java | 311 +++++++++++++++++---- .../ansible/impl/TestConnectionBuilder.java | 258 +++++++++++++++++ .../resources/org/onap/appc/asdc-client-cert.crt | 10 + .../test/resources/org/onap/appc/asdc-client.jks | Bin 0 -> 1177 bytes .../resources/org/onap/appc/default.properties | 27 +- 5 files changed, 545 insertions(+), 61 deletions(-) create mode 100644 appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestConnectionBuilder.java create mode 100644 appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/asdc-client-cert.crt create mode 100644 appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/asdc-client.jks (limited to 'appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test') diff --git a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestAnsibleAdapterImpl.java b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestAnsibleAdapterImpl.java index 32dd24324..7898260d1 100644 --- a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestAnsibleAdapterImpl.java +++ b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestAnsibleAdapterImpl.java @@ -24,42 +24,92 @@ package org.onap.appc.adapter.ansible.impl; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.when; import java.util.HashMap; import java.util.Map; +import org.json.JSONException; +import org.json.JSONObject; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; - +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.appc.adapter.ansible.model.AnsibleMessageParser; +import org.onap.appc.adapter.ansible.model.AnsibleResult; +import org.onap.appc.configuration.Configuration; +import org.onap.appc.configuration.ConfigurationFactory; +import org.onap.appc.exceptions.APPCException; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.powermock.reflect.Whitebox; - +@RunWith(MockitoJUnitRunner.class) public class TestAnsibleAdapterImpl { - private final String PENDING = "100"; - private final String SUCCESS = "400"; - private String message = "{\"Results\":{\"192.168.1.10\":{\"Id\":\"101\",\"StatusCode\":200,\"StatusMessage\":\"SUCCESS\"}},\"StatusCode\":200,\"StatusMessage\":\"FINISHED\"}"; + private static String KEYSTORE_PASSWORD; + private static Configuration configuration; + private static final String RESULT_CODE_ATTRIBUTE_NAME = "org.onap.appc.adapter.ansible.result.code"; + private static final String LOG_ATTRIBUTE_NAME = "org.onap.appc.adapter.ansible.log"; + private static final String STATUS_CODE = "StatusCode"; + private static final String STATUS_MESSAGE = "StatusMessage"; + private static final String PENDING = "100"; + private static final String SUCCESS = "200"; private AnsibleAdapterImpl adapter; - private String TestId; private boolean testMode = true; private Map params; private SvcLogicContext svcContext; + private JSONObject jsonPayload; + private AnsibleResult result; + private String agentUrl = "https://192.168.1.1"; + private AnsibleAdapterImpl spyAdapter; + + @Mock + private AnsibleMessageParser messageProcessor; + @Mock + private ConnectionBuilder httpClient; + /** + * Load the configuration properties + */ + @BeforeClass + public static void once() { + configuration = ConfigurationFactory.getConfiguration(); + KEYSTORE_PASSWORD = configuration.getProperty("org.onap.appc.adapter.ansible.trustStore.trustPasswd"); + + } + + /** + * Use reflection to locate fields and methods so that they can be manipulated during the test + * to change the internal state accordingly. + * + */ @Before - public void setup() throws IllegalArgumentException { + public void setup() { testMode = true; svcContext = new SvcLogicContext(); adapter = new AnsibleAdapterImpl(testMode); - params = new HashMap<>(); - params.put("AgentUrl", "https://192.168.1.1"); - params.put("User", "test"); - params.put("Password", "test"); + params.put("AgentUrl", agentUrl); + jsonPayload = new JSONObject(); + jsonPayload.put("Id", "100"); + jsonPayload.put("User", "test"); + jsonPayload.put("Password", "test"); + jsonPayload.put("PlaybookName", "test_playbook.yaml"); + jsonPayload.put("AgentUrl", agentUrl); + result = new AnsibleResult(); + result.setStatusMessage("Success"); + result.setResults("Success"); + Whitebox.setInternalState(adapter, "messageProcessor", messageProcessor); + spyAdapter = Mockito.spy(adapter); } @After @@ -70,60 +120,215 @@ public class TestAnsibleAdapterImpl { svcContext = null; } + /** + * This test case is used to test the request is submitted and the status is marked to pending + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ + @Test + public void reqExec_shouldSetPending() throws SvcLogicException, APPCException { + result.setStatusCode(Integer.valueOf(PENDING)); + when(messageProcessor.reqMessage(params)).thenReturn(jsonPayload); + when(messageProcessor.parsePostResponse(anyString())).thenReturn(result); + spyAdapter.reqExec(params, svcContext); + assertEquals(PENDING, svcContext.getAttribute(RESULT_CODE_ATTRIBUTE_NAME)); + } + + /** + * This test case is used to test the request is process and the status is marked to success + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ @Test - public void reqExec_shouldSetPending() throws IllegalStateException, IllegalArgumentException { + public void reqExecResult_shouldSetSuccess() throws SvcLogicException, APPCException { + params.put("Id", "100"); + result.setStatusCode(Integer.valueOf(SUCCESS)); + when(messageProcessor.reqUriResult(params)).thenReturn(agentUrl); + when(messageProcessor.parseGetResponse(anyString())).thenReturn(result); + spyAdapter.reqExecResult(params, svcContext); + assertEquals(SUCCESS, svcContext.getAttribute(RESULT_CODE_ATTRIBUTE_NAME)); + } - params.put("PlaybookName", "test_playbook.yaml"); + /** + * This test case is used to test the Failure of the request + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ + @Test(expected = SvcLogicException.class) + public void reqExecResult_Failure() throws SvcLogicException, APPCException { + params.put("Id", "100"); + result.setStatusCode(100); + result.setStatusMessage("Failed"); + when(messageProcessor.reqUriResult(params)).thenReturn(agentUrl); + when(messageProcessor.parseGetResponse(anyString())).thenReturn(result); + adapter.reqExecResult(params, svcContext); + } - try { - adapter.reqExec(params, svcContext); - String status = svcContext.getAttribute("org.onap.appc.adapter.ansible.result.code"); - TestId = svcContext.getAttribute("org.onap.appc.adapter.ansible.result.Id"); - System.out.println("Comparing " + PENDING + " and " + status); - assertEquals(PENDING, status); - } catch (SvcLogicException e) { - String status = svcContext.getAttribute("org.onap.appc.adapter.ansible.result.code"); - fail(e.getMessage() + " Code = " + status); - } catch (Exception e) { - fail(e.getMessage() + " Unknown exception encountered "); - } + /** + * This test case is used to test the APPC Exception + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ + @Test(expected = SvcLogicException.class) + public void reqExecResult_appcException() throws APPCException, SvcLogicException { + when(messageProcessor.reqUriResult(params)).thenThrow(new APPCException()); + adapter.reqExecResult(params, svcContext); } + /** + * This test case is used to test the Number Format Exception + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ + @Test(expected = SvcLogicException.class) + public void reqExecResult_numberFormatException() + throws IllegalStateException, IllegalArgumentException, APPCException, SvcLogicException { + when(messageProcessor.reqUriResult(params)).thenThrow(new NumberFormatException()); + adapter.reqExecResult(params, svcContext); + } + + /** + * This test case is used to test the logs executed for the specific request + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ @Test - public void reqExecResult_shouldSetSuccess() throws IllegalStateException, IllegalArgumentException { + public void reqExecLog_shouldSetMessage() throws SvcLogicException, APPCException { + params.put("Id", "101"); + when(messageProcessor.reqUriLog(params)).thenReturn(agentUrl); + adapter.reqExecLog(params, svcContext); + String message = getResponseMessage(); + assertEquals(message, svcContext.getAttribute(LOG_ATTRIBUTE_NAME)); + } - params.put("Id", "100"); + private String getResponseMessage() { + JSONObject response = new JSONObject(); + response.put(STATUS_CODE, 200); + response.put(STATUS_MESSAGE, "FINISHED"); + JSONObject results = new JSONObject(); + + JSONObject vmResults = new JSONObject(); + vmResults.put(STATUS_CODE, 200); + vmResults.put(STATUS_MESSAGE, "SUCCESS"); + vmResults.put("Id", ""); + results.put("192.168.1.10", vmResults); + + response.put("Results", results); + String message = response.toString(); + return message; + } + + /** + * This test case is used to test the APPC Exception + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ + @Test(expected = SvcLogicException.class) + public void reqExecException() + throws IllegalStateException, IllegalArgumentException, APPCException, SvcLogicException { + when(messageProcessor.reqUriLog(params)).thenThrow(new APPCException("Appc Exception")); + adapter.reqExecLog(params, svcContext); + } + + /** + * This test case is used to test the APPC Exception + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ + @Test(expected = SvcLogicException.class) + public void reqExec_AppcException() + throws IllegalStateException, IllegalArgumentException, SvcLogicException, APPCException { + when(messageProcessor.reqMessage(params)).thenThrow(new APPCException()); + adapter.reqExec(params, svcContext); + } + + /** + * This test case is used to test the JSON Exception + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ + @Test(expected = SvcLogicException.class) + public void reqExec_JsonException() + throws IllegalStateException, IllegalArgumentException, SvcLogicException, APPCException { + when(messageProcessor.reqMessage(params)).thenThrow(new JSONException("Json Exception")); + adapter.reqExec(params, svcContext); + } - for (String ukey : params.keySet()) { - System.out.println(String.format("Ansible Parameter %s = %s", ukey, params.get(ukey))); - } + /** + * This test case is used to test the Number Format Exception + * + * @throws SvcLogicException If the request cannot be process due to Number format or JSON + * Exception + * @throws APPCException If the request cannot be processed for some reason + */ + @Test(expected = SvcLogicException.class) + public void reqExec_NumberFormatException() + throws IllegalStateException, IllegalArgumentException, SvcLogicException, APPCException { + when(messageProcessor.reqMessage(params)).thenThrow(new NumberFormatException("Numbre Format Exception")); + adapter.reqExec(params, svcContext); + } - try { - adapter.reqExecResult(params, svcContext); - String status = svcContext.getAttribute("org.onap.appc.adapter.ansible.result.code"); - assertEquals(SUCCESS, status); - } catch (SvcLogicException e) { - String status = svcContext.getAttribute("org.onap.appc.adapter.ansible.result.code"); - fail(e.getMessage() + " Code = " + status); - } catch (Exception e) { - fail(e.getMessage() + " Unknown exception encountered "); - } + /** + * This test case is used to test the constructor with no client type + * + */ + @Test + public void testInitializeWithDefault() { + configuration.setProperty("org.onap.appc.adapter.ansible.clientType", ""); + adapter = new AnsibleAdapterImpl(); + assertNotNull(adapter); } + /** + * This test case is used to test the constructor with client type as TRUST_ALL + * + */ @Test - public void reqExecLog_shouldSetMessage() throws IllegalStateException, IllegalArgumentException { + public void testInitializeWithTrustAll() { + configuration.setProperty("org.onap.appc.adapter.ansible.clientType", "TRUST_ALL"); + adapter = new AnsibleAdapterImpl(); + assertNotNull(adapter); + } - params.put("Id", "101"); + /** + * This test case is used to test the constructor with client type as TRUST_CERT + * + */ + @Test + public void testInitializeWithTrustCert() { + configuration.setProperty("org.onap.appc.adapter.ansible.clientType", "TRUST_CERT"); + configuration.setProperty("org.onap.appc.adapter.ansible.trustStore.trustPasswd", KEYSTORE_PASSWORD); + adapter = new AnsibleAdapterImpl(); + assertNotNull(adapter); + } - try { - adapter.reqExecLog(params, svcContext); - String status = svcContext.getAttribute("org.onap.appc.adapter.ansible.log"); - assertEquals(message, status); - } catch (SvcLogicException e) { - String status = svcContext.getAttribute("org.onap.appc.adapter.ansible.log"); - fail(e.getMessage() + " Code = " + status); - } catch (Exception e) { - fail(e.getMessage() + " Unknown exception encountered "); - } + /** + * This test case is used to test the constructor with exception + * + */ + @Test + public void testInitializeWithException() { + configuration.setProperty("org.onap.appc.adapter.ansible.clientType", "TRUST_CERT"); + configuration.setProperty("org.onap.appc.adapter.ansible.trustStore.trustPasswd", "appc"); + adapter = new AnsibleAdapterImpl(); } + } diff --git a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestConnectionBuilder.java b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestConnectionBuilder.java new file mode 100644 index 000000000..d2c0f842b --- /dev/null +++ b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestConnectionBuilder.java @@ -0,0 +1,258 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.appc.adapter.ansible.impl; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.util.Properties; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.impl.client.CloseableHttpClient; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.appc.adapter.ansible.model.AnsibleMessageParser; +import org.onap.appc.adapter.ansible.model.AnsibleResult; +import org.onap.appc.adapter.ansible.model.AnsibleResultCodes; +import org.onap.appc.configuration.Configuration; +import org.onap.appc.configuration.ConfigurationFactory; +import org.onap.appc.exceptions.APPCException; +import org.powermock.reflect.Whitebox; + +@RunWith(MockitoJUnitRunner.class) +public class TestConnectionBuilder { + + private static String KEYSTORE_FILE; + private static String KEYSTORE_PASSWORD; + private static String KEYSTORE_CERTIFICATE; + private static String USERNAME; + private static String PASSWORD; + private static String URL; + + private final int SUCCESS_STATUS = 200; + private ConnectionBuilder connectionBuilder; + + @Mock + private AnsibleMessageParser messageProcessor; + + @Mock + private CloseableHttpClient httpClient; + + @Mock + private HttpClientContext httpClientContext; + + @Mock + private CloseableHttpResponse response; + + @Mock + private HttpEntity entity; + + @Mock + private StatusLine statusLine; + + /** + * Load the configuration properties + */ + @BeforeClass + public static void once() { + Configuration configuration = ConfigurationFactory.getConfiguration(); + Properties props = configuration.getProperties(); + KEYSTORE_FILE = props.getProperty("org.onap.appc.adapter.ansible.trustStore"); + KEYSTORE_PASSWORD = props.getProperty("org.onap.appc.adapter.ansible.trustStore.trustPasswd"); + KEYSTORE_CERTIFICATE = props.getProperty("org.onap.appc.adapter.ansible.cert"); + USERNAME = props.getProperty("org.onap.appc.adapter.ansible.username"); + PASSWORD = props.getProperty("org.onap.appc.adapter.ansible.password"); + URL = props.getProperty("org.onap.appc.adapter.ansible.identity"); + } + + /** + * Use reflection to locate fields and methods so that they can be manipulated during the test + * to change the internal state accordingly. + * + * @throws KeyManagementException If unable to manage the key + * @throws NoSuchAlgorithmException If an algorithm is found to be used but is unknown + * @throws KeyStoreException If any issues accessing the keystore + * @throws ClientProtocolException The client protocol exception + * @throws IOException Signals that an I/O exception has occurred. + */ + @Before + public void setup() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, + ClientProtocolException, IOException { + connectionBuilder = new ConnectionBuilder(0); + Whitebox.setInternalState(connectionBuilder, "httpClient", httpClient); + Whitebox.setInternalState(connectionBuilder, "httpContext", httpClientContext); + HttpResponse httpResponse = (HttpResponse) response; + when(httpResponse.getEntity()).thenReturn(entity); + when(httpResponse.getStatusLine()).thenReturn(statusLine); + when(statusLine.getStatusCode()).thenReturn(SUCCESS_STATUS); + } + + @After + public void tearDown() { + connectionBuilder = null; + } + + /** + * This test case is used to invoke the constructor with keystore file and trust store password. + * + * @throws KeyManagementException If unable to manage the key + * @throws KeyStoreException If any issues accessing the keystore + * @throws CertificateException If the certificate is tampared + * @throws NoSuchAlgorithmException If an algorithm is found to be used but is unknown + * @throws IOException Signals that an I/O exception has occurred. + * @throws APPCException If there are any application exception + */ + @Test + public void testConnectionBuilder() throws KeyManagementException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, IOException, APPCException { + char[] trustStorePassword = KEYSTORE_PASSWORD.toCharArray(); + ConnectionBuilder connectionBuilder = new ConnectionBuilder(KEYSTORE_FILE, trustStorePassword); + assertNotNull(connectionBuilder); + } + + /** + * This test case is used to invoke the constructor with keystore certificate + * + * @throws KeyManagementException If unable to manage the key + * @throws KeyStoreException If any issues accessing the keystore + * @throws CertificateException If the certificate is tampared + * @throws NoSuchAlgorithmException If an algorithm is found to be used but is unknown + * @throws IOException Signals that an I/O exception has occurred. + * @throws APPCException If there are any application exception + */ + @Test + public void testConnectionBuilderWithFilePath() throws KeyManagementException, KeyStoreException, + CertificateException, NoSuchAlgorithmException, IOException, APPCException { + new ConnectionBuilder(KEYSTORE_CERTIFICATE); + } + + /** + * This test case is used to set the http context with username and password + * + * @throws KeyManagementException If unable to manage the key + * @throws KeyStoreException If any issues accessing the keystore + * @throws CertificateException If the certificate is tampared + * @throws NoSuchAlgorithmException If an algorithm is found to be used but is unknown + * @throws IOException Signals that an I/O exception has occurred. + * @throws APPCException If there are any application exception + */ + @Test + public void testSetHttpContext() throws KeyManagementException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, IOException, APPCException { + ConnectionBuilder spyConnectionBuilder = Mockito.spy(connectionBuilder); + spyConnectionBuilder.setHttpContext(USERNAME, PASSWORD); + verify(spyConnectionBuilder, times(1)).setHttpContext(USERNAME, PASSWORD); + } + + /** + * This test case is used to test the post method + * + * @throws KeyManagementException If unable to manage the key + * @throws KeyStoreException If any issues accessing the keystore + * @throws CertificateException If the certificate is tampared + * @throws NoSuchAlgorithmException If an algorithm is found to be used but is unknown + * @throws IOException Signals that an I/O exception has occurred. + * @throws APPCException If there are any application exception + */ + @Test + public void testPost() throws KeyManagementException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, IOException, APPCException { + when(httpClient.execute(anyObject(), eq(httpClientContext))).thenReturn(response); + AnsibleResult result = connectionBuilder.post(URL, "appc"); + assertEquals(SUCCESS_STATUS, result.getStatusCode()); + } + + /** + * This test case is used to test the post method with exception + * + * @throws KeyManagementException If unable to manage the key + * @throws KeyStoreException If any issues accessing the keystore + * @throws CertificateException If the certificate is tampared + * @throws NoSuchAlgorithmException If an algorithm is found to be used but is unknown + * @throws IOException Signals that an I/O exception has occurred. + * @throws APPCException If there are any application exception + */ + @Test + public void testPostWithException() throws KeyManagementException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, IOException, APPCException { + when(httpClient.execute(anyObject(), eq(httpClientContext))).thenThrow(new IOException()); + AnsibleResult result = connectionBuilder.post(URL, "appc"); + assertEquals(AnsibleResultCodes.IO_EXCEPTION.getValue(), result.getStatusCode()); + } + + /** + * This test case is used to test the get method + * + * @throws KeyManagementException If unable to manage the key + * @throws KeyStoreException If any issues accessing the keystore + * @throws CertificateException If the certificate is tampared + * @throws NoSuchAlgorithmException If an algorithm is found to be used but is unknown + * @throws IOException Signals that an I/O exception has occurred. + * @throws APPCException If there are any application exception + */ + @Test + public void testGet() throws KeyManagementException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, IOException, APPCException { + when(httpClient.execute(anyObject(), eq(httpClientContext))).thenReturn(response); + AnsibleResult result = connectionBuilder.get(URL); + assertEquals(SUCCESS_STATUS, result.getStatusCode()); + } + + /** + * This test case is used to test the get method with exception + * + * @throws KeyManagementException If unable to manage the key + * @throws KeyStoreException If any issues accessing the keystore + * @throws CertificateException If the certificate is tampared + * @throws NoSuchAlgorithmException If an algorithm is found to be used but is unknown + * @throws IOException Signals that an I/O exception has occurred. + * @throws APPCException If there are any application exception + */ + @Test + public void testGetWithException() throws KeyManagementException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, IOException, APPCException { + when(httpClient.execute(anyObject(), eq(httpClientContext))).thenThrow(new IOException()); + AnsibleResult result = connectionBuilder.get(URL); + assertEquals(AnsibleResultCodes.IO_EXCEPTION.getValue(), result.getStatusCode()); + } + +} diff --git a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/asdc-client-cert.crt b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/asdc-client-cert.crt new file mode 100644 index 000000000..9709d77a7 --- /dev/null +++ b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/asdc-client-cert.crt @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBezCCASWgAwIBAgIQyWD8dLUoqpJFyDxrfRlrsTANBgkqhkiG9w0BAQQFADAW +MRQwEgYDVQQDEwtSb290IEFnZW5jeTAeFw0wMTEwMTkxMjU5MjZaFw0zOTEyMzEy +MzU5NTlaMBoxGDAWBgNVBAMTD1Jvb3RDZXJ0aWZpY2F0ZTBcMA0GCSqGSIb3DQEB +AQUAA0sAMEgCQQC+NFKszPjatUZKWmyWaFjir1wB93FX2u5SL+GMjgUsMs1JcTKQ +Kh0cnnQKknNkV4cTW4NPn31YCoB1+0KA3mknAgMBAAGjSzBJMEcGA1UdAQRAMD6A +EBLkCS0GHR1PAI1hIdwWZGOhGDAWMRQwEgYDVQQDEwtSb290IEFnZW5jeYIQBjds +AKoAZIoRz7jUqlw19DANBgkqhkiG9w0BAQQFAANBACJxAfP57yqaT9N+nRgAOugM +JG0aN3/peCIvL3p29epRL2xoWFvxpUUlsH2I39OZ6b8+twWCebhkv1I62segXAk= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/asdc-client.jks b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/asdc-client.jks new file mode 100644 index 000000000..eb0a0d35a Binary files /dev/null and b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/asdc-client.jks differ diff --git a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/default.properties b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/default.properties index 7efa903a8..6f877e954 100644 --- a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/default.properties +++ b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/test/resources/org/onap/appc/default.properties @@ -2,22 +2,25 @@ # ============LICENSE_START======================================================= # ONAP : APPC # ================================================================================ -# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. +# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. # ================================================================================ # Copyright (C) 2017 Amdocs +# ================================================================================ +# Copyright (C) 2018 Ericsson # ============================================================================= # Licensed 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. -# +# +# ECOMP is a trademark and service mark of AT&T Intellectual Property. # ============LICENSE_END========================================================= ### @@ -26,15 +29,23 @@ # # ------------------------------------------------------------------------------------------------- # -# Define the name and path of any user-provided configuration (bootstrap) file that can be loaded -# to supply configuration options +# Define the name and path of any user-provided configuration (bootstrap) file that can be loaded +# to supply configuration options org.onap.appc.bootstrap.file=appc.properties org.onap.appc.bootstrap.path=/opt/onap/appc/data/properties,${user.home},. appc.application.name=APPC -# -# Define the message resource bundle name to be loaded +#Define ansible property +org.onap.appc.adapter.ansible.clientType=appc +org.onap.appc.adapter.ansible.trustStore=src/test/resources/org/onap/appc/asdc-client.jks +org.onap.appc.adapter.ansible.trustStore.trustPasswd=Aa123456 +org.onap.appc.adapter.ansible.cert=src/test/resources/org/onap/appc/asdc-client-cert.crt +org.onap.appc.adapter.ansible.identity=http://localhost:9081/v2.0 +org.onap.appc.adapter.ansible.username=appc +org.onap.appc.adapter.ansible.password=appc +# +# Define the message resource bundle name to be loaded org.onap.appc.resources=org/onap/appc/i18n/MessageResources # # The name of the adapter. -- cgit 1.2.3-korg