aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsebdet <sd378r@intl.att.com>2018-09-20 18:27:17 +0200
committersebdet <sd378r@intl.att.com>2018-09-20 18:27:17 +0200
commit57ea28b4de97b23a52254e9632e32c26652ef67d (patch)
tree1a1d6c17c7a4f2f57d14cef4828b7c0d020b2927
parenta9cdc79ba7e928b38ed132d38426b6c8b70635bf (diff)
Add tests
Add some tests and fix event for Submit action Issue-ID: CLAMP-217 Change-Id: I1882a35da110130529085fad5524e82a509cd7e1 Signed-off-by: sebdet <sd378r@intl.att.com>
-rw-r--r--src/main/java/org/onap/clamp/clds/model/CldsModel.java174
-rw-r--r--src/main/java/org/onap/clamp/clds/service/CldsService.java70
-rw-r--r--src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java73
-rw-r--r--src/test/resources/example/model-properties/tca_new/doc-text.yaml170
-rw-r--r--src/test/resources/example/model-properties/tca_new/model-properties.json359
-rw-r--r--src/test/resources/example/model-properties/tca_new/tca-img.xml309
-rw-r--r--src/test/resources/example/model-properties/tca_new/tca-template.xml95
7 files changed, 1105 insertions, 145 deletions
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsModel.java b/src/main/java/org/onap/clamp/clds/model/CldsModel.java
index 55f4dfd64..d7228cfcf 100644
--- a/src/main/java/org/onap/clamp/clds/model/CldsModel.java
+++ b/src/main/java/org/onap/clamp/clds/model/CldsModel.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END============================================
* ===================================================================
- *
+ *
*/
package org.onap.clamp.clds.model;
@@ -45,13 +45,13 @@ public class CldsModel {
private static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsModel.class);
private static final int UUID_LENGTH = 36;
- private static final String STATUS_DESIGN = "DESIGN";
- private static final String STATUS_DISTRIBUTED = "DISTRIBUTED";
- private static final String STATUS_ACTIVE = "ACTIVE";
- private static final String STATUS_STOPPED = "STOPPED";
- private static final String STATUS_DELETING = "DELETING";
- private static final String STATUS_ERROR = "ERROR";
- private static final String STATUS_UNKNOWN = "UNKNOWN";
+ public static final String STATUS_DESIGN = "DESIGN";
+ public static final String STATUS_DISTRIBUTED = "DISTRIBUTED";
+ public static final String STATUS_ACTIVE = "ACTIVE";
+ public static final String STATUS_STOPPED = "STOPPED";
+ public static final String STATUS_DELETING = "DELETING";
+ public static final String STATUS_ERROR = "ERROR";
+ public static final String STATUS_UNKNOWN = "UNKNOWN";
private String id;
private String templateId;
private String templateName;
@@ -99,7 +99,7 @@ public class CldsModel {
boolean canCall = false;
/* Below checks the clds event is submit/resubmit/distribute */
if (event.isActionCd(CldsEvent.ACTION_SUBMIT) || event.isActionCd(CldsEvent.ACTION_RESUBMIT)
- || event.isActionCd(CldsEvent.ACTION_DISTRIBUTE) || event.isActionCd(CldsEvent.ACTION_SUBMITDCAE)) {
+ || event.isActionCd(CldsEvent.ACTION_DISTRIBUTE) || event.isActionCd(CldsEvent.ACTION_SUBMITDCAE)) {
canCall = true;
}
return canCall;
@@ -125,22 +125,22 @@ public class CldsModel {
} else if (event.isActionStateCd(CldsEvent.ACTION_STATE_ERROR)) {
status = STATUS_ERROR;
} else if (event.isActionAndStateCd(CldsEvent.ACTION_CREATE, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_DELETE, CldsEvent.ACTION_STATE_RECEIVED)
- || event.isActionAndStateCd(CldsEvent.ACTION_MODIFY, CldsEvent.ACTION_STATE_ANY)) {
+ || event.isActionAndStateCd(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_STATE_ANY)
+ || event.isActionAndStateCd(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_STATE_ANY)
+ || event.isActionAndStateCd(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_STATE_ANY)
+ || event.isActionAndStateCd(CldsEvent.ACTION_DELETE, CldsEvent.ACTION_STATE_RECEIVED)
+ || event.isActionAndStateCd(CldsEvent.ACTION_MODIFY, CldsEvent.ACTION_STATE_ANY)) {
status = STATUS_DESIGN;
} else if (event.isActionAndStateCd(CldsEvent.ACTION_DISTRIBUTE, CldsEvent.ACTION_STATE_RECEIVED)
- || event.isActionAndStateCd(CldsEvent.ACTION_UNDEPLOY, CldsEvent.ACTION_STATE_RECEIVED)) {
+ || event.isActionAndStateCd(CldsEvent.ACTION_UNDEPLOY, CldsEvent.ACTION_STATE_RECEIVED)) {
status = STATUS_DISTRIBUTED;
} else if (event.isActionAndStateCd(CldsEvent.ACTION_DELETE, CldsEvent.ACTION_STATE_SENT)) {
status = STATUS_DELETING;
} else if (event.isActionAndStateCd(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_STATE_RECEIVED)
- || event.isActionAndStateCd(CldsEvent.ACTION_RESTART, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_SUBMITPOLICY, CldsEvent.ACTION_STATE_ANY)) {
+ || event.isActionAndStateCd(CldsEvent.ACTION_RESTART, CldsEvent.ACTION_STATE_ANY)
+ || event.isActionAndStateCd(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STATE_ANY)
+ || event.isActionAndStateCd(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_STATE_ANY)
+ || event.isActionAndStateCd(CldsEvent.ACTION_SUBMITPOLICY, CldsEvent.ACTION_STATE_ANY)) {
status = STATUS_ACTIVE;
} else if (event.isActionAndStateCd(CldsEvent.ACTION_STOP, CldsEvent.ACTION_STATE_ANY)) {
status = STATUS_STOPPED;
@@ -182,69 +182,69 @@ public class CldsModel {
private void determinePermittedActionCd() {
String actionCd = getCurrentActionCd();
switch (actionCd) {
- case CldsEvent.ACTION_CREATE:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_TEST,
- CldsEvent.ACTION_DELETE);
- if (isSimplifiedModel()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
- CldsEvent.ACTION_TEST, CldsEvent.ACTION_DELETE);
- }
- break;
- case CldsEvent.ACTION_MODIFY:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
- if (isSimplifiedModel()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
- CldsEvent.ACTION_DELETE);
- }
- break;
- case CldsEvent.ACTION_SUBMIT:
- case CldsEvent.ACTION_RESUBMIT:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
- break;
- case CldsEvent.ACTION_SUBMITDCAE:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
- break;
- case CldsEvent.ACTION_SUBMITPOLICY:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
- break;
- case CldsEvent.ACTION_DISTRIBUTE:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_RESUBMIT,
- CldsEvent.ACTION_DELETE);
- if (isSimplifiedModel()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_SUBMITDCAE,
- CldsEvent.ACTION_DELETE);
- }
- break;
- case CldsEvent.ACTION_UNDEPLOY:
+ case CldsEvent.ACTION_CREATE:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_TEST,
+ CldsEvent.ACTION_DELETE);
+ if (isSimplifiedModel()) {
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
+ CldsEvent.ACTION_TEST, CldsEvent.ACTION_DELETE);
+ }
+ break;
+ case CldsEvent.ACTION_MODIFY:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
+ if (isSimplifiedModel()) {
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
+ CldsEvent.ACTION_DELETE);
+ }
+ break;
+ case CldsEvent.ACTION_SUBMIT:
+ case CldsEvent.ACTION_RESUBMIT:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
+ break;
+ case CldsEvent.ACTION_SUBMITDCAE:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
+ break;
+ case CldsEvent.ACTION_SUBMITPOLICY:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
+ break;
+ case CldsEvent.ACTION_DISTRIBUTE:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_RESUBMIT,
+ CldsEvent.ACTION_DELETE);
+ if (isSimplifiedModel()) {
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_SUBMITDCAE,
+ CldsEvent.ACTION_DELETE);
+ }
+ break;
+ case CldsEvent.ACTION_UNDEPLOY:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
+ CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
+ if (isSimplifiedModel()) {
permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
- CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
- if (isSimplifiedModel()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
- CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
- }
- break;
- case CldsEvent.ACTION_DEPLOY:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UNDEPLOY,
- CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
- break;
- case CldsEvent.ACTION_RESTART:
- case CldsEvent.ACTION_UPDATE:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UPDATE,
- CldsEvent.ACTION_STOP, CldsEvent.ACTION_UNDEPLOY);
- if (isPolicyOnly()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
- }
- break;
- case CldsEvent.ACTION_STOP:
+ CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
+ }
+ break;
+ case CldsEvent.ACTION_DEPLOY:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UNDEPLOY,
+ CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
+ break;
+ case CldsEvent.ACTION_RESTART:
+ case CldsEvent.ACTION_UPDATE:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UPDATE,
+ CldsEvent.ACTION_STOP, CldsEvent.ACTION_UNDEPLOY);
+ if (isPolicyOnly()) {
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
+ }
+ break;
+ case CldsEvent.ACTION_STOP:
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
+ CldsEvent.ACTION_UNDEPLOY);
+ if (isPolicyOnly()) {
permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
- CldsEvent.ACTION_UNDEPLOY);
- if (isPolicyOnly()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
- CldsEvent.ACTION_DELETE);
- }
- break;
- default:
- logger.warn("Invalid current actionCd: " + actionCd);
+ CldsEvent.ACTION_DELETE);
+ }
+ break;
+ default:
+ logger.warn("Invalid current actionCd: " + actionCd);
}
}
@@ -289,8 +289,8 @@ public class CldsModel {
determinePermittedActionCd();
if (!permittedActionCd.contains(requestedActionCd)) {
throw new IllegalArgumentException(
- "Invalid requestedActionCd: " + requestedActionCd + ". Given current actionCd: "
- + getCurrentActionCd() + ", the permittedActionCd: " + permittedActionCd);
+ "Invalid requestedActionCd: " + requestedActionCd + ". Given current actionCd: "
+ + getCurrentActionCd() + ", the permittedActionCd: " + permittedActionCd);
}
}
@@ -303,8 +303,8 @@ public class CldsModel {
public static CldsModel createUsingControlName(String fullControlName) {
if (fullControlName == null || fullControlName.length() < UUID_LENGTH) {
throw new BadRequestException(
- "closed loop id / control name length, " + (fullControlName != null ? fullControlName.length() : 0)
- + ", less than the minimum of: " + UUID_LENGTH);
+ "closed loop id / control name length, " + (fullControlName != null ? fullControlName.length() : 0)
+ + ", less than the minimum of: " + UUID_LENGTH);
}
CldsModel model = new CldsModel();
model.setControlNamePrefix(fullControlName.substring(0, fullControlName.length() - UUID_LENGTH));
@@ -328,10 +328,10 @@ public class CldsModel {
cldsModel = cldsDao.getModelByUuid(cldsModel.getControlNameUuid());
cldsModel.determineStatus();
if (dcaeEvent.getCldsActionCd().equals(CldsEvent.ACTION_UNDEPLOY) || (dcaeEvent.getCldsActionCd()
- .equals(CldsEvent.ACTION_DEPLOY)
- && (cldsModel.getStatus().equals(STATUS_DISTRIBUTED) || cldsModel.getStatus().equals(STATUS_DESIGN)))) {
+ .equals(CldsEvent.ACTION_DEPLOY)
+ && (cldsModel.getStatus().equals(STATUS_DISTRIBUTED) || cldsModel.getStatus().equals(STATUS_DESIGN)))) {
CldsEvent.insEvent(cldsDao, dcaeEvent.getControlName(), userid, dcaeEvent.getCldsActionCd(),
- CldsEvent.ACTION_STATE_RECEIVED, null);
+ CldsEvent.ACTION_STATE_RECEIVED, null);
}
cldsDao.insModelInstance(cldsModel, dcaeEvent.getInstances());
return cldsModel;
diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java
index 243881f67..5e35b8954 100644
--- a/src/main/java/org/onap/clamp/clds/service/CldsService.java
+++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java
@@ -118,6 +118,7 @@ public class CldsService extends SecureServiceBase {
@Autowired
private HttpServletRequest request;
+
@Autowired
public CldsService(CldsDao cldsDao, XslTransformer cldsBpmnTransformer, ClampProperties refProp,
SdcCatalogServices sdcCatalogServices, DcaeDispatcherServices dcaeDispatcherServices,
@@ -127,7 +128,7 @@ public class CldsService extends SecureServiceBase {
@Value("${clamp.config.security.permission.type.cl.event:permission-type-cl-event}") String cldsPermissionTypeClEvent,
@Value("${clamp.config.security.permission.type.filter.vf:permission-type-filter-vf}") String cldsPermissionTypeFilterVf,
@Value("${clamp.config.security.permission.type.template:permission-type-template}") String cldsPermissionTypeTemplate,
- @Value("${clamp.config.security.permission.type.tosca:permission-type-tosca}") String cldsPermissionTypeTosca,
+ @Value("${clamp.config.security.permission.type.tosca:permission-type-tosca}") String cldsPermissionTypeTosca,
@Value("${clamp.config.security.permission.instance:dev}") String cldsPermissionInstance) {
this.cldsDao = cldsDao;
this.cldsBpmnTransformer = cldsBpmnTransformer;
@@ -149,7 +150,7 @@ public class CldsService extends SecureServiceBase {
"update");
permissionReadTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "read");
permissionUpdateTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance,
- "update");
+ "update");
}
/*
@@ -222,7 +223,7 @@ public class CldsService extends SecureServiceBase {
* @return image xml text - content of image given name
*/
public String getImageXml(String modelName) {
- util.entering(request, "CldsService: GET model image");
+ util.entering(request, "CldsService: GET model image");
Date startTime = new Date();
isAuthorized(permissionReadCl);
logger.info("GET imageText for modelName={}", modelName);
@@ -241,7 +242,7 @@ public class CldsService extends SecureServiceBase {
* @return clds model - clds model for the given model name
*/
public CldsModel getModel(String modelName) {
- util.entering(request, "CldsService: GET model");
+ util.entering(request, "CldsService: GET model");
Date startTime = new Date();
isAuthorized(permissionReadCl);
logger.debug("GET model for modelName={}", modelName);
@@ -270,7 +271,7 @@ public class CldsService extends SecureServiceBase {
* @param modelName
*/
public CldsModel putModel(String modelName, CldsModel cldsModel) {
- util.entering(request, "CldsService: PUT model");
+ util.entering(request, "CldsService: PUT model");
Date startTime = new Date();
isAuthorized(permissionUpdateCl);
isAuthorizedForVf(cldsModel);
@@ -339,9 +340,8 @@ public class CldsService extends SecureServiceBase {
* @throws DecoderException
* In case of issues with the Hex String decoding
*/
- public ResponseEntity<?> putModelAndProcessAction(String action,
- String modelName,String test, CldsModel model)
- throws TransformerException, ParseException {
+ public ResponseEntity<?> putModelAndProcessAction(String action, String modelName, String test, CldsModel model)
+ throws TransformerException, ParseException {
util.entering(request, "CldsService: Process model action");
Date startTime = new Date();
CldsModel retrievedModel = null;
@@ -364,7 +364,7 @@ public class CldsService extends SecureServiceBase {
this.fillInCldsModel(model);
// save model to db
model.setName(modelName);
- updateAndInsertNewEvent(modelName, model.getControlNamePrefix(), model.getEvent(), CldsEvent.ACTION_MODIFY);
+ updateAndInsertNewEvent(modelName, model.getControlNamePrefix(), model.getEvent(), CldsEvent.ACTION_SUBMIT);
model.save(cldsDao, getUserId());
// get vars and format if necessary
String prop = model.getPropText();
@@ -376,10 +376,10 @@ public class CldsService extends SecureServiceBase {
// Flag indicates whether it is triggered by Validation Test button
// from
// UI
- boolean isTest = Boolean.valueOf(test);
+ boolean isTest = Boolean.parseBoolean(test);
if (!isTest) {
String actionTestOverride = refProp.getStringValue("action.test.override");
- if (Boolean.valueOf(actionTestOverride)) {
+ if (Boolean.parseBoolean(actionTestOverride)) {
logger.info("PUT actionTestOverride={}", actionTestOverride);
logger.info("PUT override test indicator and setting it to true");
isTest = true;
@@ -387,7 +387,7 @@ public class CldsService extends SecureServiceBase {
}
logger.info("PUT isTest={}", isTest);
String insertTestEvent = refProp.getStringValue("action.insert.test.event");
- boolean isInsertTestEvent = Boolean.valueOf(insertTestEvent);
+ boolean isInsertTestEvent = Boolean.parseBoolean(insertTestEvent);
logger.info("PUT isInsertTestEvent={}", isInsertTestEvent);
// determine if requested action is permitted
@@ -407,12 +407,14 @@ public class CldsService extends SecureServiceBase {
retrievedModel = CldsModel.retrieve(cldsDao, modelName, false);
}
if (retrievedModel != null) {
- if (!isTest && !errorCase && (actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMIT)
- || actionCd.equalsIgnoreCase(CldsEvent.ACTION_RESUBMIT)
- || actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMITDCAE))) {
+ if (!isTest && !errorCase
+ && (actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMIT)
+ || actionCd.equalsIgnoreCase(CldsEvent.ACTION_RESUBMIT)
+ || actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMITDCAE))) {
if (retrievedModel.getTemplateName().startsWith(CsarInstallerImpl.TEMPLATE_NAME_PREFIX)) {
// SDC artifact case
- logger.info("Skipping DCAE inventory call as closed loop has been created from SDC notification");
+ logger
+ .info("Skipping DCAE inventory call as closed loop has been created from SDC notification");
DcaeEvent dcaeEvent = new DcaeEvent();
dcaeEvent.setArtifactName(retrievedModel.getControlName() + ".yml");
dcaeEvent.setEvent(DcaeEvent.EVENT_DISTRIBUTION);
@@ -432,15 +434,19 @@ public class CldsService extends SecureServiceBase {
auditLogger.info("Process model action completed");
} else {
logger.error("CldsModel not found in database with modelName: " + modelName);
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "CldsModel not found in database with modelName " + "modelName", Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
- return new ResponseEntity<String>("CldsModel not found in database with modelName: \" + modelName", HttpStatus.INTERNAL_SERVER_ERROR);
+ util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(),
+ "CldsModel not found in database with modelName " + "modelName", Level.INFO,
+ ONAPLogConstants.ResponseStatus.ERROR);
+ return new ResponseEntity<String>("CldsModel not found in database with modelName: \" + modelName",
+ HttpStatus.INTERNAL_SERVER_ERROR);
}
} catch (Exception e) {
errorCase = true;
logger.error("Exception occured during putModelAndProcessAction", e);
}
if (errorCase) {
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "putModelAndProcessAction failed", Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
+ util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "putModelAndProcessAction failed", Level.INFO,
+ ONAPLogConstants.ResponseStatus.ERROR);
return new ResponseEntity<>(retrievedModel, HttpStatus.INTERNAL_SERVER_ERROR);
}
util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
@@ -467,7 +473,7 @@ public class CldsService extends SecureServiceBase {
}
// Flag indicates whether it is triggered by Validation Test button from
// UI
- boolean isTest = Boolean.valueOf(test);
+ boolean isTest = Boolean.parseBoolean(test);
int instanceCount = 0;
if (dcaeEvent.getInstances() != null) {
instanceCount = dcaeEvent.getInstances().size();
@@ -540,9 +546,8 @@ public class CldsService extends SecureServiceBase {
* @throws IOException
* In case of issue to convert CldsServiceCache to InputStream
*/
- public String getSdcPropertiesByServiceUUIDForRefresh(
- String serviceInvariantUUID, Boolean refresh)
- throws GeneralSecurityException, DecoderException, IOException {
+ public String getSdcPropertiesByServiceUUIDForRefresh(String serviceInvariantUUID, Boolean refresh)
+ throws GeneralSecurityException, DecoderException, IOException {
util.entering(request, "CldsService: GET sdc properties by uuid");
Date startTime = new Date();
CldsServiceData cldsServiceData = new CldsServiceData();
@@ -561,7 +566,8 @@ public class CldsService extends SecureServiceBase {
// audit log
LoggingUtils.setTimeContext(startTime, new Date());
auditLogger.info("GET sdc properties by uuid completed");
- util.exiting("200", "Get sdc properties by uuid success", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
+ util.exiting("200", "Get sdc properties by uuid success", Level.INFO,
+ ONAPLogConstants.ResponseStatus.COMPLETED);
return sdcProperties;
}
@@ -774,7 +780,8 @@ public class CldsService extends SecureServiceBase {
model.save(cldsDao, getUserId());
} else {
logger.info("Deploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "DeployModel failed", Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
+ util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "DeployModel failed", Level.INFO,
+ ONAPLogConstants.ResponseStatus.ERROR);
throw new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR,
"Deploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
}
@@ -787,7 +794,8 @@ public class CldsService extends SecureServiceBase {
logger.error("Exception occured during deployModel", e);
}
if (errorCase) {
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "DeployModel failed", Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
+ util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "DeployModel failed", Level.INFO,
+ ONAPLogConstants.ResponseStatus.ERROR);
return new ResponseEntity<>(model, HttpStatus.INTERNAL_SERVER_ERROR);
}
util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
@@ -821,7 +829,8 @@ public class CldsService extends SecureServiceBase {
model.save(cldsDao, getUserId());
} else {
logger.info("Undeploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "UndeployModel failed", Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
+ util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "UndeployModel failed", Level.INFO,
+ ONAPLogConstants.ResponseStatus.ERROR);
throw new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR,
"Undeploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
}
@@ -834,7 +843,8 @@ public class CldsService extends SecureServiceBase {
logger.error("Exception occured during unDeployModel", e);
}
if (errorCase) {
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "UndeployModel failed", Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
+ util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "UndeployModel failed", Level.INFO,
+ ONAPLogConstants.ResponseStatus.ERROR);
return new ResponseEntity<>(model, HttpStatus.INTERNAL_SERVER_ERROR);
}
util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
@@ -879,7 +889,7 @@ public class CldsService extends SecureServiceBase {
}
// Created for the integration test
- public void setLoggingUtil (LoggingUtils utilP) {
- util = utilP;
+ public void setLoggingUtil(LoggingUtils utilP) {
+ util = utilP;
}
} \ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java b/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java
index 695aa2d15..9cca936c8 100644
--- a/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java
+++ b/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java
@@ -55,6 +55,7 @@ import org.onap.clamp.clds.model.CldsInfo;
import org.onap.clamp.clds.model.CldsModel;
import org.onap.clamp.clds.model.CldsServiceData;
import org.onap.clamp.clds.model.CldsTemplate;
+import org.onap.clamp.clds.model.DcaeEvent;
import org.onap.clamp.clds.service.CldsService;
import org.onap.clamp.clds.util.LoggingUtils;
import org.onap.clamp.clds.util.ResourceFileUtil;
@@ -85,22 +86,26 @@ public class CldsServiceItCase {
private String bpmnText;
private String imageText;
private String bpmnPropText;
+ private String docText;
+
@Autowired
private CldsDao cldsDao;
private Authentication authentication;
- private List<GrantedAuthority> authList = new LinkedList<GrantedAuthority>();
+ private List<GrantedAuthority> authList = new LinkedList<GrantedAuthority>();
private LoggingUtils util;
+
/**
* Setup the variable before the tests execution.
*
* @throws IOException
- * In case of issues when opening the files
+ * In case of issues when opening the files
*/
@Before
public void setupBefore() throws IOException {
- bpmnText = ResourceFileUtil.getResourceAsString("example/dao/bpmn-template.xml");
- imageText = ResourceFileUtil.getResourceAsString("example/dao/image-template.xml");
- bpmnPropText = ResourceFileUtil.getResourceAsString("example/dao/bpmn-prop.json");
+ bpmnText = ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/tca-template.xml");
+ imageText = ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/tca-img.xml");
+ bpmnPropText = ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/model-properties.json");
+ docText = ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/doc-text.yaml");
authList.add(new SimpleGrantedAuthority("permission-type-cl-manage|dev|*"));
authList.add(new SimpleGrantedAuthority("permission-type-cl|dev|read"));
@@ -108,7 +113,8 @@ public class CldsServiceItCase {
authList.add(new SimpleGrantedAuthority("permission-type-template|dev|read"));
authList.add(new SimpleGrantedAuthority("permission-type-template|dev|update"));
authList.add(new SimpleGrantedAuthority("permission-type-filter-vf|dev|*"));
- authentication = new UsernamePasswordAuthenticationToken(new User("admin", "", authList), "", authList);
+ authList.add(new SimpleGrantedAuthority("permission-type-cl-event|dev|*"));
+ authentication = new UsernamePasswordAuthenticationToken(new User("admin", "", authList), "", authList);
util = Mockito.mock(LoggingUtils.class);
Mockito.doNothing().when(util).entering(Matchers.any(HttpServletRequest.class), Matchers.any(String.class));
@@ -179,52 +185,63 @@ public class CldsServiceItCase {
newModel.setControlNamePrefix("ClosedLoop-");
newModel.setTemplateName(randomNameTemplate);
newModel.setTemplateId(newTemplate.getId());
- newModel.setDocText(newTemplate.getPropText());
+ newModel.setDocText(docText);
// Test the PutModel method
cldsService.putModel(randomNameModel, newModel);
// Verify whether it has been added properly or not
assertNotNull(cldsDao.getModel(randomNameModel));
- CldsModel model= cldsService.getModel(randomNameModel);
+ CldsModel model = cldsService.getModel(randomNameModel);
// Verify with GetModel
- assertEquals(model.getTemplateName(),randomNameTemplate);
- assertEquals(model.getName(),randomNameModel);
+ assertEquals(model.getTemplateName(), randomNameTemplate);
+ assertEquals(model.getName(), randomNameModel);
assertTrue(cldsService.getModelNames().size() >= 1);
// Should fail
- ResponseEntity<?> responseEntity = cldsService.putModelAndProcessAction(CldsEvent.ACTION_SUBMIT, randomNameModel, "true", model);
- assertTrue(responseEntity.getStatusCode().equals(HttpStatus.INTERNAL_SERVER_ERROR));
- model=(CldsModel)responseEntity.getBody();
- assertNull(model);
+ ResponseEntity<?> responseEntity = cldsService.putModelAndProcessAction(CldsEvent.ACTION_SUBMIT,
+ randomNameModel, "false", cldsService.getModel(randomNameModel));
+ assertTrue(responseEntity.getStatusCode().equals(HttpStatus.OK));
+ assertNotNull(responseEntity.getBody());
+ assertTrue(CldsModel.STATUS_DISTRIBUTED.equals(((CldsModel) responseEntity.getBody()).getStatus()));
+ assertTrue(CldsModel.STATUS_DISTRIBUTED.equals(cldsService.getModel(randomNameModel).getStatus()));
- responseEntity=cldsService.deployModel(randomNameModel, cldsService.getModel(randomNameModel));
+ responseEntity = cldsService.deployModel(randomNameModel, cldsService.getModel(randomNameModel));
assertNotNull(responseEntity);
- assertNotNull(responseEntity.getStatusCode());
- model=(CldsModel)responseEntity.getBody();
- assertNotNull(model);
+ assertTrue(responseEntity.getStatusCode().equals(HttpStatus.OK));
+ assertNotNull(responseEntity.getBody());
+ assertTrue(CldsModel.STATUS_ACTIVE.equals(((CldsModel) responseEntity.getBody()).getStatus()));
+ assertTrue(CldsModel.STATUS_ACTIVE.equals(cldsService.getModel(randomNameModel).getStatus()));
- responseEntity=cldsService.unDeployModel(randomNameModel, cldsService.getModel(randomNameModel));
+ responseEntity = cldsService.unDeployModel(randomNameModel, cldsService.getModel(randomNameModel));
assertNotNull(responseEntity);
- assertNotNull(responseEntity.getStatusCode());
- model=(CldsModel)responseEntity.getBody();
- assertNotNull(model);
+ assertTrue(responseEntity.getStatusCode().equals(HttpStatus.OK));
+ assertNotNull(responseEntity.getBody());
+ assertTrue(CldsModel.STATUS_DISTRIBUTED.equals(((CldsModel) responseEntity.getBody()).getStatus()));
+ assertTrue(CldsModel.STATUS_DISTRIBUTED.equals(cldsService.getModel(randomNameModel).getStatus()));
+
+ DcaeEvent dcaeEvent = new DcaeEvent();
+ dcaeEvent.setArtifactName("ClosedLoop_with-enough-characters_TestArtifact.yml");
+ dcaeEvent.setEvent(DcaeEvent.EVENT_CREATED);
+ dcaeEvent.setResourceUUID("1");
+ dcaeEvent.setServiceUUID("2");
+ assertEquals(cldsService.postDcaeEvent("false", dcaeEvent),
+ "event=created serviceUUID=2 resourceUUID=1 artifactName=ClosedLoop_with-enough-characters_TestArtifact.yml instance count=0 isTest=false");
}
@Test
public void testGetSdcProperties() throws IOException {
JSONAssert.assertEquals(
- ResourceFileUtil.getResourceAsString("example/sdc/expected-result/sdc-properties-global.json"), cldsService.getSdcProperties(),
- true);
+ ResourceFileUtil.getResourceAsString("example/sdc/expected-result/sdc-properties-global.json"),
+ cldsService.getSdcProperties(), true);
}
@Test
public void testGetSdcServices() throws GeneralSecurityException, DecoderException, JSONException, IOException {
String result = cldsService.getSdcServices();
JSONAssert.assertEquals(
- ResourceFileUtil.getResourceAsString("example/sdc/expected-result/all-sdc-services.json"), result,
- true);
+ ResourceFileUtil.getResourceAsString("example/sdc/expected-result/all-sdc-services.json"), result, true);
}
@Test
@@ -238,8 +255,8 @@ public class CldsServiceItCase {
String result = cldsService.getSdcPropertiesByServiceUUIDForRefresh("4cc5b45a-1f63-4194-8100-cd8e14248c92",
false);
JSONAssert.assertEquals(
- ResourceFileUtil.getResourceAsString("example/sdc/expected-result/sdc-properties-4cc5b45a.json"),
- result, true);
+ ResourceFileUtil.getResourceAsString("example/sdc/expected-result/sdc-properties-4cc5b45a.json"), result,
+ true);
// Now test the Cache effect
CldsServiceData cldsServiceDataCache = cldsDao.getCldsServiceCache("c95b0e7c-c1f0-4287-9928-7964c5377a46");
// Should not be there, so should be null
diff --git a/src/test/resources/example/model-properties/tca_new/doc-text.yaml b/src/test/resources/example/model-properties/tca_new/doc-text.yaml
new file mode 100644
index 000000000..947cfdb18
--- /dev/null
+++ b/src/test/resources/example/model-properties/tca_new/doc-text.yaml
@@ -0,0 +1,170 @@
+{"global":[{"name":"service","value":["tosca_definitions_version: cloudify_dsl_1_3
+imports:
+ - "http://www.getcloudify.org/spec/cloudify/3.4/types.yaml"
+ - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/dockerplugin/3.2.0/dockerplugin_types.yaml
+ - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/relationshipplugin/1.0.0/relationshipplugin_types.yaml
+ - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml
+
+inputs:
+ dh_override:
+ type: string
+ default: "component_dockerhost"
+ dh_location_id:
+ type: string
+ default: "zone1"
+ aaiEnrichmentHost:
+ type: string
+ default: "none"
+ aaiEnrichmentPort:
+ type: string
+ default: 8443
+ enableAAIEnrichment:
+ type: string
+ default: false
+ dmaap_host:
+ type: string
+ default: dmaap.onap-message-router
+ dmaap_port:
+ type: string
+ default: 3904
+ enableRedisCaching:
+ type: string
+ default: false
+ redisHosts:
+ type: string
+ tag_version:
+ type: string
+ default: "nexus3.onap.org:10001/onap//onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.0.0"
+ consul_host:
+ type: string
+ default: consul-server.onap-consul
+ consul_port:
+ type: string
+ default: "8500"
+ cbs_host:
+ type: string
+ default: "config-binding-service.dcae"
+ cbs_port:
+ type: string
+ default: "10000"
+ policy_id:
+ type: string
+ default: "none"
+ external_port:
+ type: string
+ description: "Port for CDAPgui to be exposed"
+ default: "32010"
+
+node_templates:
+ docker_service_host:
+ properties:
+ docker_host_override:
+ get_input: dh_override
+ location_id:
+ get_input: dh_location_id
+ type: dcae.nodes.SelectedDockerHost
+ tca_docker:
+ relationships:
+ - type: dcae.relationships.component_contained_in
+ target: docker_service_host
+ - target: tca_policy
+ type: cloudify.relationships.depends_on
+ type: dcae.nodes.DockerContainerForComponentsUsingDmaap
+ properties:
+ application_config:
+ app_config:
+ appDescription: DCAE Analytics Threshold Crossing Alert Application
+ appName: dcae-tca
+ tcaAlertsAbatementTableName: TCAAlertsAbatementTable
+ tcaAlertsAbatementTableTTLSeconds: '1728000'
+ tcaSubscriberOutputStreamName: TCASubscriberOutputStream
+ tcaVESAlertsTableName: TCAVESAlertsTable
+ tcaVESAlertsTableTTLSeconds: '1728000'
+ tcaVESMessageStatusTableName: TCAVESMessageStatusTable
+ tcaVESMessageStatusTableTTLSeconds: '86400'
+ thresholdCalculatorFlowletInstances: '2'
+ app_preferences:
+ aaiEnrichmentHost:
+ get_input: aaiEnrichmentHost
+ aaiEnrichmentIgnoreSSLCertificateErrors: 'true'
+ aaiEnrichmentPortNumber: '8443'
+ aaiEnrichmentProtocol: https
+ aaiEnrichmentUserName: DCAE
+ aaiEnrichmentUserPassword: DCAE
+ aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query
+ aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf
+ enableAAIEnrichment:
+ get_input: enableAAIEnrichment
+ enableRedisCaching:
+ get_input: enableRedisCaching
+ redisHosts:
+ get_input: redisHosts
+ enableAlertCEFFormat: 'false'
+ publisherContentType: application/json
+ publisherHostName:
+ get_input: dmaap_host
+ publisherHostPort:
+ get_input: dmaap_port
+ publisherMaxBatchSize: '1'
+ publisherMaxRecoveryQueueSize: '100000'
+ publisherPollingInterval: '20000'
+ publisherProtocol: http
+ publisherTopicName: unauthenticated.DCAE_CL_OUTPUT
+ subscriberConsumerGroup: OpenDCAE-c12
+ subscriberConsumerId: c12
+ subscriberContentType: application/json
+ subscriberHostName:
+ get_input: dmaap_host
+ subscriberHostPort:
+ get_input: dmaap_port
+ subscriberMessageLimit: '-1'
+ subscriberPollingInterval: '30000'
+ subscriberProtocol: http
+ subscriberTimeoutMS: '-1'
+ subscriberTopicName: unauthenticated.SEC_MEASUREMENT_OUTPUT
+ tca_policy_default: '{"domain":"measurementsForVfScaling","metricsPerEventName":[{"eventName":"vFirewallBroadcastPackets","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"LESS_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"},{"closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta","thresholdValue":700,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"eventName":"vLoadBalancer","controlLoopSchemaType":"VM","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta","thresholdValue":300,"direction":"GREATER_OR_EQUAL","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]},{"eventName":"Measurement_vGMUX","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"DCAE.Config_tca-hi-lo","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":0,"direction":"EQUAL","severity":"MAJOR","closedLoopEventStatus":"ABATED"},{"closedLoopControlName":"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":0,"direction":"GREATER","severity":"CRITICAL","closedLoopEventStatus":"ONSET"}]}]}'
+ service_component_type: dcaegen2-analytics_tca
+ docker_config:
+ healthcheck:
+ endpoint: /healthcheck
+ interval: 15s
+ timeout: 1s
+ type: http
+ image:
+ get_input: tag_version
+ interfaces:
+ cloudify.interfaces.lifecycle:
+ start:
+ inputs:
+ envs:
+ DMAAPHOST:
+ { get_input: dmaap_host }
+ DMAAPPORT:
+ { get_input: dmaap_port }
+ DMAAPPUBTOPIC: "unauthenticated.DCAE_CL_OUTPUT"
+ DMAAPSUBTOPIC: "unauthenticated.SEC_MEASUREMENT_OUTPUT"
+ AAIHOST:
+ { get_input: aaiEnrichmentHost }
+ AAIPORT:
+ { get_input: aaiEnrichmentPort }
+ CONSUL_HOST:
+ { get_input: consul_host }
+ CONSUL_PORT:
+ { get_input: consul_port }
+ CBS_HOST:
+ { get_input: cbs_host }
+ CBS_PORT:
+ { get_input: cbs_port }
+ CONFIG_BINDING_SERVICE: "config_binding_service"
+ ports:
+ - concat: ["11011:", { get_input: external_port }]
+ stop:
+ inputs:
+ cleanup_image: true
+ tca_policy:
+ type: dcae.nodes.policy
+ properties:
+ policy_id:
+ get_input: policy_id
+
+"]}]} \ No newline at end of file
diff --git a/src/test/resources/example/model-properties/tca_new/model-properties.json b/src/test/resources/example/model-properties/tca_new/model-properties.json
new file mode 100644
index 000000000..c4299fa5a
--- /dev/null
+++ b/src/test/resources/example/model-properties/tca_new/model-properties.json
@@ -0,0 +1,359 @@
+{
+ "global": [
+ {
+ "name": "service",
+ "value": [
+ "4cc5b45a-1f63-4194-8100-cd8e14248c92"
+ ]
+ },
+ {
+ "name": "vf",
+ "value": [
+ "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"
+ ]
+ },
+ {
+ "name": "actionSet",
+ "value": [
+ "vnfRecipe"
+ ]
+ },
+ {
+ "name": "location",
+ "value": [
+ "DC1"
+ ]
+ },
+ {
+ "name": "deployParameters",
+ "value": {
+ "dh_override": "component_dockerhost",
+ "dh_location_id": "zone1",
+ "aaiEnrichmentHost": "none",
+ "aaiEnrichmentPort": 8443,
+ "enableAAIEnrichment": false,
+ "dmaap_host": "dmaap.onap-message-router",
+ "dmaap_port": 3904,
+ "enableRedisCaching": false,
+ "redisHosts": "",
+ "tag_version": "nexus3.onap.org:10001/onap//onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.0.0",
+ "consul_host": "consul-server.onap-consul",
+ "consul_port": "8500",
+ "cbs_host": "config-binding-service.dcae",
+ "cbs_port": "10000",
+ "external_port": "32010",
+ "policy_id": "AUTO_GENERATED_POLICY_ID_AT_SUBMIT"
+ }
+ }
+ ],
+ "Policy_12lup3h": {
+ "policy1": [
+ {
+ "name": "pname",
+ "value": "policy1"
+ },
+ {
+ "name": "pid",
+ "value": "0"
+ },
+ {
+ "name": "timeout",
+ "value": "345"
+ },
+ {
+ "policyConfigurations": [
+ [
+ {
+ "name": "recipe",
+ "value": [
+ "restart"
+ ]
+ },
+ {
+ "name": "maxRetries",
+ "value": [
+ "3"
+ ]
+ },
+ {
+ "name": "retryTimeLimit",
+ "value": [
+ "180"
+ ]
+ },
+ {
+ "name": "_id",
+ "value": [
+ "6TtHGPq"
+ ]
+ },
+ {
+ "name": "parentPolicy",
+ "value": [
+ ""
+ ]
+ },
+ {
+ "name": "actor",
+ "value": [
+ "APPC"
+ ]
+ },
+ {
+ "name": "recipeInput",
+ "value": [
+ ""
+ ]
+ },
+ {
+ "name": "recipeLevel",
+ "value": [
+ "VM"
+ ]
+ },
+ {
+ "name": "targetResourceId",
+ "value": [
+ "07e266fc-49ab-4cd7-8378-ca4676f1b9ec"
+ ]
+ },
+ {
+ "name": "targetResourceIdOther",
+ "value": [
+ ""
+ ]
+ },
+ {
+ "name": "enableGuardPolicy",
+ "value": [
+ "on"
+ ]
+ },
+ {
+ "name": "guardPolicyType",
+ "value": [
+ "FrequencyLimiter"
+ ]
+ },
+ {
+ "name": "guardTargets",
+ "value": [
+ ".*"
+ ]
+ },
+ {
+ "name": "minGuard",
+ "value": [
+ "1"
+ ]
+ },
+ {
+ "name": "maxGuard",
+ "value": [
+ "1"
+ ]
+ },
+ {
+ "name": "limitGuard",
+ "value": [
+ "1"
+ ]
+ },
+ {
+ "name": "timeUnitsGuard",
+ "value": [
+ "minute"
+ ]
+ },
+ {
+ "name": "timeWindowGuard",
+ "value": [
+ "10"
+ ]
+ },
+ {
+ "name": "guardActiveStart",
+ "value": [
+ "00:00:01-05:00"
+ ]
+ },
+ {
+ "name": "guardActiveEnd",
+ "value": [
+ "00:00:00-05:00"
+ ]
+ }
+ ],
+ [
+ {
+ "name": "recipe",
+ "value": [
+ "rebuild"
+ ]
+ },
+ {
+ "name": "maxRetries",
+ "value": [
+ "3"
+ ]
+ },
+ {
+ "name": "retryTimeLimit",
+ "value": [
+ "180"
+ ]
+ },
+ {
+ "name": "_id",
+ "value": [
+ "aulXWRT"
+ ]
+ },
+ {
+ "name": "parentPolicy",
+ "value": [
+ "6TtHGPq"
+ ]
+ },
+ {
+ "name": "parentPolicyConditions",
+ "value": [
+ "Failure"
+ ]
+ },
+ {
+ "name": "actor",
+ "value": [
+ "APPC"
+ ]
+ },
+ {
+ "name": "recipeInput",
+ "value": [
+ ""
+ ]
+ },
+ {
+ "name": "recipeLevel",
+ "value": [
+ "VM"
+ ]
+ },
+ {
+ "name": "targetResourceId",
+ "value": [
+ "07e266fc-49ab-4cd7-8378-ca4676f1b9ec"
+ ]
+ },
+ {
+ "name": "targetResourceIdOther",
+ "value": [
+ ""
+ ]
+ },
+ {
+ "name": "guardPolicyType",
+ "value": [
+ "MinMax"
+ ]
+ },
+ {
+ "name": "guardTargets",
+ "value": [
+ ".*"
+ ]
+ },
+ {
+ "name": "minGuard",
+ "value": [
+ "1"
+ ]
+ },
+ {
+ "name": "maxGuard",
+ "value": [
+ "1"
+ ]
+ },
+ {
+ "name": "limitGuard",
+ "value": [
+ "1"
+ ]
+ },
+ {
+ "name": "timeUnitsGuard",
+ "value": [
+ "minute"
+ ]
+ },
+ {
+ "name": "timeWindowGuard",
+ "value": [
+ "10"
+ ]
+ },
+ {
+ "name": "guardActiveStart",
+ "value": [
+ "00:00:01-05:00"
+ ]
+ },
+ {
+ "name": "guardActiveEnd",
+ "value": [
+ "00:00:00-05:00"
+ ]
+ }
+ ]
+ ]
+ }
+ ]
+ },
+ "TCA_1d13unw": {
+ "tca1": [
+ {
+ "name": "tname",
+ "value": "tca1"
+ },
+ {
+ "name": "tuuid",
+ "value": "7f14fe1f-68ac-t628-8fff-7f1de86f7038"
+ },
+ {
+ "name": "tcaPol",
+ "value": "policy1"
+ },
+ {
+ "name": "eventName",
+ "value": "vLoadBalancer"
+ },
+ {
+ "name": "controlLoopSchemaType",
+ "value": "VM"
+ },
+ {
+ "name": "tcaPolId",
+ "value": "0"
+ },
+ {
+ "serviceConfigurations": [
+ [
+ "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
+ "GREATER",
+ "10",
+ "ONSET",
+ "undefined"
+ ],
+ [
+ "$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta",
+ "GREATER_OR_EQUAL",
+ "20",
+ "ABATED",
+ "undefined"
+ ]
+ ]
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/src/test/resources/example/model-properties/tca_new/tca-img.xml b/src/test/resources/example/model-properties/tca_new/tca-img.xml
new file mode 100644
index 000000000..a2ec5af23
--- /dev/null
+++ b/src/test/resources/example/model-properties/tca_new/tca-img.xml
@@ -0,0 +1,309 @@
+<?xml version="1.0" encoding="utf-8"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="924" height="92" viewBox="44 134 924 92" version="1.1">
+ <defs>
+ <marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10"
+ orient="auto" refX="11" refY="10" id="markerSjdype4kmnw">
+ <path d="M 1 5 L 11 10 L 1 15 Z"
+ style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+ fill="#000000" />
+ </marker>
+ <marker viewBox="0 0 20 20" markerWidth="20" markerHeight="20"
+ orient="auto" refX="6" refY="6" id="markerSjdype4kmny">
+ <circle cx="6" cy="6" r="3.5"
+ style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+ fill="#ffffff" stroke="#000000" />
+ </marker>
+ <marker viewBox="0 0 20 20" markerWidth="20" markerHeight="20"
+ orient="auto" refX="8.5" refY="5" id="markerSjdype4kmo0">
+ <path d="m 1 5 l 0 -3 l 7 3 l -7 3 z"
+ style="stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;"
+ fill="#ffffff" stroke="#000000" />
+ </marker>
+ <marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10"
+ orient="auto" refX="11" refY="10" id="markerSjdype4kmo2">
+ <path d="M 1 5 L 11 10 L 1 15"
+ style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+ fill="#ffffff" stroke="#000000" />
+ </marker>
+ <marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10"
+ orient="auto" refX="-1" refY="10" id="markerSjdype4kmo4">
+ <path d="M 0 10 L 8 6 L 16 10 L 8 14 Z"
+ style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+ fill="#ffffff" stroke="#000000" />
+ </marker>
+ <marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10"
+ orient="auto" refX="-5" refY="10" id="markerSjdype4kmo6">
+ <path d="M 1 4 L 5 16"
+ style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+ fill="#000000" stroke="#000000" />
+ </marker>
+ </defs>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="StartEvent_1"
+ transform="matrix(1,0,0,1,50,162)" style="display: block;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="48"
+ height="48"></rect>
+ <g class="djs-visual">
+ <circle cx="18" cy="18" r="18" style="stroke-width: 2;"
+ stroke="#000000" fill="#ffffff"></circle>
+ </g>
+ <rect x="0" y="0" width="36" height="36"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="StartEvent_1_label"
+ transform="matrix(1,0,0,1,23,198)" style="display: none;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+ height="32"></rect>
+ <g class="djs-visual">
+ <text style="font-family: Arial,sans-serif; font-size: 11px;"
+ class=" djs-label">
+ <tspan x="45" y="0"></tspan>
+ </text>
+ </g>
+ <rect x="0" y="0" width="90" height="20"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="VesCollector_1g9cmz0"
+ transform="matrix(1,0,0,1,207,140)" style="display: block;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="132"
+ height="92"></rect>
+ <g class="djs-visual">
+ <rect x="0" y="0" width="120" height="80" rx="0" ry="0"
+ style="stroke-width: 2;" stroke="#000000" fill="#ffffff"></rect>
+ <polyline points="120,80 120,20 " style="stroke-width: 2;"
+ fill="none" stroke="#000000"></polyline>
+ <polyline points="20,0 20,80 " style="stroke-width: 2;"
+ fill="none" stroke="#000000"></polyline>
+ <text style="font-family: Arial,sans-serif; font-size: 12px;">
+ <tspan x="5" y="14">V</tspan>
+ </text>
+ <text style="font-family: Arial,sans-serif; font-size: 12px;">
+ <tspan x="5" y="26">E</tspan>
+ </text>
+ <text style="font-family: Arial,sans-serif; font-size: 12px;">
+ <tspan x="5" y="38">S</tspan>
+ </text>
+ <text style="font-family: Arial,sans-serif; font-size: 12px;"
+ class=" djs-label">
+ <tspan x="25.5" y="43.5">VesCollector</tspan>
+ </text>
+ </g>
+ <rect x="0" y="0" width="120" height="80"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="TCA_1d13unw"
+ transform="matrix(1,0,0,1,453,140)" style="display: block;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="132"
+ height="92"></rect>
+ <g class="djs-visual">
+ <rect x="0" y="0" width="120" height="80" rx="0" ry="0"
+ style="stroke-width: 2;" stroke="#000000" fill="#ffffff"></rect>
+ <polyline points="0,60 120,60 " style="stroke-width: 2;"
+ fill="none" stroke="#000000"></polyline>
+ <text style="font-family: Arial,sans-serif; font-size: 12px;"
+ class=" djs-label">
+ <tspan x="48" y="43.5">TCA</tspan>
+ </text>
+ </g>
+ <rect x="0" y="0" width="120" height="80"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="Policy_12lup3h"
+ transform="matrix(1,0,0,1,687,140)" style="display: block;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="132"
+ height="92"></rect>
+ <g class="djs-visual">
+ <rect x="0" y="0" width="120" height="80" rx="0" ry="0"
+ style="stroke-width: 2;" stroke="#000000" fill="#ffffff"></rect>
+ <polyline points="0,40 60,0 " style="stroke-width: 2;"
+ fill="none" stroke="#000000"></polyline>
+ <text style="font-family: Arial,sans-serif; font-size: 12px;"
+ class=" djs-label">
+ <tspan x="43.5" y="43.5">Policy</tspan>
+ </text>
+ </g>
+ <rect x="0" y="0" width="120" height="80"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape selected" data-element-id="EndEvent_16kg9fx"
+ transform="matrix(1,0,0,1,925,162)" style="display: block;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="48"
+ height="48"></rect>
+ <g class="djs-visual">
+ <circle cx="18" cy="18" r="18" style="stroke-width: 4;"
+ stroke="#000000" fill="#ffffff"></circle>
+ </g>
+ <rect x="0" y="0" width="36" height="36"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ <g class=" djs-resizer djs-resizer-nw" transform="matrix(1,0,0,1,0,0)">
+ <rect x="-7" y="-7" width="5" height="5" class=" djs-resizer-visual"></rect>
+ <rect x="-7" y="-7" width="20" height="20" class=" djs-resizer-hit"></rect>
+ </g>
+ <g class=" djs-resizer djs-resizer-ne" transform="matrix(0,1,-1,0,36,0)">
+ <rect x="-7" y="-7" width="5" height="5" class=" djs-resizer-visual"></rect>
+ <rect x="-7" y="-7" width="20" height="20" class=" djs-resizer-hit"></rect>
+ </g>
+ <g class=" djs-resizer djs-resizer-se" transform="matrix(-1,0,0,-1,36,36)">
+ <rect x="-7" y="-7" width="5" height="5" class=" djs-resizer-visual"></rect>
+ <rect x="-7" y="-7" width="20" height="20" class=" djs-resizer-hit"></rect>
+ </g>
+ <g class=" djs-resizer djs-resizer-sw" transform="matrix(0,-1,1,0,0,36)">
+ <rect x="-7" y="-7" width="5" height="5" class=" djs-resizer-visual"></rect>
+ <rect x="-7" y="-7" width="20" height="20" class=" djs-resizer-hit"></rect>
+ </g>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="EndEvent_16kg9fx_label"
+ transform="matrix(1,0,0,1,898,198)" style="display: none;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+ height="32"></rect>
+ <g class="djs-visual">
+ <text style="font-family: Arial,sans-serif; font-size: 11px;"
+ class=" djs-label">
+ <tspan x="45" y="0"></tspan>
+ </text>
+ </g>
+ <rect x="0" y="0" width="90" height="20"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-connection" data-element-id="SequenceFlow_1ahk7jg"
+ style="display: block;">
+ <rect fill="none" class="djs-outline" x="80" y="174" width="133"
+ height="12"></rect>
+ <g class="djs-visual">
+ <path d="m 86,180L207,180 "
+ style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSjdype4kmnw&quot;);"
+ fill="none" stroke="#000000"></path>
+ </g>
+ <polyline points="86,180 207,180 " style="stroke-opacity: 0; stroke-width: 15;"
+ fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="SequenceFlow_1ahk7jg_label"
+ transform="matrix(1,0,0,1,101.5,170)" style="display: none;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+ height="32"></rect>
+ <g class="djs-visual">
+ <text style="font-family: Arial,sans-serif; font-size: 11px;"
+ class=" djs-label">
+ <tspan x="45" y="0"></tspan>
+ </text>
+ </g>
+ <rect x="0" y="0" width="90" height="20"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-connection" data-element-id="SequenceFlow_18ahat1"
+ style="display: block;">
+ <rect fill="none" class="djs-outline" x="321" y="174" width="138"
+ height="12"></rect>
+ <g class="djs-visual">
+ <path d="m 327,180L453,180 "
+ style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSjdype4kmnw&quot;);"
+ fill="none" stroke="#000000"></path>
+ </g>
+ <polyline points="327,180 453,180 " style="stroke-opacity: 0; stroke-width: 15;"
+ fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="SequenceFlow_18ahat1_label"
+ transform="matrix(1,0,0,1,345,170)" style="display: none;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+ height="32"></rect>
+ <g class="djs-visual">
+ <text style="font-family: Arial,sans-serif; font-size: 11px;"
+ class=" djs-label">
+ <tspan x="45" y="0"></tspan>
+ </text>
+ </g>
+ <rect x="0" y="0" width="90" height="20"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-connection" data-element-id="SequenceFlow_1mo9gxb"
+ style="display: block;">
+ <rect fill="none" class="djs-outline" x="567" y="174" width="126"
+ height="12"></rect>
+ <g class="djs-visual">
+ <path d="m 573,180L687,180 "
+ style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSjdype4kmnw&quot;);"
+ fill="none" stroke="#000000"></path>
+ </g>
+ <polyline points="573,180 687,180 " style="stroke-opacity: 0; stroke-width: 15;"
+ fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="SequenceFlow_1mo9gxb_label"
+ transform="matrix(1,0,0,1,585,170)" style="display: none;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+ height="32"></rect>
+ <g class="djs-visual">
+ <text style="font-family: Arial,sans-serif; font-size: 11px;"
+ class=" djs-label">
+ <tspan x="45" y="0"></tspan>
+ </text>
+ </g>
+ <rect x="0" y="0" width="90" height="20"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-connection" data-element-id="SequenceFlow_1dgtrrq"
+ style="display: block;">
+ <rect fill="none" class="djs-outline" x="801" y="174" width="130"
+ height="12"></rect>
+ <g class="djs-visual">
+ <path d="m 807,180L925,180 "
+ style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSjdype4kmnw&quot;);"
+ fill="none" stroke="#000000"></path>
+ </g>
+ <polyline points="807,180 925,180 " style="stroke-opacity: 0; stroke-width: 15;"
+ fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+ </g>
+ </g>
+ <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+ <g class="djs-element djs-shape" data-element-id="SequenceFlow_1dgtrrq_label"
+ transform="matrix(1,0,0,1,821,170)" style="display: none;">
+ <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+ height="32"></rect>
+ <g class="djs-visual">
+ <text style="font-family: Arial,sans-serif; font-size: 11px;"
+ class=" djs-label">
+ <tspan x="45" y="0"></tspan>
+ </text>
+ </g>
+ <rect x="0" y="0" width="90" height="20"
+ style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+ class="djs-hit"></rect>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/src/test/resources/example/model-properties/tca_new/tca-template.xml b/src/test/resources/example/model-properties/tca_new/tca-template.xml
new file mode 100644
index 000000000..cc942ef9d
--- /dev/null
+++ b/src/test/resources/example/model-properties/tca_new/tca-template.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
+ xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
+ xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
+ <bpmn:process id="Process_1" isExecutable="false">
+ <bpmn:startEvent id="StartEvent_1">
+ <bpmn:outgoing>SequenceFlow_1ahk7jg</bpmn:outgoing>
+ </bpmn:startEvent>
+ <bpmn:vesCollector id="VesCollector_1g9cmz0">
+ <bpmn:incoming>SequenceFlow_1ahk7jg</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_18ahat1</bpmn:outgoing>
+ </bpmn:vesCollector>
+ <bpmn:tCA id="TCA_1d13unw">
+ <bpmn:incoming>SequenceFlow_18ahat1</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1mo9gxb</bpmn:outgoing>
+ </bpmn:tCA>
+ <bpmn:policy id="Policy_12lup3h">
+ <bpmn:incoming>SequenceFlow_1mo9gxb</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1dgtrrq</bpmn:outgoing>
+ </bpmn:policy>
+ <bpmn:endEvent id="EndEvent_16kg9fx">
+ <bpmn:incoming>SequenceFlow_1dgtrrq</bpmn:incoming>
+ </bpmn:endEvent>
+ <bpmn:sequenceFlow id="SequenceFlow_1ahk7jg"
+ sourceRef="StartEvent_1" targetRef="VesCollector_1g9cmz0" />
+ <bpmn:sequenceFlow id="SequenceFlow_18ahat1"
+ sourceRef="VesCollector_1g9cmz0" targetRef="TCA_1d13unw" />
+ <bpmn:sequenceFlow id="SequenceFlow_1mo9gxb"
+ sourceRef="TCA_1d13unw" targetRef="Policy_12lup3h" />
+ <bpmn:sequenceFlow id="SequenceFlow_1dgtrrq"
+ sourceRef="Policy_12lup3h" targetRef="EndEvent_16kg9fx" />
+ </bpmn:process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
+ <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2"
+ bpmnElement="StartEvent_1">
+ <dc:Bounds x="50" y="162" width="36" height="36" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="VesCollector_1g9cmz0_di"
+ bpmnElement="VesCollector_1g9cmz0">
+ <dc:Bounds x="207" y="140" width="120" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="TCA_1d13unw_di"
+ bpmnElement="TCA_1d13unw">
+ <dc:Bounds x="453" y="140" width="120" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="Policy_12lup3h_di"
+ bpmnElement="Policy_12lup3h">
+ <dc:Bounds x="687" y="140" width="120" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="EndEvent_16kg9fx_di"
+ bpmnElement="EndEvent_16kg9fx">
+ <dc:Bounds x="925" y="162" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="898" y="198" width="90" height="20" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1ahk7jg_di"
+ bpmnElement="SequenceFlow_1ahk7jg">
+ <di:waypoint xsi:type="dc:Point" x="86" y="180" />
+ <di:waypoint xsi:type="dc:Point" x="207" y="180" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="101.5" y="170" width="90" height="20" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_18ahat1_di"
+ bpmnElement="SequenceFlow_18ahat1">
+ <di:waypoint xsi:type="dc:Point" x="327" y="180" />
+ <di:waypoint xsi:type="dc:Point" x="453" y="180" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="345" y="170" width="90" height="20" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1mo9gxb_di"
+ bpmnElement="SequenceFlow_1mo9gxb">
+ <di:waypoint xsi:type="dc:Point" x="573" y="180" />
+ <di:waypoint xsi:type="dc:Point" x="687" y="180" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="585" y="170" width="90" height="20" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1dgtrrq_di"
+ bpmnElement="SequenceFlow_1dgtrrq">
+ <di:waypoint xsi:type="dc:Point" x="807" y="180" />
+ <di:waypoint xsi:type="dc:Point" x="925" y="180" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="821" y="170" width="90" height="20" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+
+</bpmn:definitions> \ No newline at end of file