fix for SO-2696 94/102894/1
authorwaqas.ikram <waqas.ikram@est.tech>
Tue, 3 Mar 2020 16:48:37 +0000 (16:48 +0000)
committerwaqas.ikram <waqas.ikram@est.tech>
Tue, 3 Mar 2020 17:37:59 +0000 (17:37 +0000)
Change-Id: I00199f5d03fe6bdc517578506d4f21cca4d62c56
Issue-ID: SO-2696
Signed-off-by: waqas.ikram <waqas.ikram@est.tech>
adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/converters/sol003/etsicatalog/PkgmSubscriptionRequestConverter.java
adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/test/java/org/onap/so/adapters/vnfmadapter/rest/Sol003PackageManagementSubscriptionControllerTest.java
adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/test/resources/requests/SubscriptionRequest.json [new file with mode: 0644]

index d0fd4c9..6d566c0 100644 (file)
@@ -50,7 +50,7 @@ public class PkgmSubscriptionRequestConverter implements
 
     @Override
     public org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.PkgmSubscriptionRequest convert(
-            PkgmSubscriptionRequest pkgmSubscriptionRequest) {
+            final PkgmSubscriptionRequest pkgmSubscriptionRequest) {
         final org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.PkgmSubscriptionRequest etsiCatalogManagerSubscriptionRequest =
                 new org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.PkgmSubscriptionRequest();
 
@@ -86,8 +86,10 @@ public class PkgmSubscriptionRequestConverter implements
         return etsiCatalogManagerFilters;
     }
 
-    // TODO 'operationalState' in the Sol003 Swagger is type 'OperationalStateEnum'. The ETSI Catalog Manager Swagger
-    // 'operationalState' is type 'List<OperationalStateEnum>'. This method needs to be updated once swagger is updated.
+    // TODO 'operationalState' in the Sol003 Swagger is type 'OperationalStateEnum'. The ETSI
+    // Catalog Manager Swagger
+    // 'operationalState' is type 'List<OperationalStateEnum>'. This method needs to be updated once
+    // swagger is updated.
     private List<org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.PkgmNotificationsFilter.OperationalStateEnum> getOperationalState(
             final OperationalStateEnum operationalState) {
         if (operationalState != null) {
@@ -104,6 +106,7 @@ public class PkgmSubscriptionRequestConverter implements
             vnfPkgId.forEach(type -> {
                 etsiCatalogManagerVnfPkgId.add(type);
             });
+            return etsiCatalogManagerVnfPkgId;
         }
         return Collections.emptyList();
     }
@@ -114,6 +117,7 @@ public class PkgmSubscriptionRequestConverter implements
             vnfdId.forEach(type -> {
                 etsiCatalogManagerVnfdId.add(type);
             });
+            return etsiCatalogManagerVnfdId;
         }
         return Collections.emptyList();
     }
