Initial OpenECOMP SDC commit

Change-Id: I0924d5a6ae9cdc161ae17c68d3689a30d10f407b
Signed-off-by: Michael Lando <ml636r@att.com>
diff --git a/catalog-be/src/test/resources/config/catalog-be/configuration.yaml b/catalog-be/src/test/resources/config/catalog-be/configuration.yaml
new file mode 100644
index 0000000..18d2370
--- /dev/null
+++ b/catalog-be/src/test/resources/config/catalog-be/configuration.yaml
@@ -0,0 +1,427 @@
+identificationHeaderFields:
+   - HTTP_IV_USER
+   - HTTP_CSP_FIRSTNAME
+   - HTTP_CSP_LASTNAME
+   - HTTP_IV_REMOTE_ADDRESS
+   - HTTP_CSP_WSTYPE
+
+
+
+# catalog backend hostname
+beFqdn: localhost
+
+# catalog backend http port
+beHttpPort: 8080
+
+# catalog backend http context
+beContext: /sdc/rest/config/get
+
+# catalog backend protocol
+beProtocol: http
+
+# catalog backend ssl port
+beSslPort: 8443
+
+version: 1.0
+released: 2012-11-30
+
+titanCfgFile: /home/vagrant/catalog-be/config/catalog-be/titan.properties
+titanInMemoryGraph: true
+titanLockTimeout: 600
+titanReconnectIntervalInSeconds: 3
+titanHealthCheckReadTimeout: 1
+esReconnectIntervalInSeconds: 3
+uebHealthCheckReconnectIntervalInSeconds: 15
+uebHealthCheckReadTimeout: 4
+
+# Protocols
+protocols:
+   - http
+   - https
+
+# Users
+users:
+    tom: passwd
+    bob: passwd
+    
+neo4j:
+    host: neo4jhost
+    port: 7474
+    user: neo4j
+    password: "12345"
+    
+
+#Application-specific settings of ES
+elasticSearch:
+    # Mapping of index prefix to time-based frame. For example, if below is configured:
+    #
+    # - indexPrefix: auditingevents
+    #    creationPeriod: minute
+    #
+    # then ES object of type which is mapped to "auditingevents-*" template, and created on 2015-12-23 13:24:54, will enter "auditingevents-2015-12-23-13-24" index.
+    # Another object created on 2015-12-23 13:25:54, will enter "auditingevents-2015-12-23-13-25" index.
+    # If creationPeriod: month, both of the above will enter "auditingevents-2015-12" index.
+    #
+    # PLEASE NOTE: the timestamps are created in UTC/GMT timezone! This is needed so that timestamps will be correctly presented in Kibana.
+    #
+    # Legal values for creationPeriod - year, month, day, hour, minute, none (meaning no time-based behaviour).
+    #
+    # If no creationPeriod is configured for indexPrefix, default behavour is creationPeriod: month.
+
+    indicesTimeFrequency:
+      - indexPrefix: auditingevents
+        creationPeriod: month
+      - indexPrefix: monitoring_events
+        creationPeriod: month
+
+artifactTypes:
+   - CHEF
+   - PUPPET
+   - SHELL
+   - YANG
+   - YANG_XML
+   - HEAT
+   - BPEL
+   - DG_XML
+   - MURANO_PKG
+   - WORKFLOW
+   - NETWORK_CALL_FLOW
+   - TOSCA_TEMPLATE
+   - TOSCA_CSAR
+   - AAI_SERVICE_MODEL
+   - AAI_VF_MODEL
+   - AAI_VF_MODULE_MODEL
+   - AAI_VF_INSTANCE_MODEL
+   - OTHER
+
+licenseTypes:
+   - User
+   - Installation
+   - CPU
+
+#Deployment artifacts placeHolder
+resourceTypes: &allResourceTypes
+  - VFC
+  - CP
+  - VL
+  - VF
+ 
+# validForResourceTypes usage
+#     validForResourceTypes:
+#        - VF
+#        - VL
+deploymentResourceArtifacts:
+#  heat:
+#      displayName: "Base HEAT Template"
+#      type: HEAT
+#      validForResourceTypes: *allResourceTypes
+#  heatVol:
+#      displayName: "Volume HEAT Template"
+#      type: HEAT_VOL
+#      validForResourceTypes: *allResourceTypes
+#  heatNet:
+#      displayName: "Network HEAT Template"
+#      type: HEAT_NET
+#      validForResourceTypes: *allResourceTypes
+  
+deploymentResourceInstanceArtifacts:
+  heatEnv:
+      displayName: "HEAT ENV"
+      type: HEAT_ENV
+      description: "Auto-generated HEAT Environment deployment artifact"
+      fileExtension: "env"
+      
+#tosca artifacts placeholders
+toscaArtifacts:
+  assetToscaTemplate:
+      artifactName: -template.yml
+      displayName: Tosca Template
+      type: TOSCA_TEMPLATE
+      description: TOSCA representation of the asset
+  assetToscaCsar:
+      artifactName: -csar.csar
+      displayName: Tosca Model
+      type: TOSCA_CSAR
+      description: TOSCA definition package of the asset
+
+#Informational artifacts placeHolder
+excludeResourceCategory:
+  - Generic
+informationalResourceArtifacts:
+  features:
+      displayName: Features
+      type: OTHER
+  capacity:
+      displayName: Capacity
+      type: OTHER
+  vendorTestResult:
+      displayName: Vendor Test Result
+      type: OTHER
+  testScripts:
+      displayName: Test Scripts
+      type: OTHER
+  cloudQuestionnaire:
+      displayName: Cloud Questionnaire (completed)
+      type: OTHER
+  HEATTemplateFromVendor:
+      displayName: HEAT Template from Vendor
+      type: HEAT
+  resourceSecurityTemplate:
+      displayName: Resource Security Template
+      type: OTHER
+            
+excludeServiceCategory:
+
+informationalServiceArtifacts:
+  serviceArtifactPlan:
+      displayName: Service Artifact Plan
+      type: OTHER
+  summaryOfImpactsToECOMPElements:
+      displayName: Summary of impacts to ECOMP elements,OSSs, BSSs
+      type: OTHER
+  controlLoopFunctions:
+      displayName: Control Loop Functions
+      type: OTHER
+  dimensioningInfo:
+      displayName: Dimensioning Info
+      type: OTHER
+  affinityRules:
+      displayName: Affinity Rules
+      type: OTHER
+  operationalPolicies:
+      displayName: Operational Policies
+      type: OTHER
+  serviceSpecificPolicies:
+      displayName: Service-specific Policies
+      type: OTHER
+  engineeringRules:
+      displayName: Engineering Rules (ERD)
+      type: OTHER
+  distributionInstructions:
+      displayName: Distribution Instructions
+      type: OTHER
+  certificationTestResults:
+      displayName: TD Certification Test Results
+      type: OTHER
+  deploymentVotingRecord:
+      displayName: Deployment Voting Record
+      type: OTHER
+  serviceQuestionnaire:
+      displayName: Service Questionnaire
+      type: OTHER
+  serviceSecurityTemplate:
+      displayName: Service Security Template
+      type: OTHER
+      
+serviceApiArtifacts:
+  configuration:
+      displayName: Configuration
+      type: OTHER
+  instantiation:
+      displayName: Instantiation
+      type: OTHER
+  monitoring:
+      displayName: Monitoring
+      type: OTHER
+  reporting:
+      displayName: Reporting
+      type: OTHER
+  logging:
+      displayName: Logging
+      type: OTHER
+  testing:
+      displayName: Testing
+      type: OTHER
+
+
+additionalInformationMaxNumberOfKeys: 50
+
+systemMonitoring:
+    enabled: false
+    isProxy: false
+    probeIntervalInSeconds: 15
+
+defaultHeatArtifactTimeoutMinutes: 60
+
+serviceDeploymentArtifacts:
+    YANG_XML:
+        acceptedTypes:
+            - xml
+    VNF_CATALOG:
+        acceptedTypes:
+            - xml
+    MODEL_INVENTORY_PROFILE:
+        acceptedTypes:
+            - xml
+    MODEL_QUERY_SPEC:
+        acceptedTypes:
+            - xml
+    AAI_SERVICE_MODEL:
+        acceptedTypes:
+            - xml
+    AAI_VF_MODULE_MODEL:
+        acceptedTypes:
+            - xml
+    AAI_VF_INSTANCE_MODEL:
+        acceptedTypes:
+            - xml 
+    OTHER:
+        acceptedTypes:
+
+resourceDeploymentArtifacts:
+    HEAT:
+        acceptedTypes:
+            - yaml
+            - yml
+        validForResourceTypes: *allResourceTypes
+    HEAT_VOL:
+        acceptedTypes:
+            - yaml
+            - yml
+        validForResourceTypes: *allResourceTypes
+    HEAT_NESTED:
+        acceptedTypes:
+            - yaml
+            - yml
+        validForResourceTypes: *allResourceTypes
+    HEAT_ARTIFACT:
+        acceptedTypes:
+        validForResourceTypes: *allResourceTypes
+    HEAT_NET:
+        acceptedTypes:
+            - yaml
+            - yml
+        validForResourceTypes: *allResourceTypes
+    YANG_XML:
+        acceptedTypes:
+            - xml
+        validForResourceTypes: *allResourceTypes
+    VNF_CATALOG:
+        acceptedTypes:
+            - xml
+        validForResourceTypes: *allResourceTypes
+    VF_LICENSE:
+        acceptedTypes:
+            - xml
+        validForResourceTypes: *allResourceTypes
+    VENDOR_LICENSE:
+        acceptedTypes:
+            - xml
+        validForResourceTypes: *allResourceTypes
+    MODEL_INVENTORY_PROFILE:
+        acceptedTypes:
+            - xml
+        validForResourceTypes: *allResourceTypes
+    MODEL_QUERY_SPEC:
+        acceptedTypes:
+            - xml
+        validForResourceTypes: *allResourceTypes
+    APPC_CONFIG:
+        acceptedTypes:
+        validForResourceTypes:
+            - VF
+    AAI_VF_MODEL:
+        acceptedTypes:
+            - xml
+        validForResourceTypes:
+            - VF
+    AAI_VF_MODULE_MODEL:
+        acceptedTypes:
+            - xml
+        validForResourceTypes:
+            - VF
+    OTHER:
+        acceptedTypes:
+        validForResourceTypes: *allResourceTypes
+
+resourceInstanceDeploymentArtifacts:
+    HEAT_ENV:
+        acceptedTypes:
+            - env
+    VF_MODULES_METADATA:
+        acceptedTypes:
+            - json
+
+resourceInformationalDeployedArtifacts:
+
+
+requirementsToFulfillBeforeCert:
+     CP:
+       - tosca.capabilities.network.Bindable
+
+capabilitiesToConsumeBeforeCert:
+            
+unLoggedUrls:
+   - /sdc2/rest/healthCheck
+
+cleanComponentsConfiguration:
+    cleanIntervalInMinutes: 1440
+    componentsToClean:
+       - Resource
+       - Service
+
+artifactsIndex: resources
+
+cassandraConfig:
+    cassandraHosts: ['localhost']
+    localDataCenter:
+    reconnectTimeout : 30000
+    authenticate: false
+    username: koko
+    password: bobo
+    ssl: false
+    truststorePath : /path/path
+    truststorePassword : 123123
+    keySpaces:
+        - { name: sdcaudit, replicationStrategy: SimpleStrategy, replicationInfo: ['1']}
+        - { name: sdcartifact, replicationStrategy: SimpleStrategy, replicationInfo: ['1']}
+       
+switchoverDetector:
+    gBeFqdn: 
+    gFeFqdn: 
+    beVip: 1.2.3.4
+    feVip: 1.2.3.4
+    beResolveAttempts: 3
+    feResolveAttempts: 3
+    enabled: false
+    interval: 60
+    changePriorityUser: ecompasdc
+    changePriorityPassword: ecompasdc123
+    publishNetworkUrl: "http://cora.web/crt/CipDomain.ECOMP-ASDC-DEVST/config/update_network?user=root"
+    publishNetworkBody: '{"note":"publish network"}'
+    groups:
+      beSet: { changePriorityUrl: "http://cora.web/crt/CipDomain.ECOMP-ASDC-DEVST/config/sites/AIO-BE.ecomp.idns.cip?user=root",
+               changePriorityBody: '{"name":"AIO-BE.ecomp.idns.cip","uri":"/crt/CipDomain.ECOMP-ASDC-DEVST/config/sites/AIO-BE.ecomp.idns.cip","no_ad_redirection":false,"v4groups":{"failover_groups":["/crt/CipDomain.ECOMP-ASDC-DEVST/config/groups/group_mg_be","/crt/CipDomain.ECOMP-ASDC-DEVST/config/groups/group_bs_be"],"failover_policy":["FAILALL"]},"comment":"AIO BE G-fqdn","intended_app_proto":"DNS"}'}
+      feSet: { changePriorityUrl: "http://cora.web/crt/CipDomain.ECOMP-ASDC-DEVST/config/sites/AIO-FE.ecomp.idns.cip?user=root",
+               changePriorityBody: '{"comment":"AIO G-fqdn","name":"AIO-FE.ecomp.idns.cip","v4groups":{"failover_groups":["/crt/CipDomain.ECOMP-ASDC-DEVST/config/groups/group_mg_fe","/crt/CipDomain.ECOMP-ASDC-DEVST/config/groups/group_bs_fe"],"failover_policy":["FAILALL"]},"no_ad_redirection":false,"intended_app_proto":"DNS","uri":"/crt/CipDomain.ECOMP-ASDC-DEVST/config/sites/AIO-FE.ecomp.idns.cip"}'}
+    
+       
+heatEnvArtifactHeader:
+    ""
+heatEnvArtifactFooter:
+    ""
+
+onboarding:
+    protocol: http
+    host: localhost
+    port: 8080
+    downloadCsarUri: "/onboarding-api/v1.0/vendor-software-products/packages"
+
+applicationL1Cache:
+    datatypes:
+        enabled: true
+        firstRunDelay: 10
+        pollIntervalInSec: 60
+
+applicationL2Cache:
+    enabled: false
+    catalogL1Cache:
+        enabled: true
+        resourcesSizeInCache: 300
+        servicesSizeInCache: 200
+        productsSizeInCache: 100
+    queue:
+        syncIntervalInSecondes: 60
+        waitOnShutDownInMinutes: 30
+        numberOfCacheWorkers: 4
+        
diff --git a/catalog-be/src/test/resources/config/catalog-be/distribution-engine-configuration.yaml b/catalog-be/src/test/resources/config/catalog-be/distribution-engine-configuration.yaml
new file mode 100644
index 0000000..a64ea7f
--- /dev/null
+++ b/catalog-be/src/test/resources/config/catalog-be/distribution-engine-configuration.yaml
@@ -0,0 +1,43 @@
+uebServers:
+   - uebsb91kcdc.it.att.com:3904
+   - uebsb92kcdc.it.att.com:3904
+#   - uebsb93kcdc.it.att.com:3904
+
+uebPublicKey: 8F3MDAtMSBwwpSMy
+
+uebSecretKey: gzFmsTxSCtO5RQfAccM6PqqX
+
+distributionNotifTopicName: ASDC-DISTR-NOTIF-TOPIC
+distributionStatusTopicName: ASDC-DISTR-STATUS-TOPIC
+
+initRetryIntervalSec: 5
+initMaxIntervalSec: 60
+
+distribNotifServiceArtifactTypes:
+  info:
+      - MURANO-PKG
+
+distribNotifResourceArtifactTypes:
+  lifecycle:
+      - HEAT
+      - DG-XML
+
+environments:
+   - PROD
+
+distributionStatusTopic:
+   pollingIntervalSec: 60
+   fetchTimeSec: 15
+   consumerGroup: asdc
+   consumerId: asdc-id
+
+distributionNotificationTopic:
+   minThreadPoolSize: 0
+   maxThreadPoolSize: 10
+   maxWaitingAfterSendingSeconds: 5
+
+createTopic:
+   partitionCount: 1
+   replicationCount: 1
+
+startDistributionEngine: true
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/config/catalog-be/ecomp-error-configuration.yaml b/catalog-be/src/test/resources/config/catalog-be/ecomp-error-configuration.yaml
new file mode 100644
index 0000000..9d7cd74
--- /dev/null
+++ b/catalog-be/src/test/resources/config/catalog-be/ecomp-error-configuration.yaml
@@ -0,0 +1,383 @@
+###########################################
+# Note the conventions of the field values:
+# type can be one of: CONFIG_ERROR, SYSTEM_ERROR, DATA_ERROR, CONNECTION_PROBLEM, AUTHENTICATION_PROBLEM
+# severity can be one of: WARN, ERROR, FATAL
+# alarmSeverity can be one of: CRITICAL,MAJOR,MINOR,INFORMATIONAL,NONE
+# code is a unique integer in range of 3003-9999 (3000-3002 are occupied for internal usage)
+# The above enumeration values are out-of-the-box and can be changed in code. 
+# In case of config and code mismatch, the appropriate error will be printed to log
+#
+## Range of BE codes - 3010-7999
+
+errors:
+
+    BeRestApiGeneralError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_4000,
+        severity: ERROR,
+        description: "Unexpected error during BE REST API execution",
+        alarmSeverity: CRITICAL
+    }
+
+    BeHealthCheckError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3010,
+        severity: ERROR,
+        description: "Error during BE Health Check",
+        alarmSeverity: CRITICAL
+    }
+    
+    BeInitializationError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_4019,
+        severity: ERROR,
+        description: "Catalog-BE was not initialized properly",
+        alarmSeverity: CRITICAL
+    }
+
+    BeResourceMissingError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3011,
+        severity: ERROR,
+        description: "Mandatory resource %s cannot be found in repository",
+        alarmSeverity: MAJOR
+    }
+    
+    BeServiceMissingError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3012,
+        severity: ERROR,
+        description: "Mandatory service %s cannot be found in repository",
+        alarmSeverity: MAJOR
+    }
+    
+    BeFailedAddingResourceInstanceError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3013,
+        severity: ERROR,
+        description: "Failed to add resource instance of resource %s to service %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeIncorrectServiceError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3014,
+        severity: ERROR,
+        description: "Service %s is not valid",
+        alarmSeverity: MAJOR
+    }
+     
+    BeRepositoryDeleteError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3015,
+        severity: ERROR,
+        description: "Failed to delete object %s from repository",
+        alarmSeverity: CRITICAL
+    }
+    
+    BeRepositoryQueryError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3016,
+        severity: ERROR,
+        description: "Failed to fetch from repository %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeInvalidConfigurationError: {
+        type: CONFIG_ERROR,
+        code: ASDC_3017,
+        severity: FATAL,
+        description: "Configuration parameter %s is invalid. Value configured is %s",
+        alarmSeverity: MAJOR
+    }
+   
+    BeUebConnectionError: {
+        type: CONNECTION_PROBLEM,
+        code: ASDC_4001,
+        severity: ERROR,
+        description: "Connection problem towards U-EB server. Reason: %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeUebSystemError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3019,
+        severity: ERROR,
+        description: "Error occured during access to U-EB Server. Operation: %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeUebObjectNotFoundError: {
+        type: DATA_ERROR,
+        code: ASDC_4005,
+        severity: ERROR,
+        description: "Error occured during access to U-EB Server. Data not found: %s",
+        alarmSeverity: MAJOR
+    }
+
+    BeDistributionEngineSystemError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3021,
+        severity: ERROR,
+        description: "Error occured in Distribution Engine. Failed operation: %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeUebAuthenticationError: {
+        type: AUTHENTICATION_PROBLEM,
+        code: ASDC_4003,
+        severity: ERROR,
+        description: "Authentication problem towards U-EB server. Reason: %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeUebUnkownHostError: {
+        type: CONNECTION_PROBLEM,
+        code: ASDC_4002,
+        severity: ERROR,
+        description: "Connection problem towards U-EB server. Cannot reach host %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeDistributionEngineInvalidArtifactType: {
+        type: DATA_ERROR,
+        code: ASDC_4006,
+        severity: WARN,
+        description: "The artifact type %s does not appear in the list of valid artifacts %s",
+        alarmSeverity: MAJOR
+    }
+    BeInvalidTypeError: {
+        type: DATA_ERROR,
+        code: ASDC_4008,
+        severity: WARN,
+        description: "The type %s of %s is invalid",
+        alarmSeverity: MAJOR
+    }
+    BeInvalidValueError: {
+        type: DATA_ERROR,
+        code: ASDC_3028,
+        severity: WARN,
+        description: "The value %s of %s from type %s is invalid",
+        alarmSeverity: MAJOR
+    } 
+    
+    BeFailedDeletingResourceInstanceError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_3029,
+        severity: ERROR,
+        description: "Failed to delete resource instance %s from service %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeMissingConfigurationError: {
+        type: CONFIG_ERROR,
+        code: ASDC_3030,
+        severity: FATAL,
+        description: "Configuration parameter %s is missing",
+        alarmSeverity: MAJOR
+    }
+    
+    BeConfigurationInvalidListSizeError: {
+        type: CONFIG_ERROR,
+        code: ASDC_3031,
+        severity: FATAL,
+        description: "Configuration parameter %s is invalid. At least %s values shall be configured",
+        alarmSeverity: MAJOR
+    }
+    
+    ErrorConfigFileFormat: {
+        type: CONFIG_ERROR,
+        code: ASDC_3032,
+        severity: ERROR,
+        description: "Error element not found in YAML name: %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeMissingArtifactInformationError: {
+        type: DATA_ERROR,
+        code: ASDC_4010,
+        severity: ERROR,
+        description: "Artifact uploaded has missing information. Missing %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeArtifactMissingError: {
+        type: DATA_ERROR,
+        code: ASDC_4011,
+        severity: ERROR,
+        description: "Artifact %s requested is not found",
+        alarmSeverity: MAJOR
+    }
+    
+    BeArtifactPayloadInvalid: {
+        type: DATA_ERROR,
+        code: ASDC_4012,
+        severity: ERROR,
+        description: "Payload of artifact uploaded is invalid (invalid MD5 or encryption)",
+        alarmSeverity: MAJOR
+    }
+    
+    BeUserMissingError: {
+        type: DATA_ERROR,
+        code: ASDC_4009,
+        severity: ERROR,
+        description: "User %s requested is not found",
+        alarmSeverity: MAJOR
+    }
+    
+    BeArtifactInformationInvalidError: {
+        type: DATA_ERROR,
+        code: ASDC_4013,
+        severity: ERROR,
+        description: "Input for artifact metadata is invalid",
+        alarmSeverity: MAJOR
+    }
+    BeFailedAddingCapabilityTypeError: {
+        type: DATA_ERROR,
+        code: ASDC_4015,
+        severity: ERROR,
+        description: "Failed adding capability type",
+        alarmSeverity: CRITICAL
+    }
+    
+    BeCapabilityTypeMissingError: {
+        type: DATA_ERROR,
+        code: ASDC_4016,
+        severity: ERROR,
+        description: "Capability Type %s not found",
+        alarmSeverity: CRITICAL
+    }
+    
+    BeInterfaceMissingError: {
+        type: DATA_ERROR,
+        code: ASDC_4020,
+        severity: ERROR,
+        description: "Interface %s required is missing",
+        alarmSeverity: MAJOR
+    }
+    
+    BeDaoSystemError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_4014,
+        severity: ERROR,
+        description: "Operation towards database failed",
+        alarmSeverity: CRITICAL
+    }
+    
+    BeSystemError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_4017,
+        severity: ERROR,
+        description: "Unexpected error during operation",
+        alarmSeverity: CRITICAL
+    }
+    
+    BeFailedLockObjectError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_4007,
+        severity: WARN,
+        description: "Failed to lock object for update",
+        alarmSeverity: CRITICAL
+    }
+    
+    BeInvalidJsonInput: {
+        type: SYSTEM_ERROR,
+        code: ASDC_4018,
+        severity: ERROR,
+        description: "Failed to convert json input to object",
+        alarmSeverity: MAJOR
+    }
+    
+    BeDistributionMissingError: {
+        type: DATA_ERROR,
+        code: ASDC_4021,
+        severity: ERROR,
+        description: "Distribution %s required is missing",
+        alarmSeverity: MAJOR
+    }
+    
+    BeHealthCheckRecovery: {
+        type: RECOVERY,
+        code: ASDC_4022,
+        severity: INFO,
+        description: "BE Health Check Recovery",
+        alarmSeverity: INFORMATIONAL
+    }
+    BeFailedCreateNodeError: {
+        type: DATA_ERROR,
+        code: ASDC_6000,
+        severity: ERROR,
+        description: "Failed to create node %s on graph. status is %s",
+        alarmSeverity: MAJOR
+    }
+    BeFailedUpdateNodeError: {
+        type: DATA_ERROR,
+        code: ASDC_6001,
+        severity: ERROR,
+        description: "Failed to update node %s on graph. Status is %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeFailedDeleteNodeError: {
+        type: DATA_ERROR,
+        code: ASDC_6002,
+        severity: ERROR,
+        description: "Failed to delete node %s on graph. Status is %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeFailedRetrieveNodeError: {
+        type: DATA_ERROR,
+        code: ASDC_6003,
+        severity: ERROR,
+        description: "Failed to retrieve node %s from graph. Status is %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeExecuteRollbackError: {
+        type: DATA_ERROR,
+        code: ASDC_6004,
+        severity: ERROR,
+        description: "Going to execute rollback on graph.",
+        alarmSeverity: MAJOR
+    }
+    
+    BeFailedFindParentError: {
+        type: DATA_ERROR,
+        code: ASDC_6005,
+        severity: ERROR,
+        description: "Failed to find parent node %s on graph. Status is %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeFailedFindAllNodesError: {
+        type: DATA_ERROR,
+        code: ASDC_6006,
+        severity: ERROR,
+        description: "Failed to fetch all nodes with type %s of parent node %s . Status is %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeFailedFindAssociationError: {
+        type: DATA_ERROR,
+        code: ASDC_6007,
+        severity: ERROR,
+        description: "Cannot find node with type %s associated with node %s . Status is %s",
+        alarmSeverity: MAJOR
+    }
+    
+    BeFailedFindAssociationError: {
+        type: DATA_ERROR,
+        code: ASDC_6008,
+        severity: ERROR,
+        description: "Cannot find node with type %s associated with node %s . Status is %s",
+        alarmSeverity: MAJOR
+    }
+    BeComponentCleanerSystemError: {
+        type: SYSTEM_ERROR,
+        code: ASDC_6009,
+        severity: ERROR,
+        description: "Error occured in Component Cleaner Task. Failed operation: %s",
+        alarmSeverity: MAJOR
+    }
+    
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml b/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml
new file mode 100644
index 0000000..89b44d9
--- /dev/null
+++ b/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml
@@ -0,0 +1,1583 @@
+# Errors
+errors:
+    OK: {
+        code: 200,
+        message: "OK"
+    }
+    CREATED: {
+        code: 201,
+        message: "OK"
+    }
+    NO_CONTENT: {
+        code: 204,
+        message: "No Content"
+    }
+#--------POL4050-----------------------------     
+    NOT_ALLOWED: {
+        code: 405,
+        message: "Error: Method not allowed.",
+        messageId: "POL4050"
+    }
+#--------POL5000-----------------------------     
+    GENERAL_ERROR: {
+        code: 500,
+        message: "Error: Internal Server Error. Please try again later.",
+        messageId: "POL5000"
+    }
+#---------POL5001------------------------------     
+    MISSING_X_ECOMP_INSTANCE_ID: {
+        code: 400  ,
+        message: "Error: Missing 'X-ECOMP-InstanceID' HTTP header.",
+        messageId: "POL5001"
+    }
+#---------POL5002------------------------------     
+    AUTH_REQUIRED: {
+        code: 401  ,
+        message: "Error: Authentication is required to use the API.",
+        messageId: "POL5002"
+    }
+#---------POL5003------------------------------     
+    AUTH_FAILED: {
+        code: 403  ,
+        message: "Error: Not authorized to use the API.",
+        messageId: "POL5003"
+    }
+#---------SVC4000----------------------------- 
+    INVALID_CONTENT: {
+        code: 400,
+        message: "Error: Invalid content.",
+        messageId: "SVC4000"
+    }
+#---------SVC4002----------------------------- 
+    MISSING_INFORMATION: {
+        code: 403,
+        message: "Error: Missing information.",
+        messageId: "SVC4002"
+    }
+#---------SVC4003------------------------------ 
+# %1 - Users's USER_ID     
+    USER_NOT_FOUND: {
+        code: 404,
+        message: "Error: User '%1' was not found.",
+        messageId: "SVC4003"
+    }
+#---------SVC4004----------------------------- 
+# %1 - Users's email address     
+    INVALID_EMAIL_ADDRESS: {
+        code: 400,
+        message: "Error: Invalid email address '%1'.",
+        messageId: "SVC4004"
+    }
+#---------SVC4005------------------------------ 
+# %1 - role
+    INVALID_ROLE: {
+        code: 400,
+        message: "Error: Invalid role '%1'.",
+        messageId: "SVC4005"
+    }
+#---------SVC4006------------------------------ 
+# %1 - Users's USER_ID     
+    USER_ALREADY_EXIST: {
+        code: 409,
+        message: "Error: User with '%1' ID already exists.",
+        messageId: "SVC4006"
+    }
+#---------SVC4007------------------------------ 
+    DELETE_USER_ADMIN_CONFLICT: {
+        code: 409,
+        message: "Error: An administrator can only be deleted by another administrator.",
+        messageId: "SVC4007"
+    }
+#---------SVC4008----------------------------- 
+# %1 - Users's userId     
+    INVALID_USER_ID: {
+        code: 400,
+        message: "Error: Invalid userId '%1'.",
+        messageId: "SVC4008"
+    }
+#---------SVC4049------------------------------ 
+# %1 - service/resource
+    COMPONENT_MISSING_CONTACT: {
+        code: 400,
+        message: "Error: Invalid Content. Missing %1 contact id.",
+        messageId: "SVC4049"
+    } 
+#---------SVC4050----------------------------- 
+# %1 - Service/Resource/Additional parameter
+# %2 - service/resource/label name
+    COMPONENT_NAME_ALREADY_EXIST: {
+        code: 409,
+        message: "Error: %1 with name '%2' already exists.",
+        messageId: "SVC4050"
+    }
+#---------SVC4051------------------------------ 
+# %1 - resource/service 
+    COMPONENT_MISSING_CATEGORY: {
+        code: 400,
+        message: "Error: Invalid Content. Missing %1 category.",
+        messageId: "SVC4051"
+    }
+
+#---------SVC4052------------------------------ 
+    COMPONENT_MISSING_TAGS: {
+        code: 400,
+        message: "Error: Invalid Content. At least one tag has to be specified.",
+        messageId: "SVC4052"
+    }
+
+#---------SVC4053------------------------------ 
+# %1 - service/resource
+    COMPONENT_MISSING_DESCRIPTION: {
+        code: 400,
+        message: "Error: Invalid Content. Missing %1 description.",
+        messageId: "SVC4053"
+    }
+#---------SVC4054------------------------------  
+# %1 - resource/service
+    COMPONENT_INVALID_CATEGORY: {
+        code: 400,
+        message: "Error: Invalid Content. Invalid %1 category.",
+        messageId: "SVC4054"
+    }
+#---------SVC4055------------------------------ 
+    MISSING_VENDOR_NAME: {
+        code: 400,
+        message: "Error: Invalid Content. Missing vendor name.",
+        messageId: "SVC4055"
+    }
+#---------SVC4056------------------------------ 
+    MISSING_VENDOR_RELEASE: {
+        code: 400,
+        message: "Error: Invalid Content. Missing vendor release.",
+        messageId: "SVC4056"
+    }
+
+#---------SVC4057------------------------------  
+    MISSING_DERIVED_FROM_TEMPLATE: {
+        code: 400,
+        message: "Error: Invalid Content. Missing derived from template specification.",
+        messageId: "SVC4057"
+    }
+
+#---------SVC4058------------------------------ 
+# %1 - service/resource
+    COMPONENT_MISSING_ICON: {
+        code: 400,
+        message: "Error: Invalid Content. Missing %1 icon.",
+        messageId: "SVC4058"
+    }
+#---------SVC4059------------------------------ 
+# %1 - service/resource
+    COMPONENT_INVALID_ICON: {
+        code: 400,
+        message: "Error: Invalid Content. Invalid %1 icon.",
+        messageId: "SVC4059"
+    }
+#---------SVC4060------------------------------  
+    PARENT_RESOURCE_NOT_FOUND: {
+        code: 400,
+        message: "Error: Invalid Content. Derived from resource template was not found.",
+        messageId: "SVC4060"
+    }
+#---------SVC4061------------------------------  
+    MULTIPLE_PARENT_RESOURCE_FOUND: {
+        code: 400,
+        message: "Error: Invalid Content. Multiple derived from resource template is not allowed.",
+        messageId: "SVC4061"
+    }
+
+#---------SVC4062------------------------------ 
+# %1 - service/resource
+    MISSING_COMPONENT_NAME: {
+        code: 400,
+        message: "Error: Invalid Content. Missing %1 name.",
+        messageId: "SVC4062"
+    }
+#---------SVC4063------------------------------  
+    #%1  -  resource/service name
+    RESOURCE_NOT_FOUND: {
+        code: 404,
+        message: "Error: Requested '%1' resource was not found.",
+        messageId: "SVC4063"
+    }
+
+#---------SVC4064------------------------------ 
+# %1 - Service/Resource
+    COMPONENT_INVALID_DESCRIPTION: {
+        code: 400,
+        message: "Error: Invalid Content. %1 description contains non-english characters.",
+        messageId: "SVC4064"
+    }
+#---------SVC4065------------------------------ 
+# %1 - Service/Resource
+# %2 - max resource/service name length 
+    COMPONENT_DESCRIPTION_EXCEEDS_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. %1 description exceeds limit of %2 characters.",
+        messageId: "SVC4065"
+    }
+#---------SVC4066------------------------------ 
+# %1 - max length   
+    COMPONENT_TAGS_EXCEED_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. Tags overall length exceeds limit of %1 characters.",
+        messageId: "SVC4066"
+    }
+#---------SVC4067------------------------------
+# %1 - max length  
+    VENDOR_NAME_EXCEEDS_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. Vendor name exceeds limit of %1 characters.",
+        messageId: "SVC4067"
+    }
+#---------SVC4068------------------------------
+# %1 - max length  
+    VENDOR_RELEASE_EXCEEDS_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. Vendor release exceeds limit of %1 characters.",
+        messageId: "SVC4068"
+    }
+
+#---------SVC4069------------------------------ 
+# %1 - Service/Resource/Product
+    COMPONENT_INVALID_CONTACT_ID: {
+        code: 400,
+        message: "Error: Invalid Content. %1 contact id should be in format 'mnnnnnn' or 'aannna' or 'aannnn', where m=m ,a=a-zA-Z and n=0-9",
+        messageId: "SVC4069"
+    }
+#---------SVC4070------------------------------ 
+# %1 - Service/Resource
+    INVALID_COMPONENT_NAME: {
+        code: 400,
+        message: 'Error: Invalid Content. %1 name is not allowed to contain characters like <>:"\/|?* and space characters other than regular space.',
+        messageId: "SVC4070"
+    }
+
+#---------SVC4071------------------------------ 
+    INVALID_VENDOR_NAME: {
+        code: 400,
+        message: 'Error: Invalid Content. Vendor name is not allowed to contain characters like <>:"\/|?* and space characters other than regular space.',
+        messageId: "SVC4071"
+    }
+#---------SVC4072------------------------------ 
+    INVALID_VENDOR_RELEASE: {
+        code: 400,
+        message: 'Error: Invalid Content. Vendor release is not allowed to contain characters like <>:"\/|?* and space characters other than regular space.',
+        messageId: "SVC4072"
+    }
+#---------SVC4073------------------------------ 
+# %1 - Service/Resource
+# %2 - max  resource/service name  
+    COMPONENT_NAME_EXCEEDS_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. %1 name exceeds limit of %2 characters.",
+        messageId: "SVC4073"
+    }
+#---------SVC4080------------------------------  
+# %1 - resource/service name
+# %2 - resource/service
+# %3 - First name of last modifier
+# %4 - Last name of last modifier
+# %5 - USER_ID of last modifier
+    COMPONENT_IN_CHECKOUT_STATE: {
+        code: 403,
+        message: "Error: Requested '%1' %2 is locked for modification by %3 %4(%5).",
+        messageId: "SVC4080"
+    }
+#---------SVC4081-----------------------------  
+# %1 - resource/service name
+# %2 - resource/service
+# %3 - First name of last modifier
+# %4 - Last name of last modifier
+# %5 - USER_ID of last modifier
+    COMPONENT_IN_CERT_IN_PROGRESS_STATE: {
+        code: 403,
+        message: "Error: Requested '%1' %2 is locked for certification by %3 %4(%5).",
+        messageId: "SVC4081"
+    }
+
+#-----------SVC4082---------------------------  
+# %1 - resource/service name
+# %2 - resource/service
+# %3 - First name of last modifier
+# %4 - Last name of last modifier
+# %5 - USER_ID of last modifier
+    COMPONENT_SENT_FOR_CERTIFICATION: {
+        code: 403,
+        message: "Error: Requested '%1' %2 is sent for certification by %3 %4(%5).",
+        messageId: "SVC4082"
+    }
+#-----------SVC4083---------------------------
+    COMPONENT_VERSION_ALREADY_EXIST: {
+        code: 409,
+        message: "Error: Version of this %1 was already promoted.",
+        messageId: "SVC4083"
+    }
+#-----------SVC4084---------------------------
+# %1 - resource/service/product name
+# %2 - resource/service/product
+# %3 - First name of last modifier
+# %4 - Last name of last modifier
+# %5 - USER_ID of last modifier
+    COMPONENT_ALREADY_CHECKED_IN: {
+        code: 409,
+        message: "Error: The current version of '%1' %2 was already checked-in by %3 %4(%5).",
+        messageId: "SVC4084"
+    }
+#-----------SVC4085---------------------------
+# %1 - resource/service/product name
+# %2 - resource/service/product
+# %3 - First name of last modifier
+# %4 - Last name of last modifier
+# %5 - USER_ID of last modifier
+    COMPONENT_CHECKOUT_BY_ANOTHER_USER: {
+        code: 403,
+        message: "Error: %1 %2 has already been checked out by %3 %4(%5).",
+        messageId: "SVC4085"
+    }
+#-----------SVC4086---------------------------
+# %1  - resource/service name
+# %2  - resource/service
+    COMPONENT_IN_USE: {
+        code: 403,
+        message: "Error: Requested '%1' %2 is in use by another user.",
+        messageId: "SVC4086"
+    }
+#-----------SVC4087---------------------------
+# %1 - component name
+# %2 - resource/service/product
+    COMPONENT_HAS_NEWER_VERSION: {
+        code: 409,
+        message: "Error: Checking out of the requested version of the '%1' %2 is not allowed as a newer version exists.",
+        messageId: "SVC4087"
+    }
+#-----------SVC4088---------------------------
+# %1 - resource/service name
+# %2 - resource/service
+# %3 - First name of last modifier
+# %4 - Last name of last modifier
+# %5 - USER_ID of last modifier
+    COMPONENT_ALREADY_CERTIFIED: {
+        code: 403,
+        message: "Error: Requested %1 %2 has already been certified by %3 %4(%5).",
+        messageId: "SVC4088"
+    }
+#-----------SVC4089---------------------------
+# %1 - resource/service name
+# %2 - resource/service
+    COMPONENT_NOT_READY_FOR_CERTIFICATION: {
+        code: 403,
+        message: "Error: Requested '%1' %2 is not ready for certification.",
+        messageId: "SVC4089"
+    }
+#-----------SVC4100---------------------------
+#%1 - property name
+    PROPERTY_NOT_FOUND: {
+        code: 404,
+        message: "Error: Requested '%1' property was not found.",
+        messageId: "SVC4100"
+    }
+#-----------SVC4101---------------------------
+#%1 - property name
+    PROPERTY_ALREADY_EXIST: {
+        code: 409,
+        message: "Error: Property with '%1' name already exists.",
+        messageId: "SVC4101"
+    }
+
+#-----------SVC4102---------------------------
+# %1 - capability type name 
+    CAPABILITY_TYPE_ALREADY_EXIST: {
+        code: 409,
+        message: "Error: Capability Type with name '%1' already exists.",
+        messageId: "SVC4102"
+    }
+#-----------SVC4114---------------------------
+    AUTH_FAILED_INVALIDE_HEADER: {
+        code: 400,
+        message: "Error: Invalid Authorization header.",
+        messageId: "SVC4114"
+    }
+#-----------SVC4115---------------------------
+# %1 - capability type name 
+    MISSING_CAPABILITY_TYPE: {
+        code: 400,
+        message: "Error: Invalid Content. Missing Capability Type '%1'.",
+        messageId: "SVC4115"
+    }
+    RESOURCE_INSTANCE_BAD_REQUEST: {
+        code: 400,
+        message: "Error: Invalid Content.",
+        messageId: "SVC4116"
+    }
+#-----------SVC4117---------------------------
+# %1 - resource instance name
+# %2 - resource instance name
+# %3 - requirement name
+    RESOURCE_INSTANCE_MATCH_NOT_FOUND: {
+        code: 404,
+        message: "Error: Match not found between resource instance '%1' and resource instance '%2' for requirement '%3'.",
+        messageId: "SVC4117"
+    }
+#-----------SVC4118---------------------------
+# %1 - resource instance name
+# %2 - resource instance name
+# %3 - requirement name
+    RESOURCE_INSTANCE_ALREADY_EXIST: {
+        code: 409,
+        message: "Error: Resource instances '%1' and '%2' are already associated with requirement '%3'.",
+        messageId: "SVC4118"
+    }
+#-----------SVC4119---------------------------
+# %1 - resource instance name
+# %2 - resource instance name
+# %3 - requirement name
+    RESOURCE_INSTANCE_RELATION_NOT_FOUND: {
+        code: 404,
+        message: "Error: No relation found between resource instances '%1' and '%2' for requirement '%3'.",
+        messageId: "SVC4119"
+    }
+#-----------SVC4120---------------------------
+# %1 - User's USER_ID
+    USER_INACTIVE: {
+        code: 404,
+        message: "Error: User %1 was not found.",
+        messageId: "SVC4120"
+    }
+#-----------SVC4121---------------------------
+# %1 - User's USER_ID
+    USER_HAS_ACTIVE_ELEMENTS: {
+        code: 403,
+        message: "Error: User with %1 ID can not be deleted since it has active elements(resources/services/artifacts).",
+        messageId: "SVC4121"
+    }
+#-----------SVC4122---------------------------
+# %1 - artifact type
+    ARTIFACT_TYPE_NOT_SUPPORTED: {
+        code: 400,
+        message: "Error: Invalid artifact type '%1'.",
+        messageId: "SVC4122"
+    }
+#-----------SVC4123---------------------------
+    ARTIFACT_LOGICAL_NAME_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: Artifact logical name cannot be changed.",
+        messageId: "SVC4123"
+    }
+#-----------SVC4124---------------------------
+    MISSING_ARTIFACT_TYPE: {
+        code: 400,
+        message: "Error: Missing artifact type.",
+        messageId: "SVC4124"
+    }
+#-----------SVC4125---------------------------
+# %1-artifact name
+    ARTIFACT_EXIST: {
+        code: 400,
+        message: "Error: Artifact '%1' already exists.",
+        messageId: "SVC4125"
+    }
+#---------SVC4126------------------------------ 
+# %1 - resource/service/product/...
+# %2 - field (tag, vendor name...)
+    INVALID_FIELD_FORMAT: {
+        code: 400,
+        message: "Error:  Invalid %1 %2 format.",
+        messageId: "SVC4126"
+    }
+#-----------SVC4127---------------------------
+    ARTIFACT_INVALID_MD5: {
+        code: 400,
+        message: "Error: Invalid artifact checksum.",
+        messageId: "SVC4127"
+    }
+#-----------SVC4128---------------------------
+    MISSING_ARTIFACT_NAME: {
+        code: 400,
+        message: "Error: Invalid content. Missing artifact name.",
+        messageId: "SVC4128"
+    }
+#-----------SVC4129---------------------------
+    MISSING_PROJECT_CODE: {
+        code: 400,
+        message: "Error: Invalid Content. Missing PROJECT_CODE number.",
+        messageId: "SVC4129"
+    }
+#-----------SVC4130---------------------------
+    INVALID_PROJECT_CODE: {
+        code: 400,
+        message: "Error: Invalid Content. PROJECT_CODE number must be numeric from 5 up to 10 digits.",
+        messageId: "SVC4130"
+    }
+#-----------SVC4131---------------------------
+# %1-resource/service
+# %2-srtifact/artifacts
+# %3-semicolomn separated list of artifact 
+    COMPONENT_MISSING_MANDATORY_ARTIFACTS: {
+        code: 403,
+        message: "Error: Missing mandatory informational %1 %2: [%3].",
+        messageId: "SVC4131"
+    }
+#-----------SVC4132---------------------------
+# %1 - lifecycle  type name
+    LIFECYCLE_TYPE_ALREADY_EXIST: {
+        code: 409,
+        message: "Error: Lifecycle Type with name '%1' already exists.",
+        messageId: "SVC4132"
+    }
+#-----------SVC4133---------------------------
+# %1 - service version
+# %2 - service name
+    SERVICE_NOT_AVAILABLE_FOR_DISTRIBUTION: {
+        code: 403,
+        message: "Error: Version %1 of '%2' service is not available for distribution.",
+        messageId: "SVC4133"
+    }
+#-----------SVC4134---------------------------
+    MISSING_LIFECYCLE_TYPE: {
+        code: 400,
+        message: "Error: Invalid Content. Missing interface life-cycle type.",
+        messageId: "SVC4134"
+    }
+#---------SVC4135------------------------------ 
+    SERVICE_CATEGORY_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: Service category cannot be changed once the service is certified.",
+        messageId: "SVC4135"
+    }
+#---------SVC4136------------------------------ 
+# %1 - distribution environment name    
+    DISTRIBUTION_ENVIRONMENT_NOT_AVAILABLE: {
+        code: 500,
+        message: "Error: Requested distribution environment '%1' is not available.",
+        messageId: "SVC4136"
+    }
+#---------SVC4137------------------------------ 
+# %1 - distribution environment name    
+    DISTRIBUTION_ENVIRONMENT_NOT_FOUND: {
+        code: 400,
+        message: "Error: Requested distribution environment '%1' was not found.",
+        messageId: "SVC4137"
+    }
+#---------SVC4138------------------------------     
+    DISTRIBUTION_ENVIRONMENT_INVALID: {
+        code: 400,
+        message: "Error: Invalid distribution environment.",
+        messageId: "SVC4138"
+    }
+#---------SVC4139------------------------------     
+# %1 - service name
+    DISTRIBUTION_ARTIFACT_NOT_FOUND: {
+        code: 409,
+        message: "Error: Service '%1' cannot be distributed due to missing deployment artifacts.",
+        messageId: "SVC4139"
+    }
+#---------SVC4200------------------------------ 
+# %1 - Service/Resource
+# %2 - max icon name length   
+    COMPONENT_ICON_EXCEEDS_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. %1 icon name exceeds limit of %2 characters.",
+        messageId: "SVC4200"
+    }
+#---------SVC4300------------------------------ 
+    RESTRICTED_ACCESS: {
+        code: 403,
+        message: "Error: Restricted access.",
+        messageId: "SVC4300"
+    }
+#---------SVC4301------------------------------ 
+    RESTRICTED_OPERATION: {
+        code: 409,
+        message: "Error: Restricted operation.",
+        messageId: "SVC4301"
+    }
+#---------SVC4500------------------------------     
+    MISSING_BODY: {
+        code: 400  ,
+        message: "Error: Missing request body.",
+        messageId: "SVC4500"
+    }
+#---------SVC4501------------------------------
+    MISSING_PUBLIC_KEY: {
+        code: 400  ,
+        message: "Error: Invalid Content. Missing mandatory parameter 'apiPublicKey'." ,
+        messageId: "SVC4501"
+    }
+#---------SVC4502------------------------------     
+    DISTRIBUTION_ENV_DOES_NOT_EXIST: {
+        code: 400  ,
+        message: "Error: Invalid  Body  : Missing mandatory parameter 'distrEnvName'." ,
+        messageId: "SVC4502"
+    }
+#-----------SVC4503---------------------------
+# %1 - service name
+    SERVICE_NOT_FOUND: {
+        code: 404,
+        message: "Error: Requested '%1' service was not found.",
+        messageId: "SVC4503"
+    }
+
+#---------SVC4504------------------------------ 
+# %1 - Service/Resource
+# %2 - service/resource version
+    COMPONENT_VERSION_NOT_FOUND: {
+        code: 404,
+        message: "Error: %1 version %2 was not found.",
+        messageId: "SVC4504"
+    }
+#-----------SVC4505---------------------------
+    #%1-artifact name
+ 
+    ARTIFACT_NOT_FOUND: {
+        code: 404,
+        message: "Error: Artifact '%1' was not found.",
+        messageId: "SVC4505"
+    }
+#---------SVC4506------------------------------ 
+    MISSING_ENV_NAME: {
+        code: 400  ,
+        message: "Error: Invalid Content. Missing mandatory parameter 'distrEnvName'.",
+        messageId: "SVC4506"
+    }
+#---------SVC4507------------------------------ 
+    COMPONENT_INVALID_TAGS_NO_COMP_NAME: {
+        code: 400,
+        message: "Error: Invalid Content. One of the tags should be the component name.",
+        messageId: "SVC4507"
+    }
+ 
+#---------SVC4508------------------------------ 
+    SERVICE_NAME_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: Service name cannot be changed once the service is certified.",
+        messageId: "SVC4508"
+    }
+
+#---------SVC4509------------------------------ 
+    SERVICE_ICON_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: Icon cannot be changed once the service is certified.",
+        messageId: "SVC4509"
+    }
+#---------SVC4510------------------------------ 
+# %1 - icon name max length
+    SERVICE_ICON_EXCEEDS_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. Icon name exceeds limit of %1 characters.",
+        messageId: "SVC4510"
+    }
+#---------SVC4511------------------------------ 
+    DISTRIBUTION_REQUESTED_NOT_FOUND: {
+        code: 404,
+        message: "Error: Requested distribution was not found.",
+        messageId: "SVC4511"
+    }
+#---------SVC4512------------------------------ 
+# %1 - Distribution ID
+    DISTRIBUTION_REQUESTED_FAILED: {
+        code: 403,
+        message: "Error: Requested distribution '%1' failed.",
+        messageId: "SVC4512"
+    }
+#---------SVC4513------------------------------ 
+    RESOURCE_CATEGORY_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: Resource category cannot be changed once the resource is certified.",
+        messageId: "SVC4513"
+    }
+#---------SVC4514------------------------------ 
+    RESOURCE_NAME_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: Resource name cannot be changed once the resource is certified.",
+        messageId: "SVC4514"
+    }
+#---------SVC4515------------------------------ 
+    RESOURCE_ICON_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: Icon cannot be changed once the resource is certified.",
+        messageId: "SVC4515"
+    }
+#---------SVC4516------------------------------ 
+    RESOURCE_VENDOR_NAME_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: Vendor name cannot be changed once the resource is certified.",
+        messageId: "SVC4516"
+    }
+#---------SVC4517------------------------------ 
+    RESOURCE_DERIVED_FROM_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: Derived from resource template cannot be changed once the resource is certified.",
+        messageId: "SVC4517"
+    }
+#---------SVC4518------------------------------ 
+# %1 - max length 
+    COMPONENT_SINGLE_TAG_EXCEED_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. Single tag exceeds limit of %1 characters.",
+        messageId: "SVC4518"
+    }
+#---------SVC4519------------------------------ 
+    INVALID_DEFAULT_VALUE: {
+        code: 400,
+        message: "Error: mismatch in data-type occurred for property %1. data type is %2 and default value found is %3.",
+        messageId: "SVC4519"
+    }
+#---------SVC4520------------------------------ 
+# %1 - service or resource 
+    ADDITIONAL_INFORMATION_MAX_NUMBER_REACHED: {
+        code: 409,
+        message: "Error: Maximal number of additional %1 parameters was reached.",
+        messageId: "SVC4520"
+    }
+#---------SVC4521------------------------------
+    ADDITIONAL_INFORMATION_EMPTY_STRING_NOT_ALLOWED: {
+        code: 400,
+        message: "Error: Invalid Content. The Additional information label and value cannot be empty.",
+        messageId: "SVC4521"
+    }
+#---------SVC4522------------------------------ 
+# %1 - label/value
+# %2 - Maximal length of %1
+    ADDITIONAL_INFORMATION_EXCEEDS_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. Additional information %1 exceeds limit of %2 characters.",
+        messageId: "SVC4522"
+    }
+#---------SVC4523------------------------------
+    ADDITIONAL_INFORMATION_KEY_NOT_ALLOWED_CHARACTERS: {
+        code: 400,
+        message: 'Error: Invalid Content. Additional information label is not allowed to contain characters like <>:"\/|?* and space characters other than regular space.',
+        messageId: "SVC4523"
+    }
+#---------SVC4524------------------------------
+    ADDITIONAL_INFORMATION_NOT_FOUND: {
+        code: 409,
+        message: "Error: Requested additional information was not found.",
+        messageId: "SVC4524"
+    }
+#---------SVC4525------------------------------    
+    ADDITIONAL_INFORMATION_VALUE_NOT_ALLOWED_CHARACTERS: {
+        code: 400,
+        message: 'Error: Invalid Content. Additional information contains non-english characters.',
+        messageId: "SVC4525"
+    }
+#---------SVC4526------------------------------ 
+    RESOURCE_INSTANCE_NOT_FOUND: {
+        code: 404,
+        message: "Error: Requested '%1' resource instance was not found.",
+        messageId: "SVC4526"
+    }
+#---------SVC4527------------------------------ 
+    ASDC_VERSION_NOT_FOUND: {
+        code: 500,
+        message: 'Error: ASDC version cannot be displayed.',
+        messageId: "SVC4527"
+    }
+#---------SVC4528------------------------------ 
+# %1-artifact url/artifact label/artifact description/VNF Service Indicator
+    MISSING_DATA: {
+        code: 400,
+        message: "Error: Invalid content. Missing %1.",
+        messageId: "SVC4528"
+    }
+#---------SVC4529------------------------------ 
+# %1-artifact url/artifact label/artifact description/artifact name
+# %2 - Maximal length of %1
+    EXCEEDS_LIMIT: {
+        code: 400,
+        message: "Error: Invalid Content. %1 exceeds limit of %2 characters.",
+        messageId: "SVC4529"
+    }
+#---------SVC4530------------------------------ 
+    ARTIFACT_INVALID_TIMEOUT: {
+        code: 400,
+        message: "Error: Invalid Content. Artifact Timeout should be set to valid positive non-zero number of minutes.",
+        messageId: "SVC4530"
+    }
+#---------SVC4531------------------------------ 
+    SERVICE_IS_VNF_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: VNF Indicator cannot be updated for certified service.",
+        messageId: "SVC4531"
+    }
+ #---------SVC4532------------------------------ 
+    RESOURCE_INSTANCE_NOT_FOUND_ON_SERVICE: {
+        code: 404,
+        message: "Error: Requested '%1' resource instance was not found on the service '%2.",
+        messageId: "SVC4532"
+    }
+ #---------SVC4533------------------------------ 
+ # %1 -  "HEAT"/"HEAT_ENV"/"MURANO_PKG"/"YANG_XML" 
+    WRONG_ARTIFACT_FILE_EXTENSION: {
+        code: 400,
+        message: "Error: Invalid file extension for %1 artifact type.",
+        messageId: "SVC4533"
+    }
+
+#---------SVC4534------------------------------ 
+# %1 -  "HEAT"/"HEAT_ENV"             
+    INVALID_YAML: {
+        code: 400,
+        message: "Error: Uploaded YAML file for %1 artifact is invalid.",
+        messageId: "SVC4534"
+    }
+
+#---------SVC4535------------------------------ 
+# %1 -  "HEAT"             
+    INVALID_DEPLOYMENT_ARTIFACT_HEAT: {
+        code: 400,
+        message: "Error: Invalid %1 artifact.",
+        messageId: "SVC4535"
+    }
+#---------SVC4536------------------------------ 
+# %1 - "Resource"/"Service"
+# %2 -  resource/service name 
+# %3 -  "HEAT"/"HEAT_ENV"/"MURANO_PKG" 
+# %4 -  "HEAT"/"HEAT_ENV"/"MURANO_PKG
+    DEPLOYMENT_ARTIFACT_OF_TYPE_ALREADY_EXISTS: {
+        code: 400,
+        message: "Error: %1 '%2' already has a deployment artifact of %3 type .Please delete or update an existing %4 artifact.",
+        messageId: "SVC4536"
+    }
+
+#---------SVC4537------------------------------ 
+    MISSING_HEAT: {
+        code: 400,
+        message: "Error: Missing HEAT artifact. HEAT_ENV artifact cannot be uploaded without corresponding HEAT template.",
+        messageId: "SVC4537"
+    }
+#---------SVC4538------------------------------ 
+    MISMATCH_HEAT_VS_HEAT_ENV: {
+        code: 400,
+        message: "Error: Invalid artifact content. Parameter's set in HEAT_ENV '%1' artifact doesn't match the parameters in HEAT '%2' artifact.",
+        messageId: "SVC4538"
+    }
+#---------SVC4539------------------------------ 
+    INVALID_RESOURCE_PAYLOAD: {
+        code: 400,
+        message: "Error: Invalid resource payload.",
+        messageId: "SVC4539"
+    }
+#---------SVC4540------------------------------ 
+    INVALID_TOSCA_FILE_EXTENSION: {
+        code: 400,
+        message: "Error: Invalid file extension for TOSCA template.",
+        messageId: "SVC4540"
+    }
+#---------SVC4541------------------------------ 
+    INVALID_YAML_FILE: {
+        code: 400,
+        message: "Error: Invalid YAML file.",
+        messageId: "SVC4541"
+    }
+#---------SVC4542------------------------------ 
+    INVALID_TOSCA_TEMPLATE: {
+        code: 400,
+        message: "Error: Invalid TOSCA template.",
+        messageId: "SVC4542"
+    }
+#---------SVC4543------------------------------ 
+    NOT_RESOURCE_TOSCA_TEMPLATE: {
+        code: 400,
+        message: "Error: Imported Service TOSCA template.",
+        messageId: "SVC4543"
+    }
+#---------SVC4544------------------------------ 
+    NOT_SINGLE_RESOURCE: {
+        code: 400,
+        message: "Error: Imported TOSCA template should contain one resource definition.",
+        messageId: "SVC4544"
+    }
+#---------SVC4545------------------------------ 
+    INVALID_RESOURCE_NAMESPACE: {
+        code: 400,
+        message: "Error: Invalid resource namespace.",
+        messageId: "SVC4545"
+    }
+#---------SVC4546------------------------------ 
+    RESOURCE_ALREADY_EXISTS: {
+        code: 400,
+        message: "Error: Imported resource already exists in ASDC Catalog.",
+        messageId: "SVC4546"
+    }
+#---------SVC4549------------------------------ 
+    INVALID_RESOURCE_CHECKSUM: {
+        code: 400,
+        message: "Error: Invalid resource checksum.",
+        messageId: "SVC4549"
+    }
+#---------SVC4550------------------------------ 
+    #%1  -  Consumer salt
+    INVALID_LENGTH: {
+        code: 400,
+        message: "Error: Invalid %1 length.",
+        messageId: "SVC4550"
+    }
+    #---------SVC4551------------------------------  
+    #%1  -  ECOMP User name
+    ECOMP_USER_NOT_FOUND: {
+        code: 404,
+        message: "Error: ECOMP User '%1' was not found.",
+        messageId: "SVC4551"
+    }
+#---------SVC4552------------------------------
+    CONSUMER_ALREADY_EXISTS: {
+        code: 409,
+        message: "Error: ECOMP User already exists.",
+        messageId: "SVC4552"
+    }
+#---------SVC4553-----------------------------
+    #%1  -  Consumer name / Consumer password/ Consumer salt 
+    INVALID_CONTENT_PARAM: {
+        code: 400,
+        message: "Error: %1 is invalid.",
+        messageId: "SVC4553"
+    }
+    #---------SVC4554------------------------------ 
+# %1 - "Resource"/"Service"
+    COMPONENT_ARTIFACT_NOT_FOUND: {
+        code: 404,
+        message: "Error: Requested artifact doesn't belong to specified %1.",
+        messageId: "SVC4554"
+    }
+#---------SVC4554------------------------------
+# %1 - "Service name"
+    SERVICE_DEPLOYMENT_ARTIFACT_NOT_FOUND: {
+        code: 403,
+        message: "Error: Requested '%1' service is not ready for certification. Service has to have at least one deployment artifact.",
+        messageId: "SVC4554"
+    }
+#---------SVC4555------------------------------ 
+#%1 - "Resource"/"Service"/"Product"
+#%2 - "category"
+    COMPONENT_ELEMENT_INVALID_NAME_LENGTH: {
+        code: 400,
+        message: "Error: Invalid %1 %2 name length.",
+        messageId: "SVC4555"
+    }
+#---------SVC4556------------------------------ 
+#%1 - "Resource"/"Service"/"Product"
+#%2 - "category"
+    COMPONENT_ELEMENT_INVALID_NAME_FORMAT: {
+        code: 400,
+        message: "Error: Invalid %1 %2 name format.",
+        messageId: "SVC4556"
+    }
+#---------SVC4557------------------------------ 
+#%1 - "Resource"/"Service"/"Product"
+#%2 - "category name"
+    COMPONENT_CATEGORY_ALREADY_EXISTS: {
+        code: 409,
+        message: "Error: %1 category name '%2' already exists.",
+        messageId: "SVC4557"
+    }
+#---------SVC4558------------------------------
+# %1 - "service"/"VF"
+# %2 - "Resource name"
+    VALIDATED_RESOURCE_NOT_FOUND: {
+        code: 403,
+        message: "Error: Submit for Testing is not permitted as your '%1' includes non-validated '%2' resource.",
+        messageId: "SVC4558"
+    }
+#---------SVC4559------------------------------
+# %1 - "service"/"VF"
+# %2 - "Resource name"
+    FOUND_ALREADY_VALIDATED_RESOURCE: {
+        code: 403,
+        message: "Error: Submit for Testing is not permitted as your '%1' includes non-validated '%2' resource. Please use already available validated resource version.",
+        messageId: "SVC4559"
+    }
+#---------SVC4560------------------------------
+# %1 - "service"/"VF"
+# %2 - "Resource name"
+    FOUND_LIST_VALIDATED_RESOURCES: {
+        code: 403,
+        message: "Error: Submit for Testing is not permitted as your '%1' includes non-validated '%2' resource. Please use one of available validated resource versions.",
+        messageId: "SVC4560"
+    }  
+#---------SVC4561------------------------------
+# %1 - "resource"/"product"
+# %2 - "category"
+# %2 - "category name"
+    COMPONENT_CATEGORY_NOT_FOUND: {
+        code: 404,
+        message: "Error: Requested %1 %2 '%3' was not found.",
+        messageId: "SVC4561"
+    }
+#---------SVC4562------------------------------
+# %1 - "Resource"/"Product"
+# %2 - "sub-category name"
+# %2 - "category name"
+    COMPONENT_SUB_CATEGORY_EXISTS_FOR_CATEGORY: {
+        code: 409,
+        message: "Error: %1 sub-category '%2' already exists under '%3' category.",
+        messageId: "SVC4562"
+    }
+#---------SVC4563------------------------------
+# %1 - "Product"
+# %2 - "grouping name"
+# %2 - "sub-category name"
+    COMPONENT_GROUPING_EXISTS_FOR_SUB_CATEGORY: {
+        code: 409,
+        message: "Error: %1 grouping '%2' already exists under '%3' sub-category.",
+        messageId: "SVC4563"
+    }
+#---------SVC4564------------------------------ 
+# %1 - product name
+    PRODUCT_NOT_FOUND: {
+        code: 404,
+        message: "Error: Requested '%1' product was not found.",
+        messageId: "SVC4564"
+    }
+#---------SVC4565------------------------------ 
+# %1 - "HEAT"   
+# %2  - parameter type ("string" , "boolean" , "number") 
+# %3 -  parameter name
+    INVALID_HEAT_PARAMETER_VALUE: {
+        code: 400,
+        message: "Error: Invalid %1 artifact. Invalid %2 value set for '%3' parameter.",
+        messageId: "SVC4565"
+    }
+#---------SVC4566------------------------------ 
+# %1 - "HEAT"   
+# %2  - parameter type ("string" , "boolean" , "number") 
+    INVALID_HEAT_PARAMETER_TYPE: {
+        code: 400,
+        message: "Error: Invalid %1 artifact. Unsupported '%2' parameter type.",
+        messageId: "SVC4566"
+    }
+#---------SVC4567------------------------------ 
+# %1 -  "YANG_XML"             
+    INVALID_XML: {
+        code: 400,
+        message: "Error: Uploaded XML file for %1 artifact is invalid.",
+        messageId: "SVC4567"
+    }
+#---------SVC4567------------------------------ 
+# %1 - "User Name and userId"   
+# %2  -"checked-out"/"in-certification"
+    CANNOT_DELETE_USER_WITH_ACTIVE_ELEMENTS: {
+        code: 409,
+        message: "Error: User cannot be deleted. User '%1' has %2 projects.",
+        messageId: "SVC4567"
+    }
+#---------SVC4568------------------------------ 
+# %1 - "User Name and userId"   
+# %2  -"checked-out"/"in-certification"
+    CANNOT_UPDATE_USER_WITH_ACTIVE_ELEMENTS: {
+        code: 409,
+        message: "Error: Role cannot be changed. User '%1' has %2 projects.",
+        messageId: "SVC4568"
+    }
+#---------SVC4570------------------------------ 
+    UPDATE_USER_ADMIN_CONFLICT: {
+        code: 409,
+        message: "Error: An administrator is not allowed to change his/her role.",
+        messageId: "SVC4570"
+    }
+#---------SVC4571------------------------------ 
+    SERVICE_CANNOT_CONTAIN_SUBCATEGORY: {
+        code: 400,
+        message: "Error: Sub category cannot be defined for service",
+        messageId: "SVC4571"
+    }
+#---------SVC4572------------------------------ 
+# %1 - "Resource"/"Service"
+    COMPONENT_TOO_MUCH_CATEGORIES: {
+        code: 400,
+        message: "Error: %1 must have only 1 category",
+        messageId: "SVC4572"
+    }
+#---------SVC4574------------------------------ 
+    RESOURCE_TOO_MUCH_SUBCATEGORIES: {
+        code: 400,
+        message: "Error: Resource must have only 1 sub category",
+        messageId: "SVC4574"
+    }
+#---------SVC4575------------------------------ 
+    COMPONENT_MISSING_SUBCATEGORY: {
+        code: 400,
+        message: "Error: Missing sub category",
+        messageId: "SVC4575"
+    }
+ #---------SVC4576------------------------------ 
+# %1 - "component type"
+    UNSUPPORTED_ERROR: {
+        code: 400,
+        message: "Error : Requested component type %1 is unsupported.",
+        messageId: "SVC4576"
+    }
+    #---------SVC4577------------------------------ 
+# %1 - "resource type"
+    RESOURCE_CANNOT_CONTAIN_RESOURCE_INSTANCES: {
+        code: 409,
+        message: "Error : Resource of type %1 cannot contain resource instances.",
+        messageId: "SVC4577"
+    }
+#---------SVC4578------------------------------ 
+# %1 - "Resource"/"Service"
+# %2 -  resource/service name 
+# %3 -  "artifact name" 
+    DEPLOYMENT_ARTIFACT_NAME_ALREADY_EXISTS: {
+        code: 400,
+        message: "Error: %1 '%2' already has a deployment artifact named '%3'.",
+        messageId: "SVC4578"
+    }
+#---------SVC4579------------------------------ 
+# %1 - "Category"/"Sub-Category"/"Group"
+# %2 -  category/sub-category/grouping name.
+    INVALID_GROUP_ASSOCIATION: {
+        code: 400,
+        message: "Error: Invalid group association. %1 '%2' was not found.",
+        messageId: "SVC4579"
+    }
+#---------SVC4580------------------------------ 
+    EMPTY_PRODUCT_CONTACTS_LIST: {
+        code: 400,
+        message: "Error: Invalid content. At least one Product Contact has to be specified.",
+        messageId: "SVC4580"
+    }
+#---------SVC4581------------------------------ 
+# %1 - userId
+    INVALID_PRODUCT_CONTACT: {
+        code: 400,
+        message: "Error: Invalid content. User '%1' cannot be set as Product Contact.",
+        messageId: "SVC4581"
+    }
+#---------SVC4582------------------------------ 
+# %1 - Product
+# %2 - "abbreviated"/"full"
+    MISSING_ONE_OF_COMPONENT_NAMES: {
+        code: 400,
+        message: "Error: Invalid content. Missing %1 %2 name.",
+        messageId: "SVC4582"
+    }    
+#---------SVC4583------------------------------
+# %1 - "Icon"
+# %2 - "resource"/"service"/"product"
+    COMPONENT_PARAMETER_CANNOT_BE_CHANGED: {
+        code: 400,
+        message: "Error: %1 cannot be changed once the %2 is certified.",
+        messageId: "SVC4583"
+    }
+#---------SVC4584------------------------------
+# %1  - service/VF name 
+# %2 - "service" /"VF"
+# %3 -  resource instance origin type
+# %4 -  resource instance name 
+# %5 -  requirement/capability
+# %6 -  requirement/capability name
+# %7 -  "fulfilled" (for req)/"consumed (for cap)"
+    REQ_CAP_NOT_SATISFIED_BEFORE_CERTIFICATION: {
+        code: 403,
+        message: "Error:  Requested '%1' %2 is not ready for certification.  %3 '%4' has to have %5 '%6' %7.",
+        messageId: "SVC4584"
+    }
+#---------SVC4585------------------------------ 
+    INVALID_OCCURRENCES: {
+        code: 400,
+        message: "Error: Invalid occurrences format.",
+        messageId: "SVC4585"
+    }
+#---------SVC4586------------------------------ 
+#---------SVC4586------------------------------ 
+    INVALID_SERVICE_API_URL: {
+        code: 400,
+        message: 'Error: Invalid Service API URL. Please check whether your URL has a valid domain extension and does not contain the following characters - #?&@%+;,=$<>~^`\[]{}|"*!',
+        messageId: "SVC4586"
+    }
+#---------SVC4587------------------------------ 
+# %1  - Data type name 
+    DATA_TYPE_ALREADY_EXIST: {
+        code: 409,
+        message: 'Error: Data type %1 already exists.',
+        messageId: "SVC4587"
+    }
+#---------SVC4588------------------------------ 
+# %1  - Data type name 
+    DATA_TYPE_NOR_PROPERTIES_NEITHER_DERIVED_FROM: {
+        code: 400,
+        message: 'Error: Invalid Data type %1. Data type must have either a valid derived from declaration or at least one valid property',
+        messageId: "SVC4588"
+    }
+#---------SVC4589------------------------------ 
+# %1  - Data type name 
+    DATA_TYPE_PROPERTIES_CANNOT_BE_EMPTY: {
+        code: 400,
+        message: "Error: Invalid Data type %1. 'properties' parameter cannot be empty if provided.",
+        messageId: "SVC4589"
+    }
+#---------SVC4590------------------------------ 
+# %1  - Property type name 
+# %2  - Property name
+    INVALID_PROPERTY_TYPE: {
+        code: 400,
+        message: "Error: Invalid Property type %1 in property %2.",
+        messageId: "SVC4590"
+    }
+#---------SVC4591------------------------------ 
+# %1  - Property inner type
+# %2  - Property name 
+    INVALID_PROPERTY_INNER_TYPE: {
+        code: 400,
+        message: "Error: Invalid property inner type %1, in property %2",
+        messageId: "SVC4591"
+    }
+#---------SVC4592------------------------------ 
+# %1  - component instance name
+# %2  - "resource instance"/"service instance"
+    COMPONENT_INSTANCE_NOT_FOUND: {
+        code: 404,
+        message: "Error: Requested '%1' %2 was not found.",
+        messageId: "SVC4592"
+    }
+#---------SVC4593------------------------------ 
+# %1 - component instance name
+# %2 - "resource instance"/"service instance"
+# %3 - "resource/"service"/"product"
+# %4 - container name 
+    COMPONENT_INSTANCE_NOT_FOUND_ON_CONTAINER: {
+        code: 404,
+        message: "Error: Requested '%1' %2 was not found on the %3 '%4'.",
+        messageId: "SVC4593"
+    }
+#---------SVC4594------------------------------
+#%1 - requirement / capability
+#%2 - requirement name
+    IMPORT_DUPLICATE_REQ_CAP_NAME: {
+        code: 400,
+        message: "Error: Imported TOSCA template contains more than one %1 named '%2'.",
+        messageId: "SVC4594"
+    }
+#---------SVC4595------------------------------
+#%1 - requirement / capability
+#%2 - requirement name
+#%3 - parent containing the requirement 
+    IMPORT_REQ_CAP_NAME_EXISTS_IN_DERIVED: {
+        code: 400,
+        message: "Error: Imported TOSCA template contains %1 '%2' that is already defined by derived template %3.",
+        messageId: "SVC4595"
+    }
+#---------SVC4596------------------------------ 
+# %1  - Data type name
+    DATA_TYPE_DERIVED_IS_MISSING: {
+        code: 400,
+        message: "Error: Invalid Content. The ancestor data type %1 cannot be found in the system.",
+        messageId: "SVC4596"
+    }
+#---------SVC4597------------------------------ 
+# %1  - Data type name
+# %2  - Property names
+    DATA_TYPE_PROPERTY_ALREADY_DEFINED_IN_ANCESTOR: {
+        code: 400,
+        message: "Error: Invalid Content. The data type %1 contains properties named %2 which are already defined in one of its ancestors.",
+        messageId: "SVC4597"
+    }
+#---------SVC4598------------------------------ 
+# %1  - Data type name
+    DATA_TYPE_DUPLICATE_PROPERTY: {
+        code: 400,
+        message: "Error: Invalid Content. The data type %1 contains duplicate property.",
+        messageId: "SVC4598"
+    }
+#---------SVC4599------------------------------ 
+# %1  - Data type name
+# %2  - Property names
+    DATA_TYPE_PROEPRTY_CANNOT_HAVE_SAME_TYPE_OF_DATA_TYPE: {
+        code: 400,
+        message: "Error: Invalid Content. The data type %1 contains properties %2 which their type is this data type.",
+        messageId: "SVC4599"
+    }
+#---------SVC4600------------------------------ 
+# %1  - Data type name
+    DATA_TYPE_CANNOT_HAVE_PROPERTIES: {
+        code: 400,
+        message: "Error: Invalid Content. The data type %1 cannot have properties since it is of type scalar",
+        messageId: "SVC4600"
+    }
+#---------SVC4601------------------------------ 
+    NOT_TOPOLOGY_TOSCA_TEMPLATE: {
+        code: 400,
+        message: "Error: TOSCA yaml file %1 cannot be modeled to VF as it does not contain 'topology_template.",
+        messageId: "SVC4601"
+    }
+#---------SVC4602--------------------------------
+# %1 - yaml file name
+# %2 - node_template label
+# %3 - node_template type
+    INVALID_NODE_TEMPLATE: {
+        code: 400,
+        message: "Error: TOSCA yaml file '%1' contains node_template '%2' of type '%3' that does not represent existing VFC/CP/VL",
+        messageId: "SVC4602"
+    }
+#---------SVC4603------------------------------  
+# %1 - component type
+# %2 - component name
+# %3 - state
+    ILLEGAL_COMPONENT_STATE: {
+        code: 403,
+        message: "Error: Component instance of %1 can not be created because the component '%2' is in an illegal state %3.",
+        messageId: "SVC4603"
+    }
+#---------SVC4604------------------------------  
+# %1 - csar file name
+    CSAR_INVALID: {
+        code: 400,
+        message: "Error: TOSCA CSAR '%1' is invalid. 'TOSCA-Metadata/Tosca.meta' file must be provided.",
+        messageId: "SVC4604"
+    }
+#---------SVC4605------------------------------  
+# %1 - csar file name
+    CSAR_INVALID_FORMAT: {
+        code: 400,
+        message: "Error: TOSCA CSAR '%1' is invalid. Invalid 'TOSCA-Metadata/Tosca.meta' file format.",
+        messageId: "SVC4605"
+    }
+#---------SVC4606------------------------------  
+# %1 - property name
+# %2 - property type
+# %3 - property innerType
+# %4 - default value is
+    INVALID_COMPLEX_DEFAULT_VALUE: {
+        code: 400,
+        message: "Error: Invalid default value of property %1. Data type is %2 with inner type %3 and default value found is %4.",
+        messageId: "SVC4606"
+    }
+#---------SVC4607------------------------------  
+# %1 - csar file name
+    CSAR_NOT_FOUND: {
+        code: 400,
+        message: "Error: TOSCA CSAR '%1' is not found.",
+        messageId: "SVC4607"
+    }
+#---------SVC4608------------------------------  
+# %1 - artifact name
+# %2 - component type
+# %3 - actual component type
+    MISMATCH_BETWEEN_ARTIFACT_TYPE_AND_COMPONENT_TYPE: {
+        code: 400,
+        message: "Error: Artifact %1 is only compatible with component of type %2, but component type is %3.",
+        messageId: "SVC4608"
+    }
+
+#---------SVC4609------------------------------ 
+# %1 -  "INVALID_JSON"             
+    INVALID_JSON: {
+        code: 400,
+        message: "Error: Uploaded JSON file for %1 artifact is invalid.",
+        messageId: "SVC4609"
+    }
+#---------SVC4610------------------------------  
+# %1 - csar file name
+# %2 - missing file name
+    YAML_NOT_FOUND_IN_CSAR: {
+        code: 400,
+        message: "Error - TOSCA CSAR %1 is invalid. TOSCA-Metadata/Tosca.meta refers to file %2 that is not provided.",
+        messageId: "SVC4610"
+    }
+#---------SVC4611------------------------------  
+# %1 - group name
+    GROUP_MEMBER_EMPTY: {
+        code: 400,
+        message: "Error: Invalid Content. Group %1 member list was provided but does not have values",
+        messageId: "SVC4611"
+    }
+#---------SVC4612------------------------------ 
+# %1  - group name 
+    GROUP_TYPE_ALREADY_EXIST: {
+        code: 409,
+        message: 'Error: Group type %1 already exists.',
+        messageId: "SVC4612"
+    }
+#---------SVC4613------------------------------  
+# %1 - group name
+# %2 - VF name(component name)
+# %3 - actual component type [VF]
+    GROUP_ALREADY_EXIST: {
+        code: 409,
+        message: "Error: Group with name '%1' already exists in %2 %3.",
+        messageId: "SVC4613"
+    }   
+#---------SVC4614------------------------------  
+# %1 - group type
+    GROUP_TYPE_IS_INVALID: {
+        code: 400,
+        message: "Error: Invalid content. Group type %1 does not exist",
+        messageId: "SVC4614"
+    }
+#---------SVC4615------------------------------  
+# %1 - group name
+    GROUP_MISSING_GROUP_TYPE: {
+        code: 400,
+        message: "Error: Invalid Content. Missing Group Type for group '%1'",
+        messageId: "SVC4615"
+    }
+#---------SVC4616------------------------------
+# %1 - member name
+# %2 - group name
+# %3 - VF name
+# %4 - component type [VF ]
+    GROUP_INVALID_COMPONENT_INSTANCE: {
+        code: 400,
+        message: "Error: member %1 listed in group %2 is not part of %3 %4.",
+        messageId: "SVC4616"
+    }                 
+#---------SVC4617------------------------------
+# %1 - member name
+# %2 - group name
+# %3 - group type
+    GROUP_INVALID_TOSCA_NAME_OF_COMPONENT_INSTANCE: {
+        code: 400,
+        message: "Error: member %1 listed in group %2 is not part of allowed members of group type %3.",
+        messageId: "SVC4617"
+    }
+#---------SVC4618------------------------------ 
+# %1 - missing file name
+# %2 - csar file name
+    ARTIFACT_NOT_FOUND_IN_CSAR: {
+        code: 400,
+        message: "Error: artifact %1 is defined in CSAR %2 manifest but is not provided",
+        messageId: "SVC4618"
+    }
+#---------SVC4619------------------------------ 
+# %1 - artifact name
+# %2 - artifact type
+# %3 - existing artifact type
+    ARTIFACT_ALRADY_EXIST_IN_DIFFERENT_TYPE_IN_CSAR: {
+        code: 400,
+        message: "Error: artifact %1 in type %2 already exists in type %3.",
+        messageId: "SVC4619"
+    }
+#---------SVC4620------------------------------ 
+    FAILED_RETRIVE_ARTIFACTS_TYPES: {
+        code: 400,
+        message: "Error: Failed to retrieve list of suported artifact types.",
+        messageId: "SVC4620"
+    }
+#---------SVC4621------------------------------ 
+# %1 - artifact name
+# %2 - master 
+    ARTIFACT_ALRADY_EXIST_IN_MASTER_IN_CSAR: {
+        code: 400,
+        message: "Error: artifact %1 already exists in master %2 .",
+        messageId: "SVC4621"
+    }
+#---------SVC4622------------------------------ 
+# %1 - artifact name
+# %2 - artifact type 
+# %3 - master name
+# %4 - master type
+    ARTIFACT_NOT_VALID_IN_MASTER: {
+        code: 400,
+        message: "Error: artifact %1 in type %2 can not be exists under master %3 in type %4.",
+        messageId: "SVC4622"
+    }
+#---------SVC4623------------------------------ 
+# %1 - artifact name
+# %2 - artifact type 
+# %3 - env name
+# %4 - existing env
+    ARTIFACT_NOT_VALID_ENV: {
+        code: 400,
+        message: "Error: Artifact %1 in type %2 with env %3 already exists with another env %4",
+        messageId: "SVC4623"
+    }
+#---------SVC4624------------------------------  
+# %1 - groups names
+# %2 - VF name
+# %3 - component type [VF ]
+    GROUP_IS_MISSING: {
+        code: 400,
+        message: "Error: Invalid Content. The groups '%1' cannot be found under %2 %3.",
+        messageId: "SVC4624"
+    }
+#---------SVC4625------------------------------  
+# %1 - groups name
+    GROUP_ARTIFACT_ALREADY_ASSOCIATED: {
+        code: 400,
+        message: "Error: Invalid Content. Artifact already associated to group '%1'.",
+        messageId: "SVC4625"
+    }
+#---------SVC4626------------------------------  
+# %1 - groups name
+    GROUP_ARTIFACT_ALREADY_DISSOCIATED: {
+        code: 400,
+        message: "Error: Invalid Content. Artifact already dissociated from group '%1'.",
+        messageId: "SVC4626"
+    }
+#---------SVC4627------------------------------
+# %1 - property name
+# %2 - group name
+# %3 - group type name
+    GROUP_PROPERTY_NOT_FOUND: {
+        code: 400,
+        message: "Error: property %1 listed in group %2 is not exist in group type %3.",
+        messageId: "SVC4627"
+    }
+#---------SVC4628------------------------------  
+# %1 - csarUUID
+# %2 - VF name
+    VSP_ALREADY_EXISTS: {
+        code: 400,
+        message: "Error: The VSP with UUID %1 was already imported for VF %2. Please select another or update the existing VF.",
+        messageId: "SVC4628"
+    }
+#---------SVC4629------------------------------  
+# %1 - VF name
+    MISSING_CSAR_UUID: {
+        code: 400,
+        message: "Error: The Csar UUID or payload name is missing for VF %1.",
+        messageId: "SVC4629"
+    }
+#---------SVC4630------------------------------  
+# %1 - VF name
+# %2 - new csarUUID
+# %3 - old csarUUID
+    RESOURCE_LINKED_TO_DIFFERENT_VSP: {
+        code: 400,
+        message: "Error: Resource %1 cannot be updated using CsarUUID %2 since the resource is linked to a different VSP with csarUUID %3.",
+        messageId: "SVC4630"
+    }
+#---------SVC4631------------------------------ 
+# %1  - policy name 
+    POLICY_TYPE_ALREADY_EXIST: {
+        code: 409,
+        message: "Error: Policy type %1 already exists.",
+        messageId: "SVC4631"
+    }
+#---------SVC4632------------------------------
+# %1 - target name
+# %2 - policy type name
+    TARGETS_NON_VALID: {
+        code: 400,
+        message: "Error: target %1 listed in policy type %2 is not a group or resource.",
+        messageId: "SVC4632"
+    }
+#---------SVC4633------------------------------
+# %1 - policy name
+    TARGETS_EMPTY: {
+        code: 400,
+        message: "Error: Invalid Content. Policy %1 target list was provided but does not have values",
+        messageId: "SVC4633"
+    }
+#---------SVC4634------------------------------
+    DATA_TYPE_CANNOT_BE_EMPTY: {
+        code: 500,
+        message: "Error: Data types are empty. Please import the data types.",
+        messageId: "SVC4634"
+    }
+#---------SVC4635------------------------------
+# %1 - csar uuid
+    RESOURCE_FROM_CSAR_NOT_FOUND: {
+        code: 400,
+        message: "Error: resource from csar uuid %1 not found",
+        messageId: "SVC4635"
+    }
+#---------SVC4636------------------------------
+# %1 - Data type name
+    DATA_TYPE_CANNOT_BE_UPDATED_BAD_REQUEST: {
+        code: 400,
+        message: 'Error: Data type %1 cannot be upgraded. The new data type does not contain old properties or the type of one of the properties has been changed.',
+        messageId: "SVC4636"
+    }  
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/config/catalog-be/neo4j-errors-configuration.yaml b/catalog-be/src/test/resources/config/catalog-be/neo4j-errors-configuration.yaml
new file mode 100644
index 0000000..7a0d6db
--- /dev/null
+++ b/catalog-be/src/test/resources/config/catalog-be/neo4j-errors-configuration.yaml
@@ -0,0 +1,60 @@
+# Errors
+errors:
+    Neo_ClientError_General_ReadOnly: "This is a read only database, writing or modifying the database is not allowed."
+    Neo_ClientError_LegacyIndex_NoSuchIndex: "The request (directly or indirectly) referred to a index that does not exist."
+    Neo_ClientError_Request_Invalid: "The client provided an invalid Request."
+    Neo_ClientError_Request_InvalidFormat: "The client provided a request that was missing required fields, or had values that are not allowed."
+    Neo_ClientError_Schema_ConstraintAlreadyExists: "Unable to perform operation because it would clash with a pre-existing constraint."
+    Neo_ClientError_Schema_ConstraintVerificationFailure: "Unable to create constraint because data that exists in the database violates it."
+    Neo_ClientError_Schema_ConstraintViolation: "A constraint imposed by the database was violated."
+    Neo_ClientError_Schema_IllegalTokenName: "A token name, such as a label, relationship type or property key, used is not valid. Tokens cannot be empty strings and cannot be null."
+    Neo_ClientError_Schema_IndexAlreadyExists: "Unable to perform operation because it would clash with a pre-existing index."
+    Neo_ClientError_Schema_IndexBelongsToConstraint: "A requested operation can not be performed on the specified index because the index is part of a constraint. If you want to drop the index, for instance, you must drop the constraint."
+    Neo_ClientError_Schema_IndexLimitReached: "The maximum number of index entries supported has been reached, no more entities can be indexed."
+    Neo_ClientError_Schema_LabelLimitReached: "The maximum number of labels supported has been reached, no more labels can be created."
+    Neo_ClientError_Schema_NoSuchConstraint: "The request (directly or indirectly) referred to a constraint that does not exist."
+    Neo_ClientError_Schema_NoSuchIndex: "The request (directly or indirectly) referred to an index that does not exist."
+    Neo_ClientError_Security_AuthenticationFailed: "The client provided an incorrect username and/or password."
+    Neo_ClientError_Security_AuthenticationRateLimit: "The client has provided incorrect authentication details too many times in a row."
+    Neo_ClientError_Security_AuthorizationFailed: "The client does not have privileges to perform the operation requested."
+    Neo_ClientError_Statement_ArithmeticError: "Invalid use of arithmetic, such as dividing by zero."
+    Neo_ClientError_Statement_ConstraintViolation: "A constraint imposed by the statement is violated by the data in the database."
+    Neo_ClientError_Statement_EntityNotFound: "The statement is directly referring to an entity that does not exist."
+    Neo_ClientError_Statement_InvalidArguments: "The statement is attempting to perform operations using invalid arguments"
+    Neo_ClientError_Statement_InvalidSemantics: "The statement is syntactically valid, but expresses something that the database cannot do."
+    Neo_ClientError_Statement_InvalidSyntax: "The statement contains invalid or unsupported syntax."
+    Neo_ClientError_Statement_InvalidType: "The statement is attempting to perform operations on values with types that are not supported by the operation."
+    Neo_ClientError_Statement_NoSuchLabel: "The statement is referring to a label that does not exist."
+    Neo_ClientError_Statement_NoSuchProperty: "The statement is referring to a property that does not exist."
+    Neo_ClientError_Statement_ParameterMissing: "The statement is referring to a parameter that was not provided in the Request."
+    Neo_ClientError_Transaction_ConcurrentRequest: "There were concurrent requests accessing the same transaction, which is not allowed."
+    Neo_ClientError_Transaction_EventHandlerThrewException: "A transaction event handler threw an exception. The transaction will be rolled back."
+    Neo_ClientError_Transaction_HookFailed: "Transaction hook failure."
+    Neo_ClientError_Transaction_InvalidType: "The transaction is of the wrong type to service the Request_ For instance, a transaction that has had schema modifications performed in it cannot be used to subsequently perform data operations, and vice versa."
+    Neo_ClientError_Transaction_MarkedAsFailed: "Transaction was marked as both successful and failed. Failure takes precedence and so this transaction was rolled back although it may have looked like it was going to be committed"
+    Neo_ClientError_Transaction_UnknownId: "The request referred to a transaction that does not exist."
+    Neo_ClientError_Transaction_ValidationFailed: "Transaction changes did not pass validation checks"
+    Neo_DatabaseError_General_CorruptSchemaRule: "A malformed schema rule was encountered. Please contact your support representative."
+    Neo_DatabaseError_General_FailedIndex: "The request (directly or indirectly) referred to an index that is in a failed state. The index needs to be dropped and recreated manually."
+    Neo_DatabaseError_General_UnknownFailure: "An unknown failure occurred."
+    Neo_DatabaseError_Schema_ConstraintCreationFailure: "Creating a requested constraint failed."
+    Neo_DatabaseError_Schema_ConstraintDropFailure: "The database failed to drop a requested constraint."
+    Neo_DatabaseError_Schema_IndexCreationFailure: "Failed to create an index."
+    Neo_DatabaseError_Schema_IndexDropFailure: "The database failed to drop a requested index."
+    Neo_DatabaseError_Schema_NoSuchLabel: "The request accessed a label that did not exist."
+    Neo_DatabaseError_Schema_NoSuchPropertyKey: "The request accessed a property that does not exist."
+    Neo_DatabaseError_Schema_NoSuchRelationshipType: "The request accessed a relationship type that does not exist."
+    Neo_DatabaseError_Schema_NoSuchSchemaRule: "The request referred to a schema rule that does not exist."
+    Neo_DatabaseError_Statement_ExecutionFailure: "The database was unable to execute the Statement."
+    Neo_DatabaseError_Transaction_CouldNotBegin: "The database was unable to start the Transaction."
+    Neo_DatabaseError_Transaction_CouldNotCommit: "The database was unable to commit the Transaction."
+    Neo_DatabaseError_Transaction_CouldNotRollback: "The database was unable to roll back the Transaction."
+    Neo_DatabaseError_Transaction_CouldNotWriteToLog: "The database was unable to write transaction to log."
+    Neo_DatabaseError_Transaction_ReleaseLocksFailed: "The transaction was unable to release one or more of its locks."
+    Neo_TransientError_General_DatabaseUnavailable: "The database is not currently available to serve your request, refer to the database logs for more details. Retrying your request at a later time may succeed."
+    Neo_TransientError_Network_UnknownFailure: "An unknown network failure occurred, a retry may resolve the issue."
+    Neo_TransientError_Schema_ModifiedConcurrently: "The database schema was modified while this transaction was running, the transaction should be retried."
+    Neo_TransientError_Security_ModifiedConcurrently: "The user was modified concurrently to this Request."
+    Neo_TransientError_Statement_ExternalResourceFailure: "The external resource is not available"
+    Neo_TransientError_Transaction_AcquireLockTimeout: "The transaction was unable to acquire a lock, for instance due to a timeout or the transaction thread being interrupted."
+    Neo_TransientError_Transaction_DeadlockDetected: "This transaction, and at least one more transaction, has acquired locks in a way that it will wait indefinitely, and the database has aborted it. Retrying this transaction will most likely be successful."
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/config/catalog-be/users-configuration.yaml b/catalog-be/src/test/resources/config/catalog-be/users-configuration.yaml
new file mode 100644
index 0000000..a6c2365
--- /dev/null
+++ b/catalog-be/src/test/resources/config/catalog-be/users-configuration.yaml
@@ -0,0 +1,2 @@
+userCredentials:
+    ci: 2a1f887d607d4515d4066fe0f5452a50:0a0dc557c3bf594b1a48030e3e99227580168b21f44e285c69740b8d5b13e33b
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/config/configuration1.yaml b/catalog-be/src/test/resources/config/configuration1.yaml
new file mode 100644
index 0000000..12ab2c7
--- /dev/null
+++ b/catalog-be/src/test/resources/config/configuration1.yaml
@@ -0,0 +1,17 @@
+version: 1.0
+released: 2012-11-30
+
+# Connection parameters
+connection:
+    url: jdbc:mysql://localhost:3306/db
+    poolSize: 5
+
+# Protocols
+protocols:
+   - http
+   - https
+
+# Users
+users:
+    tom: passwd
+    bob: passwd
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/config/elasticsearch.yml b/catalog-be/src/test/resources/config/elasticsearch.yml
new file mode 100644
index 0000000..a6a2c1b
--- /dev/null
+++ b/catalog-be/src/test/resources/config/elasticsearch.yml
@@ -0,0 +1,387 @@
+
+cluster.name: elasticsearch_1_5_2
+  
+discovery.zen.ping.multicast.enabled: false
+discovery.zen.ping.unicast.enabled: true
+discovery.zen.ping.unicast.hosts: elasticsearch_host
+
+
+
+##################### Elasticsearch Configuration Example #####################
+
+# This file contains an overview of various configuration settings,
+# targeted at operations staff. Application developers should
+# consult the guide at <http://elasticsearch.org/guide>.
+#
+# The installation procedure is covered at
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html>.
+#
+# Elasticsearch comes with reasonable defaults for most settings,
+# so you can try it out without bothering with configuration.
+#
+# Most of the time, these defaults are just fine for running a production
+# cluster. If you're fine-tuning your cluster, or wondering about the
+# effect of certain configuration option, please _do ask_ on the
+# mailing list or IRC channel [http://elasticsearch.org/community].
+
+# Any element in the configuration can be replaced with environment variables
+# by placing them in ${...} notation. For example:
+#
+# node.rack: ${RACK_ENV_VAR}
+
+# For information on supported formats and syntax for the config file, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html>
+
+
+################################### Cluster ###################################
+
+# Cluster name identifies your cluster for auto-discovery. If you're running
+# multiple clusters on the same network, make sure you're using unique names.
+#
+# cluster.name: elasticsearch
+
+
+#################################### Node #####################################
+
+# Node names are generated dynamically on startup, so you're relieved
+# from configuring them manually. You can tie this node to a specific name:
+#
+# node.name: "Franz Kafka"
+
+# Every node can be configured to allow or deny being eligible as the master,
+# and to allow or deny to store the data.
+#
+# Allow this node to be eligible as a master node (enabled by default):
+#
+# node.master: true
+#
+# Allow this node to store data (enabled by default):
+#
+# node.data: true
+
+# You can exploit these settings to design advanced cluster topologies.
+#
+# 1. You want this node to never become a master node, only to hold data.
+#    This will be the "workhorse" of your cluster.
+#
+# node.master: false
+# node.data: true
+#
+# 2. You want this node to only serve as a master: to not store any data and
+#    to have free resources. This will be the "coordinator" of your cluster.
+#
+# node.master: true
+# node.data: false
+#
+# 3. You want this node to be neither master nor data node, but
+#    to act as a "search load balancer" (fetching data from nodes,
+#    aggregating results, etc.)
+#
+# node.master: false
+# node.data: false
+
+# Use the Cluster Health API [http://localhost:9200/_cluster/health], the
+# Node Info API [http://localhost:9200/_nodes] or GUI tools
+# such as <http://www.elasticsearch.org/overview/marvel/>,
+# <http://github.com/karmi/elasticsearch-paramedic>,
+# <http://github.com/lukas-vlcek/bigdesk> and
+# <http://mobz.github.com/elasticsearch-head> to inspect the cluster state.
+
+# A node can have generic attributes associated with it, which can later be used
+# for customized shard allocation filtering, or allocation awareness. An attribute
+# is a simple key value pair, similar to node.key: value, here is an example:
+#
+# node.rack: rack314
+
+# By default, multiple nodes are allowed to start from the same installation location
+# to disable it, set the following:
+# node.max_local_storage_nodes: 1
+
+
+#################################### Index ####################################
+
+# You can set a number of options (such as shard/replica options, mapping
+# or analyzer definitions, translog settings, ...) for indices globally,
+# in this file.
+#
+# Note, that it makes more sense to configure index settings specifically for
+# a certain index, either when creating it or by using the index templates API.
+#
+# See <http://elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html> and
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/indices-create-index.html>
+# for more information.
+
+# Set the number of shards (splits) of an index (5 by default):
+#
+# index.number_of_shards: 5
+
+# Set the number of replicas (additional copies) of an index (1 by default):
+#
+# index.number_of_replicas: 1
+
+# Note, that for development on a local machine, with small indices, it usually
+# makes sense to "disable" the distributed features:
+#
+index.number_of_shards: 1
+index.number_of_replicas: 0
+
+# These settings directly affect the performance of index and search operations
+# in your cluster. Assuming you have enough machines to hold shards and
+# replicas, the rule of thumb is:
+#
+# 1. Having more *shards* enhances the _indexing_ performance and allows to
+#    _distribute_ a big index across machines.
+# 2. Having more *replicas* enhances the _search_ performance and improves the
+#    cluster _availability_.
+#
+# The "number_of_shards" is a one-time setting for an index.
+#
+# The "number_of_replicas" can be increased or decreased anytime,
+# by using the Index Update Settings API.
+#
+# Elasticsearch takes care about load balancing, relocating, gathering the
+# results from nodes, etc. Experiment with different settings to fine-tune
+# your setup.
+
+# Use the Index Status API (<http://localhost:9200/A/_status>) to inspect
+# the index status.
+
+
+#################################### Paths ####################################
+
+# Path to directory containing configuration (this file and logging.yml):
+#
+path.conf: /src/test/resources
+
+# Path to directory where to store index data allocated for this node.
+#
+path.data: target/esdata
+#
+# Can optionally include more than one location, causing data to be striped across
+# the locations (a la RAID 0) on a file level, favouring locations with most free
+# space on creation. For example:
+#
+# path.data: /path/to/data1,/path/to/data2
+
+# Path to temporary files:
+#
+path.work: /target/eswork
+
+# Path to log files:
+#
+path.logs: /target/eslogs
+
+# Path to where plugins are installed:
+#
+# path.plugins: /path/to/plugins
+
+
+#################################### Plugin ###################################
+
+# If a plugin listed here is not installed for current node, the node will not start.
+#
+# plugin.mandatory: mapper-attachments,lang-groovy
+
+
+################################### Memory ####################################
+
+# Elasticsearch performs poorly when JVM starts swapping: you should ensure that
+# it _never_ swaps.
+#
+# Set this property to true to lock the memory:
+#
+# bootstrap.mlockall: true
+
+# Make sure that the ES_MIN_MEM and ES_MAX_MEM environment variables are set
+# to the same value, and that the machine has enough memory to allocate
+# for Elasticsearch, leaving enough memory for the operating system itself.
+#
+# You should also make sure that the Elasticsearch process is allowed to lock
+# the memory, eg. by using `ulimit -l unlimited`.
+
+
+############################## Network And HTTP ###############################
+
+# Elasticsearch, by default, binds itself to the 0.0.0.0 address, and listens
+# on port [9200-9300] for HTTP traffic and on port [9300-9400] for node-to-node
+# communication. (the range means that if the port is busy, it will automatically
+# try the next port).
+
+# Set the bind address specifically (IPv4 or IPv6):
+#
+# network.bind_host: 192.168.0.1
+
+# Set the address other nodes will use to communicate with this node. If not
+# set, it is automatically derived. It must point to an actual IP address.
+#
+# network.publish_host: 192.168.0.1
+
+# Set both 'bind_host' and 'publish_host':
+#
+# network.host: 192.168.0.1
+
+# Set a custom port for the node to node communication (9300 by default):
+#
+# transport.tcp.port: 9300
+
+# Enable compression for all communication between nodes (disabled by default):
+#
+# transport.tcp.compress: true
+
+# Set a custom port to listen for HTTP traffic:
+#
+# http.port: 9200
+
+# Set a custom allowed content length:
+#
+# http.max_content_length: 100mb
+
+# Disable HTTP completely:
+#
+# http.enabled: false
+
+
+################################### Gateway ###################################
+
+# The gateway allows for persisting the cluster state between full cluster
+# restarts. Every change to the state (such as adding an index) will be stored
+# in the gateway, and when the cluster starts up for the first time,
+# it will read its state from the gateway.
+
+# There are several types of gateway implementations. For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-gateway.html>.
+
+# The default gateway type is the "local" gateway (recommended):
+#
+# gateway.type: local
+
+# Settings below control how and when to start the initial recovery process on
+# a full cluster restart (to reuse as much local data as possible when using shared
+# gateway).
+
+# Allow recovery process after N nodes in a cluster are up:
+#
+gateway.recover_after_nodes: 1
+
+# Set the timeout to initiate the recovery process, once the N nodes
+# from previous setting are up (accepts time value):
+#
+# gateway.recover_after_time: 5m
+
+# Set how many nodes are expected in this cluster. Once these N nodes
+# are up (and recover_after_nodes is met), begin recovery process immediately
+# (without waiting for recover_after_time to expire):
+#
+gateway.expected_nodes: 1
+
+
+############################# Recovery Throttling #############################
+
+# These settings allow to control the process of shards allocation between
+# nodes during initial recovery, replica allocation, rebalancing,
+# or when adding and removing nodes.
+
+# Set the number of concurrent recoveries happening on a node:
+#
+# 1. During the initial recovery
+#
+# cluster.routing.allocation.node_initial_primaries_recoveries: 4
+#
+# 2. During adding/removing nodes, rebalancing, etc
+#
+# cluster.routing.allocation.node_concurrent_recoveries: 2
+
+# Set to throttle throughput when recovering (eg. 100mb, by default 20mb):
+#
+# indices.recovery.max_bytes_per_sec: 20mb
+
+# Set to limit the number of open concurrent streams when
+# recovering a shard from a peer:
+#
+# indices.recovery.concurrent_streams: 5
+
+
+################################## Discovery ##################################
+
+# Discovery infrastructure ensures nodes can be found within a cluster
+# and master node is elected. Multicast discovery is the default.
+
+# Set to ensure a node sees N other master eligible nodes to be considered
+# operational within the cluster. Its recommended to set it to a higher value
+# than 1 when running more than 2 nodes in the cluster.
+#
+# discovery.zen.minimum_master_nodes: 1
+
+# Set the time to wait for ping responses from other nodes when discovering.
+# Set this option to a higher value on a slow or congested network
+# to minimize discovery failures:
+#
+# discovery.zen.ping.timeout: 3s
+
+# For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html>
+
+# Unicast discovery allows to explicitly control which nodes will be used
+# to discover the cluster. It can be used when multicast is not present,
+# or to restrict the cluster communication-wise.
+#
+# 1. Disable multicast discovery (enabled by default):
+#
+# discovery.zen.ping.multicast.enabled: false
+#
+# 2. Configure an initial list of master nodes in the cluster
+#    to perform discovery when new nodes (master or data) are started:
+#
+# discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
+
+# EC2 discovery allows to use AWS EC2 API in order to perform discovery.
+#
+# You have to install the cloud-aws plugin for enabling the EC2 discovery.
+#
+# For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-ec2.html>
+#
+# See <http://elasticsearch.org/tutorials/elasticsearch-on-ec2/>
+# for a step-by-step tutorial.
+
+# GCE discovery allows to use Google Compute Engine API in order to perform discovery.
+#
+# You have to install the cloud-gce plugin for enabling the GCE discovery.
+#
+# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-gce>.
+
+# Azure discovery allows to use Azure API in order to perform discovery.
+#
+# You have to install the cloud-azure plugin for enabling the Azure discovery.
+#
+# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-azure>.
+
+################################## Slow Log ##################################
+
+# Shard level query and fetch threshold logging.
+
+#index.search.slowlog.threshold.query.warn: 10s
+#index.search.slowlog.threshold.query.info: 5s
+#index.search.slowlog.threshold.query.debug: 2s
+#index.search.slowlog.threshold.query.trace: 500ms
+
+#index.search.slowlog.threshold.fetch.warn: 1s
+#index.search.slowlog.threshold.fetch.info: 800ms
+#index.search.slowlog.threshold.fetch.debug: 500ms
+#index.search.slowlog.threshold.fetch.trace: 200ms
+
+#index.indexing.slowlog.threshold.index.warn: 10s
+#index.indexing.slowlog.threshold.index.info: 5s
+#index.indexing.slowlog.threshold.index.debug: 2s
+#index.indexing.slowlog.threshold.index.trace: 500ms
+
+################################## GC Logging ################################
+
+#monitor.jvm.gc.young.warn: 1000ms
+#monitor.jvm.gc.young.info: 700ms
+#monitor.jvm.gc.young.debug: 400ms
+
+#monitor.jvm.gc.old.warn: 10s
+#monitor.jvm.gc.old.info: 5s
+#monitor.jvm.gc.old.debug: 2s
+
diff --git a/catalog-be/src/test/resources/config/elasticsearch.yml.bak b/catalog-be/src/test/resources/config/elasticsearch.yml.bak
new file mode 100644
index 0000000..98c6864
--- /dev/null
+++ b/catalog-be/src/test/resources/config/elasticsearch.yml.bak
@@ -0,0 +1,387 @@
+
+cluster.name: elasticsearch_pavel
+  
+discovery.zen.ping.multicast.enabled: false
+discovery.zen.ping.unicast.enabled: true
+discovery.zen.ping.unicast.hosts: elasticsearch_host
+
+
+
+##################### Elasticsearch Configuration Example #####################
+
+# This file contains an overview of various configuration settings,
+# targeted at operations staff. Application developers should
+# consult the guide at <http://elasticsearch.org/guide>.
+#
+# The installation procedure is covered at
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html>.
+#
+# Elasticsearch comes with reasonable defaults for most settings,
+# so you can try it out without bothering with configuration.
+#
+# Most of the time, these defaults are just fine for running a production
+# cluster. If you're fine-tuning your cluster, or wondering about the
+# effect of certain configuration option, please _do ask_ on the
+# mailing list or IRC channel [http://elasticsearch.org/community].
+
+# Any element in the configuration can be replaced with environment variables
+# by placing them in ${...} notation. For example:
+#
+# node.rack: ${RACK_ENV_VAR}
+
+# For information on supported formats and syntax for the config file, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html>
+
+
+################################### Cluster ###################################
+
+# Cluster name identifies your cluster for auto-discovery. If you're running
+# multiple clusters on the same network, make sure you're using unique names.
+#
+# cluster.name: elasticsearch
+
+
+#################################### Node #####################################
+
+# Node names are generated dynamically on startup, so you're relieved
+# from configuring them manually. You can tie this node to a specific name:
+#
+# node.name: "Franz Kafka"
+
+# Every node can be configured to allow or deny being eligible as the master,
+# and to allow or deny to store the data.
+#
+# Allow this node to be eligible as a master node (enabled by default):
+#
+# node.master: true
+#
+# Allow this node to store data (enabled by default):
+#
+# node.data: true
+
+# You can exploit these settings to design advanced cluster topologies.
+#
+# 1. You want this node to never become a master node, only to hold data.
+#    This will be the "workhorse" of your cluster.
+#
+# node.master: false
+# node.data: true
+#
+# 2. You want this node to only serve as a master: to not store any data and
+#    to have free resources. This will be the "coordinator" of your cluster.
+#
+# node.master: true
+# node.data: false
+#
+# 3. You want this node to be neither master nor data node, but
+#    to act as a "search load balancer" (fetching data from nodes,
+#    aggregating results, etc.)
+#
+# node.master: false
+# node.data: false
+
+# Use the Cluster Health API [http://localhost:9200/_cluster/health], the
+# Node Info API [http://localhost:9200/_nodes] or GUI tools
+# such as <http://www.elasticsearch.org/overview/marvel/>,
+# <http://github.com/karmi/elasticsearch-paramedic>,
+# <http://github.com/lukas-vlcek/bigdesk> and
+# <http://mobz.github.com/elasticsearch-head> to inspect the cluster state.
+
+# A node can have generic attributes associated with it, which can later be used
+# for customized shard allocation filtering, or allocation awareness. An attribute
+# is a simple key value pair, similar to node.key: value, here is an example:
+#
+# node.rack: rack314
+
+# By default, multiple nodes are allowed to start from the same installation location
+# to disable it, set the following:
+# node.max_local_storage_nodes: 1
+
+
+#################################### Index ####################################
+
+# You can set a number of options (such as shard/replica options, mapping
+# or analyzer definitions, translog settings, ...) for indices globally,
+# in this file.
+#
+# Note, that it makes more sense to configure index settings specifically for
+# a certain index, either when creating it or by using the index templates API.
+#
+# See <http://elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html> and
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/indices-create-index.html>
+# for more information.
+
+# Set the number of shards (splits) of an index (5 by default):
+#
+# index.number_of_shards: 5
+
+# Set the number of replicas (additional copies) of an index (1 by default):
+#
+# index.number_of_replicas: 1
+
+# Note, that for development on a local machine, with small indices, it usually
+# makes sense to "disable" the distributed features:
+#
+index.number_of_shards: 1
+index.number_of_replicas: 0
+
+# These settings directly affect the performance of index and search operations
+# in your cluster. Assuming you have enough machines to hold shards and
+# replicas, the rule of thumb is:
+#
+# 1. Having more *shards* enhances the _indexing_ performance and allows to
+#    _distribute_ a big index across machines.
+# 2. Having more *replicas* enhances the _search_ performance and improves the
+#    cluster _availability_.
+#
+# The "number_of_shards" is a one-time setting for an index.
+#
+# The "number_of_replicas" can be increased or decreased anytime,
+# by using the Index Update Settings API.
+#
+# Elasticsearch takes care about load balancing, relocating, gathering the
+# results from nodes, etc. Experiment with different settings to fine-tune
+# your setup.
+
+# Use the Index Status API (<http://localhost:9200/A/_status>) to inspect
+# the index status.
+
+
+#################################### Paths ####################################
+
+# Path to directory containing configuration (this file and logging.yml):
+#
+path.conf: /src/test/resources
+
+# Path to directory where to store index data allocated for this node.
+#
+path.data: target/esdata
+#
+# Can optionally include more than one location, causing data to be striped across
+# the locations (a la RAID 0) on a file level, favouring locations with most free
+# space on creation. For example:
+#
+# path.data: /path/to/data1,/path/to/data2
+
+# Path to temporary files:
+#
+path.work: /target/eswork
+
+# Path to log files:
+#
+path.logs: /target/eslogs
+
+# Path to where plugins are installed:
+#
+# path.plugins: /path/to/plugins
+
+
+#################################### Plugin ###################################
+
+# If a plugin listed here is not installed for current node, the node will not start.
+#
+# plugin.mandatory: mapper-attachments,lang-groovy
+
+
+################################### Memory ####################################
+
+# Elasticsearch performs poorly when JVM starts swapping: you should ensure that
+# it _never_ swaps.
+#
+# Set this property to true to lock the memory:
+#
+# bootstrap.mlockall: true
+
+# Make sure that the ES_MIN_MEM and ES_MAX_MEM environment variables are set
+# to the same value, and that the machine has enough memory to allocate
+# for Elasticsearch, leaving enough memory for the operating system itself.
+#
+# You should also make sure that the Elasticsearch process is allowed to lock
+# the memory, eg. by using `ulimit -l unlimited`.
+
+
+############################## Network And HTTP ###############################
+
+# Elasticsearch, by default, binds itself to the 0.0.0.0 address, and listens
+# on port [9200-9300] for HTTP traffic and on port [9300-9400] for node-to-node
+# communication. (the range means that if the port is busy, it will automatically
+# try the next port).
+
+# Set the bind address specifically (IPv4 or IPv6):
+#
+# network.bind_host: 192.168.0.1
+
+# Set the address other nodes will use to communicate with this node. If not
+# set, it is automatically derived. It must point to an actual IP address.
+#
+# network.publish_host: 192.168.0.1
+
+# Set both 'bind_host' and 'publish_host':
+#
+# network.host: 192.168.0.1
+
+# Set a custom port for the node to node communication (9300 by default):
+#
+# transport.tcp.port: 9300
+
+# Enable compression for all communication between nodes (disabled by default):
+#
+# transport.tcp.compress: true
+
+# Set a custom port to listen for HTTP traffic:
+#
+# http.port: 9200
+
+# Set a custom allowed content length:
+#
+# http.max_content_length: 100mb
+
+# Disable HTTP completely:
+#
+# http.enabled: false
+
+
+################################### Gateway ###################################
+
+# The gateway allows for persisting the cluster state between full cluster
+# restarts. Every change to the state (such as adding an index) will be stored
+# in the gateway, and when the cluster starts up for the first time,
+# it will read its state from the gateway.
+
+# There are several types of gateway implementations. For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-gateway.html>.
+
+# The default gateway type is the "local" gateway (recommended):
+#
+# gateway.type: local
+
+# Settings below control how and when to start the initial recovery process on
+# a full cluster restart (to reuse as much local data as possible when using shared
+# gateway).
+
+# Allow recovery process after N nodes in a cluster are up:
+#
+gateway.recover_after_nodes: 1
+
+# Set the timeout to initiate the recovery process, once the N nodes
+# from previous setting are up (accepts time value):
+#
+# gateway.recover_after_time: 5m
+
+# Set how many nodes are expected in this cluster. Once these N nodes
+# are up (and recover_after_nodes is met), begin recovery process immediately
+# (without waiting for recover_after_time to expire):
+#
+gateway.expected_nodes: 1
+
+
+############################# Recovery Throttling #############################
+
+# These settings allow to control the process of shards allocation between
+# nodes during initial recovery, replica allocation, rebalancing,
+# or when adding and removing nodes.
+
+# Set the number of concurrent recoveries happening on a node:
+#
+# 1. During the initial recovery
+#
+# cluster.routing.allocation.node_initial_primaries_recoveries: 4
+#
+# 2. During adding/removing nodes, rebalancing, etc
+#
+# cluster.routing.allocation.node_concurrent_recoveries: 2
+
+# Set to throttle throughput when recovering (eg. 100mb, by default 20mb):
+#
+# indices.recovery.max_bytes_per_sec: 20mb
+
+# Set to limit the number of open concurrent streams when
+# recovering a shard from a peer:
+#
+# indices.recovery.concurrent_streams: 5
+
+
+################################## Discovery ##################################
+
+# Discovery infrastructure ensures nodes can be found within a cluster
+# and master node is elected. Multicast discovery is the default.
+
+# Set to ensure a node sees N other master eligible nodes to be considered
+# operational within the cluster. Its recommended to set it to a higher value
+# than 1 when running more than 2 nodes in the cluster.
+#
+# discovery.zen.minimum_master_nodes: 1
+
+# Set the time to wait for ping responses from other nodes when discovering.
+# Set this option to a higher value on a slow or congested network
+# to minimize discovery failures:
+#
+# discovery.zen.ping.timeout: 3s
+
+# For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html>
+
+# Unicast discovery allows to explicitly control which nodes will be used
+# to discover the cluster. It can be used when multicast is not present,
+# or to restrict the cluster communication-wise.
+#
+# 1. Disable multicast discovery (enabled by default):
+#
+# discovery.zen.ping.multicast.enabled: false
+#
+# 2. Configure an initial list of master nodes in the cluster
+#    to perform discovery when new nodes (master or data) are started:
+#
+# discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
+
+# EC2 discovery allows to use AWS EC2 API in order to perform discovery.
+#
+# You have to install the cloud-aws plugin for enabling the EC2 discovery.
+#
+# For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-ec2.html>
+#
+# See <http://elasticsearch.org/tutorials/elasticsearch-on-ec2/>
+# for a step-by-step tutorial.
+
+# GCE discovery allows to use Google Compute Engine API in order to perform discovery.
+#
+# You have to install the cloud-gce plugin for enabling the GCE discovery.
+#
+# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-gce>.
+
+# Azure discovery allows to use Azure API in order to perform discovery.
+#
+# You have to install the cloud-azure plugin for enabling the Azure discovery.
+#
+# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-azure>.
+
+################################## Slow Log ##################################
+
+# Shard level query and fetch threshold logging.
+
+#index.search.slowlog.threshold.query.warn: 10s
+#index.search.slowlog.threshold.query.info: 5s
+#index.search.slowlog.threshold.query.debug: 2s
+#index.search.slowlog.threshold.query.trace: 500ms
+
+#index.search.slowlog.threshold.fetch.warn: 1s
+#index.search.slowlog.threshold.fetch.info: 800ms
+#index.search.slowlog.threshold.fetch.debug: 500ms
+#index.search.slowlog.threshold.fetch.trace: 200ms
+
+#index.indexing.slowlog.threshold.index.warn: 10s
+#index.indexing.slowlog.threshold.index.info: 5s
+#index.indexing.slowlog.threshold.index.debug: 2s
+#index.indexing.slowlog.threshold.index.trace: 500ms
+
+################################## GC Logging ################################
+
+#monitor.jvm.gc.young.warn: 1000ms
+#monitor.jvm.gc.young.info: 700ms
+#monitor.jvm.gc.young.debug: 400ms
+
+#monitor.jvm.gc.old.warn: 10s
+#monitor.jvm.gc.old.info: 5s
+#monitor.jvm.gc.old.debug: 2s
+
diff --git a/catalog-be/src/test/resources/config/mysql-type-empty-nodes.zip b/catalog-be/src/test/resources/config/mysql-type-empty-nodes.zip
new file mode 100644
index 0000000..d317bcc
--- /dev/null
+++ b/catalog-be/src/test/resources/config/mysql-type-empty-nodes.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/config/mysql-type-no-nodes.zip b/catalog-be/src/test/resources/config/mysql-type-no-nodes.zip
new file mode 100644
index 0000000..09999fa
--- /dev/null
+++ b/catalog-be/src/test/resources/config/mysql-type-no-nodes.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/config/mysql-type-no-version.zip b/catalog-be/src/test/resources/config/mysql-type-no-version.zip
new file mode 100644
index 0000000..fa1319f
--- /dev/null
+++ b/catalog-be/src/test/resources/config/mysql-type-no-version.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/config/mysql-type-only-yaml.zip b/catalog-be/src/test/resources/config/mysql-type-only-yaml.zip
new file mode 100644
index 0000000..b4b1946
--- /dev/null
+++ b/catalog-be/src/test/resources/config/mysql-type-only-yaml.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/config/mysql-type-with-scripts.zip b/catalog-be/src/test/resources/config/mysql-type-with-scripts.zip
new file mode 100644
index 0000000..d689b66
--- /dev/null
+++ b/catalog-be/src/test/resources/config/mysql-type-with-scripts.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/config/mysql-type.yml b/catalog-be/src/test/resources/config/mysql-type.yml
new file mode 100644
index 0000000..f1985a0
--- /dev/null
+++ b/catalog-be/src/test/resources/config/mysql-type.yml
@@ -0,0 +1,82 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0_wd03
+description: MySQL RDBMS installation on a specific mounted volume path.
+template_name: mysql-type
+template_version: 1.1.1-SNAPSHOT
+template_author: FastConnect
+
+imports:
+  - "tosca-normative-types:1.0.0.wd03-SNAPSHOT"
+
+node_types:
+  alien.nodes.Mysql:
+    derived_from: tosca.nodes.Database
+    description: >
+      A node to install MySQL v5.5 database with data
+      on a specific attached volume.
+    capabilities:
+      host:
+        type: alien.capabilities.MysqlDatabase
+        properties:
+          valid_node_types: [ tosca.nodes.WebApplication ]
+    requirements:
+      - host: tosca.nodes.Compute
+        type: tosca.relationships.HostedOn
+    tags:
+      icon: /images/mysql.png
+    properties:
+      db_port:
+        type: integer
+        default: 3306
+        description: The port on which the underlying database service will listen to data.
+      db_name:
+        type: string
+        required: true
+        default: wordpress
+        description: The logical name of the database.
+      db_user:
+        type: string
+        default: pass
+        description: The special user account used for database administration.
+      db_password:
+        type: string
+        default: pass
+        description: The password associated with the user account provided in the ‘db_user’ property.
+      bind_address:
+        type: boolean
+        default: true
+        required: false
+        description: If true,the server accepts TCP/IP connections on all server host IPv4 interfaces.
+      storage_path:
+        type: string
+        default: /mountedStorage
+        constraints:
+          - valid_values: [ "/mountedStorage", "/var/mysql" ]
+    interfaces:
+      Standard:
+        create: scripts/install_mysql.sh
+        start:
+          inputs:
+            VOLUME_HOME: { get_property: [SELF, storage_path] }
+            PORT: { get_property: [SELF, db_port] }
+            DB_NAME: { get_property: [SELF, db_name] }
+            DB_USER: { get_property: [SELF, db_user] }
+            DB_PASSWORD: { get_property: [SELF, db_password] }
+            BIND_ADRESS: { get_property: [SELF, bind_address] }
+          implementation: scripts/start_mysql.sh
+      fastconnect.cloudify.extensions:
+         start_detection:
+          inputs:
+            PORT: { get_property: [SELF, db_port] }
+          implementation: scripts/mysql_start_detection.groovy
+    artifacts:
+      - scripts: scripts
+        type: tosca.artifacts.File
+
+capability_types:
+  alien.capabilities.MysqlDatabase:
+      derived_from: tosca.capabilities.Container
+
+artifact_types:
+  tosca.artifacts.GroovyScript:
+    description: A groovy script (.groovy file)
+    file_ext: [groovy]
diff --git a/catalog-be/src/test/resources/config/mysql-type.zip b/catalog-be/src/test/resources/config/mysql-type.zip
new file mode 100644
index 0000000..b4b1946
--- /dev/null
+++ b/catalog-be/src/test/resources/config/mysql-type.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/config/normative-types-root.zip b/catalog-be/src/test/resources/config/normative-types-root.zip
new file mode 100644
index 0000000..b0c3996
--- /dev/null
+++ b/catalog-be/src/test/resources/config/normative-types-root.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/config/sample.yaml b/catalog-be/src/test/resources/config/sample.yaml
new file mode 100644
index 0000000..12ab2c7
--- /dev/null
+++ b/catalog-be/src/test/resources/config/sample.yaml
@@ -0,0 +1,17 @@
+version: 1.0
+released: 2012-11-30
+
+# Connection parameters
+connection:
+    url: jdbc:mysql://localhost:3306/db
+    poolSize: 5
+
+# Protocols
+protocols:
+   - http
+   - https
+
+# Users
+users:
+    tom: passwd
+    bob: passwd
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/config/sampleNoProtocol.yaml b/catalog-be/src/test/resources/config/sampleNoProtocol.yaml
new file mode 100644
index 0000000..6197232
--- /dev/null
+++ b/catalog-be/src/test/resources/config/sampleNoProtocol.yaml
@@ -0,0 +1,17 @@
+version: 1.0
+released: 2012-11-30
+
+# Connection parameters
+connection:
+    url: jdbc:mysql://localhost:3306/db
+    poolSize: 5
+
+# Protocols
+#protocols:
+#   - http
+#   - https
+
+# Users
+users:
+    tom: passwd
+    bob: passwd
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/elasticsearch.yml b/catalog-be/src/test/resources/elasticsearch.yml
new file mode 100644
index 0000000..eba942d
--- /dev/null
+++ b/catalog-be/src/test/resources/elasticsearch.yml
@@ -0,0 +1,391 @@
+
+elasticSearch.local: true
+elasticSearch.transportclient: false
+cluster.name: elasticsearch_1_5_2222
+  
+discovery.zen.ping.multicast.enabled: false
+discovery.zen.ping.unicast.enabled: true
+discovery.zen.ping.unicast.hosts: 1.2.3.4
+transport.client.initial_nodes:
+   - 1.2.3.4:9300
+
+#plugin.types: "DeleteByQueryPlugin"
+
+##################### Elasticsearch Configuration Example #####################
+
+# This file contains an overview of various configuration settings,
+# targeted at operations staff. Application developers should
+# consult the guide at <http://elasticsearch.org/guide>.
+#
+# The installation procedure is covered at
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html>.
+#
+# Elasticsearch comes with reasonable defaults for most settings,
+# so you can try it out without bothering with configuration.
+#
+# Most of the time, these defaults are just fine for running a production
+# cluster. If you're fine-tuning your cluster, or wondering about the
+# effect of certain configuration option, please _do ask_ on the
+# mailing list or IRC channel [http://elasticsearch.org/community].
+
+# Any element in the configuration can be replaced with environment variables
+# by placing them in ${...} notation. For example:
+#
+# node.rack: ${RACK_ENV_VAR}
+
+# For information on supported formats and syntax for the config file, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html>
+
+
+################################### Cluster ###################################
+
+# Cluster name identifies your cluster for auto-discovery. If you're running
+# multiple clusters on the same network, make sure you're using unique names.
+#
+# cluster.name: elasticsearch
+
+
+#################################### Node #####################################
+
+# Node names are generated dynamically on startup, so you're relieved
+# from configuring them manually. You can tie this node to a specific name:
+#
+# node.name: "Franz Kafka"
+
+# Every node can be configured to allow or deny being eligible as the master,
+# and to allow or deny to store the data.
+#
+# Allow this node to be eligible as a master node (enabled by default):
+#
+# node.master: true
+#
+# Allow this node to store data (enabled by default):
+#
+# node.data: true
+
+# You can exploit these settings to design advanced cluster topologies.
+#
+# 1. You want this node to never become a master node, only to hold data.
+#    This will be the "workhorse" of your cluster.
+#
+# node.master: false
+# node.data: true
+#
+# 2. You want this node to only serve as a master: to not store any data and
+#    to have free resources. This will be the "coordinator" of your cluster.
+#
+# node.master: true
+# node.data: false
+#
+# 3. You want this node to be neither master nor data node, but
+#    to act as a "search load balancer" (fetching data from nodes,
+#    aggregating results, etc.)
+#
+# node.master: false
+# node.data: false
+
+# Use the Cluster Health API [http://localhost:9200/_cluster/health], the
+# Node Info API [http://localhost:9200/_nodes] or GUI tools
+# such as <http://www.elasticsearch.org/overview/marvel/>,
+# <http://github.com/karmi/elasticsearch-paramedic>,
+# <http://github.com/lukas-vlcek/bigdesk> and
+# <http://mobz.github.com/elasticsearch-head> to inspect the cluster state.
+
+# A node can have generic attributes associated with it, which can later be used
+# for customized shard allocation filtering, or allocation awareness. An attribute
+# is a simple key value pair, similar to node.key: value, here is an example:
+#
+# node.rack: rack314
+
+# By default, multiple nodes are allowed to start from the same installation location
+# to disable it, set the following:
+# node.max_local_storage_nodes: 1
+
+
+#################################### Index ####################################
+
+# You can set a number of options (such as shard/replica options, mapping
+# or analyzer definitions, translog settings, ...) for indices globally,
+# in this file.
+#
+# Note, that it makes more sense to configure index settings specifically for
+# a certain index, either when creating it or by using the index templates API.
+#
+# See <http://elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html> and
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/indices-create-index.html>
+# for more information.
+
+# Set the number of shards (splits) of an index (5 by default):
+#
+# index.number_of_shards: 5
+
+# Set the number of replicas (additional copies) of an index (1 by default):
+#
+# index.number_of_replicas: 1
+
+# Note, that for development on a local machine, with small indices, it usually
+# makes sense to "disable" the distributed features:
+#
+index.number_of_shards: 1
+index.number_of_replicas: 0
+
+# These settings directly affect the performance of index and search operations
+# in your cluster. Assuming you have enough machines to hold shards and
+# replicas, the rule of thumb is:
+#
+# 1. Having more *shards* enhances the _indexing_ performance and allows to
+#    _distribute_ a big index across machines.
+# 2. Having more *replicas* enhances the _search_ performance and improves the
+#    cluster _availability_.
+#
+# The "number_of_shards" is a one-time setting for an index.
+#
+# The "number_of_replicas" can be increased or decreased anytime,
+# by using the Index Update Settings API.
+#
+# Elasticsearch takes care about load balancing, relocating, gathering the
+# results from nodes, etc. Experiment with different settings to fine-tune
+# your setup.
+
+# Use the Index Status API (<http://localhost:9200/A/_status>) to inspect
+# the index status.
+
+
+#################################### Paths ####################################
+path.home: /src/test/resources
+# Path to directory containing configuration (this file and logging.yml):
+#
+path.conf: /src/test/resources
+
+# Path to directory where to store index data allocated for this node.
+#
+path.data: target/esdata
+#
+# Can optionally include more than one location, causing data to be striped across
+# the locations (a la RAID 0) on a file level, favouring locations with most free
+# space on creation. For example:
+#
+# path.data: /path/to/data1,/path/to/data2
+
+# Path to temporary files:
+#
+path.work: /target/eswork
+
+# Path to log files:
+#
+path.logs: /target/eslogs
+
+# Path to where plugins are installed:
+#
+# path.plugins: /path/to/plugins
+
+
+#################################### Plugin ###################################
+
+# If a plugin listed here is not installed for current node, the node will not start.
+#
+# plugin.mandatory: mapper-attachments,lang-groovy
+
+
+################################### Memory ####################################
+
+# Elasticsearch performs poorly when JVM starts swapping: you should ensure that
+# it _never_ swaps.
+#
+# Set this property to true to lock the memory:
+#
+# bootstrap.mlockall: true
+
+# Make sure that the ES_MIN_MEM and ES_MAX_MEM environment variables are set
+# to the same value, and that the machine has enough memory to allocate
+# for Elasticsearch, leaving enough memory for the operating system itself.
+#
+# You should also make sure that the Elasticsearch process is allowed to lock
+# the memory, eg. by using `ulimit -l unlimited`.
+
+
+############################## Network And HTTP ###############################
+
+# Elasticsearch, by default, binds itself to the 0.0.0.0 address, and listens
+# on port [9200-9300] for HTTP traffic and on port [9300-9400] for node-to-node
+# communication. (the range means that if the port is busy, it will automatically
+# try the next port).
+
+# Set the bind address specifically (IPv4 or IPv6):
+#
+# network.bind_host: 192.168.0.1
+
+# Set the address other nodes will use to communicate with this node. If not
+# set, it is automatically derived. It must point to an actual IP address.
+#
+# network.publish_host: 192.168.0.1
+
+# Set both 'bind_host' and 'publish_host':
+#
+# network.host: 192.168.0.1
+
+# Set a custom port for the node to node communication (9300 by default):
+#
+# transport.tcp.port: 9300
+
+# Enable compression for all communication between nodes (disabled by default):
+#
+# transport.tcp.compress: true
+
+# Set a custom port to listen for HTTP traffic:
+#
+# http.port: 9200
+
+# Set a custom allowed content length:
+#
+# http.max_content_length: 100mb
+
+# Disable HTTP completely:
+#
+# http.enabled: false
+
+
+################################### Gateway ###################################
+
+# The gateway allows for persisting the cluster state between full cluster
+# restarts. Every change to the state (such as adding an index) will be stored
+# in the gateway, and when the cluster starts up for the first time,
+# it will read its state from the gateway.
+
+# There are several types of gateway implementations. For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-gateway.html>.
+
+# The default gateway type is the "local" gateway (recommended):
+#
+# gateway.type: local
+
+# Settings below control how and when to start the initial recovery process on
+# a full cluster restart (to reuse as much local data as possible when using shared
+# gateway).
+
+# Allow recovery process after N nodes in a cluster are up:
+#
+gateway.recover_after_nodes: 1
+
+# Set the timeout to initiate the recovery process, once the N nodes
+# from previous setting are up (accepts time value):
+#
+# gateway.recover_after_time: 5m
+
+# Set how many nodes are expected in this cluster. Once these N nodes
+# are up (and recover_after_nodes is met), begin recovery process immediately
+# (without waiting for recover_after_time to expire):
+#
+gateway.expected_nodes: 1
+
+
+############################# Recovery Throttling #############################
+
+# These settings allow to control the process of shards allocation between
+# nodes during initial recovery, replica allocation, rebalancing,
+# or when adding and removing nodes.
+
+# Set the number of concurrent recoveries happening on a node:
+#
+# 1. During the initial recovery
+#
+# cluster.routing.allocation.node_initial_primaries_recoveries: 4
+#
+# 2. During adding/removing nodes, rebalancing, etc
+#
+# cluster.routing.allocation.node_concurrent_recoveries: 2
+
+# Set to throttle throughput when recovering (eg. 100mb, by default 20mb):
+#
+# indices.recovery.max_bytes_per_sec: 20mb
+
+# Set to limit the number of open concurrent streams when
+# recovering a shard from a peer:
+#
+# indices.recovery.concurrent_streams: 5
+
+
+################################## Discovery ##################################
+
+# Discovery infrastructure ensures nodes can be found within a cluster
+# and master node is elected. Multicast discovery is the default.
+
+# Set to ensure a node sees N other master eligible nodes to be considered
+# operational within the cluster. Its recommended to set it to a higher value
+# than 1 when running more than 2 nodes in the cluster.
+#
+# discovery.zen.minimum_master_nodes: 1
+
+# Set the time to wait for ping responses from other nodes when discovering.
+# Set this option to a higher value on a slow or congested network
+# to minimize discovery failures:
+#
+# discovery.zen.ping.timeout: 3s
+
+# For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html>
+
+# Unicast discovery allows to explicitly control which nodes will be used
+# to discover the cluster. It can be used when multicast is not present,
+# or to restrict the cluster communication-wise.
+#
+# 1. Disable multicast discovery (enabled by default):
+#
+# discovery.zen.ping.multicast.enabled: false
+#
+# 2. Configure an initial list of master nodes in the cluster
+#    to perform discovery when new nodes (master or data) are started:
+#
+# discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
+
+# EC2 discovery allows to use AWS EC2 API in order to perform discovery.
+#
+# You have to install the cloud-aws plugin for enabling the EC2 discovery.
+#
+# For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-ec2.html>
+#
+# See <http://elasticsearch.org/tutorials/elasticsearch-on-ec2/>
+# for a step-by-step tutorial.
+
+# GCE discovery allows to use Google Compute Engine API in order to perform discovery.
+#
+# You have to install the cloud-gce plugin for enabling the GCE discovery.
+#
+# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-gce>.
+
+# Azure discovery allows to use Azure API in order to perform discovery.
+#
+# You have to install the cloud-azure plugin for enabling the Azure discovery.
+#
+# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-azure>.
+
+################################## Slow Log ##################################
+
+# Shard level query and fetch threshold logging.
+
+#index.search.slowlog.threshold.query.warn: 10s
+#index.search.slowlog.threshold.query.info: 5s
+#index.search.slowlog.threshold.query.debug: 2s
+#index.search.slowlog.threshold.query.trace: 500ms
+
+#index.search.slowlog.threshold.fetch.warn: 1s
+#index.search.slowlog.threshold.fetch.info: 800ms
+#index.search.slowlog.threshold.fetch.debug: 500ms
+#index.search.slowlog.threshold.fetch.trace: 200ms
+
+#index.indexing.slowlog.threshold.index.warn: 10s
+#index.indexing.slowlog.threshold.index.info: 5s
+#index.indexing.slowlog.threshold.index.debug: 2s
+#index.indexing.slowlog.threshold.index.trace: 500ms
+
+################################## GC Logging ################################
+
+#monitor.jvm.gc.young.warn: 1000ms
+#monitor.jvm.gc.young.info: 700ms
+#monitor.jvm.gc.young.debug: 400ms
+
+#monitor.jvm.gc.old.warn: 10s
+#monitor.jvm.gc.old.info: 5s
+#monitor.jvm.gc.old.debug: 2s
+
diff --git a/catalog-be/src/test/resources/logback-test.xml b/catalog-be/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..d2b9bff
--- /dev/null
+++ b/catalog-be/src/test/resources/logback-test.xml
@@ -0,0 +1,13 @@
+<!-- only one line, shut up logback ! -->
+<configuration>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <Pattern>
+                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
+            </Pattern>
+        </encoder>
+    </appender>
+    <root level="OFF">
+        <appender-ref ref="STDOUT" />
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/mock_vf.csar b/catalog-be/src/test/resources/mock_vf.csar
new file mode 100644
index 0000000..4b37f44
--- /dev/null
+++ b/catalog-be/src/test/resources/mock_vf.csar
Binary files differ
diff --git a/catalog-be/src/test/resources/normativeTypes/importToscaProperties.yml b/catalog-be/src/test/resources/normativeTypes/importToscaProperties.yml
new file mode 100644
index 0000000..f856603
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/importToscaProperties.yml
@@ -0,0 +1,452 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  org.openecomp.resource.vl.LinkTest:
+      derived_from: tosca.nodes.Root
+      properties:
+        string_prop01:
+          type: map
+          description : another description
+          default: {keyA : val1 , keyB : val2}
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop02:
+          type: map
+          description : another description
+          default: {keyA : "val1" , keyB : "val2"}
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop03:
+          type: map
+          description : another description
+          default: {"keyA" : "val1" , keyB : val2}
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop04:
+          type: map
+          description : another description
+          default: {"keyA" : 10 , keyB : <b>true</b> }
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop05:
+          type: map
+          description : another description
+          default: {"keyA" :  , keyB : "Big" }
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop06:
+          type: map
+          description : another description
+          default: {"keyA" : aaaA  , keyB : null }
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop07:
+          type: map
+          description : another description
+          default: {"keyA" : NULL  , keyB : Null }
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop08:
+          type: map
+          description : another description
+          default: {"keyA" : ""  , keyB : "abcd" }
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop09:
+          type: map
+          description : another description
+          default: {"keyA" : "  "  , keyB : "abcd" }
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop10:
+          type: map
+          description : another description
+          default: {"keyA" : "    aaaa"  , keyB : "    bbbb" }
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop11:
+          type: map
+          description : another description
+          default: {"keyA" : "aaaa      "  , keyB : "bbbb     " }
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop12:
+          type: map
+          description : another description
+          default: {"keyA" : "     aaaa      "  , keyB : "     bbbb    ccccc   " }
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop13:
+          type: map
+          description : another description
+          default:
+            keyA : "aaaa"
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop14:
+          type: map
+          description : another description
+          default:
+            keyA : "      aaaa        "
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop15:
+          type: map
+          description : another description
+          default:
+            keyA : AbcD
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop16:
+          type: map
+          description : another description
+          default:
+            keyA :         AbcD
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop17:
+          type: map
+          description : another description
+          default:
+            keyA :         AbcD      
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop18:
+          type: map
+          description : another description
+          default:
+            keyA : <b>AbcD</b>      
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop19:
+          type: map
+          description : another description
+          default:
+            keyA : <b>AbcD      
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop20:
+          type: map
+          description : another description
+          default:
+            keyA : aaaa
+            keya : aaaa
+            Keya : Aaaa
+            KEYA : nnnn
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop21:
+          type: map
+          description : another description
+          default:
+            keyA : NULL
+            keyB : null
+            keyC : Null
+          entry_schema:
+            description: This is my property
+            type: string
+        string_prop22:
+          type: map
+          description : another description
+          default:
+          entry_schema:
+            description: This is my property
+            type: string
+        integer_prop01:
+          type: map
+          description : another description
+          default: {keyA : 1 , keyB : 1000}
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop02:
+          type: map
+          description : another description
+          default: {keyA : Null , keyB : NULL ,keyC : null }
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop03:
+          type: map
+          description : another description
+          default: {keyA :  , keyB : -600}
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop03:
+          type: map
+          description : another description
+          default: {keyA :            800  , keyB :          -600}
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop04:
+          type: map
+          description : another description
+          default: {keyA :              , keyB :          -600}
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop05:
+          type: map
+          description : another description
+          default: {keyA : 100              , keyB : 0      }
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop06:
+          type: map
+          description : another description
+          default: {keyA : 100 , keyB : 00}
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop07:
+          type: map
+          description : another description
+          default: {keyA :   100    , keyB :    100        }
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop08:
+          type: map
+          description : another description
+          default:
+            keyA : 100
+            keyB : 200
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop09:
+          type: map
+          description : another description
+          default:
+            keyA :            100
+            keyB : 200           
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop10:
+          type: map
+          description : another description
+          default:
+            keyA : null
+            keyA : Null
+            keyB : 1111
+            keyB : 2222
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop11:
+          type: map
+          description : another description
+          default:
+            keyA : null
+            keyB : Null
+            keyC : NULL
+            keyD : 
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop12:
+          type: map
+          description : another description
+          default:
+          entry_schema:
+            description: This is my property
+            type: integer
+        integer_prop13:
+          type: map
+          description : another description
+          default: {keyA : 100 , keyA : 200}
+          entry_schema:
+            description: This is my property
+            type: integer
+        boolean_prop01:
+          type: map
+          description : another description
+          default: {keyA : true , keyB : false , keyC : false }
+          entry_schema:
+            description: This is my property
+            type: boolean
+        boolean_prop02:
+          type: map
+          description : another description
+          default: {keyA : TRUE , keyB : FALSE , keyC : False }
+          entry_schema:
+            description: This is my property
+            type: boolean
+        boolean_prop03:
+          type: map
+          description : another description
+          default:
+            keyA : null
+            keyB : Null
+            keyC : NULL
+            keyD : 
+          entry_schema:
+            description: This is my property
+            type: boolean
+        boolean_prop04:
+          type: map
+          description : another description
+          default: {keyA : Null , keyB : NULL ,keyC : null ,keyD : }
+          entry_schema:
+            description: This is my property
+            type: boolean
+        boolean_prop05:
+          type: map
+          description : another description
+          default: {keyA :      true , keyB : false     , keyC :     false       }
+          entry_schema:
+            description: This is my property
+            type: boolean
+        boolean_prop06:
+          type: map
+          description : another description
+          default:
+            keyA :     true
+            keyB : true
+            keyC :       false
+          entry_schema:
+            description: This is my property
+            type: boolean
+        boolean_prop07:
+          type: map
+          description : another description
+          default:
+          entry_schema:
+            description: This is my property
+            type: boolean
+        boolean_prop08:
+          type: map
+          description : another description
+          default:
+            keyA : false
+            keyA : true
+            keyB : true
+            keyB : false
+          entry_schema:
+            description: This is my property
+            type: boolean
+        boolean_prop09:
+          type: map
+          description : another description
+          default: {keyA : true,keyA : false,keyB : false,keyB : true}
+          entry_schema:
+            description: This is my property
+            type: boolean
+        float_prop01:
+          type: map
+          description : another description
+          default: {keyA : 1.20 , keyB : 3.56f , keyC : 33}
+          entry_schema:
+            description: This is my property
+            type: float
+        float_prop02:
+          type: map
+          description : another description
+          default: {keyA : 0.00, keyB : 0.0 , keyC : 0 }
+          entry_schema:
+            description: This is my property
+            type: float
+        float_prop03:
+          type: map
+          description : another description
+          default: {keyA : null, keyB : Null , keyC : NULL , keyD : }
+          entry_schema:
+            description: This is my property
+            type: float
+        float_prop04:
+          type: map
+          description : another description
+          default: {keyA :      1.20 , keyB : 3.56f       , keyC :      33        }
+          entry_schema:
+            description: This is my property
+            type: float
+        float_prop05:
+          type: map
+          description : another description
+          default:
+            keyA : 33
+            keyB : 1.2000
+            keyC : 3.607f
+            keyD : 0
+          entry_schema:
+            description: This is my property
+            type: float
+        float_prop06:
+          type: map
+          description : another description
+          default:
+            keyA :       33
+            keyB : 1.2000      
+            keyC :    3.607f 
+          entry_schema:
+            description: This is my property
+            type: float
+        float_prop07:
+          type: map
+          description : another description
+          default:
+            keyA : null
+            keyB : Null
+            keyC : NULL
+            keyD : 
+          entry_schema:
+            description: This is my property
+            type: float
+        float_prop08:
+          type: map
+          description : another description
+          default:
+          entry_schema:
+            description: This is my property
+            type: float
+        float_prop09:
+          type: map
+          description : another description
+          default:
+            keyA : 3.5
+            keyA : 0.01
+            keyB : 3.6
+            keyB : 
+          entry_schema:
+            description: This is my property
+            type: float
+        float_prop10:
+            type: map
+            description : another description
+            default: {keyA : 0.0002}
+            entry_schema:
+              description: This is my property
+              type: float
+        float_prop11:
+          type: map
+          description : another description
+          default: {keyA : 0.000 , keyA : 003.56f, keyB : 33}
+          entry_schema:
+            description: This is my property
+            type: float
+      capabilities:
+        link:
+          type: tosca.capabilities.network.Linkable
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/importToscaWithAttribute.yml b/catalog-be/src/test/resources/normativeTypes/importToscaWithAttribute.yml
new file mode 100644
index 0000000..5a51e9e
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/importToscaWithAttribute.yml
@@ -0,0 +1,41 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  org.openecomp.resource.MyComputeTest:
+    derived_from: tosca.nodes.Root
+    attributes:
+      private_address:
+        type: string
+        status: supported
+      public_address:
+        type: string
+      networks:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.NetworkInfo
+      myAttr:
+        type: list
+        description: this is my description
+        entry_schema:
+          type: string
+      ports:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.PortInfo
+    requirements:
+      - local_storage: 
+          capability: tosca.capabilities.Attachment
+          node: tosca.nodes.BlockStorage
+          relationship: tosca.relationships.AttachesTo
+          occurrences: [0, UNBOUNDED]  
+    capabilities:
+      host: 
+        type: tosca.capabilities.Container
+        valid_source_types: [tosca.nodes.SoftwareComponent] 
+      endpoint :
+        type: tosca.capabilities.Endpoint.Admin 
+      os: 
+        type: tosca.capabilities.OperatingSystem
+      scalable:
+        type: tosca.capabilities.Scalable
+      binding:
+        type: tosca.capabilities.network.Bindable
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-all-map-test.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-all-map-test.yml
new file mode 100644
index 0000000..4cf82d8
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-all-map-test.yml
@@ -0,0 +1,30 @@
+tosca.nodes.BlockStorage:
+  allTestTag: tosca.nodes.Root
+  properties:
+    mapTestTag: 
+      stringTestTag: stringVal1
+      listTestTag:
+        - allTestTag: 1 MB
+        - listTestTag: 2 MB
+        - stringTestTag: stringVal2
+    volume_id:
+      type: string
+      required: false
+      allTestTag:
+          - greater_or_equal: 1 MB
+          - stringTestTag: stringVal3
+    allTestTag:
+      mapTestTag: string
+      required: true
+    snapshot_id:
+      stringTestTag: stringVal4
+      required: false
+      listTestTag:
+        - testTag1: 1 MB
+        - mapTestTag:
+          - testTag1: 1 MB
+          - type: stringVal2
+  capabilities:
+    mapTestTag: 
+      type: tosca.capabilities.Attachment
+      allTestTag: false
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-new-DBMS.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-new-DBMS.yml
new file mode 100644
index 0000000..28919d3
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-new-DBMS.yml
@@ -0,0 +1,17 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  tosca.nodes.DBMS:
+    derived_from: tosca.nodes.SoftwareComponent
+    properties:
+      root_password: 
+        type: string
+        required: false
+        description: the optional root password for the DBMS service
+      port:
+        type: integer
+        required: false
+        description: the port the DBMS service will listen to for data and requests 
+    capabilities:    
+      host: 
+        type: tosca.capabilities.Container
+        valid_source_types: [ tosca.nodes.Database ]
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-new-Root.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-new-Root.yml
new file mode 100644
index 0000000..e9b1de9
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-new-Root.yml
@@ -0,0 +1,23 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  tosca.nodes.Root:
+    description: The TOSCA Node Type all other TOSCA base Node Types derive from
+    attributes:
+      tosca_id:
+        type: string
+      tosca_name:
+        type: string
+      state:
+        type: string
+    capabilities:
+      feature: 
+        type: tosca.capabilities.Node
+    requirements:
+      - dependency :
+          capability: tosca.capabilities.Node
+          node: tosca.nodes.Root 
+          relationship: tosca.relationships.DependsOn
+          occurrences: [ 0, UNBOUNDED ]
+    interfaces: 
+      Standard:
+        type: tosca.interfaces.node.lifecycle.Standard
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-new-blockStorage.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-new-blockStorage.yml
new file mode 100644
index 0000000..a829652
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-new-blockStorage.yml
@@ -0,0 +1,18 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  tosca.nodes.BlockStorage:
+    derived_from: tosca.nodes.Root
+    properties:
+      size: 
+        type: scalar-unit.size
+        constraints:
+          - greater_or_equal: 1 MB
+      volume_id:
+        type: string
+        required: false
+      snapshot_id:
+        type: string
+        required: false
+    capabilities:
+      attachment: 
+        type: tosca.capabilities.Attachment
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-new-compute.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-new-compute.yml
new file mode 100644
index 0000000..00b07fb
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-new-compute.yml
@@ -0,0 +1,35 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  tosca.nodes.Compute:
+    derived_from: tosca.nodes.Root
+    attributes:
+      private_address:
+        type: string
+      public_address:
+        type: string
+      networks:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.NetworkInfo
+      ports:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.PortInfo
+    requirements:
+      - local_storage: 
+          capability: tosca.capabilities.Attachment
+          node: tosca.nodes.BlockStorage
+          relationship: tosca.relationships.AttachesTo
+          occurrences: [0, UNBOUNDED]  
+    capabilities:
+      host: 
+        type: tosca.capabilities.Container
+        valid_source_types: [tosca.nodes.SoftwareComponent] 
+      endpoint :
+        type: tosca.capabilities.Endpoint.Admin 
+      os: 
+        type: tosca.capabilities.OperatingSystem
+      scalable:
+        type: tosca.capabilities.Scalable
+      binding:
+        type: tosca.capabilities.network.Bindable
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-new-database.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-new-database.yml
new file mode 100644
index 0000000..5166150
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-new-database.yml
@@ -0,0 +1,27 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  tosca.nodes.Database:
+    derived_from: tosca.nodes.Root
+    properties:
+      name:
+        type: string
+        description: the logical name of the database
+      port:
+        type: integer
+        description: the port the underlying database service will listen to for data
+      user:
+        type: string
+        description: the optional user account name for DB administration
+        required: false
+      password:
+        type: string
+        description: the optional password for the DB user account
+        required: false
+    requirements:
+      - host:
+          capability: tosca.capabilities.Container
+          node: tosca.nodes.DBMS
+          relationship: tosca.relationships.HostedOn
+    capabilities:
+      database_endpoint: 
+        type: tosca.capabilities.Endpoint.Database
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-new-port.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-new-port.yml
new file mode 100644
index 0000000..2d1540b
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-new-port.yml
@@ -0,0 +1,31 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  tosca.nodes.network.Port:
+      derived_from: tosca.nodes.Root
+      properties:
+        ip_address:
+          type: string
+          required: false
+        order:
+          type: integer
+          required: true
+          default: 0 
+          constraints:
+            - greater_or_equal: 0
+        is_default:
+          type: boolean
+          required: false
+          default: false
+        ip_range_start:
+          type: string
+          required: false
+        ip_range_end:
+          type: string
+          required: false  
+      requirements:
+       - link: 
+          capability: tosca.capabilities.network.Linkable
+          relationship: tosca.relationships.network.LinksTo 
+       - binding:
+          capability: tosca.capabilities.network.Bindable
+          relationship: tosca.relationships.network.BindsTo 
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-new-softwareComponent.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-new-softwareComponent.yml
new file mode 100644
index 0000000..9beb93a
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-new-softwareComponent.yml
@@ -0,0 +1,17 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  tosca.nodes.SoftwareComponent:
+    derived_from: tosca.nodes.Root
+    properties:
+      # domain-specific software component version
+      component_version: 
+        type: version
+        required: false
+      #admin_credential: 
+      #  type: tosca.datatypes.Credential
+       # required: false
+    requirements:
+      - host: 
+          capability: tosca.capabilities.Container
+          node: tosca.nodes.Compute
+          relationship: tosca.relationships.HostedOn
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-new-webServer.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-new-webServer.yml
new file mode 100644
index 0000000..7c957b5
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-new-webServer.yml
@@ -0,0 +1,11 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  tosca.nodes.WebServer:
+    derived_from: tosca.nodes.SoftwareComponent
+    capabilities:
+      # Private, layer 4 endpoints 
+      data_endpoint: tosca.capabilities.Endpoint
+      admin_endpoint: tosca.capabilities.Endpoint.Admin
+      host: 
+        type: tosca.capabilities.Container
+        valid_source_types: [ tosca.nodes.WebApplication ]
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/normative-types-string-list-test.yml b/catalog-be/src/test/resources/normativeTypes/normative-types-string-list-test.yml
new file mode 100644
index 0000000..0a292b3
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/normative-types-string-list-test.yml
@@ -0,0 +1,29 @@
+tosca.nodes.BlockStorage:
+  derived_from: tosca.nodes.Root
+  properties:
+    listTestTag: 
+      stringTestTag: stringVal1
+      listTestTag:
+        - listTestTag: 1 MB
+        - listTestTag: 2 MB
+        - stringTestTag: stringVal2
+    volume_id:
+      type: string
+      required: false
+      stringTestTag:
+          - greater_or_equal: 1 MB
+          - stringTestTag: stringVal3
+    stringTestTag:
+      listTestTag: string
+      required: false
+    snapshot_id:
+      stringTestTag: stringVal4
+      required: false
+      listTestTag:
+        - testTag1: 1 MB
+        - listTestTag:
+          - testTag1: 1 MB
+          - type: stringVal2
+  capabilities:
+    attachment: 
+      type: tosca.capabilities.Attachment
diff --git a/catalog-be/src/test/resources/normativeTypes/topology_template_duplicateNode.yml b/catalog-be/src/test/resources/normativeTypes/topology_template_duplicateNode.yml
new file mode 100644
index 0000000..be16f47
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/topology_template_duplicateNode.yml
@@ -0,0 +1,23 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+  This TOSCA simple profile deploys nodejs, mongodb, each on a separate server
+  with monitoring enabled for nodejs server where a sample nodejs application is running. 
+
+topology_template:
+  node_templates:
+    mongo_server:
+      type: tosca.nodes.Database
+    mongo_server:
+      type: tosca.nodes.Compute
+     
+  
+
+  outputs:
+    nodejs_url:
+      description: URL for the nodejs server, http://<IP>:3000
+      value: { get_attribute: [ app_server, private_address ] }
+    mongodb_url:
+      description: URL for the mongodb server.
+      value: { get_attribute: [ mongo_server, private_address ] }
+   
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/topology_template_empty.yml b/catalog-be/src/test/resources/normativeTypes/topology_template_empty.yml
new file mode 100644
index 0000000..43ad624
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/topology_template_empty.yml
@@ -0,0 +1,17 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+  This TOSCA simple profile deploys nodejs, mongodb, each on a separate server
+  with monitoring enabled for nodejs server where a sample nodejs application is running. 
+
+
+  
+
+  outputs:
+    nodejs_url:
+      description: URL for the nodejs server, http://<IP>:3000
+      value: { get_attribute: [ app_server, private_address ] }
+    mongodb_url:
+      description: URL for the mongodb server.
+      value: { get_attribute: [ mongo_server, private_address ] }
+   
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/topology_template_inputs.yml b/catalog-be/src/test/resources/normativeTypes/topology_template_inputs.yml
new file mode 100644
index 0000000..fbc64e0
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/topology_template_inputs.yml
@@ -0,0 +1,103 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+  This TOSCA simple profile deploys nodejs, mongodb, each on a separate server
+  with monitoring enabled for nodejs server where a sample nodejs application is running. 
+
+topology_template:
+  inputs:
+    vf_module_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique ID for this VF Module instance
+      default: dummy
+    cmd_fw_srv_grp_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: uuid of the server group
+      default: be97d566-35c1-4bc6-a9dd-a5f193cba314
+    nimbus_hsl_interface_type:
+      hidden: false
+      immutable: false
+      type: string
+      description: service_interface_type for ServiceInstance
+      default: other
+    cmd_fw_names:
+      hidden: false
+      immutable: false
+      type: list
+      description: Comma Delimited List of Names for ServiceInstance VMs
+      default:
+      - ZRDM2FCMD01CMD001
+      - ' ZRDM2FCMD01CMD002'
+      - ' ZRDM2FCMD01CMD003'
+      - ' ZRDM2FCMD01CMD004'
+      entry_schema:
+        type: string
+    cmd_fw_shc_max_retries:
+      hidden: false
+      immutable: false
+      type: integer
+      description: max_retries for the ServiceHealthCheck
+      default: 2
+    cmd_fw_shc_url_path:
+      hidden: false
+      immutable: false
+      type: string
+      description: url_path for the ServiceHealthCheck
+      default: local-ip
+  node_templates:
+    nodejs:
+      type: tosca.nodes.WebServer      
+      requirements:
+        - host:
+            node: app_server      
+    mongo_db:
+      type: tosca.nodes.Database
+      requirements:
+        - host: mongo_dbms     
+    mongo_dbms:
+      type: tosca.nodes.DBMS
+      properties:
+       root_password:
+        get_input: nimbus_hsl_interface_type
+      # fixed_ips:
+      #  - ip_address:
+      #      get_input: app2_int_ota_apps_ip_1
+      #    subnet_id:
+      #      get_input: pmaa_dpu_subnet_id
+      #  - ip_address:
+      #      get_input: app2_int_ota_apps_ip_3
+      #    subnet_id:
+      #      get_input: pmaa_dpu_subnet_id
+      # name:
+      #    get_input:
+      #    - mnsoamvfw_names
+       #   - get_input: index
+      # metadata:
+     #     pmaa.sb_nic:
+      #      address:
+      #        get_input: pmaa_dpu_fixed_ip
+      #      cidr:
+      #        get_input: pmaa_dpu_cidr
+      #      gateway:
+      #        get_input: pmaa_dpu_gateway		  
+       #port:
+       # get_input: cmd_fw_shc_max_retries
+      requirements:
+        - host: mongo_server      
+    app_server:
+      type: tosca.nodes.Compute  
+    mongo_server:
+      type: tosca.nodes.Compute
+    
+  outputs:
+    nodejs_url:
+      description: URL for the nodejs server, http://<IP>:3000
+      value: { get_attribute: [ app_server, private_address ] }
+    mongodb_url:
+      description: URL for the mongodb server.
+      value: { get_attribute: [ mongo_server, private_address ] }
+   
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/topology_template_nodeEmpty.yml b/catalog-be/src/test/resources/normativeTypes/topology_template_nodeEmpty.yml
new file mode 100644
index 0000000..3f8f3d1
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/topology_template_nodeEmpty.yml
@@ -0,0 +1,18 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+  This TOSCA simple profile deploys nodejs, mongodb, each on a separate server
+  with monitoring enabled for nodejs server where a sample nodejs application is running. 
+
+topology_template:
+  
+  
+
+  outputs:
+    nodejs_url:
+      description: URL for the nodejs server, http://<IP>:3000
+      value: { get_attribute: [ app_server, private_address ] }
+    mongodb_url:
+      description: URL for the mongodb server.
+      value: { get_attribute: [ mongo_server, private_address ] }
+   
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/topology_template_nodeVF.yml b/catalog-be/src/test/resources/normativeTypes/topology_template_nodeVF.yml
new file mode 100644
index 0000000..4f19663
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/topology_template_nodeVF.yml
@@ -0,0 +1,38 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+  This TOSCA simple profile deploys nodejs, mongodb, each on a separate server
+  with monitoring enabled for nodejs server where a sample nodejs application is running. 
+
+topology_template:
+  node_templates:
+    my_node:
+      type: org.openecomp.resource.vf.Resource19
+    nodejs:
+      type: tosca.nodes.WebServer      
+      requirements:
+        - host:
+            node: app_server      
+    mongo_db:
+      type: tosca.nodes.Database
+      requirements:
+        - host: mongo_dbms     
+    mongo_dbms:
+      type: tosca.nodes.DBMS
+      requirements:
+        - host: mongo_server      
+    app_server:
+      type: tosca.nodes.Compute  
+    mongo_server:
+      type: tosca.nodes.Compute
+     
+  
+
+  outputs:
+    nodejs_url:
+      description: URL for the nodejs server, http://<IP>:3000
+      value: { get_attribute: [ app_server, private_address ] }
+    mongodb_url:
+      description: URL for the mongodb server.
+      value: { get_attribute: [ mongo_server, private_address ] }
+   
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/topology_template_notValidNode.yml b/catalog-be/src/test/resources/normativeTypes/topology_template_notValidNode.yml
new file mode 100644
index 0000000..a4534fc
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/topology_template_notValidNode.yml
@@ -0,0 +1,36 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+  This TOSCA simple profile deploys nodejs, mongodb, each on a separate server
+  with monitoring enabled for nodejs server where a sample nodejs application is running. 
+
+topology_template:
+  node_templates:
+    nodejs:
+      type: tosca.nodes.KUKU      
+      requirements:
+        - host:
+            node: app_server      
+    mongo_db:
+      type: tosca.nodes.Database
+      requirements:
+        - host: mongo_dbms     
+    mongo_dbms:
+      type: tosca.nodes.DBMS
+      requirements:
+        - host: mongo_server      
+    app_server:
+      type: tosca.nodes.Compute  
+    mongo_server:
+      type: tosca.nodes.Compute
+     
+  
+
+  outputs:
+    nodejs_url:
+      description: URL for the nodejs server, http://<IP>:3000
+      value: { get_attribute: [ app_server, private_address ] }
+    mongodb_url:
+      description: URL for the mongodb server.
+      value: { get_attribute: [ mongo_server, private_address ] }
+   
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/topology_template_notValidRelationNode.yml b/catalog-be/src/test/resources/normativeTypes/topology_template_notValidRelationNode.yml
new file mode 100644
index 0000000..f606769
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/topology_template_notValidRelationNode.yml
@@ -0,0 +1,36 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+  This TOSCA simple profile deploys nodejs, mongodb, each on a separate server
+  with monitoring enabled for nodejs server where a sample nodejs application is running. 
+
+topology_template:
+  node_templates:
+    nodejs:
+      type: tosca.nodes.WebServer      
+      requirements:
+        - host:
+            node: KUKU      
+    mongo_db:
+      type: tosca.nodes.Database
+      requirements:
+        - host: mongo_dbms     
+    mongo_dbms:
+      type: tosca.nodes.DBMS
+      requirements:
+        - host: mongo_server      
+    app_server:
+      type: tosca.nodes.Compute  
+    mongo_server:
+      type: tosca.nodes.Compute
+     
+  
+
+  outputs:
+    nodejs_url:
+      description: URL for the nodejs server, http://<IP>:3000
+      value: { get_attribute: [ app_server, private_address ] }
+    mongodb_url:
+      description: URL for the mongodb server.
+      value: { get_attribute: [ mongo_server, private_address ] }
+   
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/normativeTypes/topology_template_sample.yml b/catalog-be/src/test/resources/normativeTypes/topology_template_sample.yml
new file mode 100644
index 0000000..4b685a4
--- /dev/null
+++ b/catalog-be/src/test/resources/normativeTypes/topology_template_sample.yml
@@ -0,0 +1,36 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+  This TOSCA simple profile deploys nodejs, mongodb, each on a separate server
+  with monitoring enabled for nodejs server where a sample nodejs application is running. 
+
+topology_template:
+  node_templates:
+    nodejs:
+      type: tosca.nodes.WebServer      
+      requirements:
+        - host:
+            node: app_server      
+    mongo_db:
+      type: tosca.nodes.Database
+      requirements:
+        - host: mongo_dbms     
+    mongo_dbms:
+      type: tosca.nodes.DBMS
+      requirements:
+        - host: mongo_server      
+    app_server:
+      type: tosca.nodes.Compute  
+    mongo_server:
+      type: tosca.nodes.Compute
+     
+  
+
+  outputs:
+    nodejs_url:
+      description: URL for the nodejs server, http://<IP>:3000
+      value: { get_attribute: [ app_server, private_address ] }
+    mongodb_url:
+      description: URL for the mongodb server.
+      value: { get_attribute: [ mongo_server, private_address ] }
+   
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/types/capabilityTypes.yml b/catalog-be/src/test/resources/types/capabilityTypes.yml
new file mode 100644
index 0000000..58d661b
--- /dev/null
+++ b/catalog-be/src/test/resources/types/capabilityTypes.yml
@@ -0,0 +1,148 @@
+tosca.capabilities.Root: 
+  description: The TOSCA root Capability Type all other TOSCA base Capability Types derive from
+tosca.capabilities.Attachment:
+  derived_from: tosca.capabilities.Root
+tosca.capabilities.Node:
+  derived_from: tosca.capabilities.Root
+tosca.capabilities.Container:
+  derived_from: tosca.capabilities.Root
+  properties:
+    num_cpus: 
+      type: integer
+      required: false
+      constraints:
+        - greater_or_equal: 1
+    cpu_frequency:
+      type: scalar-unit.frequency
+      required: false
+      constraints:
+        - greater_or_equal: 0.1 GHz
+    disk_size: 
+      type: scalar-unit.size
+      required: false
+      constraints:
+        - greater_or_equal: 0 MB
+    mem_size: 
+      type: scalar-unit.size
+      required: false
+      constraints:
+        - greater_or_equal: 0 MB
+tosca.capabilities.Endpoint:
+  derived_from: tosca.capabilities.Root
+  properties:
+    protocol:
+      type: string
+      default: tcp
+    port:
+      type: PortDef
+      required: false
+    secure:
+      type: boolean
+      default: false
+    url_path: 
+      type: string
+      required: false
+    port_name: 
+      type: string
+      required: false
+    network_name:
+      type: string
+      required: false 
+      default: PRIVATE
+    initiator:
+      type: string
+      default: source
+      constraints:
+        - valid_values: [ source, target, peer ]
+    ports:
+      type: map
+      required: false
+      constraints:
+        - min_length: 1
+      entry_schema:
+        type: PortSpec
+  attributes:
+    ip_address:
+      type: string
+tosca.capabilities.DatabaseEndpoint:
+  derived_from: tosca.capabilities.Endpoint
+tosca.capabilities.Endpoint.Public:
+  derived_from: tosca.capabilities.Endpoint
+  properties:
+    # Change the default network_name to use the first public network found
+    network_name: PUBLIC
+    floating:
+      description: > 
+        indicates that the public address should be allocated from a pool of floating IPs that are associated with the network.
+      type: boolean
+      default: false
+      status: experimental
+    dns_name:
+      description: The optional name to register with DNS 
+      type: string
+      required: false    
+      status: experimental
+tosca.capabilities.Endpoint.Admin:
+  derived_from: tosca.capabilities.Endpoint
+  # Change Endpoint secure indicator to true from its default of false
+  properties:
+    secure: true
+tosca.capabilities.Endpoint.Database:
+  derived_from: tosca.capabilities.Endpoint 
+tosca.capabilities.OperatingSystem:
+  derived_from: tosca.capabilities.Root
+  properties:
+    architecture:
+      type: string
+      required: false 
+    type:
+      type: string
+      required: false
+    distribution:
+      type: string
+      required: false
+    version:
+      type: version
+      required: false
+tosca.capabilities.Scalable:
+  derived_from: tosca.capabilities.Root
+  properties:
+    min_instances:
+      type: integer
+      default: 1
+    max_instances:
+      type: integer
+      default: 1
+    default_instances:
+      type: integer
+tosca.capabilities.network.Bindable:
+  derived_from: tosca.capabilities.Node
+
+
+tosca.capabilities.Container.Docker:
+  derived_from: tosca.capabilities.Container
+  properties:
+    version:
+      type: list
+      required: false
+      entry_schema: version
+    publish_all:
+      type: boolean
+      default: false
+      required: false
+    publish_ports:
+      type: list
+      entry_schema: PortSpec
+      required: false
+    expose_ports:
+      type: list
+      entry_schema: PortSpec
+      required: false
+    volumes:
+      type: list
+      entry_schema: string
+      required: false
+tosca.capabilities.network.Linkable:
+  derived_from: tosca.capabilities.Root
+
+
diff --git a/catalog-be/src/test/resources/types/capabilityTypes.zip b/catalog-be/src/test/resources/types/capabilityTypes.zip
new file mode 100644
index 0000000..4f945a7
--- /dev/null
+++ b/catalog-be/src/test/resources/types/capabilityTypes.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/types/categoryTypes.yml b/catalog-be/src/test/resources/types/categoryTypes.yml
new file mode 100644
index 0000000..c853f9a
--- /dev/null
+++ b/catalog-be/src/test/resources/types/categoryTypes.yml
@@ -0,0 +1,74 @@
+services:
+    Mobility:
+      name: "Mobility"
+      icons: ['mobility']
+    Network_L1_3:
+      name: "Network L1-3"
+      icons: ['network_l_1-3']
+    Network_L4:
+      name: "Network L4"
+      icons: ['network_l_4']
+    VoIP_Call_Control:
+      name: "VoIP Call Control"
+      icons: ['call_controll']
+resources:
+  NetworkLayer23:
+    name: "Network Layer 2-3"
+    subcategories: 
+      Router:
+          name: "Router"
+          icons: ['router']
+      Gateway:
+          name: "Gateway"
+          icons: ['gateway']
+      WAN_Connectors:
+          name: "WAN Connectors"
+          icons: ['connector']
+      LAN_Connectors:
+          name: "LAN Connectors"
+          icons: ['connector']
+  NetworkLayer4:
+    name: "Network Layer 4+"
+    subcategories: 
+      Common_Network_Resources:
+          name: "Common Network Resources"
+          icons: ['network', 'loadBalancer']
+  ApplicationLayer4:
+    name: "Application Layer 4+"
+    subcategories: 
+      Border_Elements:
+          name: "Border Elements"
+          icons: ['borderElement']
+      Application_Servers:
+          name: "Application Servers"
+          icons: ['applicationServer', 'server']
+      Web_Server:
+          name: "Web Server"
+          icons: ['applicationServer', 'server']
+      Call_Control:
+          name: "Call Control"
+          icons: ['call_controll']
+      Media_Servers:
+          name: "Media Servers"
+          icons: ['applicationServer', 'server']
+      Load_Balancer:
+          name: "Load Balancer"
+          icons: ['loadBalancer']
+      Database:
+          name: "Database"
+          icons: ['database']
+  Generic:
+    name: "Generic"
+    subcategories: 
+      Infrastructure:
+          name: "Infrastructure"
+          icons: ['objectStorage', 'compute']
+      Abstract:
+          name: "Abstract"
+          icons: ['objectStorage', 'compute']
+      Network_Elements:
+          name: "Network Elements"
+          icons: ['port', 'network', 'router']
+      Database:
+          name: "Database"
+          icons: ['database']
diff --git a/catalog-be/src/test/resources/types/categoryTypes.zip b/catalog-be/src/test/resources/types/categoryTypes.zip
new file mode 100644
index 0000000..2e08a6b
--- /dev/null
+++ b/catalog-be/src/test/resources/types/categoryTypes.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeDeriveFromIntegerWithProperty.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeDeriveFromIntegerWithProperty.yml
new file mode 100644
index 0000000..7040f871
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeDeriveFromIntegerWithProperty.yml
@@ -0,0 +1,8 @@
+integer:
+  
+mytypes.phonenumber:
+  derived_from: integer
+  description: my phone number datatype
+  properties:
+    countrycode:
+      type: integer
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeDerivedFromRootNoProperties.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeDerivedFromRootNoProperties.yml
new file mode 100644
index 0000000..ce72cf5
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeDerivedFromRootNoProperties.yml
@@ -0,0 +1,4 @@
+# define a new datatype that derives from existing type and extends it
+mytypes.phonenumber.extended:
+  derived_from: tosca.datatypes.Root
+  description: custom phone number type that extends the basic phonenumber type
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeDuplicateProperty.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeDuplicateProperty.yml
new file mode 100644
index 0000000..32ed904
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeDuplicateProperty.yml
@@ -0,0 +1,11 @@
+mytypes.phonenumber:
+  description: my phone number datatype
+  properties:
+    countrycode:
+      type: integer
+    areacode1:
+      type: integer
+    number:
+      type: integer
+    areacode1:
+      type: integer
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeForGroup.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeForGroup.yml
new file mode 100644
index 0000000..e811a1f
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeForGroup.yml
@@ -0,0 +1,40 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+integer:
+  derived_from: tosca.datatypes.Root
+
+string:
+  derived_from: tosca.datatypes.Root
+
+boolean:
+  derived_from: tosca.datatypes.Root
+
+float:
+  derived_from: tosca.datatypes.Root
+
+list:
+  derived_from: tosca.datatypes.Root
+
+map:
+  derived_from: tosca.datatypes.Root
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol: 
+      type: string
+      required: false
+    token_type: 
+      type: string
+      default: password
+    token: 
+      type: string
+    keys:
+      type: map
+      required: false
+      entry_schema:
+        type: string
+    user:
+      type: string
+      required: false
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdatePropertyRemoved_part1.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdatePropertyRemoved_part1.yml
new file mode 100644
index 0000000..b8cdc3b
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdatePropertyRemoved_part1.yml
@@ -0,0 +1,15 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol1: 
+      type: string
+      required: false
+    protocol2: 
+      type: string
+      required: false
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdatePropertyRemoved_part2.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdatePropertyRemoved_part2.yml
new file mode 100644
index 0000000..5a5be60
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdatePropertyRemoved_part2.yml
@@ -0,0 +1,12 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol1: 
+      type: string
+      required: false
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentDerivedDataType_part1.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentDerivedDataType_part1.yml
new file mode 100644
index 0000000..f7aaff2
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentDerivedDataType_part1.yml
@@ -0,0 +1,19 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+
+tosca.datatypes.Credential2: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol2: 
+      type: string
+      required: false
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol: 
+      type: string
+      required: false
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentDerivedDataType_part2.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentDerivedDataType_part2.yml
new file mode 100644
index 0000000..e1897d1
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentDerivedDataType_part2.yml
@@ -0,0 +1,19 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+
+tosca.datatypes.Credential2: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol2: 
+      type: string
+      required: false
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Credential2
+  properties: 
+    protocol: 
+      type: string
+      required: false
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentEntryType_part1.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentEntryType_part1.yml
new file mode 100644
index 0000000..d5784d1
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentEntryType_part1.yml
@@ -0,0 +1,20 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+  
+integer:
+  derived_from: tosca.datatypes.Root 
+
+map:
+  derived_from: tosca.datatypes.Root 
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    keys:
+      type: map
+      required: false
+      entry_schema:
+        type: integer
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentEntryType_part2.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentEntryType_part2.yml
new file mode 100644
index 0000000..4a5539d
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentEntryType_part2.yml
@@ -0,0 +1,20 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+  
+integer:
+  derived_from: tosca.datatypes.Root 
+
+map:
+  derived_from: tosca.datatypes.Root 
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    keys:
+      type: map
+      required: false
+      entry_schema:
+        type: string
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentPropertyType_part1.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentPropertyType_part1.yml
new file mode 100644
index 0000000..70e4976
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentPropertyType_part1.yml
@@ -0,0 +1,22 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+  
+integer:
+  derived_from: tosca.datatypes.Root 
+
+tosca.datatypes.Credential2: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol2: 
+      type: string
+      required: false
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol: 
+      type: integer
+      required: false
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentPropertyType_part2.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentPropertyType_part2.yml
new file mode 100644
index 0000000..71e26a7
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithDifferentPropertyType_part2.yml
@@ -0,0 +1,19 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+
+tosca.datatypes.Credential2: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol2: 
+      type: string
+      required: false
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol: 
+      type: string
+      required: false
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithExistingPropertyNameInAncestor_part1.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithExistingPropertyNameInAncestor_part1.yml
new file mode 100644
index 0000000..71e26a7
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithExistingPropertyNameInAncestor_part1.yml
@@ -0,0 +1,19 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+
+tosca.datatypes.Credential2: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol2: 
+      type: string
+      required: false
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol: 
+      type: string
+      required: false
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithExistingPropertyNameInAncestor_part2.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithExistingPropertyNameInAncestor_part2.yml
new file mode 100644
index 0000000..b4945fc
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeUpdateWithExistingPropertyNameInAncestor_part2.yml
@@ -0,0 +1,25 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+string:
+  derived_from: tosca.datatypes.Root
+  
+integer:
+  derived_from: tosca.datatypes.Root 
+
+tosca.datatypes.Credential2: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol2: 
+      type: string
+      required: false
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Credential2
+  properties: 
+    protocol: 
+      type: integer
+      required: false
+    protocol2: 
+      type: integer
+      required: false
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypeWithPropertyTypeThisDataType.yml b/catalog-be/src/test/resources/types/datatypes/dataTypeWithPropertyTypeThisDataType.yml
new file mode 100644
index 0000000..c142b1d
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypeWithPropertyTypeThisDataType.yml
@@ -0,0 +1,9 @@
+mytypes.phonenumber:
+  description: my phone number datatype
+  properties:
+    countrycode:
+      type: integer
+    areacode:
+      type: integer
+    number:
+      type: mytypes.phonenumber
diff --git a/catalog-be/src/test/resources/types/datatypes/dataTypes.yml b/catalog-be/src/test/resources/types/datatypes/dataTypes.yml
new file mode 100644
index 0000000..188c85b
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/dataTypes.yml
@@ -0,0 +1,129 @@
+tosca.datatypes.Root:
+  description: The TOSCA root Data Type all other TOSCA base Data Types derive from
+
+integer:
+  derived_from: tosca.datatypes.Root
+
+string:
+  derived_from: tosca.datatypes.Root
+
+boolean:
+  derived_from: tosca.datatypes.Root
+
+float:
+  derived_from: tosca.datatypes.Root
+
+list:
+  derived_from: tosca.datatypes.Root
+
+map:
+  derived_from: tosca.datatypes.Root
+
+tosca.datatypes.Credential: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol: 
+      type: string
+      required: false
+    token_type: 
+      type: string
+      default: password
+    token: 
+      type: string
+    keys:
+      type: map
+      required: false
+      entry_schema:
+        type: string
+    user:
+      type: string
+      required: false
+
+tosca.datatypes.TimeInterval: 
+  derived_from: tosca.datatypes.Root
+  properties:
+    start_time: 
+      type: timestamp
+      required: true
+    end_time: 
+      type: timestamp
+      required: true
+
+tosca.datatypes.network.NetworkInfo:
+  derived_from: tosca.datatypes.Root
+  properties:  
+    network_name: 
+      type: string
+    network_id: 
+      type: string
+    addresses:
+      type: list
+      entry_schema:
+        type: string
+
+tosca.datatypes.network.PortInfo: 
+  derived_from: tosca.datatypes.Root
+  properties:  
+    port_name: 
+      type: string
+    port_id: 
+      type: string
+    network_id: 
+      type: string
+    mac_address: 
+      type: string
+    addresses:
+      type: list
+      entry_schema:
+        type: string
+
+tosca.datatypes.network.PortDef:
+  derived_from: integer
+  constraints: 
+    - in_range: [ 1, 65535 ]
+
+tosca.datatypes.network.PortSpec: 
+  derived_from: tosca.datatypes.Root
+  properties:  
+    protocol: 
+      type: string
+      required: true
+      default: tcp
+      constraints:
+        - valid_values: [ udp, tcp, igmp ]
+    target:  
+      type: tosca.datatypes.network.PortDef
+    target_range:
+      type: range 
+      constraints:
+        - in_range: [ 1, 65535 ]
+    source:
+      type: tosca.datatypes.network.PortDef
+    source_range:
+      type: range
+      constraints:
+        - in_range: [ 1, 65535 ]
+
+tosca.datatypes.complexEntryTypeMapList: 
+  derived_from: tosca.datatypes.Root
+  properties: 
+    protocol: 
+      type: string
+      required: false
+    token_type: 
+      type: string
+      default: password
+    token: 
+      type: string
+    keys:
+      type: map
+      required: false
+      entry_schema:
+        type: tosca.datatypes.Credential
+    addresses:
+      type: list
+      entry_schema:
+        type: tosca.datatypes.Credential    
+    user:
+      type: string
+      required: false
diff --git a/catalog-be/src/test/resources/types/datatypes/derived3levelDataType.yml b/catalog-be/src/test/resources/types/datatypes/derived3levelDataType.yml
new file mode 100644
index 0000000..f185167
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/derived3levelDataType.yml
@@ -0,0 +1,37 @@
+mytypes.phonenumber:
+  description: my phone number datatype
+  properties:
+    countrycode:
+      type: integer
+    areacode:
+      type: integer
+    number:
+      type: integer
+      
+# define a new datatype that derives from existing type and extends it
+mytypes.phonenumber.extended:
+  derived_from: mytypes.phonenumber
+  description: custom phone number type that extends the basic phonenumber type
+  properties:
+    phone_description:
+      type: string
+      constraints:
+        - max_length: 128
+      
+      
+      
+      
+mytypes.phonenumber.extended.extended:
+  derived_from: mytypes.phonenumber.extended
+  description: custom phone number type that extends the basic phonenumber type
+  properties:
+    email:
+      type: string
+      constraints:
+        - max_length: 128
+    complex1:
+      type: mytypes.phonenumber.extended
+      constraints:
+        - max_length: 128
+            
+        
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/types/datatypes/derivedDataType.yml b/catalog-be/src/test/resources/types/datatypes/derivedDataType.yml
new file mode 100644
index 0000000..1c4ca88
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/derivedDataType.yml
@@ -0,0 +1,19 @@
+mytypes.phonenumber:
+  description: my phone number datatype
+  properties:
+    countrycode:
+      type: integer
+    areacode:
+      type: integer
+    number:
+      type: integer
+      
+# define a new datatype that derives from existing type and extends it
+mytypes.phonenumber.extended:
+  derived_from: mytypes.phonenumber
+  description: custom phone number type that extends the basic phonenumber type
+  properties:
+    phone_description:
+      type: string
+      constraints:
+        - max_length: 128
diff --git a/catalog-be/src/test/resources/types/datatypes/derivedDataTypeNoProperties.yml b/catalog-be/src/test/resources/types/datatypes/derivedDataTypeNoProperties.yml
new file mode 100644
index 0000000..2e6b359
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/derivedDataTypeNoProperties.yml
@@ -0,0 +1,15 @@
+mytypes.phonenumber:
+  description: my phone number datatype
+  properties:
+    countrycode:
+      type: integer
+    areacode:
+      type: integer
+    number:
+      type: integer
+      
+# define a new datatype that derives from existing type and extends it
+mytypes.phonenumber.extended:
+  derived_from: mytypes.phonenumber
+  description: custom phone number type that extends the basic phonenumber type
+      
diff --git a/catalog-be/src/test/resources/types/datatypes/derivedInvalidDataType.yml b/catalog-be/src/test/resources/types/datatypes/derivedInvalidDataType.yml
new file mode 100644
index 0000000..d76cc5f
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/derivedInvalidDataType.yml
@@ -0,0 +1,15 @@
+mytypes.phonenumber2:
+  description: my phone number datatype
+  properties:
+    countrycode:
+      type: integer
+    areacode:
+      type: integer
+    number:
+      type: integer
+      
+# define a new datatype that derives from existing type and extends it
+mytypes.phonenumber.extended:
+  derived_from: mytypes.phonenumber3
+  description: custom phone number type that extends the basic phonenumber type
+      
diff --git a/catalog-be/src/test/resources/types/datatypes/emptyDataType.yml b/catalog-be/src/test/resources/types/datatypes/emptyDataType.yml
new file mode 100644
index 0000000..6a0318e
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/emptyDataType.yml
@@ -0,0 +1,4 @@
+mytypes.phonenumber.empty:
+  description: my phone number datatype
+  properties:
+    
diff --git a/catalog-be/src/test/resources/types/datatypes/emptyDataTypeNoPropertiesTag.yml b/catalog-be/src/test/resources/types/datatypes/emptyDataTypeNoPropertiesTag.yml
new file mode 100644
index 0000000..933c14f
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/emptyDataTypeNoPropertiesTag.yml
@@ -0,0 +1,3 @@
+mytypes.phonenumber.empty:
+  description: my phone number datatype
+    
diff --git a/catalog-be/src/test/resources/types/datatypes/exitingPropertyAtAncestor.yml b/catalog-be/src/test/resources/types/datatypes/exitingPropertyAtAncestor.yml
new file mode 100644
index 0000000..0e46cc2
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/exitingPropertyAtAncestor.yml
@@ -0,0 +1,19 @@
+mytypes.phonenumber:
+  description: my phone number datatype
+  properties:
+    countrycode:
+      type: integer
+    areacode:
+      type: integer
+    number:
+      type: integer
+      
+# define a new datatype that derives from existing type and extends it
+mytypes.phonenumber.extended:
+  derived_from: mytypes.phonenumber
+  description: custom phone number type that extends the basic phonenumber type
+  properties:
+    areacode:
+      type: integer
+
+      
diff --git a/catalog-be/src/test/resources/types/datatypes/invalidDataType.yml b/catalog-be/src/test/resources/types/datatypes/invalidDataType.yml
new file mode 100644
index 0000000..d5ad5a9
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/invalidDataType.yml
@@ -0,0 +1 @@
+mytypes.phonenumber.empty
diff --git a/catalog-be/src/test/resources/types/datatypes/oneDataType.yml b/catalog-be/src/test/resources/types/datatypes/oneDataType.yml
new file mode 100644
index 0000000..114236f
--- /dev/null
+++ b/catalog-be/src/test/resources/types/datatypes/oneDataType.yml
@@ -0,0 +1,9 @@
+mytypes.phonenumber:
+  description: my phone number datatype
+  properties:
+    countrycode:
+      type: integer
+    areacode:
+      type: integer
+    number:
+      type: integer
diff --git a/catalog-be/src/test/resources/types/interfaceLifecycleTypes.yml b/catalog-be/src/test/resources/types/interfaceLifecycleTypes.yml
new file mode 100644
index 0000000..1b67118
--- /dev/null
+++ b/catalog-be/src/test/resources/types/interfaceLifecycleTypes.yml
@@ -0,0 +1,11 @@
+tosca.interfaces.node.lifecycle.Standard:
+  create:
+    description: Standard lifecycle create operation.
+  configure:
+    description: Standard lifecycle configure operation.
+  start:
+    description: Standard lifecycle start operation.
+  stop:
+    description: Standard lifecycle stop operation.
+  delete:
+    description: Standard lifecycle delete operation.
\ No newline at end of file
diff --git a/catalog-be/src/test/resources/types/interfaceLifecycleTypes.zip b/catalog-be/src/test/resources/types/interfaceLifecycleTypes.zip
new file mode 100644
index 0000000..9bcf93a
--- /dev/null
+++ b/catalog-be/src/test/resources/types/interfaceLifecycleTypes.zip
Binary files differ
diff --git a/catalog-be/src/test/resources/valid_vf.csar b/catalog-be/src/test/resources/valid_vf.csar
new file mode 100644
index 0000000..01bf159
--- /dev/null
+++ b/catalog-be/src/test/resources/valid_vf.csar
Binary files differ