+/**\r
+ * ============LICENSE_START=======================================================\r
+ * org.onap.aai\r
+ * ================================================================================\r
+ * Copyright © 2017 AT&T Intellectual Property.\r
+ * Copyright © 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
+ */\r
+package org.onap.aai.modelloader.notification;\r
+\r
+import com.google.gson.Gson;\r
+import com.google.gson.GsonBuilder;\r
+import com.google.gson.InstanceCreator;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.mockito.Mock;\r
+import org.mockito.Mockito;\r
+import org.mockito.MockitoAnnotations;\r
+import org.onap.aai.modelloader.config.ModelLoaderConfig;\r
+import org.openecomp.sdc.api.IDistributionClient;\r
+import org.openecomp.sdc.api.consumer.INotificationCallback;\r
+import org.openecomp.sdc.api.notification.IArtifactInfo;\r
+import org.openecomp.sdc.api.notification.INotificationData;\r
+import org.openecomp.sdc.api.notification.IResourceInstance;\r
+import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;\r
+import org.openecomp.sdc.api.results.IDistributionClientResult;\r
+import org.openecomp.sdc.impl.DistributionClientFactory;\r
+import org.openecomp.sdc.impl.DistributionClientImpl;\r
+import org.openecomp.sdc.utils.DistributionActionResultEnum;\r
+\r
+import java.lang.reflect.Type;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+public class EventCallbackTest {\r
+\r
+ ModelLoaderConfig config;\r
+ DistributionClientImpl client;\r
+ EventCallback callBack;\r
+\r
+ @Before\r
+ public void init(){\r
+ MockitoAnnotations.initMocks(this);\r
+ Properties props = new Properties();\r
+ props.setProperty("ml.distribution.ARTIFACT_TYPES",\r
+ "MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG");\r
+ config = new ModelLoaderConfig(props, null);\r
+ client = Mockito.spy(DistributionClientImpl.class);\r
+ callBack = new EventCallback(client, config);\r
+ }\r
+\r
+ @Test\r
+ public void testActivateCallBack_PublishFailure(){\r
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();\r
+ NotificationDataInstance notification = gson.fromJson(getNotificationWithMultipleResources(),\r
+ NotificationDataInstance.class);\r
+\r
+ TestConfiguration testConfig = new TestConfiguration();\r
+ Mockito.when(client.getConfiguration()).thenReturn(testConfig);\r
+ callBack.activateCallback(notification);\r
+ }\r
+\r
+ @Test\r
+ public void testActivateCallBack_PublishSuccess(){\r
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();\r
+ NotificationDataInstance notification = gson.fromJson(getNotificationWithMultipleResources(),\r
+ NotificationDataInstance.class);\r
+\r
+ TestConfiguration testConfig = new TestConfiguration();\r
+ Mockito.when(client.download(Mockito.any(IArtifactInfo.class))).thenReturn(buildSuccessResult());\r
+ Mockito.when(client.getConfiguration()).thenReturn(testConfig);\r
+ callBack.activateCallback(notification);\r
+ }\r
+\r
+ private static IDistributionClientDownloadResult buildSuccessResult() {\r
+ return new IDistributionClientDownloadResult() {\r
+\r
+ @Override\r
+ public byte[] getArtifactPayload() {\r
+ return new byte[0];\r
+ }\r
+\r
+ @Override\r
+ public String getArtifactName() {\r
+ return "";\r
+ }\r
+\r
+ @Override\r
+ public String getArtifactFilename() {\r
+ return "";\r
+ }\r
+\r
+ @Override\r
+ public String getDistributionMessageResult() {\r
+ return "";\r
+ }\r
+\r
+ @Override\r
+ public DistributionActionResultEnum getDistributionActionResult() {\r
+ return DistributionActionResultEnum.SUCCESS;\r
+ }\r
+ };\r
+ }\r
+\r
+ private String getNotificationWithMultipleResources(){\r
+ return "{\"distributionID\" : \"bcc7a72e-90b1-4c5f-9a37-28dc3cd86416\",\r\n" +\r
+ " \"serviceName\" : \"Testnotificationser1\",\r\n" +\r
+ " \"serviceVersion\" : \"1.0\",\r\n" +\r
+ " \"serviceUUID\" : \"7f7f94f4-373a-4b71-a0e3-80ae2ba4eb5d\",\r\n" +\r
+ " \"serviceDescription\" : \"TestNotificationVF1\",\r\n" +\r
+ " \"resources\" : [{\r\n" +\r
+ " \"resourceInstanceName\" : \"testnotificationvf11\",\r\n" +\r
+ " \"resourceName\" : \"TestNotificationVF1\",\r\n" +\r
+ " \"resourceVersion\" : \"1.0\",\r\n" +\r
+ " \"resoucreType\" : \"VF\",\r\n" +\r
+ " \"resourceUUID\" : \"907e1746-9f69-40f5-9f2a-313654092a2d\",\r\n" +\r
+ " \"artifacts\" : [{\r\n" +\r
+ " \"artifactName\" : \"sample-xml-alldata-1-1.xml\",\r\n" +\r
+ " \"artifactType\" : \"YANG_XML\",\r\n" +\r
+ " \"artifactURL\" : \"/sdc/v1/catalog/services/Testnotificationser1/1.0/" +\r
+ " resourceInstances/testnotificationvf11/artifacts/" +\r
+ " sample-xml-alldata-1-1.xml\",\r\n" +\r
+ " \"artifactChecksum\" : \"MTUxODFkMmRlOTNhNjYxMGYyYTI1ZjA5Y2QyNWQyYTk\\u003d\",\r\n" +\r
+ " \"artifactDescription\" : \"MyYang\",\r\n" +\r
+ " \"artifactTimeout\" : 0,\r\n" +\r
+ " \"artifactUUID\" : \"0005bc4a-2c19-452e-be6d-d574a56be4d0\",\r\n" +\r
+ " \"artifactVersion\" : \"1\"\r\n" +\r
+ " }" +\r
+ " ]\r\n" +\r
+ " },\r\n" +\r
+ " {\r\n" +\r
+ " \"resourceInstanceName\" : \"testnotificationvf12\",\r\n" +\r
+ " \"resourceName\" : \"TestNotificationVF1\",\r\n" +\r
+ " \"resourceVersion\" : \"1.0\",\r\n" +\r
+ " \"resoucreType\" : \"VF\",\r\n" +\r
+ " \"resourceUUID\" : \"907e1746-9f69-40f5-9f2a-313654092a2e\",\r\n" +\r
+ " \"artifacts\" : [{\r\n" +\r
+ " \"artifactName\" : \"heat.yaml\",\r\n" +\r
+ " \"artifactType\" : \"HEAT\",\r\n" +\r
+ " \"artifactURL\" : \"/sdc/v1/catalog/services/Testnotificationser1/1.0/" +\r
+ " resourceInstances/testnotificationvf11/artifacts/" +\r
+ " heat.yaml\",\r\n" +\r
+ " \"artifactChecksum\" : \"ODEyNjE4YTMzYzRmMTk2ODVhNTU2NTg3YWEyNmIxMTM\\u003d\",\r\n" +\r
+ " \"artifactDescription\" : \"heat\",\r\n" +\r
+ " \"artifactTimeout\" : 60,\r\n" +\r
+ " \"artifactUUID\" : \"8df6123c-f368-47d3-93be-1972cefbcc35\",\r\n" +\r
+ " \"artifactVersion\" : \"1\"\r\n" +\r
+ " }" +\r
+ " ]\r\n" +\r
+ " }\r\n" +\r
+ " ]}";\r
+ }\r
+}\r
+\r
+class NotificationDataInstance implements INotificationData{\r
+\r
+ private String distributionID;\r
+ private String serviceName;\r
+ private String serviceVersion;\r
+ private String serviceUUID;\r
+ private String serviceDescription;\r
+ private String serviceInvariantUUID;\r
+ private List<JsonContainerResourceInstance> resources;\r
+ private List<ArtifactInfoImpl> serviceArtifacts;\r
+ private String workloadContext;\r
+\r
+ @Override\r
+ public String getDistributionID() {\r
+ return distributionID;\r
+ }\r
+\r
+ @Override\r
+ public String getServiceName() {\r
+ return serviceName;\r
+ }\r
+\r
+ @Override\r
+ public String getServiceVersion() {\r
+ return serviceVersion;\r
+ }\r
+\r
+ @Override\r
+ public String getServiceUUID() {\r
+ return serviceUUID;\r
+ }\r
+\r
+ public void setDistributionID(String distributionID) {\r
+ this.distributionID = distributionID;\r
+ }\r
+\r
+ public void setServiceName(String serviceName) {\r
+ this.serviceName = serviceName;\r
+ }\r
+\r
+ public void setServiceVersion(String serviceVersion) {\r
+ this.serviceVersion = serviceVersion;\r
+ }\r
+\r
+ public void setServiceUUID(String serviceUUID) {\r
+ this.serviceUUID = serviceUUID;\r
+ }\r
+\r
+\r
+\r
+ public String getServiceDescription() {\r
+ return serviceDescription;\r
+ }\r
+\r
+ public void setServiceDescription(String serviceDescription) {\r
+ this.serviceDescription = serviceDescription;\r
+ }\r
+\r
+ public String getWorkloadContext() {\r
+ return workloadContext;\r
+ }\r
+\r
+ public void setWorkloadContext(String workloadContext) {\r
+ this.workloadContext = workloadContext;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return "NotificationDataImpl [distributionID=" + distributionID + ", serviceName=" + serviceName\r
+ + ", serviceVersion=" + serviceVersion + ", serviceUUID=" + serviceUUID + ", serviceDescription="\r
+ + serviceDescription + ", serviceInvariantUUID=" + serviceInvariantUUID + ", resources=" + resources\r
+ + ", serviceArtifacts=" + serviceArtifacts + ", workloadContext=" + workloadContext + "]";\r
+ }\r
+\r
+ @Override\r
+ public List<IResourceInstance> getResources() {\r
+ List<IResourceInstance> ret = new ArrayList<IResourceInstance>();\r
+ if( resources != null ){\r
+ ret.addAll(resources);\r
+ }\r
+ return ret;\r
+ }\r
+\r
+ public void setResources(List<IResourceInstance> resources){\r
+ this.resources = JsonContainerResourceInstance.convertToJsonContainer(resources);\r
+ }\r
+\r
+ public List<JsonContainerResourceInstance> getResourcesImpl(){\r
+ return resources;\r
+ }\r
+\r
+ List<ArtifactInfoImpl> getServiceArtifactsImpl(){\r
+ return serviceArtifacts;\r
+ }\r
+\r
+ @Override\r
+ public List<IArtifactInfo> getServiceArtifacts() {\r
+\r
+ List<IArtifactInfo> temp = new ArrayList<IArtifactInfo>();\r
+ if( serviceArtifacts != null ){\r
+ temp.addAll(serviceArtifacts);\r
+ }\r
+ return temp;\r
+ }\r
+\r
+ void setServiceArtifacts(List<ArtifactInfoImpl> relevantServiceArtifacts) {\r
+ serviceArtifacts = relevantServiceArtifacts;\r
+\r
+ }\r
+\r
+ @Override\r
+ public String getServiceInvariantUUID() {\r
+ return serviceInvariantUUID;\r
+ }\r
+\r
+\r
+ public void setServiceInvariantUUID(String serviceInvariantUUID) {\r
+ this.serviceInvariantUUID = serviceInvariantUUID;\r
+ }\r
+ @Override\r
+ public IArtifactInfo getArtifactMetadataByUUID(String artifactUUID){\r
+ IArtifactInfo ret = findArtifactInfoByUUID(artifactUUID, serviceArtifacts);\r
+ if( ret == null && resources != null ){\r
+ for( JsonContainerResourceInstance currResourceInstance : resources ){\r
+ ret = findArtifactInfoByUUID(artifactUUID, currResourceInstance.getArtifactsImpl());\r
+ if( ret != null ){\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ return ret;\r
+\r
+ }\r
+\r
+ private IArtifactInfo findArtifactInfoByUUID(String artifactUUID, List<ArtifactInfoImpl> listToCheck) {\r
+ IArtifactInfo ret = null;\r
+ if( listToCheck != null ){\r
+ for(IArtifactInfo curr: listToCheck ){\r
+ if(curr.getArtifactUUID().equals(artifactUUID) ){\r
+ ret = curr;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ return ret;\r
+ }\r
+}\r
+\r
+class ArtifactInfoImpl implements IArtifactInfo{\r
+\r
+ private String artifactName;\r
+ private String artifactType;\r
+ private String artifactURL;\r
+ private String artifactChecksum;\r
+ private String artifactDescription;\r
+ private Integer artifactTimeout;\r
+ private String artifactVersion;\r
+ private String artifactUUID;\r
+ private String generatedFromUUID;\r
+ private IArtifactInfo generatedArtifact;\r
+ private List<String> relatedArtifacts;\r
+ private List<IArtifactInfo> relatedArtifactsInfo;\r
+ ArtifactInfoImpl(){}\r
+\r
+ private ArtifactInfoImpl(IArtifactInfo iArtifactInfo){\r
+ artifactName = iArtifactInfo.getArtifactName();\r
+ artifactType = iArtifactInfo.getArtifactType();\r
+ artifactURL = iArtifactInfo.getArtifactURL();\r
+ artifactChecksum = iArtifactInfo.getArtifactChecksum();\r
+ artifactDescription = iArtifactInfo.getArtifactDescription();\r
+ artifactTimeout = iArtifactInfo.getArtifactTimeout();\r
+ artifactVersion = iArtifactInfo.getArtifactVersion();\r
+ artifactUUID = iArtifactInfo.getArtifactUUID();\r
+ generatedArtifact = iArtifactInfo.getGeneratedArtifact();\r
+ relatedArtifactsInfo = iArtifactInfo.getRelatedArtifacts();\r
+ relatedArtifacts = fillRelatedArtifactsUUID(relatedArtifactsInfo);\r
+\r
+ }\r
+\r
+\r
+ private List<String> fillRelatedArtifactsUUID(List<IArtifactInfo> relatedArtifactsInfo) {\r
+ List<String> relatedArtifactsUUID = null;\r
+ if( relatedArtifactsInfo != null && !relatedArtifactsInfo.isEmpty()){\r
+ relatedArtifactsUUID = new ArrayList<>();\r
+ for(IArtifactInfo curr: relatedArtifactsInfo){\r
+ relatedArtifactsUUID.add(curr.getArtifactUUID());\r
+ }\r
+ }\r
+ return relatedArtifactsUUID;\r
+ }\r
+\r
+ public static List<ArtifactInfoImpl> convertToArtifactInfoImpl(List<IArtifactInfo> list){\r
+ List<ArtifactInfoImpl> ret = new ArrayList<ArtifactInfoImpl>();\r
+ if( list != null ){\r
+ for(IArtifactInfo artifactInfo : list ){\r
+ ret.add(new ArtifactInfoImpl(artifactInfo));\r
+ }\r
+ }\r
+ return ret;\r
+ }\r
+\r
+ public String getArtifactName() {\r
+ return artifactName;\r
+ }\r
+\r
+ public void setArtifactName(String artifactName) {\r
+ this.artifactName = artifactName;\r
+ }\r
+\r
+ public String getArtifactType() {\r
+ return artifactType;\r
+ }\r
+\r
+ public void setArtifactType(String artifactType) {\r
+ this.artifactType = artifactType;\r
+ }\r
+\r
+ public String getArtifactURL() {\r
+ return artifactURL;\r
+ }\r
+\r
+ public void setArtifactURL(String artifactURL) {\r
+ this.artifactURL = artifactURL;\r
+ }\r
+\r
+ public String getArtifactChecksum() {\r
+ return artifactChecksum;\r
+ }\r
+\r
+ public void setArtifactChecksum(String artifactChecksum) {\r
+ this.artifactChecksum = artifactChecksum;\r
+ }\r
+\r
+ public String getArtifactDescription() {\r
+ return artifactDescription;\r
+ }\r
+\r
+ public void setArtifactDescription(String artifactDescription) {\r
+ this.artifactDescription = artifactDescription;\r
+ }\r
+\r
+ public Integer getArtifactTimeout() {\r
+ return artifactTimeout;\r
+ }\r
+\r
+ public void setArtifactTimeout(Integer artifactTimeout) {\r
+ this.artifactTimeout = artifactTimeout;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return "BaseArtifactInfoImpl [artifactName=" + artifactName\r
+ + ", artifactType=" + artifactType + ", artifactURL="\r
+ + artifactURL + ", artifactChecksum=" + artifactChecksum\r
+ + ", artifactDescription=" + artifactDescription\r
+ + ", artifactVersion=" + artifactVersion\r
+ + ", artifactUUID=" + artifactUUID\r
+ + ", artifactTimeout=" + artifactTimeout + "]";\r
+ }\r
+\r
+ public String getArtifactVersion() {\r
+ return artifactVersion;\r
+ }\r
+\r
+ public void setArtifactVersion(String artifactVersion) {\r
+ this.artifactVersion = artifactVersion;\r
+ }\r
+\r
+ public String getArtifactUUID() {\r
+ return artifactUUID;\r
+ }\r
+\r
+ public void setArtifactUUID(String artifactUUID) {\r
+ this.artifactUUID = artifactUUID;\r
+ }\r
+\r
+ public String getGeneratedFromUUID() {\r
+ return generatedFromUUID;\r
+ }\r
+\r
+ public void setGeneratedFromUUID(String generatedFromUUID) {\r
+ this.generatedFromUUID = generatedFromUUID;\r
+ }\r
+\r
+ public IArtifactInfo getGeneratedArtifact() {\r
+ return generatedArtifact;\r
+ }\r
+\r
+ public void setGeneratedArtifact(IArtifactInfo generatedArtifact) {\r
+ this.generatedArtifact = generatedArtifact;\r
+ }\r
+\r
+ public List<IArtifactInfo> getRelatedArtifacts(){\r
+ List<IArtifactInfo> temp = new ArrayList<IArtifactInfo>();\r
+ if( relatedArtifactsInfo != null ){\r
+ temp.addAll(relatedArtifactsInfo);\r
+ }\r
+ return temp;\r
+ }\r
+\r
+ public void setRelatedArtifacts(List<String> relatedArtifacts) {\r
+ this.relatedArtifacts = relatedArtifacts;\r
+ }\r
+\r
+ public void setRelatedArtifactsInfo(List<IArtifactInfo> relatedArtifactsInfo) {\r
+ this.relatedArtifactsInfo = relatedArtifactsInfo;\r
+ }\r
+\r
+ public List<String> getRelatedArtifactsUUID(){\r
+ return relatedArtifacts;\r
+ }\r
+}\r
+\r
+class JsonContainerResourceInstance implements IResourceInstance{\r
+ JsonContainerResourceInstance (){}\r
+ private String resourceInstanceName;\r
+ private String resourceCustomizationUUID;\r
+ private String resourceName;\r
+ private String resourceVersion;\r
+ private String resoucreType;\r
+ private String resourceUUID;\r
+ private String resourceInvariantUUID;\r
+ private String category;\r
+ private String subcategory;\r
+ private List<ArtifactInfoImpl> artifacts;\r
+\r
+ private JsonContainerResourceInstance(IResourceInstance resourceInstance){\r
+ resourceInstanceName = resourceInstance.getResourceInstanceName();\r
+ resourceCustomizationUUID = resourceInstance.getResourceCustomizationUUID();\r
+ resourceName = resourceInstance.getResourceName();\r
+ resourceVersion = resourceInstance.getResourceVersion();\r
+ resoucreType = resourceInstance.getResourceType();\r
+ resourceUUID = resourceInstance.getResourceUUID();\r
+ resourceInvariantUUID = resourceInstance.getResourceInvariantUUID();\r
+ category = resourceInstance.getCategory();\r
+ subcategory = resourceInstance.getSubcategory();\r
+ artifacts = ArtifactInfoImpl.convertToArtifactInfoImpl(resourceInstance.getArtifacts());\r
+ }\r
+\r
+ public static List<JsonContainerResourceInstance> convertToJsonContainer(List<IResourceInstance> resources){\r
+ List<JsonContainerResourceInstance> buildResources = new ArrayList<JsonContainerResourceInstance>();\r
+ if( resources != null ){\r
+ for( IResourceInstance resourceInstance : resources ){\r
+ buildResources.add(new JsonContainerResourceInstance(resourceInstance));\r
+ }\r
+ }\r
+ return buildResources;\r
+ }\r
+\r
+ @Override\r
+ public String getResourceInstanceName() {\r
+ return resourceInstanceName;\r
+ }\r
+\r
+ public void setResourceInstanceName(String resourceInstanceName) {\r
+ this.resourceInstanceName = resourceInstanceName;\r
+ }\r
+\r
+ @Override\r
+ public String getResourceName() {\r
+ return resourceName;\r
+ }\r
+\r
+ public void setResourceName(String resourceName) {\r
+ this.resourceName = resourceName;\r
+ }\r
+\r
+ @Override\r
+ public String getResourceVersion() {\r
+ return resourceVersion;\r
+ }\r
+\r
+ public void setResourceVersion(String resourceVersion) {\r
+ this.resourceVersion = resourceVersion;\r
+ }\r
+\r
+ @Override\r
+ public String getResourceType() {\r
+ return resoucreType;\r
+ }\r
+\r
+ public void setResoucreType(String resoucreType) {\r
+ this.resoucreType = resoucreType;\r
+ }\r
+\r
+ @Override\r
+ public String getResourceUUID() {\r
+ return resourceUUID;\r
+ }\r
+\r
+ public void setResourceUUID(String resourceUUID) {\r
+ this.resourceUUID = resourceUUID;\r
+ }\r
+\r
+ @Override\r
+ public List<IArtifactInfo> getArtifacts() {\r
+ List<IArtifactInfo> temp = new ArrayList<IArtifactInfo>();\r
+ if( artifacts != null ){\r
+ temp.addAll(artifacts);\r
+ }\r
+ return temp;\r
+ }\r
+\r
+ public void setArtifacts(List<ArtifactInfoImpl> artifacts) {\r
+ this.artifacts = artifacts;\r
+ }\r
+\r
+ public List<ArtifactInfoImpl> getArtifactsImpl(){\r
+ return artifacts;\r
+ }\r
+\r
+ @Override\r
+ public String getResourceInvariantUUID() {\r
+ return resourceInvariantUUID;\r
+ }\r
+\r
+ public void setResourceInvariantUUID(String resourceInvariantUUID) {\r
+ this.resourceInvariantUUID = resourceInvariantUUID;\r
+ }\r
+ public String getResourceCustomizationUUID() {\r
+ return resourceCustomizationUUID;\r
+ }\r
+\r
+ public void setResourceCustomizationUUID(String resourceCustomizationUUID) {\r
+ this.resourceCustomizationUUID = resourceCustomizationUUID;\r
+ }\r
+\r
+ public String getCategory() {\r
+ return category;\r
+ }\r
+\r
+ public void setCategory(String category) {\r
+ this.category = category;\r
+ }\r
+\r
+ public String getSubcategory() {\r
+ return subcategory;\r
+ }\r
+\r
+ public void setSubcategory(String subcategory) {\r
+ this.subcategory = subcategory;\r
+ }\r
+}\r