@@ -147,7 +151,7 @@ public class PkgmSubscriptionRequestConverter implements
 
     private List<Version> getVersion(final List<SubscriptionsFilterVersions> sol003FilterVersions) {
         if (sol003FilterVersions != null && !sol003FilterVersions.isEmpty()) {
-            List<Version> etsiCatalogVersionList = new ArrayList<>();
+            final List<Version> etsiCatalogVersionList = new ArrayList<>();
             sol003FilterVersions.forEach(vnfFilterVersion -> {
                 etsiCatalogVersionList.add(new Version().vnfSoftwareVersion(vnfFilterVersion.getVnfSoftwareVersion())
                         .vnfdVersions(vnfFilterVersion.getVnfdVersions()));
@@ -166,6 +170,7 @@ public class PkgmSubscriptionRequestConverter implements
             notificationTypes.forEach(type -> etsiCatalogManagerNotificationTypes.add(
                     org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.PkgmNotificationsFilter.NotificationTypesEnum
                             .fromValue(type.getValue())));
+            return etsiCatalogManagerNotificationTypes;
         }
         return Collections.emptyList();
     }
index ba1bf71..7466895 100644 (file)
@@ -26,28 +26,38 @@ import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 import static org.onap.so.adapters.vnfmadapter.Constants.PACKAGE_MANAGEMENT_BASE_URL;
 import static org.onap.so.client.RestTemplateConfig.CONFIGURABLE_REST_TEMPLATE;
 import static org.springframework.test.web.client.match.MockRestRequestMatchers.method;
 import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
 import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus;
 import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
+import java.io.File;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.security.GeneralSecurityException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.UUID;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.onap.so.adapters.vnfmadapter.Constants;
 import org.onap.so.adapters.vnfmadapter.VnfmAdapterApplication;
+import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.BasicAuth;
 import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.LinkSelf;
 import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.NsdmSubscription;
 import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.PkgmNotificationsFilter;
 import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.PkgmSubscription;
+import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.SubscriptionAuthentication;
+import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.Version;
+import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.VnfProducts;
+import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.VnfProductsProviders;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.packagemanagement.model.InlineResponse2002;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.packagemanagement.model.PkgmSubscriptionRequest;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.packagemanagement.model.SubscriptionsAuthentication;
@@ -59,6 +69,8 @@ import org.onap.so.adapters.vnfmadapter.extclients.vnfm.packagemanagement.model.
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.web.server.LocalServerPort;
 import org.springframework.cache.Cache;
 import org.springframework.cache.CacheManager;
 import org.springframework.http.HttpHeaders;
@@ -69,6 +81,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.test.web.client.MockRestServiceServer;
+import org.springframework.test.web.client.match.MockRestRequestMatchers;
 import org.springframework.web.client.RestTemplate;
 import com.google.gson.Gson;
 
@@ -83,6 +96,10 @@ public class Sol003PackageManagementSubscriptionControllerTest {
 
     private final Gson gson = new Gson();
     private final URI msbEndpoint = URI.create("http://msb-iag.onap:80/api/vnfpkgm/v1/subscriptions");
+    private static final String _NOTIFICATION_CALLBACK_URI =
+            "https://so-vnfm-adapter.onap:30406" + Constants.ETSI_SUBSCRIPTION_NOTIFICATION_BASE_URL;
+    private static final String LOCALHOST_URL = "http://localhost:";
+
     @Autowired
     @Qualifier(CONFIGURABLE_REST_TEMPLATE)
     private RestTemplate restTemplate;
@@ -92,6 +109,12 @@ public class Sol003PackageManagementSubscriptionControllerTest {
     @Autowired
     private Sol003PackageManagementSubscriptionController sol003PackageManagementSubscriptionController;
 
+    @Autowired
+    private TestRestTemplate testRestTemplate;
+
+    @LocalServerPort
+    private int port;
+
     private static final String ID = UUID.randomUUID().toString();
 
     @Before
@@ -101,6 +124,11 @@ public class Sol003PackageManagementSubscriptionControllerTest {
         cache.clear();
     }
 
+    @After
+    public void after() {
+        mockRestServiceServer.reset();
+    }
+
     @Test
     public void testSuccessPostSubscription() throws GeneralSecurityException, URISyntaxException {
         final PkgmSubscriptionRequest pkgmSubscriptionRequest = postSubscriptionForTest();
@@ -269,6 +297,47 @@ public class Sol003PackageManagementSubscriptionControllerTest {
         assertEquals(HttpStatus.NOT_FOUND, responseDelete.getStatusCode());
     }
 
+
+    @Test
+    public void testSuccessPostSubscriptionWithValidNotificationTypes() throws Exception {
+
+        final String file = getAbsolutePath("src/test/resources/requests/SubscriptionRequest.json");
+        final String json = new String(Files.readAllBytes(Paths.get(file)));
+        final PkgmSubscriptionRequest request = gson.fromJson(json, PkgmSubscriptionRequest.class);
+
+        mockRestServiceServer.expect(requestTo(msbEndpoint)).andExpect(method(HttpMethod.POST))
+                .andExpect(MockRestRequestMatchers.content().json(gson.toJson(getEtsiCatalogPkgmSubscriptionRequest())))
+                .andRespond(withSuccess(gson.toJson(buildPkgmSubscription()), MediaType.APPLICATION_JSON));
+
+
+        final ResponseEntity<InlineResponse2002> responseEntity = testRestTemplate.postForEntity(
+                LOCALHOST_URL + port + Constants.PACKAGE_MANAGEMENT_BASE_URL + "/subscriptions", request,
+                InlineResponse2002.class);
+
+        assertEquals(HttpStatus.CREATED, responseEntity.getStatusCode());
+        assertTrue(responseEntity.hasBody());
+        final InlineResponse2002 actual = responseEntity.getBody();
+        assertEquals(ID, actual.getId());
+
+
+    }
+
+    private org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.PkgmSubscriptionRequest getEtsiCatalogPkgmSubscriptionRequest() {
+        return new org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.model.PkgmSubscriptionRequest()
+                .filters(new PkgmNotificationsFilter()
+                        .addNotificationTypesItem(
+                                PkgmNotificationsFilter.NotificationTypesEnum.VNFPACKAGEONBOARDINGNOTIFICATION)
+                        .addVnfdIdItem("VNFDID").addVnfPkgIdItem("VNFPKGID")
+                        .addOperationalStateItem(PkgmNotificationsFilter.OperationalStateEnum.ENABLED)
+                        .addVnfProductsFromProvidersItem(new VnfProductsProviders().vnfProvider("EST")
+                                .addVnfProductsItem(new VnfProducts().vnfProductName("VnfProducts")
+                                        .addVersionsItem(new Version().vnfSoftwareVersion("vnfSoftwareVersion")
+                                                .addVnfdVersionsItem("version1")))))
+                .callbackUri(_NOTIFICATION_CALLBACK_URI).authentication(
+                        new SubscriptionAuthentication().addAuthTypeItem(SubscriptionAuthentication.AuthTypeEnum.BASIC)
+                                .paramsBasic(new BasicAuth().userName("vnfm").password("password1$")));
+    }
+
     private PkgmSubscriptionRequest buildPkgmSubscriptionRequest() {
         final PkgmSubscriptionRequest pkgmSubscriptionRequest = new PkgmSubscriptionRequest();
         final SubscriptionsFilter sub = buildSubscriptionsFilter();
@@ -281,8 +350,8 @@ public class Sol003PackageManagementSubscriptionControllerTest {
 
     private SubscriptionsFilter buildSubscriptionsFilter() {
         final SubscriptionsFilter sub = new SubscriptionsFilter();
-        final List<String> vnfdIdList = new ArrayList();
-        final List<String> vnfPkgIdList = new ArrayList();
+        final List<String> vnfdIdList = new ArrayList<>();
+        final List<String> vnfPkgIdList = new ArrayList<>();
         final List<NotificationTypesEnum> notificationTypes = new ArrayList<>();
         final SubscriptionsFilterVnfProductsFromProviders subscriptionsFilterVnfProductsFromProviders =
                 new SubscriptionsFilterVnfProductsFromProviders();
@@ -324,4 +393,9 @@ public class Sol003PackageManagementSubscriptionControllerTest {
         return headers;
     }
 
+    private String getAbsolutePath(final String path) {
+        final File file = new File(path);
+        return file.getAbsolutePath();
+    }
+
 }
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/test/resources/requests/SubscriptionRequest.json b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/test/resources/requests/SubscriptionRequest.json
new file mode 100644 (file)
index 0000000..85ffb99
--- /dev/null
@@ -0,0 +1,45 @@
+{
+    "filter": 
+    {
+        "notificationTypes": [
+            "VnfPackageOnboardingNotification"
+        ],
+        "vnfProductsFromProviders": [
+            {
+                "vnfProvider": "EST",
+                "vnfProducts": [
+                    {
+                        "vnfProductName": "VnfProducts",
+                        "versions": [
+                            {
+                                "vnfSoftwareVersion": "vnfSoftwareVersion",
+                                "vnfdVersions": [
+                                    "version1"
+                                ]
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "vnfdId": [
+            "VNFDID"
+        ],
+        "vnfPkgId": [
+            "VNFPKGID"
+        ],
+        "operationalState": "ENABLED"
+    },
+    "callbackUri": "http://so-vnfm-adapter:9093/api/vnfpkgm/v1/subscriptions",
+    "authentication": 
+    {
+        "authType": [
+            "BASIC"
+        ],
+        "paramsBasic": 
+        {
+            "userName": "vnfm",
+            "password": "vnfm"
+        }
+    }
+}