aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--model/src/main/java/org/onap/policy/distribution/model/Csar.java12
-rw-r--r--plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java119
-rw-r--r--plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadException.java (renamed from plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdDownloadException.java)6
-rw-r--r--plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyDecoder.java67
-rw-r--r--plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicy.java (renamed from plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcNotificationCallBack.java)41
-rw-r--r--plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicyForwarder.java77
-rw-r--r--plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestSdcReceptionHandler.java127
-rw-r--r--plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadExceptionTest.java (renamed from plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdDownloadExceptionTest.java)6
8 files changed, 426 insertions, 29 deletions
diff --git a/model/src/main/java/org/onap/policy/distribution/model/Csar.java b/model/src/main/java/org/onap/policy/distribution/model/Csar.java
index d299fce8..df7eaf28 100644
--- a/model/src/main/java/org/onap/policy/distribution/model/Csar.java
+++ b/model/src/main/java/org/onap/policy/distribution/model/Csar.java
@@ -5,15 +5,15 @@
* 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=========================================================
*/
@@ -27,16 +27,16 @@ public class Csar implements PolicyInput {
private String csarFilePath;
- public Csar(String csarFilePath) {
+ public Csar(final String csarFilePath) {
this.csarFilePath = csarFilePath;
}
/**
* Get the path to the CSAR file.
- *
+ *
* @return the path of the CSAR file
*/
- String getCsarPath() {
+ public String getCsarPath() {
return csarFilePath;
}
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java
index f0f9e20d..f2d8aa4d 100644
--- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java
+++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java
@@ -20,13 +20,26 @@
package org.onap.policy.distribution.reception.handling.sdc;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
import org.onap.policy.common.logging.flexlogger.FlexLogger;
import org.onap.policy.common.logging.flexlogger.Logger;
import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.distribution.model.Csar;
import org.onap.policy.distribution.reception.decoding.PluginInitializationException;
import org.onap.policy.distribution.reception.decoding.PluginTerminationException;
+import org.onap.policy.distribution.reception.decoding.PolicyDecodingException;
import org.onap.policy.distribution.reception.handling.AbstractReceptionHandler;
+import org.onap.policy.distribution.reception.handling.sdc.exceptions.ArtifactDownloadException;
import org.onap.sdc.api.IDistributionClient;
+import org.onap.sdc.api.consumer.INotificationCallback;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.sdc.api.notification.INotificationData;
+import org.onap.sdc.api.results.IDistributionClientDownloadResult;
import org.onap.sdc.api.results.IDistributionClientResult;
import org.onap.sdc.impl.DistributionClientFactory;
import org.onap.sdc.utils.DistributionActionResultEnum;
@@ -34,9 +47,10 @@ import org.onap.sdc.utils.DistributionActionResultEnum;
/**
* Handles reception of inputs from ONAP Service Design and Creation (SDC) from which policies may be decoded.
*/
-public class SdcReceptionHandler extends AbstractReceptionHandler {
+public class SdcReceptionHandler extends AbstractReceptionHandler implements INotificationCallback {
private static final Logger LOGGER = FlexLogger.getLogger(SdcReceptionHandler.class);
+
private SdcReceptionHandlerStatus sdcReceptionHandlerStatus = SdcReceptionHandlerStatus.STOPPED;
private SdcReceptionHandlerConfigurationParameterGroup handlerParameters;
private IDistributionClient distributionClient;
@@ -68,12 +82,21 @@ public class SdcReceptionHandler extends AbstractReceptionHandler {
LOGGER.debug("SDC Client is stopped successfully");
}
+ @Override
+ public void activateCallback(final INotificationData notificationData) {
+ LOGGER.debug("Receieved the notification from SDC with ID: " + notificationData.getDistributionID());
+ changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.BUSY);
+ processCsarServiceArtifacts(notificationData);
+ changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.IDLE);
+ LOGGER.debug("Processed the notification from SDC with ID: " + notificationData.getDistributionID());
+ }
+
/**
* Method to change the status of this reception handler instance.
*
* @param newStatus the new status
*/
- protected synchronized final void changeSdcReceptionHandlerStatus(final SdcReceptionHandlerStatus newStatus) {
+ private synchronized final void changeSdcReceptionHandlerStatus(final SdcReceptionHandlerStatus newStatus) {
switch (newStatus) {
case INIT:
case STOPPED:
@@ -110,7 +133,7 @@ public class SdcReceptionHandler extends AbstractReceptionHandler {
*/
private void initializeSdcClient() throws PluginInitializationException {
- LOGGER.debug("Going to initialize the SDC Client...");
+ LOGGER.debug("Initializing the SDC Client...");
if (sdcReceptionHandlerStatus != SdcReceptionHandlerStatus.STOPPED) {
final String message = "The SDC Client is already initialized";
LOGGER.error(message);
@@ -118,8 +141,7 @@ public class SdcReceptionHandler extends AbstractReceptionHandler {
}
final SdcConfiguration sdcConfig = new SdcConfiguration(handlerParameters);
distributionClient = createSdcDistributionClient();
- final IDistributionClientResult clientResult =
- distributionClient.init(sdcConfig, new SdcNotificationCallBack());
+ final IDistributionClientResult clientResult = distributionClient.init(sdcConfig, this);
if (!clientResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) {
changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.STOPPED);
final String message =
@@ -150,4 +172,91 @@ public class SdcReceptionHandler extends AbstractReceptionHandler {
LOGGER.debug("SDC Client is started successfully");
this.changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.IDLE);
}
+
+ /**
+ * Method to process csar service artifacts from incoming SDC notification.
+ *
+ * @param iNotif the notification from SDC
+ */
+ public void processCsarServiceArtifacts(final INotificationData iNotif) {
+ boolean artifactsProcessedSuccessfully = true;
+
+ for (final IArtifactInfo artifact : iNotif.getServiceArtifacts()) {
+ try {
+ final IDistributionClientDownloadResult resultArtifact = downloadTheArtifact(artifact);
+ final Path filePath = writeArtifactToFile(artifact, resultArtifact);
+ final Csar csarObject = new Csar(filePath.toString());
+ inputReceived(csarObject);
+ // send deploy success status to sdc
+ deleteArtifactFile(filePath);
+ } catch (final ArtifactDownloadException | PolicyDecodingException exp) {
+ LOGGER.error("Failed to process csar service artifacts ", exp);
+ artifactsProcessedSuccessfully = false;
+ // send deploy failed status to sdc
+ }
+ }
+ if (artifactsProcessedSuccessfully) {
+ // send final distribution success status to sdc
+ } else {
+ // send final distribution failed status to sdc
+ }
+ }
+
+ /**
+ * Method to download the distribution artifact.
+ *
+ * @param artifact the artifact
+ * @return the download result
+ * @throws ArtifactDownloadException if download fails
+ */
+ private IDistributionClientDownloadResult downloadTheArtifact(final IArtifactInfo artifact)
+ throws ArtifactDownloadException {
+
+ final IDistributionClientDownloadResult downloadResult = distributionClient.download(artifact);
+ if (!downloadResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) {
+ final String message = "Failed to download artifact with name: " + artifact.getArtifactName();
+ LOGGER.error(message);
+ // send failure download status to sdc
+ throw new ArtifactDownloadException(message);
+ }
+ // send success download status to sdc
+ return downloadResult;
+ }
+
+ /**
+ * Method to write the downloaded distribution artifact to local file system.
+ *
+ * @param artifact the notification artifact
+ * @param resultArtifact the download result artifact
+ * @return the local path of written file
+ * @throws ArtifactDownloadException if error occurs while writing the artifact
+ */
+ private Path writeArtifactToFile(final IArtifactInfo artifact,
+ final IDistributionClientDownloadResult resultArtifact) throws ArtifactDownloadException {
+ try {
+ final byte[] payloadBytes = resultArtifact.getArtifactPayload();
+ final File tempArtifactFile = File.createTempFile(artifact.getArtifactName(), null);
+ try (FileOutputStream fileOutputStream = new FileOutputStream(tempArtifactFile)) {
+ fileOutputStream.write(payloadBytes, 0, payloadBytes.length);
+ return tempArtifactFile.toPath();
+ }
+ } catch (final Exception exp) {
+ final String message = "Failed to write artifact to local repository";
+ LOGGER.error(message, exp);
+ throw new ArtifactDownloadException(message, exp);
+ }
+ }
+
+ /**
+ * Method to delete the downloaded notification artifact from local file system.
+ *
+ * @param filePath the path of file
+ */
+ private void deleteArtifactFile(final Path filePath) {
+ try {
+ Files.deleteIfExists(filePath);
+ } catch (final IOException exp) {
+ LOGGER.error("Failed to delete the downloaded artifact file", exp);
+ }
+ }
}
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdDownloadException.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadException.java
index 14c6b5ea..89f305fd 100644
--- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdDownloadException.java
+++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadException.java
@@ -24,7 +24,7 @@ package org.onap.policy.distribution.reception.handling.sdc.exceptions;
/**
* Exception during download from Pssd.
*/
-public class PssdDownloadException extends Exception {
+public class ArtifactDownloadException extends Exception {
/**
* serialization id.
@@ -36,7 +36,7 @@ public class PssdDownloadException extends Exception {
*
* @param message The message to dump
*/
- public PssdDownloadException (final String message) {
+ public ArtifactDownloadException (final String message) {
super (message);
}
@@ -47,7 +47,7 @@ public class PssdDownloadException extends Exception {
* @param message The message to dump
* @param e the exception that caused this exception to be thrown
*/
- public PssdDownloadException (final String message, final Exception e) {
+ public ArtifactDownloadException (final String message, final Exception e) {
super (message, e);
}
diff --git a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyDecoder.java b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyDecoder.java
new file mode 100644
index 00000000..6a33e787
--- /dev/null
+++ b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyDecoder.java
@@ -0,0 +1,67 @@
+/*-
+ * ============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.policy.distribution.reception.handling.sdc;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.onap.policy.distribution.model.Csar;
+import org.onap.policy.distribution.model.PolicyInput;
+import org.onap.policy.distribution.reception.decoding.PolicyDecoder;
+import org.onap.policy.distribution.reception.decoding.PolicyDecodingException;
+
+/**
+ * Class to create a dummy decoder for test cases.
+ *
+ * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
+ */
+public class DummyDecoder implements PolicyDecoder<Csar, DummyPolicy> {
+
+ public static final String DUMMY_POLICY = "DummyPolicy";
+ private DummyPolicy decodedPolicy;
+
+ /**
+ * {@inheritDoc}.
+ */
+ @Override
+ public boolean canHandle(final PolicyInput policyInput) {
+ return policyInput.getClass().isAssignableFrom(Csar.class);
+ }
+
+ /**
+ * {@inheritDoc}.
+ */
+ @Override
+ public Collection<DummyPolicy> decode(final Csar input) throws PolicyDecodingException {
+ final DummyPolicy dummyPolicy = new DummyPolicy(input.getCsarPath(), DUMMY_POLICY);
+ decodedPolicy = dummyPolicy;
+ return Arrays.asList(dummyPolicy);
+ }
+
+ /**
+ * Returns the policy decoded by this decoder.
+ *
+ * @return the policy
+ */
+ public DummyPolicy getDecodedPolicy() {
+ return decodedPolicy;
+ }
+}
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcNotificationCallBack.java b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicy.java
index 0ea57799..f4c56ab0 100644
--- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcNotificationCallBack.java
+++ b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicy.java
@@ -20,26 +20,43 @@
package org.onap.policy.distribution.reception.handling.sdc;
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-import org.onap.sdc.api.consumer.INotificationCallback;
-import org.onap.sdc.api.notification.INotificationData;
+import org.onap.policy.distribution.model.Policy;
/**
- * Class to provide an implementation of INotificationCallback interface for receiving the incoming distribution
- * notifications from SDC.
+ * Class to create a dummy policy for test cases.
*
* @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
*/
-public class SdcNotificationCallBack implements INotificationCallback {
+public class DummyPolicy implements Policy {
- private static final Logger LOGGER = FlexLogger.getLogger(SdcNotificationCallBack.class);
+ private String policyName;
+ private String policyType;
- @Override
- public void activateCallback(final INotificationData notificationData) {
+ /**
+ * Constructor for instantiating {@link DummyPolicy} class.
+ *
+ * @param policyName the policy name
+ * @param policyType the policy type
+ */
+ public DummyPolicy(final String policyName, final String policyType) {
+ super();
+ this.policyName = policyName;
+ this.policyType = policyType;
+ }
- LOGGER.debug("Got the message from SDC:" + notificationData.getDistributionID());
- // Code for handling notification will come here
+ /**
+ * {@inheritDoc}.
+ */
+ @Override
+ public String getPolicyName() {
+ return policyName;
}
+ /**
+ * {@inheritDoc}.
+ */
+ @Override
+ public String getPolicyType() {
+ return policyType;
+ }
}
diff --git a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicyForwarder.java b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicyForwarder.java
new file mode 100644
index 00000000..cd127e22
--- /dev/null
+++ b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicyForwarder.java
@@ -0,0 +1,77 @@
+/*-
+ * ============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.policy.distribution.reception.handling.sdc;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.onap.policy.distribution.forwarding.PolicyForwarder;
+import org.onap.policy.distribution.forwarding.PolicyForwardingException;
+import org.onap.policy.distribution.model.Policy;
+
+/**
+ * Class to create a dummy forwarder for test cases.
+ *
+ * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
+ */
+public class DummyPolicyForwarder implements PolicyForwarder {
+ private int numberOfPoliciesReceived = 0;
+ private Collection<Policy> policiesReceived = new ArrayList<>();
+
+ /**
+ * {@inheritDoc}.
+ */
+ @Override
+ public void forward(final Collection<Policy> policies) throws PolicyForwardingException {
+ numberOfPoliciesReceived += policies.size();
+ policiesReceived.addAll(policies);
+ }
+
+ /**
+ * Returns the number of policies received by this forwarder.
+ *
+ * @return the integer value
+ */
+ public int getNumberOfPoliciesReceived() {
+ return numberOfPoliciesReceived;
+ }
+
+ /**
+ * Checks if the forwarder has received a policy with given policy type.
+ *
+ * @param policyType the policy type
+ * @return the boolean result
+ */
+ public boolean receivedPolicyWithGivenType(final String policyType) {
+ for (final Policy policy : policiesReceived) {
+ if (policy.getPolicyType().equals(policyType)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}.
+ */
+ @Override
+ public void configure(final String parameterGroupName) {}
+}
diff --git a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestSdcReceptionHandler.java b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestSdcReceptionHandler.java
index c876f99c..a648f807 100644
--- a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestSdcReceptionHandler.java
+++ b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestSdcReceptionHandler.java
@@ -20,6 +20,7 @@
package org.onap.policy.distribution.reception.handling.sdc;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
@@ -29,6 +30,12 @@ import com.google.gson.GsonBuilder;
import java.io.FileReader;
import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import org.junit.After;
import org.junit.Before;
@@ -40,8 +47,19 @@ import org.mockito.runners.MockitoJUnitRunner;
import org.onap.policy.common.logging.flexlogger.FlexLogger;
import org.onap.policy.common.logging.flexlogger.Logger;
import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.distribution.forwarding.PolicyForwarder;
+import org.onap.policy.distribution.forwarding.parameters.PolicyForwarderParameters;
+import org.onap.policy.distribution.model.Csar;
import org.onap.policy.distribution.reception.decoding.PluginInitializationException;
import org.onap.policy.distribution.reception.decoding.PluginTerminationException;
+import org.onap.policy.distribution.reception.decoding.PolicyDecoder;
+import org.onap.policy.distribution.reception.handling.AbstractReceptionHandler;
+import org.onap.policy.distribution.reception.handling.PluginHandler;
+import org.onap.policy.distribution.reception.parameters.PluginHandlerParameters;
+import org.onap.policy.distribution.reception.parameters.PolicyDecoderParameters;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.sdc.api.notification.INotificationData;
+import org.onap.sdc.api.results.IDistributionClientDownloadResult;
import org.onap.sdc.api.results.IDistributionClientResult;
import org.onap.sdc.impl.mock.DistributionClientStubImpl;
import org.onap.sdc.utils.DistributionActionResultEnum;
@@ -55,6 +73,7 @@ import org.onap.sdc.utils.DistributionActionResultEnum;
public class TestSdcReceptionHandler {
private static final Logger LOGGER = FlexLogger.getLogger(TestSdcReceptionHandler.class);
+ private static final String DUMMY_SERVICE_CSAR = "dummyService.csar";
@Mock
private IDistributionClientResult successfulClientInitResult;
@@ -62,10 +81,17 @@ public class TestSdcReceptionHandler {
private IDistributionClientResult failureClientInitResult;
@Mock
private DistributionClientStubImpl distributionClient;
+ @Mock
+ private IDistributionClientDownloadResult successfulClientDownloadResult;
+ @Mock
+ private INotificationData notificationData;
+ @Mock
+ private IArtifactInfo artifactInfo;
private SdcReceptionHandlerConfigurationParameterGroup pssdConfigParameters;
private SdcReceptionHandler sypHandler;
+
/**
* Setup for the test cases.
*
@@ -79,12 +105,20 @@ public class TestSdcReceptionHandler {
ParameterService.register(pssdConfigParameters);
final SdcReceptionHandler sdcHandler = new SdcReceptionHandler();
sypHandler = Mockito.spy(sdcHandler);
+
Mockito.when(sypHandler.createSdcDistributionClient()).thenReturn(distributionClient);
Mockito.when(distributionClient.init(any(), any())).thenReturn(successfulClientInitResult);
Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult);
Mockito.when(distributionClient.stop()).thenReturn(successfulClientInitResult);
+ Mockito.when(distributionClient.download(any())).thenReturn(successfulClientDownloadResult);
+ Mockito.when(notificationData.getServiceArtifacts()).thenReturn(Arrays.asList(artifactInfo));
+ Mockito.when(artifactInfo.getArtifactName()).thenReturn(DUMMY_SERVICE_CSAR);
+ Mockito.when(successfulClientDownloadResult.getArtifactPayload()).thenReturn(new byte[1]);
Mockito.when(successfulClientInitResult.getDistributionActionResult())
.thenReturn(DistributionActionResultEnum.SUCCESS);
+ Mockito.when(successfulClientDownloadResult.getDistributionActionResult())
+ .thenReturn(DistributionActionResultEnum.SUCCESS);
+
}
@After
@@ -176,4 +210,97 @@ public class TestSdcReceptionHandler {
assertTrue(exp.getMessage().startsWith("SDC client stop failed with reason"));
}
}
+
+ @Test
+ public void testNotificationCallBack() throws NoSuchFieldException, SecurityException, IllegalArgumentException,
+ IllegalAccessException, PluginInitializationException {
+
+ final DummyDecoder policyDecoder = new DummyDecoder();
+ final Collection<PolicyDecoder<Csar, DummyPolicy>> policyDecoders = new ArrayList<>();
+ policyDecoders.add(policyDecoder);
+
+ final DummyPolicyForwarder policyForwarder = new DummyPolicyForwarder();
+ final Collection<PolicyForwarder> policyForwarders = new ArrayList<>();
+ policyForwarders.add(policyForwarder);
+
+ setUpPlugins(sypHandler, policyDecoders, policyForwarders);
+ sypHandler.initializeReception(pssdConfigParameters.getName());
+ sypHandler.activateCallback(notificationData);
+
+ assertEquals(DummyDecoder.DUMMY_POLICY, policyDecoder.getDecodedPolicy().getPolicyType());
+ assertTrue(policyDecoder.getDecodedPolicy().getPolicyName().contains(DUMMY_SERVICE_CSAR));
+ assertEquals(1, policyForwarder.getNumberOfPoliciesReceived());
+ assertTrue(policyForwarder.receivedPolicyWithGivenType(DummyDecoder.DUMMY_POLICY));
+ }
+
+ @Test
+ public void testDownloadArtifactFailure() throws NoSuchFieldException, SecurityException, IllegalArgumentException,
+ IllegalAccessException, PluginInitializationException {
+
+ Mockito.when(successfulClientDownloadResult.getDistributionActionResult())
+ .thenReturn(DistributionActionResultEnum.FAIL);
+
+ final DummyDecoder policyDecoder = new DummyDecoder();
+ final Collection<PolicyDecoder<Csar, DummyPolicy>> policyDecoders = new ArrayList<>();
+ policyDecoders.add(policyDecoder);
+
+ final DummyPolicyForwarder policyForwarder = new DummyPolicyForwarder();
+ final Collection<PolicyForwarder> policyForwarders = new ArrayList<>();
+ policyForwarders.add(policyForwarder);
+
+ setUpPlugins(sypHandler, policyDecoders, policyForwarders);
+ sypHandler.initializeReception(pssdConfigParameters.getName());
+ sypHandler.activateCallback(notificationData);
+
+ assertEquals(null, policyDecoder.getDecodedPolicy());
+ assertEquals(0, policyForwarder.getNumberOfPoliciesReceived());
+ }
+
+ private void setUpPlugins(final AbstractReceptionHandler receptionHandler,
+ final Collection<PolicyDecoder<Csar, DummyPolicy>> decoders, final Collection<PolicyForwarder> forwarders)
+ throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException,
+ PluginInitializationException {
+ final PluginHandlerParameters pluginParameters = getPluginHandlerParameters();
+ pluginParameters.setName("DummyDistributionGroup");
+ ParameterService.register(pluginParameters);
+ final PluginHandler pluginHandler = new PluginHandler(pluginParameters.getName());
+
+ final Field decodersField = pluginHandler.getClass().getDeclaredField("policyDecoders");
+ decodersField.setAccessible(true);
+ decodersField.set(pluginHandler, decoders);
+
+ final Field forwardersField = pluginHandler.getClass().getDeclaredField("policyForwarders");
+ forwardersField.setAccessible(true);
+ forwardersField.set(pluginHandler, forwarders);
+
+ final Field pluginHandlerField = AbstractReceptionHandler.class.getDeclaredField("pluginHandler");
+ pluginHandlerField.setAccessible(true);
+ pluginHandlerField.set(receptionHandler, pluginHandler);
+ ParameterService.deregister(pluginParameters.getName());
+ }
+
+ private PluginHandlerParameters getPluginHandlerParameters() {
+ final Map<String, PolicyDecoderParameters> policyDecoders = getPolicyDecoders();
+ final Map<String, PolicyForwarderParameters> policyForwarders = getPolicyForwarders();
+ final PluginHandlerParameters pluginHandlerParameters =
+ new PluginHandlerParameters(policyDecoders, policyForwarders);
+ return pluginHandlerParameters;
+ }
+
+ private Map<String, PolicyDecoderParameters> getPolicyDecoders() {
+ final Map<String, PolicyDecoderParameters> policyDecoders = new HashMap<String, PolicyDecoderParameters>();
+ final PolicyDecoderParameters pDParameters = new PolicyDecoderParameters("DummyDecoder",
+ "org.onap.policy.distribution.reception.handling.sdc.DummyDecoder");
+ policyDecoders.put("DummyDecoderKey", pDParameters);
+ return policyDecoders;
+ }
+
+ private Map<String, PolicyForwarderParameters> getPolicyForwarders() {
+ final Map<String, PolicyForwarderParameters> policyForwarders =
+ new HashMap<String, PolicyForwarderParameters>();
+ final PolicyForwarderParameters pFParameters = new PolicyForwarderParameters("DummyForwarder",
+ "org.onap.policy.distribution.reception.handling.sdc.DummyPolicyForwarder", "DummyConfiguration");
+ policyForwarders.put("DummyForwarderKey", pFParameters);
+ return policyForwarders;
+ }
}
diff --git a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdDownloadExceptionTest.java b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadExceptionTest.java
index 9f76b375..6d275f7a 100644
--- a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdDownloadExceptionTest.java
+++ b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadExceptionTest.java
@@ -26,11 +26,11 @@ import java.io.IOException;
import org.junit.Test;
-public class PssdDownloadExceptionTest {
+public class ArtifactDownloadExceptionTest {
@Test
public void test() {
- assertNotNull(new PssdDownloadException("Message"));
- assertNotNull(new PssdDownloadException("Message", new IOException()));
+ assertNotNull(new ArtifactDownloadException("Message"));
+ assertNotNull(new ArtifactDownloadException("Message", new IOException()));
}
}