Merge "Refactor Netconf script component parent."
authorDan Timoney <dtimoney@att.com>
Wed, 24 Jul 2019 14:13:22 +0000 (14:13 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 24 Jul 2019 14:13:22 +0000 (14:13 +0000)
20 files changed:
cds-ui/client/src/app/common/core/store/models/resources.model.ts
cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts
cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html
cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts
cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts
cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts
cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts
cds-ui/server/src/controllers/blueprint-rest.controller.ts
cds-ui/server/src/datasources/blueprint.datasource-template.ts
cds-ui/server/src/services/blueprint.service.ts
docs/microservices/controllerBlueprintStudioProcessorMS.rst
docs/microservices/enrichment.rst
docs/microservices/flexibleplugin.rst [moved from docs/flexibleplugin.rst with 100% similarity]
docs/microservices/media/dyanmicapi.jpg [moved from docs/media/dyanmicapi.JPG with 100% similarity]
ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt
ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingConfig.kt
ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingController.kt
ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/messaginglib/MessagingControllerTest.kt
ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration.zip [deleted file]
ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration_enriched.zip [new file with mode: 0755]

index 019c268..e89094b 100644 (file)
@@ -27,4 +27,5 @@ export interface IResources {
     updated_bt:string;
     property: IPropertyData;
     sources: ISourcesData;
+    definition?: any;
 }
\ No newline at end of file
index fdb261d..dd17a30 100644 (file)
@@ -1,3 +1,24 @@
+/*
+============LICENSE_START==========================================
+===================================================================
+Copyright (C) 2019 IBM Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the License);
+you may not use this software 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.
+============LICENSE_END============================================
+*/
+
 import { Injectable } from '@angular/core';
 import { HttpClient } from '@angular/common/http';
 import { Observable } from 'rxjs';
index 97c65b2..46e1ea7 100644 (file)
@@ -34,9 +34,6 @@ limitations under the License.
         <ng-template matStepLabel>Browse CBA Template file</ng-template>
         <div class="matStepContent">
             <app-search-template [optionSelected]="templateOption" (cbaFile)="fileChange($event)"></app-search-template>
-            <!-- <div>
-                <button mat-button matStepperNext class="matStepNextBtn">Upload</button>
-            </div>-->
         </div>
     </mat-step>
     <mat-step [stepControl]="step3FormGroup">
index 561f15a..9188b43 100644 (file)
@@ -19,8 +19,6 @@ limitations under the License.
 ============LICENSE_END============================================
 */
 import { Component, OnInit } from '@angular/core';
-import { Observable } from 'rxjs';
-import { Store } from '@ngrx/store';
 import { IBlueprint } from 'src/app/common/core/store/models/blueprint.model';
 import { IBlueprintState } from 'src/app/common/core/store/models/blueprintState.model';
 import { IMetaData } from 'src/app/common/core/store/models/metadata.model';
@@ -40,8 +38,7 @@ export class SelectTemplateComponent implements OnInit {
   importModel: IImportModel;
   templateOption: any;
 
-  constructor(private store: Store<IBlueprintState>) {
-    // this.importModel.file = '';
+  constructor() {
   }
 
   ngOnInit() {
@@ -51,23 +48,14 @@ export class SelectTemplateComponent implements OnInit {
     this.templateOption = option;
     console.log(this.templateOption);
   }
-  
+
   fileChange(topologyTemp: ITopologyTemplate) {
     this.topologyTemplate = topologyTemp;
     console.log(topologyTemp);
   }
   metaDataDetail(data: IMetaData) {
-    
+
     this.metaData = data;
     console.log("parent" + this.metaData.author_email);
   }
-  upload() {
-
-  }
-  
-  // saveBlueprintModel(){
-  //   this.blueprint.toplogyTemplates=this.topologyTemplate;
-  //   this.blueprint.metadata= this.metaData;
-  //  // this.store.dispatch(new CreateBlueprint(this.blueprint));
-  // }
 }
index 2da1287..aa8a106 100644 (file)
@@ -47,6 +47,7 @@ export class ResourceEditComponent implements OnInit {
     viewText: string = "Open in Editor Mode";
     @ViewChild(JsonEditorComponent) editor: JsonEditorComponent;
     options = new JsonEditorOptions();
+    sourcesList = [];
   
   constructor(private store: Store<IAppState>, private resourceEditService: ResourceEditService, private alertService: NotificationHandlerService) {
        this.rdState = this.store.select('resources');
@@ -60,6 +61,9 @@ export class ResourceEditComponent implements OnInit {
       resourcesdata => {
         var resourcesState: IResourcesState = { resources: resourcesdata.resources, isLoadSuccess: resourcesdata.isLoadSuccess, isSaveSuccess: resourcesdata.isSaveSuccess, isUpdateSuccess: resourcesdata.isUpdateSuccess };
           this.resources=resourcesState.resources;
+          if(resourcesdata.resources.definition && resourcesdata.resources.definition.sources) {
+            this.sourcesList = resourcesdata.resources.definition.sources;
+         }
     })     
   }
 
index 417f6ed..ed1ef6f 100644 (file)
@@ -38,12 +38,10 @@ export class ResourceEditService {
     }
 
     getSources() {
-        // to do
-        return this.api.get('ResourceDictionaryURLs.getSources');
+        return this.api.get(ResourceDictionaryURLs.getSources);
     }
 
     getModelType(name) {
-        // to do
-        return this.api.get("ResourceDictionaryURLs.getModelType + '/' + name");
+        return this.api.get(ResourceDictionaryURLs.getModelType + '/' + name);
     }
 }
\ No newline at end of file
index c4ad83d..42f990a 100644 (file)
@@ -20,7 +20,7 @@
 * ============LICENSE_END=========================================================
 */
 
-import { Component, OnInit, ViewChild, EventEmitter, Output } from '@angular/core';
+import { Component, OnInit, ViewChild, EventEmitter, Output, Input } from '@angular/core';
 import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
 import { IResources } from 'src/app/common/core/store/models/resources.model';
 import { IResourcesState } from 'src/app/common/core/store/models/resourcesState.model';
@@ -62,9 +62,17 @@ export class SourcesTemplateComponent implements OnInit {
       resourcesdata => {
         var resourcesState: IResourcesState = { resources: resourcesdata.resources, isLoadSuccess: resourcesdata.isLoadSuccess, isSaveSuccess: resourcesdata.isSaveSuccess, isUpdateSuccess: resourcesdata.isUpdateSuccess };
         this.resources=resourcesState.resources;
-        this.sources = resourcesState.resources.sources;
+      //   this.sources = resourcesState.resources.sources;
+         if(resourcesState.resources.definition && resourcesState.resources.definition.sources) {
+         this.sources = resourcesState.resources.definition.sources;
+         }
         for (let key in this.sources) {
-            this.sourcesOptions.push(key);  
+            // this.sourcesOptions.push(key);
+            let source = {
+               name : key,
+               data: this.sources[key]
+            }
+             this.sourcesOptions.push(source);    
         }
     })
  }
@@ -136,5 +144,19 @@ export class SourcesTemplateComponent implements OnInit {
                         event.previousIndex,
                         event.currentIndex);
     }
-  }    
+  }
+
+  getResources() {
+   this.apiService.getSources()
+   .subscribe(data=>{
+      console.log(data);
+      for (let key in data[0]) {
+         let sourceObj = { name: key, value: data[0][key] }
+         this.option.push(sourceObj);  
+     }
+      // this.sourcesOptions = data;
+   }, error=>{
+      console.log(error);
+   })
+  }
 }
