Integration test of Bearer Token pass-through (CPS-2126 #5)
[cps.git] / integration-test / src / test / groovy / org / onap / cps / integration / base / CpsIntegrationSpecBase.groovy
index 27a9877..1577524 100644 (file)
@@ -27,6 +27,13 @@ import org.onap.cps.api.CpsDataspaceService
 import org.onap.cps.api.CpsModuleService
 import org.onap.cps.api.CpsQueryService
 import org.onap.cps.integration.DatabaseTestContainer
+import org.onap.cps.ncmp.api.NetworkCmProxyCmHandleQueryService
+import org.onap.cps.ncmp.api.NetworkCmProxyDataService
+import org.onap.cps.ncmp.api.NetworkCmProxyQueryService
+import org.onap.cps.ncmp.api.impl.inventory.CmHandleState
+import org.onap.cps.ncmp.api.impl.inventory.sync.ModuleSyncWatchdog
+import org.onap.cps.ncmp.api.models.DmiPluginRegistration
+import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle
 import org.onap.cps.spi.exceptions.DataspaceNotFoundException
 import org.onap.cps.spi.model.DataNode
 import org.onap.cps.spi.repository.DataspaceRepository
@@ -34,16 +41,27 @@ import org.onap.cps.spi.utils.SessionManager
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration
 import org.springframework.boot.autoconfigure.domain.EntityScan
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
 import org.springframework.boot.test.context.SpringBootTest
 import org.springframework.context.annotation.ComponentScan
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.test.web.client.MockRestServiceServer
+import org.springframework.test.web.servlet.MockMvc
+import org.springframework.web.client.RestTemplate
 import org.testcontainers.spock.Testcontainers
 import spock.lang.Shared
 import spock.lang.Specification
+import spock.util.concurrent.PollingConditions
 
-@SpringBootTest(classes = [CpsDataspaceService])
+import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo
+import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = [CpsDataspaceService])
 @Testcontainers
 @EnableAutoConfiguration
+@AutoConfigureMockMvc
 @EnableJpaRepositories(basePackageClasses = [DataspaceRepository])
 @ComponentScan(basePackages = ['org.onap.cps'])
 @EntityScan('org.onap.cps.spi.entities')
@@ -52,6 +70,9 @@ abstract class CpsIntegrationSpecBase extends Specification {
     @Shared
     DatabaseTestContainer databaseTestContainer = DatabaseTestContainer.getInstance()
 
+    @Autowired
+    MockMvc mvc;
+
     @Autowired
     CpsDataspaceService cpsDataspaceService
 
@@ -70,6 +91,25 @@ abstract class CpsIntegrationSpecBase extends Specification {
     @Autowired
     SessionManager sessionManager
 
+    @Autowired
+    NetworkCmProxyCmHandleQueryService networkCmProxyCmHandleQueryService
+
+    @Autowired
+    NetworkCmProxyDataService networkCmProxyDataService
+
+    @Autowired
+    NetworkCmProxyQueryService networkCmProxyQueryService
+
+    @Autowired
+    RestTemplate restTemplate
+
+    @Autowired
+    ModuleSyncWatchdog moduleSyncWatchdog
+
+    MockRestServiceServer mockDmiServer = null
+
+    static final DMI_URL = 'http://mock-dmi-server'
+
     def static GENERAL_TEST_DATASPACE = 'generalTestDataspace'
     def static BOOKSTORE_SCHEMA_SET = 'bookstoreSchemaSet'
 
@@ -82,8 +122,19 @@ abstract class CpsIntegrationSpecBase extends Specification {
             createStandardBookStoreSchemaSet(GENERAL_TEST_DATASPACE)
             initialized = true
         }
+        mockDmiServer = MockRestServiceServer.createServer(restTemplate)
+    }
+
+    def cleanup() {
+        mockDmiServer.reset()
     }
 
+    def static readResourceDataFile(filename) {
+        return new File('src/test/resources/data/' + filename).text
+    }
+
+    // *** CPS Integration Test Utilities ***
+
     def static countDataNodesInTree(DataNode dataNode) {
         return 1 + countDataNodesInTree(dataNode.getChildDataNodes())
     }
@@ -96,10 +147,6 @@ abstract class CpsIntegrationSpecBase extends Specification {
         return nodeCount
     }
 
-    def static readResourceDataFile(filename) {
-        return new File('src/test/resources/data/' + filename).text
-    }
-
     def getBookstoreYangResourcesNameToContentMap() {
         def bookstoreModelFileContent = readResourceDataFile('bookstore/bookstore.yang')
         def bookstoreTypesFileContent = readResourceDataFile('bookstore/bookstore-types.yang')
@@ -142,4 +189,35 @@ abstract class CpsIntegrationSpecBase extends Specification {
         return '"' + name + '":[' + innerJson + ']'
     }
 
+    // *** NCMP Integration Test Utilities ***
+
+    def registerCmHandle(dmiPlugin, cmHandleId, moduleSetTag, dmiModuleReferencesResponse, dmiModuleResourcesResponse) {
+        def cmHandleToCreate = new NcmpServiceCmHandle(cmHandleId: cmHandleId, moduleSetTag: moduleSetTag)
+        networkCmProxyDataService.updateDmiRegistrationAndSyncModule(new DmiPluginRegistration(dmiPlugin: dmiPlugin, createdCmHandles: [cmHandleToCreate]))
+        mockDmiResponsesForRegistration(dmiPlugin, cmHandleId, dmiModuleReferencesResponse, dmiModuleResourcesResponse)
+        moduleSyncWatchdog.moduleSyncAdvisedCmHandles()
+        new PollingConditions().within(3, () -> {
+            CmHandleState.READY == networkCmProxyDataService.getCmHandleCompositeState(cmHandleId).cmHandleState
+        })
+        mockDmiServer.reset()
+    }
+
+    def deregisterCmHandle(dmiPlugin, cmHandleId) {
+        deregisterCmHandles(dmiPlugin, [cmHandleId])
+    }
+
+    def deregisterCmHandles(dmiPlugin, cmHandleIds) {
+        networkCmProxyDataService.updateDmiRegistrationAndSyncModule(new DmiPluginRegistration(dmiPlugin: dmiPlugin, removedCmHandles: cmHandleIds))
+    }
+
+    def mockDmiResponsesForRegistration(dmiPlugin, cmHandleId, dmiModuleReferencesResponse, dmiModuleResourcesResponse) {
+        if (dmiModuleReferencesResponse != null) {
+            mockDmiServer.expect(requestTo("${dmiPlugin}/dmi/v1/ch/${cmHandleId}/modules"))
+                    .andRespond(withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON).body(dmiModuleReferencesResponse))
+        }
+        if (dmiModuleResourcesResponse != null) {
+            mockDmiServer.expect(requestTo("${dmiPlugin}/dmi/v1/ch/${cmHandleId}/moduleResources"))
+                    .andRespond(withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON).body(dmiModuleResourcesResponse))
+        }
+    }
 }