index 52e77ee..14aba56 100644 (file)
@@ -42,20 +42,20 @@ import {
   Response,
   RestBindings,
 } from '@loopback/rest';
-import {Blueprint} from '../models';
+import { Blueprint } from '../models';
 import { inject } from '@loopback/core';
 import { BlueprintService } from '../services';
 import * as fs from 'fs';
 import * as multiparty from 'multiparty';
 import * as request_lib from 'request';
-import {controllerApiConfig, processorApiConfig, appConfig} from '../config/app-config';
-import {bluePrintManagementServiceGrpcClient} from '../clients/blueprint-management-service-grpc-client';
+import { controllerApiConfig, processorApiConfig, appConfig } from '../config/app-config';
+import { bluePrintManagementServiceGrpcClient } from '../clients/blueprint-management-service-grpc-client';
 
 export class BlueprintRestController {
   constructor(
-    @inject('services.BlueprintService') 
+    @inject('services.BlueprintService')
     public bpservice: BlueprintService,
-  ) {}
+  ) { }
 
   @get('/blueprints', {
     responses: {
@@ -69,6 +69,17 @@ export class BlueprintRestController {
     return await this.bpservice.getAllblueprints();
   }
 
+  @get('/searchByTags/{tags}', {
+    responses: {
+      '200': {
+        content: { 'application/json': {} },
+      },
+    },
+  })
+  async getByTags(@param.path.string('tags') tags: string) {
+    return await this.bpservice.getByTags(tags);
+  }
+
   @post('/create-blueprint')
   async upload(
     @requestBody({
@@ -78,21 +89,21 @@ export class BlueprintRestController {
         'multipart/form-data': {
           // Skip body parsing
           'x-parser': 'stream',
-          schema: {type: 'object'},
+          schema: { type: 'object' },
         },
       },
     })
     request: Request,
     @inject(RestBindings.Http.RESPONSE) response: Response,
   ): Promise<Response> {
-    return new Promise((resolve, reject) => { 
-       this.getFileFromMultiPartForm(request).then(file=>{
-         this.uploadFileToBlueprintController(file, "/blueprint-model/", response).then(resp=>{
+    return new Promise((resolve, reject) => {
+      this.getFileFromMultiPartForm(request).then(file => {
+        this.uploadFileToBlueprintController(file, "/blueprint-model/", response).then(resp => {
           resolve(resp);
-         }, err=>{
-           reject(err);
-         });
-      }, err=>{
+        }, err => {
+          reject(err);
+        });
+      }, err => {
         reject(err);
       });
     });
@@ -107,21 +118,21 @@ export class BlueprintRestController {
         'multipart/form-data': {
           // Skip body parsing
           'x-parser': 'stream',
-          schema: {type: 'object'},
+          schema: { type: 'object' },
         },
       },
     })
     request: Request,
     @inject(RestBindings.Http.RESPONSE) response: Response,
   ): Promise<Response> {
-    return new Promise((resolve, reject) => { 
-       this.getFileFromMultiPartForm(request).then(file=>{
-         this.uploadFileToBlueprintController(file, "/blueprint-model/publish/", response).then(resp=>{
+    return new Promise((resolve, reject) => {
+      this.getFileFromMultiPartForm(request).then(file => {
+        this.uploadFileToBlueprintController(file, "/blueprint-model/publish/", response).then(resp => {
           resolve(resp);
-         }, err=>{
-           reject(err);
-         });
-      }, err=>{
+        }, err => {
+          reject(err);
+        });
+      }, err => {
         reject(err);
       });
     });
@@ -136,21 +147,21 @@ export class BlueprintRestController {
         'multipart/form-data': {
           // Skip body parsing
           'x-parser': 'stream',
-          schema: {type: 'object'},
+          schema: { type: 'object' },
         },
       },
     })
     request: Request,
     @inject(RestBindings.Http.RESPONSE) response: Response,
   ): Promise<Response> {
-    return new Promise((resolve, reject) => { 
-       this.getFileFromMultiPartForm(request).then(file=>{
-         this.uploadFileToBlueprintController(file, "/blueprint-model/enrich/", response).then(resp=>{
-           resolve(resp);
-         }, err=>{
-           reject(err);
-         });
-      }, err=>{
+    return new Promise((resolve, reject) => {
+      this.getFileFromMultiPartForm(request).then(file => {
+        this.uploadFileToBlueprintController(file, "/blueprint-model/enrich/", response).then(resp => {
+          resolve(resp);
+        }, err => {
+          reject(err);
+        });
+      }, err => {
         reject(err);
       });
     });
@@ -159,21 +170,21 @@ export class BlueprintRestController {
   @get('/download-blueprint/{name}/{version}')
   async download(
     @param.path.string('name') name: string,
-    @param.path.string('version') version:string,
+    @param.path.string('version') version: string,
     @inject(RestBindings.Http.RESPONSE) response: Response,
   ): Promise<Response> {
-    return this.downloadFileFromBlueprintController("/blueprint-model/download/by-name/"+name+"/version/"+version, response);
+    return this.downloadFileFromBlueprintController("/blueprint-model/download/by-name/" + name + "/version/" + version, response);
   }
 
-  async getFileFromMultiPartForm(request: Request): Promise<multiparty.File>{
+  async getFileFromMultiPartForm(request: Request): Promise<multiparty.File> {
     return new Promise((resolve, reject) => {
       let form = new multiparty.Form();
       form.parse(request, (err: any, fields: any, files: { [x: string]: any[]; }) => {
         if (err) reject(err);
         let file = files['file'][0]; // get the file from the returned files object
-        if(!file){
+        if (!file) {
           reject('File was not found in form data.');
-        }else{
+        } else {
           resolve(file);
         }
       });
@@ -189,34 +200,34 @@ export class BlueprintRestController {
         'multipart/form-data': {
           // Skip body parsing
           'x-parser': 'stream',
-          schema: {type: 'object'},
+          schema: { type: 'object' },
         },
       },
     })
     request: Request,
     @inject(RestBindings.Http.RESPONSE) response: Response,
   ): Promise<Response> {
-    return new Promise((resolve, reject) => { 
-       this.getFileFromMultiPartForm(request).then(file=>{
-         if(appConfig.action.deployBlueprint.grpcEnabled)
-          return this.uploadFileToBlueprintProcessorGrpc(file, response); 
-         else
+    return new Promise((resolve, reject) => {
+      this.getFileFromMultiPartForm(request).then(file => {
+        if (appConfig.action.deployBlueprint.grpcEnabled)
+          return this.uploadFileToBlueprintProcessorGrpc(file, response);
+        else
           return this.uploadFileToBlueprintProcessor(file, "/execution-service/upload/", response);
-      }, err=>{
+      }, err => {
         reject(err);
       });
     });
   }
 
-  async uploadFileToBlueprintController(file: multiparty.File, uri: string, response: Response): Promise<Response>{
+  async uploadFileToBlueprintController(file: multiparty.File, uri: string, response: Response): Promise<Response> {
     return this.uploadFileToBlueprintService(file, controllerApiConfig.http.url + uri, controllerApiConfig.http.authToken, response);
   }
 
-  async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise<Response>{
+  async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise<Response> {
     return this.uploadFileToBlueprintService(file, processorApiConfig.http.url + uri, processorApiConfig.http.authToken, response);
   }
 
-  async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise<Response>{
+  async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise<Response> {
     let options = {
       url: url,
       headers: {
@@ -238,7 +249,7 @@ export class BlueprintRestController {
       fs.unlink(file.path, (err: any) => {
         if (err) {
           console.error(err);
-        } 
+        }
       });
     }
 
@@ -280,10 +291,10 @@ export class BlueprintRestController {
 
   async uploadFileToBlueprintProcessorGrpc(file: multiparty.File, response: Response): Promise<Response> {
     return new Promise<Response>((resolve, reject) => {
-      bluePrintManagementServiceGrpcClient.uploadBlueprint(file.path).then(output=>{
+      bluePrintManagementServiceGrpcClient.uploadBlueprint(file.path).then(output => {
         response.send(output.status.message);
         resolve(response);
-      }, err=>{
+      }, err => {
         response.status(500).send(err);
         resolve(response);
       });
index 35edf33..1188d9b 100644 (file)
@@ -21,5 +21,22 @@ export default {
             "getAllblueprints": []
 
         }
-    }]
+    },
+    {
+        "template": {
+            "method": "GET",
+            "url": controllerApiConfig.http.url + "/blueprint-model/search/{tags}",
+            "headers": {
+                "accepts": "application/json",
+                "content-type": "application/json",
+                "authorization": controllerApiConfig.http.authToken
+            },
+            "responsePath": "$.*"
+        },
+        "functions": {
+            "getByTags": ["tags"]
+
+        }
+    },
+]
 };
\ No newline at end of file
index 970b2af..0545fac 100644 (file)
@@ -4,6 +4,7 @@ import {BlueprintDataSource} from '../datasources';
 
 export interface BlueprintService {
    getAllblueprints(): Promise<any>;
+   getByTags(tags: string): Promise<JSON>;
 }
 
 export class BlueprintServiceProvider implements Provider<BlueprintService> {
index 683b694..9dcd311 100644 (file)
@@ -9,31 +9,12 @@ The Controller Blueprint Archive is the overall service design, fully model-driv
 
 The CBA is .zip file which is saved in Controller Blueprint Database.
 
-Dynamic API:
-------------
-
-The nature of the API request and response is meant to be model driven and dynamic. They both share the same definition.
-
-The actionName, under the actionIdentifiers refers to the name of a Workflow (see workflow)
-
-The content of the payload is what is fully dynamic / model driven.
-
-The first top level element will always be either $actionName-request for a request or $actionName-response for a response.
-
-Then the content within this element is fully based on the workflow input and output.
+Controller Blueprint Microservices:
+-----------------------------------
 
 .. toctree::
    :maxdepth: 1
    
    dynamicapi
-
-Enrichment:
------------
-
-Helps to generate complete valid CBA file.
-
-.. toctree::
-   :maxdepth: 1
-   
    enrichment
    
\ No newline at end of file
index 55984d7..1f94556 100644 (file)
@@ -12,12 +12,14 @@ Once the base CBA zip file is done, the enrichment process will complete the des
 
 The following shows 2 ways to run CBA enrichment
 
-*REST API request
+REST API request:
+----------------
 
 |image0|
 
-*CDS UI
 
+CDS UI:
+------
 |image1|
 
 
index 5a4f3de..347e5ea 100644 (file)
@@ -118,7 +118,7 @@ class ExecutionServiceHandler(private val bluePrintPathConfiguration: BluePrintP
             return output
         } catch (e: Exception) {
             log.error("fail processing request id $requestId", e)
-            return response(executionServiceInput, e.localizedMessage, true)
+            return response(executionServiceInput, e.localizedMessage ?: e.message ?: e.toString(), true)
         }
     }
 
@@ -156,4 +156,4 @@ class ExecutionServiceHandler(private val bluePrintPathConfiguration: BluePrintP
         return executionServiceOutput
     }
 
-}
\ No newline at end of file
+}
index a04a799..17e157d 100644 (file)
@@ -1,5 +1,7 @@
 package org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api
 
+import com.fasterxml.jackson.databind.DeserializationFeature
+import com.fasterxml.jackson.databind.ObjectMapper
 import org.apache.kafka.clients.CommonClientConfigs
 import org.apache.kafka.clients.consumer.ConsumerConfig
 import org.apache.kafka.common.serialization.StringDeserializer
@@ -7,10 +9,10 @@ import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInpu
 import org.springframework.beans.factory.annotation.Value
 import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
-import org.springframework.kafka.annotation.EnableKafka
 import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory
 import org.springframework.kafka.core.ConsumerFactory
 import org.springframework.kafka.core.DefaultKafkaConsumerFactory
+import org.springframework.kafka.support.serializer.ErrorHandlingDeserializer2
 import org.springframework.kafka.support.serializer.JsonDeserializer
 
 @Configuration
@@ -26,11 +28,20 @@ open class MessagingConfig {
         val configProperties = hashMapOf<String, Any>()
         configProperties[CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG] = bootstrapServers
         configProperties[ConsumerConfig.GROUP_ID_CONFIG] = groupId
-        configProperties[ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG] = StringDeserializer::class.java.name
-        configProperties[ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG] = JsonDeserializer::class.java.name
-        configProperties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest")
+        configProperties[ConsumerConfig.AUTO_OFFSET_RESET_CONFIG] = "latest"
+        configProperties[ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG] = StringDeserializer::class.java
+        configProperties[ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG] = ErrorHandlingDeserializer2::class.java
+        configProperties[ErrorHandlingDeserializer2.VALUE_DESERIALIZER_CLASS] = JsonDeserializer::class.java.name
 
-        return DefaultKafkaConsumerFactory(configProperties, StringDeserializer(), JsonDeserializer(ExecutionServiceInput::class.java))
+        val deserializer = JsonDeserializer<ExecutionServiceInput>()
+        deserializer.setRemoveTypeHeaders(true)
+        deserializer.addTrustedPackages("*")
+
+        val jsonDeserializer =  JsonDeserializer(ExecutionServiceInput::class.java,
+                ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false))
+
+        return DefaultKafkaConsumerFactory(configProperties, StringDeserializer(),
+                ErrorHandlingDeserializer2<ExecutionServiceInput>(jsonDeserializer))
     }
 
     /**
index 1d219a8..54cc0c1 100644 (file)
@@ -18,6 +18,7 @@ package org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api
 import kotlinx.coroutines.async
 import kotlinx.coroutines.runBlocking
 import org.apache.commons.lang3.builder.ToStringBuilder
+import org.apache.kafka.clients.consumer.ConsumerRecord
 import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
 import org.onap.ccsdk.cds.blueprintsprocessor.message.service.BluePrintMessageLibPropertyService
 import org.slf4j.LoggerFactory
@@ -39,17 +40,15 @@ open class MessagingController(private val propertyService: BluePrintMessageLibP
     }
 
     @KafkaListener(topics = ["\${blueprintsprocessor.messageclient.self-service-api.consumerTopic}"])
-    open fun receive(input: ExecutionServiceInput) {
-
-        log.info("Successfully received a message: {}", ToStringBuilder.reflectionToString(input))
+    open fun receive(record: ConsumerRecord<String, ExecutionServiceInput>) {
 
         runBlocking {
-            log.info("Successfully received a message: {}", ToStringBuilder.reflectionToString(input))
+            log.info("Successfully received a message: {}", ToStringBuilder.reflectionToString(record.value()))
 
             // Process the message.
             async {
-                processMessage(input)
-            }
+                processMessage(record.value())
+            }.await()
         }
     }
 
index f7459f5..602033a 100644 (file)
@@ -90,7 +90,7 @@ class MessagingControllerTest {
     @Autowired
     lateinit var webTestClient: WebTestClient
 
-    var receivedEvent: String? = null
+    var event: ExecutionServiceInput? = null
 
     @Before
     fun setup() {
@@ -142,11 +142,13 @@ class MessagingControllerTest {
         log.info("test-sender sent message='{}'", ToStringBuilder.reflectionToString(input))
 
         Thread.sleep(1000)
+
+        assertNotNull(event)
     }
 
     @KafkaListener(topicPartitions = [TopicPartition(topic = "\${blueprintsprocessor.messageclient.self-service-api.topic}", partitionOffsets = [PartitionOffset(partition = "0", initialOffset = "0")])])
-    fun receivedEventFromBluePrintProducer(event: ExecutionServiceInput) {
-        assertNotNull(event)
+    fun receivedEventFromBluePrintProducer(receivedEvent: ExecutionServiceInput) {
+        event = receivedEvent
     }
 
     private fun uploadBluePrint() {
@@ -172,7 +174,7 @@ class MessagingControllerTest {
     }
 
     private fun loadCbaArchive():File {
-        return Paths.get("./src/test/resources/cba-for-kafka-integration.zip").toFile()
+        return Paths.get("./src/test/resources/cba-for-kafka-integration_enriched.zip").toFile()
     }
 
     @Configuration
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration.zip b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration.zip
deleted file mode 100644 (file)
index 2307038..0000000
Binary files a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration.zip and /dev/null differ
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration_enriched.zip b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration_enriched.zip
new file mode 100755 (executable)
index 0000000..9581191
Binary files /dev/null and b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration_enriched.zip differ