diff options
265 files changed, 9866 insertions, 2247 deletions
diff --git a/.gitignore b/.gitignore index f3b07b8d9..48c5c1c21 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ env.properties .vagrant *~ .checkstyle +.DS_Store @@ -5,7 +5,7 @@ Responsible for the integration framework / automated tools, code and scripts, best practice guidance related to cross-project Continuous System Integration Testing (CSIT), and delivery of the ONAP project. -See https://wiki.open-o.org/view/Integration for additional details. +See https://wiki.onap.org/display/DW/Integration+Project for additional details. ## Sub-projects diff --git a/bootstrap/jenkins/vagrant/jjb/java-jobs.yaml b/bootstrap/jenkins/vagrant/jjb/java-jobs.yaml index 9662e83d3..cb1f94afb 100644 --- a/bootstrap/jenkins/vagrant/jjb/java-jobs.yaml +++ b/bootstrap/jenkins/vagrant/jjb/java-jobs.yaml @@ -21,6 +21,9 @@ - 'aai_aai-service': repo: 'aai/aai-service' pom: 'pom.xml' + - 'aai_babel': + repo: 'aai/babel' + pom: 'pom.xml' - 'aai_champ': repo: 'aai/champ' pom: 'pom.xml' @@ -237,9 +240,12 @@ - 'holmes_rule-management': repo: 'holmes/rule-management' pom: 'pom.xml' - - 'integration': + - 'integration_test_mocks_sniroemulator': repo: 'integration' - pom: 'pom.xml' + pom: 'test/mocks/sniroemulator/pom.xml' + - 'integration_version-manifest': + repo: 'integration' + pom: 'version-manifest/pom.xml' - 'modeling_toscaparsers_javatoscachecker': repo: 'modeling/toscaparsers' pom: 'javatoscachecker/pom.xml' @@ -273,6 +279,9 @@ - 'multicloud_openstack_vmware': repo: 'multicloud/openstack/vmware' pom: 'pom.xml' + - 'multicloud_openstack_windriver': + repo: 'multicloud/openstack/windriver' + pom: 'pom.xml' - 'ncomp_cdap': repo: 'ncomp/cdap' pom: 'pom.xml' @@ -357,9 +366,6 @@ - 'sdc_sdc-workflow-designer': repo: 'sdc/sdc-workflow-designer' pom: 'pom.xml' - - 'sdc_sdc_common': - repo: 'sdc/sdc_common' - pom: 'pom.xml' - 'sdnc_adaptors': repo: 'sdnc/adaptors' pom: 'pom.xml' @@ -393,6 +399,9 @@ - 'usecase-ui': repo: 'usecase-ui' pom: 'pom.xml' + - 'usecase-ui_server': + repo: 'usecase-ui/server' + pom: 'pom.xml' - 'vfc_gvnfm_vnflcm': repo: 'vfc/gvnfm/vnflcm' pom: 'pom.xml' @@ -423,21 +432,24 @@ - 'vfc_nfvo_resmanagement': repo: 'vfc/nfvo/resmanagement' pom: 'pom.xml' - - 'vfc_nfvo_wfengine_activiti-extension': - repo: 'vfc/nfvo/wfengine' - pom: 'activiti-extension/pom.xml' - - 'vfc_nfvo_wfengine_wfenginemgrservice': + - 'vfc_nfvo_wfengine': repo: 'vfc/nfvo/wfengine' - pom: 'wfenginemgrservice/pom.xml' - - 'vfc_nfvo_wfengine_wso2': - repo: 'vfc/nfvo/wfengine' - pom: 'wso2/pom.xml' + pom: 'pom.xml' - 'vid': repo: 'vid' pom: 'pom.xml' - 'vid_asdcclient': repo: 'vid/asdcclient' pom: 'pom.xml' + - 'vnfsdk_compliance_veslibrary_ves_clibrary_VESreporting_vFW': + repo: 'vnfsdk/compliance' + pom: 'veslibrary/ves_clibrary/VESreporting_vFW/pom.xml' + - 'vnfsdk_compliance_veslibrary_ves_clibrary_VESreporting_vLB': + repo: 'vnfsdk/compliance' + pom: 'veslibrary/ves_clibrary/VESreporting_vLB/pom.xml' + - 'vnfsdk_compliance_veslibrary_ves_javalibrary_evel_javalib2': + repo: 'vnfsdk/compliance' + pom: 'veslibrary/ves_javalibrary/evel_javalib2/pom.xml' - 'vnfsdk_functest': repo: 'vnfsdk/functest' pom: 'pom.xml' @@ -453,3 +465,27 @@ - 'vnfsdk_validation': repo: 'vnfsdk/validation' pom: 'pom.xml' + - 'vvp_cms': + repo: 'vvp/cms' + pom: 'pom.xml' + - 'vvp_engagementmgr': + repo: 'vvp/engagementmgr' + pom: 'pom.xml' + - 'vvp_gitlab': + repo: 'vvp/gitlab' + pom: 'pom.xml' + - 'vvp_image-scanner': + repo: 'vvp/image-scanner' + pom: 'pom.xml' + - 'vvp_jenkins': + repo: 'vvp/jenkins' + pom: 'pom.xml' + - 'vvp_portal': + repo: 'vvp/portal' + pom: 'pom.xml' + - 'vvp_postgresql': + repo: 'vvp/postgresql' + pom: 'pom.xml' + - 'vvp_test-engine': + repo: 'vvp/test-engine' + pom: 'pom.xml' diff --git a/bootstrap/vagrant-onap/.gitignore b/bootstrap/vagrant-onap/.gitignore index 446d1fb41..873bd8b4d 100644 --- a/bootstrap/vagrant-onap/.gitignore +++ b/bootstrap/vagrant-onap/.gitignore @@ -7,3 +7,6 @@ lib/files/proxyrc lib/files/sources.list openrc doc/build/ +etc/settings.yaml +tests/remaining_projects.txt +tests/installed-software* diff --git a/bootstrap/vagrant-onap/README.md b/bootstrap/vagrant-onap/README.md index c48190ad1..b0e1ee26b 100644 --- a/bootstrap/vagrant-onap/README.md +++ b/bootstrap/vagrant-onap/README.md @@ -1,7 +1,5 @@ # ONAP on Vagrant -[![Build Status](https://api.travis-ci.org/electrocucaracha/vagrant-onap.svg?branch=master)](https://api.travis-ci.org/electrocucaracha/vagrant-onap) - This vagrant project pretends to collect information about a way to deploy and build [ONAP project](https://www.onap.org/) into a development environment. @@ -57,6 +55,8 @@ current options include: | vfc | Virtual Function Controller | | multicloud | Multi Cloud | | ccsdk | Common Controller SDK | +| vnfsdk | VNF SDK | +| vvp | VNF Validation Program | | all_in_one | All ONAP services in a VM | | testing | Unit Test VM | diff --git a/bootstrap/vagrant-onap/Vagrantfile b/bootstrap/vagrant-onap/Vagrantfile index 800ed992e..2490b1c75 100644 --- a/bootstrap/vagrant-onap/Vagrantfile +++ b/bootstrap/vagrant-onap/Vagrantfile @@ -1,46 +1,42 @@ # -*- mode: ruby -*- # vi: set ft=ruby : - configuration = { # Generic parameters used across all ONAP components - 'public_net_id' => '00000000-0000-0000-0000-000000000000', 'key_name' => 'ecomp_key', 'pub_key' => '', 'nexus_repo' => 'https://nexus.onap.org/content/sites/raw', + 'nexus_repo_root' => 'https://nexus.onap.org', + 'nexus_url_snapshot' => 'https://nexus.onap.org/content/repositories/snapshots', 'nexus_docker_repo' => 'nexus3.onap.org:10001', 'nexus_username' => 'docker', 'nexus_password' => 'docker', 'dmaap_topic' => 'AUTO', 'artifacts_version' => '1.0.0', 'docker_version' => '1.0-STAGING-latest', - 'gerrit_branch' => 'master', -# Parameters for DCAE instantiation + # Parameters for DCAE instantiation 'dcae_zone' => 'iad4', 'dcae_state' => 'vi', 'openstack_tenant_id' => '', 'openstack_username' => '', 'openstack_api_key' => '', 'openstack_password' => '', - 'nexus_repo_root' => 'https://nexus.onap.org', - 'nexus_url_snapshot' => 'https://nexus.onap.org/content/repositories/snapshots', - 'gitlab_branch' => 'master', - 'build_image' => 'True', - 'pull_docker_image' => 'True', 'odl_version' => '0.5.3-Boron-SR3', + # Parameters for enabling features + 'build_image' => 'True', 'clone_repo' => 'True', 'compile_repo' => 'False', - 'enable_oparent' => 'True' + 'enable_oparent' => 'True', + 'skip_get_images' => 'False', + 'skip_install' => 'True' } - box = { :virtualbox => 'ubuntu/trusty64', :libvirt => 'sputnik13/trusty64', :openstack => nil } - nodes = [ { :name => "aai", @@ -215,9 +211,28 @@ nodes = [ :groups => ["individual"], :args => ['vid'], }, + { + :name => "vnfsdk", + :ips => ['10.252.0.16', "192.168.50.16"], + :macs => [], + :cpus => 2, + :cpu => "50", + :ram => 4 * 1024, + :groups => ["individual"], + :args => ['vnfsdk'], + }, + { + :name => "vvp", + :ips => ['10.252.0.17', "192.168.50.17"], + :macs => [], + :cpus => 2, + :cpu => "50", + :ram => 4 * 1024, + :groups => ["individual"], + :args => ['vvp'], + } ] - run_path = 'vagrant_utils/postinstall.sh' sdc_volume = 'vol1-sdc-data.vdi' @@ -234,17 +249,16 @@ if File.exist?(vd_conf) configuration.update(user_conf) end -#Set network interface +# Set network interface +net_interface = 'vboxnet0' is_windows = Gem.win_platform? if is_windows net_interface = 'VirtualBox Host-Only Ethernet Adapter #2' -else - net_interface = 'vboxnet0' end puts "[INFO] Net interface: #{net_interface}" -#If argument is given use it. Otherwise use Env: DEPLOY_MODE else use default +# If argument is given use it. Otherwise use Env: DEPLOY_MODE else use default requested_machine = ARGV[1] deploy_mode = ENV.fetch('DEPLOY_MODE', 'individual') @@ -254,14 +268,14 @@ if requested_machine != nil end end -#Catch the status of all machines +# Catch the status of all machines if ARGV[0] == 'status' || ARGV[0] == 'destroy' deploy_mode = 'NA' end puts "[INFO] Deploy Mode: #{deploy_mode}" -#In case of all-in-one or testing clean the nodes list +# In case of all-in-one or testing clean the nodes list case deploy_mode when 'all-in-one' nodes.select! do |node| @@ -296,6 +310,7 @@ Vagrant.configure("2") do |config| config.proxy.http = ENV['http_proxy'] config.proxy.https = ENV['https_proxy'] config.proxy.no_proxy = ENV['no_proxy'] + configuration['socks_proxy'] = ENV['socks_proxy'] end if Vagrant.has_plugin?('vagrant-vbguest') @@ -309,6 +324,7 @@ Vagrant.configure("2") do |config| raise 'vagrant-libvirt was installed but it requires to execute again' end end + if provider == :openstack config.ssh.username = 'ubuntu' if not Vagrant.has_plugin?('vagrant-openstack-provider') @@ -368,12 +384,21 @@ Vagrant.configure("2") do |config| if !is_windows nodeconfig.vm.synced_folder '~/.m2', '/root/.m2/', create: true end + # Set Network - nodeconfig.vm.network :private_network, ip: node[:ips][1] + nodeconfig.vm.network :private_network, + :adapter => 2, + :name => net_interface, + :ip => node[:ips][0] + + nodeconfig.vm.network :private_network, + :adapter => 3, + :ip => node[:ips][1], + :type => :static # Specific settings: - #Set Storage (For SDC or All-in-one) + # Set Storage (For SDC or All-in-one) if node[:name].include?("all-in-one") || node[:name].include?("sdc") nodeconfig.vm.provider "virtualbox" do |v| unless File.exist?(sdc_volume) @@ -386,8 +411,7 @@ Vagrant.configure("2") do |config| v.storage :file, path: sdc_volume, bus: 'sata', device: 'vdb', size: '2G' end end - - + if node[:name].include? "testing" nodeconfig.vm.synced_folder './tests', '/var/onap_tests/', create: true test_suite = ENV.fetch('TEST_SUITE', '*') @@ -395,9 +419,11 @@ Vagrant.configure("2") do |config| # Override variables run_path = 'vagrant_utils/unit_testing.sh' node[:args] = [test_suite, test_case] + else + configuration['skip_get_images'] = ENV.fetch('SKIP_GET_IMAGES', configuration['skip_get_images']) + configuration['skip_install'] = ENV.fetch('SKIP_INSTALL', configuration['skip_install']) end - if node[:name].include? "vfc" nodeconfig.vm.provision 'docker' end diff --git a/bootstrap/vagrant-onap/doc/source/features/configure_execution.rst b/bootstrap/vagrant-onap/doc/source/features/configure_execution.rst new file mode 100644 index 000000000..713c0e0fd --- /dev/null +++ b/bootstrap/vagrant-onap/doc/source/features/configure_execution.rst @@ -0,0 +1,73 @@ +======================= +Modify execution values +======================= + +In order to provide a flexible platform that adjusts to different developer +needs, it has been implemented two mechanism to configure the execution of this +project. + +Settings configuration file +--------------------------- + +The first mechanism refers to the process to replace default configuration +values through a settings configuration file. This file needs to be placed into +the *./etc* folder and named *settings.yaml*. It must contain the key/pair +configuration values that will be overriden. + +.. note:: + + There are sample files (e. g. settings.yaml.development and + settings.yaml.testing) placed into the *./etc* folder. Their purpose is to + provide a reference of different configurations. + +.. end + +Configuration values: + ++------------------+-------------------+---------------------------------------+ +| Key | Values | Description | ++==================+===================+=======================================+ +| build_image | "True" or "False" | Determines if the Docker image is | +| | | retrieved from public hub or built | +| | | from source code. | ++------------------+-------------------+---------------------------------------+ +| clone_repo | "True" or "False" | Determines if all the source code | +| | | repositories of a given component are | +| | | cloned locally. | ++------------------+-------------------+---------------------------------------+ +| compile_repo | "True" or "False" | Determines if all the source code | +| | | repositories of a given component are | +| | | going to be compiled. | ++------------------+-------------------+---------------------------------------+ +| enable_oparent | "True" or "False" | Determines if the OParent project | +| | | will be used during the maven | +| | | compilation. | ++------------------+-------------------+---------------------------------------+ +| skip_get_images | "True" or "False" | Determines if the process to build or | +| | | retrieve docker images of a given | +| | | component are going to skipped. | ++------------------+-------------------+---------------------------------------+ +| skip_install | "True" or "False" | Determines if the process to start | +| | | the services of a given component | +| | | will be started. | ++------------------+-------------------+---------------------------------------+ + +Parameters +---------- + +The **skip_get_images** and **skip_install** are the only two configuration +values that can be overriden using *-g* and *-i* respectively by the run scripts +(*./tools/run.sh* and *.\\tools\\Run.ps1*). + +.. note:: + + The script parameters take precendence of the configuration file. + +.. end + +.. code-block:: console + + $ ./tools/run.sh sdc -g + +.. end + diff --git a/bootstrap/vagrant-onap/doc/source/features/example_usage.rst b/bootstrap/vagrant-onap/doc/source/features/example_usage.rst new file mode 100644 index 000000000..293c543fa --- /dev/null +++ b/bootstrap/vagrant-onap/doc/source/features/example_usage.rst @@ -0,0 +1,151 @@ +================================================= +Example usage to bring up a developer environment +================================================= + +In the example, we will bring up a single ONAP component using the Vagrant ONAP +tool. + +There are multiple scenarios in which this tool can be made use of by a +developer, they usually fall in the following use cases. + +Use case 1: Use Vagrant ONAP to just clone project related source code +---------------------------------------------------------------------- + +In this use case, the developer needs just the source code of the project to work on. + +Since the Vagrant ONAP project supports building docker containers and compiling +source files, we need to first edit the settings.yaml file to add key value pairs +indicating we need to only clone repo and not build docker image or compile then. +By default, Vagrant ONAP clones repo, but to not run the build process and cloning +docker images, the following are required to be added in the settings file. + +.. code-block:: console + + skip_get_images: "True" + +.. end + +The reason this is done is because as mentioned in the +`configure execution docs. <https://git.onap.org/integration/tree/bootstrap/vagrant-onap/doc/source/features/configure_execution.rst>`, +the default values taken are: + +.. code-block:: console + + 'build_image' => 'True', + 'clone_repo' => 'True', + 'compile_repo' => 'False', + 'enable_oparent' => 'True', + 'skip_get_images' => 'False', + 'skip_install' => 'True' + +.. end + +We override them and skip_get_images is given precedence over build_image. + +Use case 2: Use Vagrant ONAP to clone project related source code and clone Docker Images +----------------------------------------------------------------------------------------- + +In this use case, the developer needs to clone docker images of the project to work on. + +For this case, we will edit the settings.yaml file to add key value pairs indicating we +need to clone repo and clone docker image from Nexus. + +.. code-block:: console + + build_images: "False" + compile_repo: "True" + skip_get_images: "False" + skip_install: "True" + +.. end + +Use case 3: Use Vagrant ONAP to clone project related source code and build Docker Images locally +------------------------------------------------------------------------------------------------- + +In this use case, the developer needs to build docker images of the project to work on. + +For this case, we will edit the settings.yaml file to add key value pairs indicating we need to +clone repo and build docker image locally and not fetch them from Nexus. + +.. code-block:: console + + build_images: "True" + compile_repo: "True" + skip_get_images: "False" + skip_install: "True" + +.. end + +Use case 4: Use Vagrant ONAP to clone project related source code and build Docker Images and start services +------------------------------------------------------------------------------------------------------------ + +In this use case, the developer needs to build docker images of the project he or +she wanted to work on and start the services running inside them. + +For this case, we will edit the settings.yaml file to add key value pairs indicating +we need to clone repo, compile repo, build docker image and run the image. + +.. code-block:: console + + build_images: "True" + compile_repo: "True" + skip_get_images: "False" + skip_install: "False" + +.. end + +Once the required changes to the settings file is added, we can use the run.sh +script in tools directory to setup the development environment. + +Example steps for setting up a development environment for VFC project. +----------------------------------------------------------------------- + +In this example we will be using vagrant ONAP to get all the source code of VFC +project and the developer can point the IDE to the cloned repo in the ./opt directory +and start the development process. + +.. code-block:: console + + $ ./tools/run.sh vfc + +.. end + +At the end of the setup process, all the VFC related source code will be present +in the vagrant-onap/opt/ directory. The developer can point an IDE to this directory +and start contributing. When the changes are done, the developer can SSH into the VM +running VFC and tests can be executed by running Maven for Java and Tox for Python +from the ~/opt/vfc directory. + +.. code-block:: console + + $ vagrant ssh vfc + $ cd ~/opt/vfc/<vfc-subrepo> + $ tox -e py27 + +.. end + +This way the tool helps the developer to clone repos of a particular project, +without having to manually search for repos and setup an environment. + +Also, if something gets messed up in the VM, the developer can tear down the VM +and spin a fresh one without having to lose the changes made to the source code since +the ./opt files are in sync from the host to the VM. + +.. code-block:: console + + $ vagrant destroy vfc + +.. end + +Testing +------- + +Use the run.sh script to test if the provisioning scripts run without errors. + +And example test to check the number of covered repositories with this tool. + +.. code-block:: console + + $ ./tools/run.sh testing -y -c coverity_repos -s functions + +.. end
\ No newline at end of file diff --git a/bootstrap/vagrant-onap/doc/source/features/features.rst b/bootstrap/vagrant-onap/doc/source/features/features.rst index 949969828..2f88c52e7 100644 --- a/bootstrap/vagrant-onap/doc/source/features/features.rst +++ b/bootstrap/vagrant-onap/doc/source/features/features.rst @@ -9,6 +9,8 @@ Advanced features openstack.rst consuming_scripts.rst + configure_execution.rst + example_usage.rst This chapter explains how to use ONAP on Vagrant Advanced features like different providers. diff --git a/bootstrap/vagrant-onap/etc/settings.yaml.development b/bootstrap/vagrant-onap/etc/settings.yaml.development new file mode 100644 index 000000000..594273b0d --- /dev/null +++ b/bootstrap/vagrant-onap/etc/settings.yaml.development @@ -0,0 +1,6 @@ +build_images: "True" +clone_repo: "True" +compile_repo: "False" +enable_oparent: "True" +skip_get_images: "False" +skip_install: "True" diff --git a/bootstrap/vagrant-onap/etc/settings.yaml.testing b/bootstrap/vagrant-onap/etc/settings.yaml.testing new file mode 100644 index 000000000..8beb4767d --- /dev/null +++ b/bootstrap/vagrant-onap/etc/settings.yaml.testing @@ -0,0 +1,6 @@ +build_images: "False" +clone_repo: "False" +compile_repo: "False" +enable_oparent: "False" +skip_get_images: "False" +skip_install: "False" diff --git a/bootstrap/vagrant-onap/lib/_onap_functions b/bootstrap/vagrant-onap/lib/_onap_functions index 18a465948..cedd6f0a3 100755 --- a/bootstrap/vagrant-onap/lib/_onap_functions +++ b/bootstrap/vagrant-onap/lib/_onap_functions @@ -12,7 +12,6 @@ function create_configuration_files { echo $docker_version > /opt/config/docker_version.txt } -# TODO(electrocucaracha): Determine how to use this behind a proxy # docker_openecomp_login() - Login to OpenECOMP Docker Hub function docker_openecomp_login { install_docker @@ -24,7 +23,7 @@ function pull_openecomp_image { local image=$1 local tag=$2 docker_openecomp_login - pull_docker_image $nexus_docker_repo/openecomp/${image}:$docker_version $tag + pull_docker_image $nexus_docker_repo/openecomp/${image}:${docker_version-latest} $tag docker logout } @@ -33,7 +32,7 @@ function pull_onap_image { local image=$1 local tag=$2 docker_openecomp_login - pull_docker_image $nexus_docker_repo/onap/${image}:$docker_version $tag + pull_docker_image $nexus_docker_repo/onap/${image}:${docker_version-latest} $tag docker logout } diff --git a/bootstrap/vagrant-onap/lib/aai b/bootstrap/vagrant-onap/lib/aai index 7d87870a0..d267e020d 100755 --- a/bootstrap/vagrant-onap/lib/aai +++ b/bootstrap/vagrant-onap/lib/aai @@ -6,7 +6,11 @@ source /var/onap/functions hbase_version=1.2.3 aai_src_folder=$git_src_folder/aai -aai_repos=("aai-common" "aai-config" "aai-data" "aai-service" "data-router" "logging-service" "model-loader" "resources" "rest-client" "router-core" "search-data-service" "test-config" "traversal" "sparky-fe" "sparky-be") +aai_repos=("aai/aai-common" "aai/aai-config" "aai/aai-data" "aai/aai-service" \ +"aai/babel" "aai/champ" "aai/data-router" "aai/esr-gui" "aai/esr-server" \ +"aai/gizmo" "aai/logging-service" "aai/model-loader" "aai/resources" \ +"aai/rest-client" "aai/router-core" "aai/search-data-service" \ +"aai/test-config" "aai/traversal" "aai/sparky-fe" "aai/sparky-be") # install_hadoop() - Function that installs Hadoop function install_hadoop { @@ -51,20 +55,20 @@ function install_haproxy { # clone_all_aai_repos() - Function that clones AAI source repo. function clone_all_aai_repos { - for dirc in ${aai_repos[@]}; do - clone_repo aai/$dirc $aai_src_folder/$dirc + for repo in ${aai_repos[@]}; do + clone_repo $repo $aai_src_folder${repo#*aai} done } # compile_aai_repos() - Function that compiles AAI source repo. function compile_aai_repos { - local repos=("aai-common" "resources" "logging-service" "traversal") + local repos=("aai/aai-common" "aai/resources" "aai/logging-service" "aai/traversal") if [[ "$compile_repo" == "True" ]]; then repos=("${aai_repos[@]}") fi - for dirc in ${repos[@]}; do - compile_src $aai_src_folder/$dirc + for repo in ${repos[@]}; do + compile_src $aai_src_folder${repo#*aai} done } @@ -199,5 +203,7 @@ function init_aai { install_ajsc_aai _wait_for_sdc - install_model_loader + if [[ "$skip_install" == "False" ]]; then + install_model_loader + fi } diff --git a/bootstrap/vagrant-onap/lib/appc b/bootstrap/vagrant-onap/lib/appc index 33980aeea..4d93f54e5 100755 --- a/bootstrap/vagrant-onap/lib/appc +++ b/bootstrap/vagrant-onap/lib/appc @@ -6,17 +6,20 @@ source /var/onap/sdnc source /var/onap/functions appc_src_folder=$git_src_folder/appc +appc_repos=("appc" "appc/deployment") # clone_all_appc_repos() - Function that clones APPC source repo. function clone_all_appc_repos { - clone_repo appc $appc_src_folder - clone_repo appc/deployment $appc_src_folder/deployment + for repo in ${appc_repos[@]}; do + clone_repo $repo $appc_src_folder${repo#*appc} + done } # compile_all_appc_repos() - Function that compiles APPC source repo. function compile_all_appc_repos { - compile_src $appc_src_folder - compile_src $appc_src_folder/deployment + for repo in ${appc_repos[@]}; do + compile_src $appc_src_folder${repo#*appc} + done } # _build_appc_images() - Function that creates APPC images from source code. @@ -52,6 +55,10 @@ function init_appc { fi fi - get_appc_images - install_appc + if [[ "$skip_get_images" == "False" ]]; then + get_appc_images + if [[ "$skip_install" == "False" ]]; then + install_appc + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/ccsdk b/bootstrap/vagrant-onap/lib/ccsdk index 6ea829fb5..03987ea7e 100755 --- a/bootstrap/vagrant-onap/lib/ccsdk +++ b/bootstrap/vagrant-onap/lib/ccsdk @@ -5,23 +5,24 @@ set -o xtrace source /var/onap/functions ccsdk_src_folder=$git_src_folder/ccsdk -ccsdk_repos=("dashboard" "distribution" "parent" "platform/blueprints" "platform/nbapi" "platform/plugins" "sli" "sli/adaptors" "sli/core" "sli/northbound" "sli/plugins" "storage" "storage/esaas" "storage/pgaas" "utils") +ccsdk_repos=("ccsdk" "ccsdk/dashboard" "ccsdk/distribution" "ccsdk/parent" +"ccsdk/platform/blueprints" "ccsdk/platform/nbapi" "ccsdk/platform/plugins" +"ccsdk/sli" "ccsdk/sli/adaptors" "ccsdk/sli/core" "ccsdk/sli/northbound" +"ccsdk/sli/plugins" "ccsdk/storage" "ccsdk/storage/esaas" "ccsdk/storage/pgaas" +"ccsdk/utils") # clone_ccsdk_repos() - Function that clones the CCSDK repositories function clone_ccsdk_repos { - clone_repo ccsdk $ccsdk_src_folder - - for dirc in ${ccsdk_repos[@]}; do - clone_repo ccsdk/$dirc $ccsdk_src_folder/$dirc + for repo in ${ccsdk_repos[@]}; do + clone_repo $repo $ccsdk_src_folder${repo#ccsdk} done } # compile_ccsdk_repos() - function compile_ccsdk_repos { - compile_src ccsdk $ccsdk_src_folder - - for dirc in ${ccsdk_repos[@]}; do - compile_src $ccsdk_src_folder/$dirc + install_package unzip + for repo in ${ccsdk_repos[@]}; do + compile_src $ccsdk_src_folder${repo#ccsdk} done } @@ -44,12 +45,6 @@ function get_ccsdk_images { pull_onap_image ccsdk-$image-image done fi - -} - -# install_ccsdk() - -function install_ccsdk { - echo "pass" } # init_ccsdk() - Function that initialize Multi Cloud services @@ -60,5 +55,4 @@ function init_ccsdk { compile_ccsdk_repos fi fi - install_ccsdk } diff --git a/bootstrap/vagrant-onap/lib/dcae b/bootstrap/vagrant-onap/lib/dcae index 43da9f59b..78ca8de06 100755 --- a/bootstrap/vagrant-onap/lib/dcae +++ b/bootstrap/vagrant-onap/lib/dcae @@ -5,8 +5,12 @@ set -o xtrace source /var/onap/functions dcae_src_folder=$git_src_folder/dcae -dcae_repos=("apod" "apod/analytics" "apod/buildtools" "apod/cdap" "collectors" "collectors/ves" "controller" "controller/analytics" "dcae-inventory" -"demo" "demo/startup" "demo/startup/aaf" "demo/startup/controller" "demo/startup/message-router" "dmaapbc" "operation" "operation/utils" "pgaas" "utils" "utils/buildtools") +dcae_repos=("dcae" "dcae/apod" "dcae/apod/analytics" "dcae/apod/buildtools" +"dcae/apod/cdap" "dcae/collectors" "dcae/collectors/ves" "dcae/controller" +"dcae/controller/analytics" "dcae/dcae-inventory" "dcae/demo" +"dcae/demo/startup" "dcae/demo/startup/aaf" "dcae/demo/startup/controller" +"dcae/demo/startup/message-router" "dcae/dmaapbc" "dcae/operation" +"dcae/operation/utils" "dcae/orch-dispatcher" "dcae/pgaas" "dcae/utils" "dcae/utils/buildtools") # _create_config_file() - Creates a configuration yaml file for the controller function _create_config_file { @@ -44,7 +48,7 @@ function _build_docker_image { install_docker pushd $src_folder - # TODO(electrocucaracha) Workaround for dmmapbc images + # NOTE: Workaround for dmmapbc images sed -i '/LocalKey/d' Dockerfile local docker_build="docker build -t $name -f ./Dockerfile ." if [ $http_proxy ]; then @@ -59,16 +63,15 @@ function _build_docker_image { # clone_all_dcae_repos() - Function that clones DCAE source repo. function clone_all_dcae_repos { - clone_repo dcae $dcae_src_folder - for dirc in ${dcae_repos[@]}; do - clone_repo dcae/$dirc $dcae_src_folder/$dirc + for repo in ${dcae_repos[@]}; do + clone_repo $repo $dcae_src_folder${repo#*dcae} done } # compile_all_dcae_repos() - Function that compiles DCAE source repo. function compile_all_dcae_repos { - for dirc in ${dcae_repos[@]}; do - compile_src $dcae_src_folder/$dirc + for repo in ${dcae_repos[@]}; do + compile_src $dcae_src_folder${repo#*dcae} done } @@ -128,6 +131,10 @@ function init_dcae { fi _create_config_file - get_dcae_images - install_dcae + if [[ "$skip_get_images" == "False" ]]; then + get_dcae_images + if [[ "$skip_install" == "False" ]]; then + install_dcae + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/functions b/bootstrap/vagrant-onap/lib/functions index 8fff0c2c4..02111fa2c 100755 --- a/bootstrap/vagrant-onap/lib/functions +++ b/bootstrap/vagrant-onap/lib/functions @@ -100,23 +100,31 @@ function install_maven { # _configure_docker_settings() - Configures Docker settings function _configure_docker_settings { + local docker_conf_backup=/tmp/docker.backup + local docker_conf=/etc/default/docker + local chameleonsocks_filename=chameleonsocks.sh + + cp $docker_conf $docker_conf_backup if [ $http_proxy ]; then - echo "export http_proxy=$http_proxy" >> /etc/default/docker + echo "export http_proxy=$http_proxy" >> $docker_conf fi if [ $https_proxy ]; then - echo "export https_proxy=$https_proxy" >> /etc/default/docker + echo "export https_proxy=$https_proxy" >> $docker_conf #If you have a socks proxy, then use that to connect to the nexus repo #via a redsocks container if [ $socks_proxy ]; then - wget https://raw.githubusercontent.com/crops/chameleonsocks/master/chameleonsocks.sh - chmod 755 chameleonsocks.sh + wget https://raw.githubusercontent.com/crops/chameleonsocks/master/$chameleonsocks_filename + chmod 755 $chameleonsocks_filename socks=$(echo $socks_proxy | sed -e "s/^.*\///" | sed -e "s/:.*$//") port=$(echo $socks_proxy | sed -e "s/^.*://") - PROXY=$socks PORT=$port ./chameleonsocks.sh --install + PROXY=$socks PORT=$port ./$chameleonsocks_filename --install + rm $chameleonsocks_filename + cp $docker_conf_backup $docker_conf fi fi + rm $docker_conf_backup - echo "DOCKER_OPTS=\"-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock\"" >> /etc/default/docker + echo "DOCKER_OPTS=\"-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock\"" >> $docker_conf usermod -a -G docker vagrant } diff --git a/bootstrap/vagrant-onap/lib/mr b/bootstrap/vagrant-onap/lib/mr index a137f73bb..f221817fa 100755 --- a/bootstrap/vagrant-onap/lib/mr +++ b/bootstrap/vagrant-onap/lib/mr @@ -31,6 +31,10 @@ function init_mr { if [[ "$clone_repo" == "True" ]]; then clone_mr_repos fi - get_mr_images - install_message_router + if [[ "$skip_get_images" == "False" ]]; then + get_mr_images + if [[ "$skip_install" == "False" ]]; then + install_message_router + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/mso b/bootstrap/vagrant-onap/lib/mso index 4b209062d..5439d991b 100755 --- a/bootstrap/vagrant-onap/lib/mso +++ b/bootstrap/vagrant-onap/lib/mso @@ -5,28 +5,25 @@ set -o xtrace source /var/onap/functions src_folder=$git_src_folder/mso -mso_repos=("chef-repo" "docker-config" "libs" "mso-config") +mso_repos=("mso" "mso/chef-repo" "mso/docker-config" "mso/libs" +"mso/mso-config") # clone_all_mso_repos() - Function that clones MSO source repo. function clone_all_mso_repos { - clone_repo mso $src_folder - - for dirc in ${mso_repos[@]}; do - clone_repo mso/$dirc $src_folder/$dirc + for repo in ${mso_repos[@]}; do + clone_repo $repo $src_folder${repo#*mso} done } # compile_all_mso_repos() - Function that compiles MSO source repo. function compile_all_mso_repos { - compile_src $src_folder - - for dirc in ${mso_repos[@]}; do - compile_src $src_folder/$dirc + for repo in ${mso_repos[@]}; do + compile_src $src_folder${repo#*mso} done } -# install_mso() - Installation of mso images -function install_mso { +# get_mso_images() - Function that retrieves or create MSO Docker images +function get_mso_images { if [[ "$build_image" == "True" ]]; then export GIT_NO_PROJECT=/opt/ compile_src $src_folder @@ -34,8 +31,8 @@ function install_mso { fi } -# install_mso_docker_config() - Download and install MSO Docker configuration project -function install_mso_docker_config { +# install_mso() - Install MSO Docker configuration project +function install_mso { MSO_ENCRYPTION_KEY=$(cat /opt/mso/docker-config/encryption.key) echo -n "$openstack_api_key" | openssl aes-128-ecb -e -K $MSO_ENCRYPTION_KEY -nosalt | xxd -c 256 -p > /opt/config/api_key.txt @@ -108,6 +105,10 @@ function init_mso { fi fi - install_mso - install_mso_docker_config + if [[ "$skip_get_images" == "False" ]]; then + get_mso_images + if [[ "$skip_install" == "False" ]]; then + install_mso + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/multicloud b/bootstrap/vagrant-onap/lib/multicloud index 1126d6146..b4a185aaf 100755 --- a/bootstrap/vagrant-onap/lib/multicloud +++ b/bootstrap/vagrant-onap/lib/multicloud @@ -5,26 +5,29 @@ set -o xtrace source /var/onap/functions multicloud_src_folder=$git_src_folder/multicloud -multicloud_repos=("azure" "framework" "openstack" "openstack/vmware" "openstack/windriver") +multicloud_repos=("multicloud" "multicloud/framework" "multicloud/openstack" \ +"multicloud/openstack/vmware" "multicloud/openstack/windriver" \ +"multicloud/azure") # clone_multicloud_repos() - Function that clones the Multi Cloud repositories function clone_multicloud_repos { - clone_repo multicloud $multicloud_src_folder - - for dirc in ${multicloud_repos[@]}; do - clone_repo multicloud/$dirc $multicloud_src_folder/$dirc + for repo in ${multicloud_repos[@]}; do + clone_repo $repo $multicloud_src_folder${repo#*multicloud} done } # compile_multicloud_repos() - function compile_multicloud_repos { - compile_src multicloud $multicloud_src_folder - - for dirc in ${multicloud_repos[@]}; do - compile_src $multicloud_src_folder/$dirc + for repo in ${multicloud_repos[@]}; do + compile_src $multicloud_src_folder${repo#*multicloud} done } +# get_multicloud_images() - +function get_multicloud_images { + echo "pass" +} + # install_multicloud() - function install_multicloud { echo "pass" @@ -38,5 +41,10 @@ function init_multicloud { compile_multicloud_repos fi fi - install_multicloud + if [[ "$skip_get_images" == "False" ]]; then + get_multicloud_images + if [[ "$skip_install" == "False" ]]; then + install_multicloud + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/policy b/bootstrap/vagrant-onap/lib/policy index ce3405614..be4cb2c18 100755 --- a/bootstrap/vagrant-onap/lib/policy +++ b/bootstrap/vagrant-onap/lib/policy @@ -5,19 +5,21 @@ set -o xtrace source /var/onap/functions policy_src_folder=$git_src_folder/policy -policy_repos=("api" "common" "docker" "drools-applications" "drools-pdp" "engine" "gui" "pap" "pdp") +policy_repos=("policy/api" "policy/common" "policy/docker" \ +"policy/drools-applications" "policy/drools-pdp" "policy/engine" \ +"policy/gui" "policy/pap" "policy/pdp") # clone_all_policy_repos() - Function that clones Policy source repo. function clone_all_policy_repos { - for dirc in ${policy_repos[@]}; do - clone_repo policy/$dirc $policy_src_folder/$dirc + for repo in ${policy_repos[@]}; do + clone_repo $repo $policy_src_folder${repo#*policy} done } # compile_all_policy_repos() - Function that compiles Policy source repo. function compile_all_policy_repos { - for dirc in ${policy_repos[@]}; do - compile_src $policy_src_folder/$dirc + for repo in ${policy_repos[@]}; do + compile_src $policy_src_folder${repo#*policy} done } @@ -65,6 +67,10 @@ function init_policy { fi fi - get_policy_images - install_policy + if [[ "$skip_get_images" == "False" ]]; then + get_policy_images + if [[ "$skip_install" == "False" ]]; then + install_policy + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/portal b/bootstrap/vagrant-onap/lib/portal index 998d6c075..b5e768b2c 100755 --- a/bootstrap/vagrant-onap/lib/portal +++ b/bootstrap/vagrant-onap/lib/portal @@ -5,25 +5,29 @@ set -o xtrace source /var/onap/functions portal_src_folder=$git_src_folder/portal -portal_repos=("sdk") +portal_repos=("portal" "portal/sdk" "ecompsdkos" "ui/dmaapbc") # clone_all_portal_repos() - Function that clones Portal source repo. function clone_all_portal_repos { - clone_repo portal $portal_src_folder - clone_repo ecompsdkos $portal_src_folder/ecompsdkos - clone_repo "ui/dmaapbc" $portal_src_folder/dmaapbc - - for dirc in ${portal_repos[@]}; do - clone_repo portal/$dirc $portal_src_folder/$dirc + for repo in ${portal_repos[@]}; do + if [[ "$repo" == "ui/dmaapbc" ]];then + prefix="ui" + else + prefix="portal" + fi + clone_repo $repo $portal_src_folder/${repo#*$prefix} done } # compile_all_portal_repos() - Function that compiles Portal source repo. function compile_all_portal_repos { - compile_src $portal_src_folder - - for dirc in ${portal_repos[@]}; do - compile_src $portal_src_folder/$dirc + for repo in ${portal_repos[@]}; do + if [[ "$repo" == "ui/dmaapbc" ]];then + prefix="ui" + else + prefix="portal" + fi + compile_src $portal_src_folder/${repo#*$prefix} done } @@ -67,6 +71,7 @@ function install_portal { install_package unzip unzip -o etc.zip -d /PROJECT/OpenSource/UbuntuEP/ + _install_mariadb install_docker_compose bash portal_vm_init.sh @@ -88,7 +93,11 @@ function init_portal { compile_all_portal_repos fi fi - get_portal_images - _install_mariadb - install_portal + + if [[ "$skip_get_images" == "False" ]]; then + get_portal_images + if [[ "$skip_install" == "False" ]]; then + install_portal + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/robot b/bootstrap/vagrant-onap/lib/robot index 34b431a54..ebcca6e6b 100755 --- a/bootstrap/vagrant-onap/lib/robot +++ b/bootstrap/vagrant-onap/lib/robot @@ -59,6 +59,11 @@ function init_robot { compile_robot_repos fi fi - get_robot_images - install_robot + + if [[ "$skip_get_images" == "False" ]]; then + get_robot_images + if [[ "$skip_install" == "False" ]]; then + install_robot + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/sdc b/bootstrap/vagrant-onap/lib/sdc index 9ec04b21b..a21e2a418 100644..100755 --- a/bootstrap/vagrant-onap/lib/sdc +++ b/bootstrap/vagrant-onap/lib/sdc @@ -5,7 +5,9 @@ set -o xtrace source /var/onap/functions sdc_src_folder=$git_src_folder/sdc -sdc_repos=("jtosca" "sdc-distribution-client" "sdc-docker-base" "sdc-titan-cassandra" "sdc-tosca" "sdc-vnfdesign" "sdc-workflow-designer" "sdc_common") +sdc_repos=("sdc" "sdc/jtosca" "sdc/sdc-distribution-client" +"sdc/sdc-docker-base" "sdc/sdc-titan-cassandra" "sdc/sdc-tosca" +"sdc/sdc-vnfdesign" "sdc/sdc-workflow-designer" "sdc/sdc_common") # _mount_external_partition() - Create partition and mount the external volume function _mount_external_partition { @@ -40,39 +42,32 @@ function _setup_docker_aliases { cat <<EOL > /root/.bash_aliases alias dcls='/data/scripts/docker_clean.sh \$1' alias dlog='/data/scripts/docker_login.sh \$1' -alias rund='/data/scripts/docker_run.sh' +alias drun='/data/scripts/docker_run.sh' alias health='/data/scripts/docker_health.sh' EOL } # clone_all_sdc_repos() - Function that clones SDC source repo. function clone_all_sdc_repos { - clone_repo sdc $sdc_src_folder - - for dirc in ${sdc_repos[@]}; do - clone_repo sdc/$dirc $sdc_src_folder/$dirc + for repo in ${sdc_repos[@]}; do + clone_repo $repo $sdc_src_folder${repo#*sdc} done } # compile_all_sdc_repos() - Function that compiles SDC source repo. function compile_all_sdc_repos { - compile_src sdc $sdc_src_folder - - for dirc in ${sdc_repos[@]}; do - compile_src $sdc_src_folder/$dirc + for repo in ${sdc_repos[@]}; do + compile_src $sdc_src_folder${repo#*sdc} done } # get_sdc_images() - Function that retrieves the SDC docker images function get_sdc_images { if [[ "$build_image" == "True" ]]; then - if [[ "$compile_repo" != "True" ]]; then - compile_src $sdc_src_folder - fi build_docker_image $sdc_src_folder/sdc-docker-base else for image in backend frontend elasticsearch kibana cassandra sanity; do - pull_openecomp_image openecomp/sdc-$image + pull_openecomp_image openecomp/sdc-$image done fi } @@ -86,8 +81,12 @@ function install_sdc { cp $sdc_src_folder/sdc-os-chef/environments/Template.json /data/environments cp $sdc_src_folder/sdc-os-chef/scripts/docker_run.sh /data/scripts cp $sdc_src_folder/sdc-os-chef/scripts/docker_health.sh /data/scripts + cp $sdc_src_folder/sdc-os-chef/scripts/docker_login.sh /data/scripts + cp $sdc_src_folder/sdc-os-chef/scripts/docker_clean.sh /data/scripts chmod +x /data/scripts/docker_run.sh chmod +x /data/scripts/docker_health.sh + chmod +x /data/scripts/docker_login.sh + chmod +x /data/scripts/docker_clean.sh cat /data/environments/Template.json | sed "s/yyy/"$IP_ADDRESS"/g" > /data/environments/$ENV_NAME.json sed -i "s/xxx/"$ENV_NAME"/g" /data/environments/$ENV_NAME.json @@ -95,11 +94,10 @@ function install_sdc { sed -i "s/\"fqdn\":.*/\"fqdn\": [\""$MR_IP_ADDR"\", \""$MR_IP_ADDR"\"]/g" /data/environments/$ENV_NAME.json install_docker - if [[ "$pull_docker_image" == "True" ]]; then - docker_openecomp_login - bash /data/scripts/docker_run.sh -e $ENV_NAME -r $docker_version -p $(echo $nexus_docker_repo | cut -d':' -f2) - else + if [[ "$skip_get_images" == "False" ]]; then bash /data/scripts/docker_run.sh -e $ENV_NAME -l + else + bash /data/scripts/docker_run.sh -e $ENV_NAME -r $docker_version -p $(echo $nexus_docker_repo | cut -d':' -f2) fi } @@ -112,7 +110,12 @@ function init_sdc { compile_all_sdc_repos fi fi - get_sdc_images - install_sdc + + if [[ "$skip_get_images" == "False" ]]; then + get_sdc_images + fi + if [[ "$skip_install" == "False" ]]; then + install_sdc + fi _setup_docker_aliases } diff --git a/bootstrap/vagrant-onap/lib/sdnc b/bootstrap/vagrant-onap/lib/sdnc index c6d013b79..5faca942e 100755 --- a/bootstrap/vagrant-onap/lib/sdnc +++ b/bootstrap/vagrant-onap/lib/sdnc @@ -6,22 +6,23 @@ source /var/onap/functions source /var/onap/ccsdk sdnc_src_folder=$git_src_folder/openecomp/sdnc -sdnc_repos=("adaptors" "architecture" "core" "features" "northbound" "oam" "parent" "plugins") +sdnc_repos=("sdnc/adaptors" "sdnc/architecture" "sdnc/core" "sdnc/features" \ +"sdnc/northbound" "sdnc/oam" "sdnc/parent" "sdnc/plugins") # clone_all_sdnc_repos() - Function that clones SDNC source repo. function clone_all_sdnc_repos { - for dirc in ${sdnc_repos[@]}; do - clone_repo sdnc/$dirc $sdnc_src_folder/$dirc + for repo in ${sdnc_repos[@]}; do + clone_repo $repo $sdnc_src_folder${repo#*sdnc} done } # compile_all_sdnc_repos() - Function that compiles SDNC source repo. function compile_all_sdnc_repos { - for dirc in ${sdnc_repos[@]}; do - if [[ "$dirc" == "core" ]]; then + for repo in ${sdnc_repos[@]}; do + if [[ "$repo" == "sdnc/core" ]]; then compile_src $sdnc_src_folder/core/rootpom fi - compile_src $sdnc_src_folder/$dirc + compile_src $sdnc_src_folder${repo#*sdnc} done } @@ -64,13 +65,18 @@ function install_sdnc { # init_sdnc() - Function that initialize SDNC services function init_sdnc { - start_ODL if [[ "$clone_repo" == "True" ]]; then clone_all_sdnc_repos if [[ "$compile_repo" == "True" ]]; then compile_all_sdnc_repos fi fi - get_sdnc_images - install_sdnc + + if [[ "$skip_get_images" == "False" ]]; then + get_sdnc_images + if [[ "$skip_install" == "False" ]]; then + start_ODL + install_sdnc + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/vfc b/bootstrap/vagrant-onap/lib/vfc index a87944879..fc26af282 100755 --- a/bootstrap/vagrant-onap/lib/vfc +++ b/bootstrap/vagrant-onap/lib/vfc @@ -5,17 +5,16 @@ set -o xtrace source /var/onap/functions vfc_src_folder=$git_src_folder/vfc -vfc_repos=("gvnfm" "gvnfm/vnflcm" "gvnfm/vnfmgr" "gvnfm/vnfres" "nfvo" \ -"nfvo/catalog" "nfvo/driver" "nfvo/driver/ems" "nfvo/driver/sfc" \ -"nfvo/driver/vnfm" "nfvo/driver/vnfm/gvnfm" "nfvo/driver/vnfm/svnfm" \ -"nfvo/lcm" "nfvo/resmanagement" "nfvo/wfengine") +vfc_repos=("vfc/gvnfm" "vfc/gvnfm/vnflcm" "vfc/gvnfm/vnfmgr" \ +"vfc/gvnfm/vnfres" "vfc/nfvo" "vfc/nfvo/catalog" "vfc/nfvo/driver" \ +"vfc/nfvo/driver/ems" "vfc/nfvo/driver/sfc" "vfc/nfvo/driver/vnfm" \ +"vfc/nfvo/driver/vnfm/gvnfm" "vfc/nfvo/driver/vnfm/svnfm" "vfc/nfvo/lcm" \ +"vfc/nfvo/resmanagement" "vfc/nfvo/wfengine") # clone_all_vfc_repos() - Function that clones VF-C source repo. function clone_all_vfc_repos { - clone_repo vfc $vfc_src_folder - - for dirc in ${vfc_repos[@]}; do - clone_repo vfc/$dirc $vfc_src_folder/$dirc + for repo in ${vfc_repos[@]}; do + clone_repo $repo $vfc_src_folder${repo#*vfc} done } @@ -106,6 +105,10 @@ function init_vfc { fi fi - get_vfc_images - install_vfc + if [[ "$skip_get_images" == "False" ]]; then + get_vfc_images + if [[ "$skip_install" == "False" ]]; then + install_vfc + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/vid b/bootstrap/vagrant-onap/lib/vid index 55f399ab0..f99fd6042 100755 --- a/bootstrap/vagrant-onap/lib/vid +++ b/bootstrap/vagrant-onap/lib/vid @@ -5,17 +5,20 @@ set -o xtrace source /var/onap/functions vid_src_folder=$git_src_folder/vid +vid_repos=("vid" "vid/asdcclient") # clone_all_vid_repos() - Function that clones VID source code. function clone_all_vid_repos { - clone_repo vid $vid_src_folder - clone_repo vid/asdcclient $vid_src_folder/asdcclient + for repo in ${vid_repos[@]}; do + clone_repo $repo $vid_src_folder${repo#*vid} + done } # compile_all_vid_repos() - Function that compiles VID source repo. function compile_all_vid_repos { - compile_src $vid_src_folder/asdcclient - compile_src $vid_src_folder + for repo in ${vid_repos[@]}; do + compile_src $vid_src_folder${repo#*vid} + done } # _build_vid_images() - Function that builds VID docker images @@ -56,6 +59,10 @@ function init_vid { fi fi - get_vid_images - install_vid + if [[ "$skip_get_images" == "False" ]]; then + get_vid_images + if [[ "$skip_install" == "False" ]]; then + install_vid + fi + fi } diff --git a/bootstrap/vagrant-onap/lib/vnfsdk b/bootstrap/vagrant-onap/lib/vnfsdk new file mode 100644 index 000000000..c23ed8581 --- /dev/null +++ b/bootstrap/vagrant-onap/lib/vnfsdk @@ -0,0 +1,66 @@ +#!/bin/bash + +set -o xtrace + +source /var/onap/functions + +vnfsdk_src_folder=$git_src_folder/vnfsdk +vnfsdk_repos=("vnfsdk/compliance" "vnfsdk/functest" "vnfsdk/lctest" "vnfsdk/model" "vnfsdk/pkgtools" "vnfsdk/refrepo" "vnfsdk/validation") + +# clone_all_vnfsdk_repos() - Function that clones vnfsdk source repo. +function clone_all_vnfsdk_repos { + for repo in ${vnfsdk_repos[@]}; do + clone_repo $repo $vnfsdk_src_folder${repo#*vnfsdk} + done +} + +# compile_all_vnfsdk_repos - Function that builds vnfsdk source repo +function compile_all_vnfsdk_repos { + for repo in ${vnfsdk_repos[@]}; do + compile_src $vnfsdk_src_folder${repo#*vnfsdk} + done +} + +# _build_vnfsdk_images() - Builds VNFSDK images from source code +function _build_vnfsdk_images { + install_package unzip + pushd $vnfsdk_src_folder/refrepo/vnfmarket-be/deployment/docker/docker-refrepo + build_docker_image . + popd +} + +# get_vnfsdk_images - Function that clones vnfsdk Docker images +function get_vnfsdk_images { + if [[ "$build_image" == "True" ]]; then + # TODO(sshank): Has errors building. + _build_vnfsdk_images + else + pull_docker_image refrepo:1.0-STAGING-latest + pull_docker_image refrepo:latest + fi +} + +# install_vnfsdk - Function that installs vnfsdk Docker images +function install_vnfsdk { + install_docker_compose + pushd $vnfsdk_src_folder/refrepo/vnfmarket-be/deployment/install + /opt/docker/docker-compose up -d + popd +} + +# init_vnfsdk() - Init VNFSDK services +function init_vnfsdk { + if [[ "$clone_repo" == "True" ]]; then + clone_all_vnfsdk_repos + if [[ "$compile_repo" == "True" ]]; then + compile_all_vnfsdk_repos + fi + fi + + if [[ "$skip_get_images" == "False" ]]; then + get_vnfsdk_images + if [[ "$skip_install" == "False" ]]; then + install_vnfsdk + fi + fi +} diff --git a/bootstrap/vagrant-onap/lib/vvp b/bootstrap/vagrant-onap/lib/vvp new file mode 100644 index 000000000..588f32b87 --- /dev/null +++ b/bootstrap/vagrant-onap/lib/vvp @@ -0,0 +1,59 @@ +#!/bin/bash + +set -o xtrace + +source /var/onap/functions + +vvp_src_folder=$git_src_folder/vvp +vvp_repos=("vvp/ansible-ice-bootstrap" "vvp/cms" "vvp/devkit" "vvp/documentation" "vvp/engagementmgr" "vvp/gitlab" "vvp/image-scanner" "vvp/jenkins" "vvp/portal" "vvp/postgresql" "vvp/test-engine" "vvp/validation-scripts") + +# clone_all_vvp_repos() - Function that clones vvp source repo. +function clone_all_vvp_repos { + for repo in ${vvp_repos[@]}; do + clone_repo $repo $vvp_src_folder${repo#*vvp} + done +} + +# compile_all_vvp_repos - Function that builds vvp source repo +function compile_all_vvp_repos { + for repo in ${vvp_repos[@]}; do + compile_src $vvp_src_folder${repo#*vvp} + done +} + +# _build_vvp_images() - Builds VNFSDK images from source code +function _build_vvp_images { + echo "pass" +} + +# get_vvp_images - Function that clones vvp Docker images +function get_vvp_images { + if [[ "$build_image" == "True" ]]; then + _build_vvp_images + else + pull_docker_image refrepo:1.0-STAGING-latest + pull_docker_image refrepo:latest + fi +} + +# install_vvp - Function that installs vvp Docker images +function install_vvp { + echo "pass" +} + +# init_vvp() - Init VNFSDK services +function init_vvp { + if [[ "$clone_repo" == "True" ]]; then + clone_all_vvp_repos + if [[ "$compile_repo" == "True" ]]; then + compile_all_vvp_repos + fi + fi + + if [[ "$skip_get_images" == "False" ]]; then + get_vvp_images + if [[ "$skip_install" == "False" ]]; then + install_vvp + fi + fi +} diff --git a/bootstrap/vagrant-onap/tests/_test_base b/bootstrap/vagrant-onap/tests/_test_base index 155de98bb..7d0415a44 100644 --- a/bootstrap/vagrant-onap/tests/_test_base +++ b/bootstrap/vagrant-onap/tests/_test_base @@ -15,6 +15,9 @@ function main { echo "ok $((i+1)) - test_${covered_functions[$i]}" # Teardown process + if ! is_package_installed docker-ce; then + docker images -q | xargs docker rmi -f + fi dpkg --get-selections > installed-software_new sort -o installed-software_new installed-software_new apt-get purge -y -qq $(comm -3 installed-software installed-software_new | awk '{print $1}') diff --git a/bootstrap/vagrant-onap/tests/projects.txt b/bootstrap/vagrant-onap/tests/projects.txt new file mode 100644 index 000000000..0aba508c9 --- /dev/null +++ b/bootstrap/vagrant-onap/tests/projects.txt @@ -0,0 +1,209 @@ +aaf/authz +aaf/cadi +aaf/inno +aaf/luaplugin +aai/aai-common +aai/aai-config +aai/aai-data +aai/aai-service +aai/babel +aai/champ +aai/data-router +aai/esr-gui +aai/esr-server +aai/gizmo +aai/logging-service +aai/model-loader +aai/resources +aai/rest-client +aai/router-core +aai/search-data-service +aai/sparky-be +aai/sparky-fe +aai/test-config +aai/traversal +appc +appc/deployment +ccsdk/dashboard +ccsdk/distribution +ccsdk/parent +ccsdk/platform/blueprints +ccsdk/platform/nbapi +ccsdk/platform/plugins +ccsdk/sli/adaptors +ccsdk/sli/core +ccsdk/sli/northbound +ccsdk/sli/plugins +ccsdk/storage/esaas +ccsdk/storage/pgaas +ccsdk/utils +ci-management +clamp +cli +dcae +dcae/apod +dcae/apod/analytics +dcae/apod/buildtools +dcae/apod/cdap +dcae/collectors +dcae/collectors/ves +dcae/controller +dcae/controller/analytics +dcae/dcae-inventory +dcae/demo +dcae/demo/startup +dcae/demo/startup/aaf +dcae/demo/startup/controller +dcae/demo/startup/message-router +dcae/dmaapbc +dcae/operation +dcae/operation/utils +dcae/orch-dispatcher +dcae/pgaas +dcae/utils +dcae/utils/buildtools +dcaegen2 +dcaegen2/analytics +dcaegen2/analytics/tca +dcaegen2/collectors +dcaegen2/collectors/snmptrap +dcaegen2/collectors/ves +dcaegen2/deployments +dcaegen2/platform +dcaegen2/platform/blueprints +dcaegen2/platform/cdapbroker +dcaegen2/platform/cli +dcaegen2/platform/configbinding +dcaegen2/platform/deployment-handler +dcaegen2/platform/inventory-api +dcaegen2/platform/plugins +dcaegen2/platform/policy-handler +dcaegen2/platform/registrator +dcaegen2/platform/servicechange-handler +dcaegen2/utils +demo +dmaap/buscontroller +dmaap/datarouter +dmaap/dbcapi +dmaap/messagerouter/dmaapclient +dmaap/messagerouter/messageservice +dmaap/messagerouter/mirroragent +dmaap/messagerouter/msgrtr +doc +doc/tools +ecompsdkos +externalapi/nbi +holmes/common +holmes/dsa +holmes/engine-management +holmes/rule-management +integration +logging-analytics +modeling/modelspec +modeling/toscaparsers +msb/apigateway +msb/discovery +msb/java-sdk +msb/swagger-sdk +mso +mso/chef-repo +mso/docker-config +mso/libs +mso/mso-config +multicloud/azure +multicloud/framework +multicloud/openstack +multicloud/openstack/vmware +multicloud/openstack/windriver +ncomp +ncomp/cdap +ncomp/core +ncomp/docker +ncomp/maven +ncomp/openstack +ncomp/sirius +ncomp/sirius/manager +ncomp/utils +oom +oom/registrator +oparent +optf/cmso +optf/has +optf/osdf +policy/api +policy/common +policy/docker +policy/drools-applications +policy/drools-pdp +policy/engine +policy/gui +policy/pap +policy/pdp +portal +portal/sdk +sdc +sdc/jtosca +sdc/sdc-distribution-client +sdc/sdc-docker-base +sdc/sdc-titan-cassandra +sdc/sdc-tosca +sdc/sdc-workflow-designer +sdnc/adaptors +sdnc/architecture +sdnc/core +sdnc/features +sdnc/northbound +sdnc/oam +sdnc/parent +sdnc/plugins +so +so/chef-repo +so/docker-config +so/libs +so/so-config +testsuite +testsuite/heatbridge +testsuite/properties +testsuite/python-testing-utils +ui +ui/dmaapbc +university +usecase-ui +usecase-ui/server +vfc/gvnfm/vnflcm +vfc/gvnfm/vnfmgr +vfc/gvnfm/vnfres +vfc/nfvo/catalog +vfc/nfvo/driver/ems +vfc/nfvo/driver/sfc +vfc/nfvo/driver/vnfm/gvnfm +vfc/nfvo/driver/vnfm/svnfm +vfc/nfvo/lcm +vfc/nfvo/resmanagement +vfc/nfvo/wfengine +vid +vid/asdcclient +vnfrqts/epics +vnfrqts/guidelines +vnfrqts/requirements +vnfrqts/testcases +vnfrqts/usecases +vnfsdk/compliance +vnfsdk/functest +vnfsdk/lctest +vnfsdk/model +vnfsdk/pkgtools +vnfsdk/refrepo +vnfsdk/validation +vvp/ansible-ice-bootstrap +vvp/cms +vvp/devkit +vvp/documentation +vvp/engagementmgr +vvp/gitlab +vvp/image-scanner +vvp/jenkins +vvp/portal +vvp/postgresql +vvp/test-engine +vvp/validation-scripts diff --git a/bootstrap/vagrant-onap/tests/test_aai b/bootstrap/vagrant-onap/tests/test_aai index 5ff62c156..10777d678 100644 --- a/bootstrap/vagrant-onap/tests/test_aai +++ b/bootstrap/vagrant-onap/tests/test_aai @@ -8,11 +8,6 @@ covered_functions=( "install_hadoop" "install_haproxy" "clone_all_aai_repos" "compile_aai_repos" "setup_titan" "install_hbase" "install_ajsc_aai" "install_model_loader" ) -# TODO(electrocucaracha): Remove/Modify functions that doesn't support proxy settings -if [ -z $http_proxy ] & [ -z $https_proxy ]; then - covered_functions=(${covered_functions[@]} "install_hbase") -fi - # test_install_hadoop() - Verify that Hadoop is downloaded and started properly function test_install_hadoop { install_hadoop @@ -39,7 +34,12 @@ function test_clone_all_aai_repos { asserts_file_exist $aai_src_folder/aai-config/cookbooks/aai-resources/runlist-aai-resources.json asserts_file_exist $aai_src_folder/aai-data/environments/solo.json asserts_file_exist $aai_src_folder/aai-service/pom.xml + asserts_file_exist $aai_src_folder/babel/README.md + asserts_file_exist $aai_src_folder/champ/pom.xml asserts_file_exist $aai_src_folder/data-router/pom.xml + asserts_file_exist $aai_src_folder/esr-gui/pom.xml + asserts_file_exist $aai_src_folder/esr-server/pom.xml + asserts_file_exist $aai_src_folder/gizmo/pom.xml asserts_file_exist $aai_src_folder/logging-service/pom.xml asserts_file_exist $aai_src_folder/model-loader/pom.xml asserts_file_exist $aai_src_folder/resources/pom.xml @@ -57,14 +57,13 @@ function test_compile_aai_repos { clone_all_aai_repos compile_aai_repos - asserts_file_exist $aai_src_folder/aai-common/aai-annotations/target/aai-annotations-1.1.0-SNAPSHOT.jar - asserts_file_exist $aai_src_folder/aai-common/aai-auth/target/aai-auth-1.1.0-SNAPSHOT.jar - asserts_file_exist $aai_src_folder/aai-common/aai-core/target/aai-core-1.1.0-SNAPSHOT.jar - asserts_file_exist $aai_src_folder/aai-common/aai-schema/target/aai-schema-1.1.0-SNAPSHOT.jar + for common in annotations auth core schema utils; do + asserts_file_exist $aai_src_folder/aai-common/aai-$common/target/aai-$common-1.1.0-SNAPSHOT.jar + done - asserts_file_exist $aai_src_folder/logging-service/common-logging/target/common-logging-1.1.0-SNAPSHOT.jar - asserts_file_exist $aai_src_folder/logging-service/eelf-logging/target/eelf-logging-1.1.0-SNAPSHOT.jar - asserts_file_exist $aai_src_folder/logging-service/logging-api/target/logging-api-1.1.0-SNAPSHOT.jar + for service in common-logging eelf-logging logging-api; do + asserts_file_exist $aai_src_folder/logging-service/$service/target/$service-1.1.0-SNAPSHOT.jar + done asserts_file_exist $aai_src_folder/resources/aai-resources/target/aai-resources.jar asserts_file_exist $aai_src_folder/traversal/aai-traversal/target/traversal.jar diff --git a/bootstrap/vagrant-onap/tests/test_ccsdk b/bootstrap/vagrant-onap/tests/test_ccsdk index 2d2b87a54..81bdd4877 100644 --- a/bootstrap/vagrant-onap/tests/test_ccsdk +++ b/bootstrap/vagrant-onap/tests/test_ccsdk @@ -27,13 +27,13 @@ function test_clone_ccsdk_repos { } # test_compile_ccsdk_repos() - Verify the compilation of CCSDK repositories -function compile_ccsdk_repos { +function test_compile_ccsdk_repos { clone_ccsdk_repos compile_ccsdk_repos - asserts_file_exist $ccsdk_src_folder/dashboard/oom-app-common/target/oom-app-common-1.1.0-SNAPSHOT.jar - asserts_file_exist $ccsdk_src_folder/dashboard/oom-app-os/target/oom-app-os-1.1.0-SNAPSHOT.war - asserts_file_exist $ccsdk_src_folder/dashboard/oom-app-overlay/target/oom-app-overlay-1.1.0-SNAPSHOT.war + asserts_file_exist $ccsdk_src_folder/dashboard/ccsdk-app-common/target/ccsdk-app-common-1.1.0-SNAPSHOT.jar + asserts_file_exist $ccsdk_src_folder/dashboard/ccsdk-app-os/target/ccsdk-app-os-1.1.0-SNAPSHOT.war + asserts_file_exist $ccsdk_src_folder/dashboard/ccsdk-app-overlay/target/ccsdk-app-overlay-1.1.0-SNAPSHOT.war asserts_file_exist $ccsdk_src_folder/distribution/dgbuilder/target/dgbuilder.0.1.0-SNAPSHOT.zip asserts_file_exist $ccsdk_src_folder/distribution/platform-logic/installer/target/platform-logic-installer-0.1.0-SNAPSHOT.zip asserts_file_exist $ccsdk_src_folder/platform/nbapi/target/commonnbapi-0.0.3.war diff --git a/bootstrap/vagrant-onap/tests/test_dcae b/bootstrap/vagrant-onap/tests/test_dcae index 104cadd12..c6887cd78 100644 --- a/bootstrap/vagrant-onap/tests/test_dcae +++ b/bootstrap/vagrant-onap/tests/test_dcae @@ -28,6 +28,7 @@ function test_clone_all_dcae_repos { asserts_file_exist $dcae_src_folder/dmaapbc/pom.xml asserts_file_exist $dcae_src_folder/operation/README.md asserts_file_exist $dcae_src_folder/operation/utils/pom.xml + asserts_file_exist $dcae_src_folder/orch-dispatcher/LICENSE.txt asserts_file_exist $dcae_src_folder/pgaas/LICENSE.txt asserts_file_exist $dcae_src_folder/utils/README.md asserts_file_exist $dcae_src_folder/utils/buildtools/LICENSE.txt diff --git a/bootstrap/vagrant-onap/tests/test_functions b/bootstrap/vagrant-onap/tests/test_functions index 17a66313a..3ab5828cb 100644 --- a/bootstrap/vagrant-onap/tests/test_functions +++ b/bootstrap/vagrant-onap/tests/test_functions @@ -7,14 +7,10 @@ covered_functions=( "create_configuration_files" "clone_repo" "install_dev_tools" "configure_bind" "install_java" "install_maven" "install_nodejs" "install_python" "install_docker" "pull_docker_image" "install_docker_compose" "configure_service" -"start_ODL" "compile_src" "build_docker_image" +"start_ODL" "compile_src" "build_docker_image" "docker_openecomp_login" +"pull_openecomp_image" "pull_onap_image" "coverity_repos" ) -# TODO(electrocucaracha): Remove/Modify functions that doesn't support proxy settings -if [ -z $http_proxy ] & [ -z $https_proxy ]; then - covered_functions=(${covered_functions[@]} "docker_openecomp_login" "pull_openecomp_image") -fi - # test_create_configuration_files() - Verify the creation of a configuration files function test_create_configuration_files { create_configuration_files @@ -33,14 +29,22 @@ function test_docker_openecomp_login { docker_openecomp_login } -# test_pull_openecomp_image() - Verify the addition of a OpenECOMP container image +# test_pull_openecomp_image() - Verify the OpenECOMP container image pulling process function test_pull_openecomp_image { - pull_openecomp_image portalapps ep:1610-1 + local image_name=portal-apps + unset docker_version + pull_openecomp_image $image_name - asserts_installed_package docker-ce - asserts_image ep:1610-1 + asserts_image $nexus_docker_repo/openecomp/$image_name +} - docker rmi -f ep:1610-1 +# test_pull_onap_image() - Verify the ONAP cointainer pulling process +function test_pull_onap_image { + local image_name=portal-apps + unset docker_version + pull_onap_image $image_name + + asserts_image $nexus_docker_repo/onap/$image_name } # test_clone_repo() - Verify cloning and pulling source code from repositories @@ -117,8 +121,6 @@ function test_pull_docker_image { pull_docker_image $image asserts_image $image - - docker rmi -f $image } # test_install_docker_compose() - Verify the correct installation of Docker Compose tool @@ -161,8 +163,32 @@ function test_build_docker_image { build_docker_image $git_src_folder/ccsdk/distribution/ubuntu docker asserts_image onap/ccsdk-ubuntu-image +} - docker rmi -f onap/ccsdk-ubuntu-image +# test_coverity_repos() - Verify that all the repos are covered by scripts +function test_coverity_repos { + # Get repositories list from source code files + repos_list=() + for module in $( stat -c "%F %n" /var/onap/* | grep -v "_\|functions\|commons\|files" | cut -d' ' -f 3-); do + source $module + module_repo_list=$(eval echo \${$(basename $module)_repos[@]}) + repos_list=(${repos_list[@]} ${module_repo_list[@]}) + done + + pushd /var/onap_tests/ + cp projects.txt remaining_projects.txt + for covered_repo in "${repos_list[@]}"; do + sed -i '/^'${covered_repo//\//\\/}'$/d' remaining_projects.txt + done + + threshold=75 + num_projects=$(wc -l < projects.txt) + num_remaining_projects=$(wc -l < remaining_projects.txt) + coverage=`echo "scale=2; 100-($num_remaining_projects/$num_projects*100)" | bc | cut -d . -f 1` + if [ $coverage -lt $threshold ]; then + raise_error "There are repositories that are not covered by scripts" + fi + popd } if [ "$1" != '*' ]; then diff --git a/bootstrap/vagrant-onap/tests/test_mso b/bootstrap/vagrant-onap/tests/test_mso index cb7b014dc..deea7bbf8 100644 --- a/bootstrap/vagrant-onap/tests/test_mso +++ b/bootstrap/vagrant-onap/tests/test_mso @@ -4,7 +4,7 @@ source /var/onap_tests/_test_base source /var/onap/mso covered_functions=( -"clone_all_mso_repos" "compile_all_mso_repos" "install_mso" "install_mso_docker_config" +"clone_all_mso_repos" "compile_all_mso_repos" "get_mso_images" "install_mso" ) # test_clone_all_mso_repos() - Verify the source code retrieve of MSO project @@ -40,8 +40,8 @@ function test_compile_all_mso_repos { asserts_file_exist $src_folder/libs/swift-model/target/swift-model-1.1.0-SNAPSHOT.jar } -# test_install_mso() - Verify the creation of MSO Docker images -function test_install_mso { +# test_get_mso_images() - Verify the creation of MSO Docker images +function test_get_mso_images { clone_all_mso_repos install_mso @@ -50,8 +50,8 @@ function test_install_mso { done } -# test_install_mso_docker_config - Verify the execution of MSO Docker images -function test_install_mso_docker_config { +# test_install_mso - Verify the execution of MSO Docker images +function test_install_mso { clone_all_mso_repos install_mso install_mso_docker_config diff --git a/bootstrap/vagrant-onap/tests/test_multicloud b/bootstrap/vagrant-onap/tests/test_multicloud index 3d60533f7..b0b674894 100644 --- a/bootstrap/vagrant-onap/tests/test_multicloud +++ b/bootstrap/vagrant-onap/tests/test_multicloud @@ -4,16 +4,19 @@ source /var/onap_tests/_test_base source /var/onap/multicloud covered_functions=( -"clone_multicloud_repos" "compile_multicloud_repos" "install_multicloud" +"clone_multicloud_repos" "compile_multicloud_repos" "get_multicloud_images" "install_multicloud" ) # test_clone_multicloud_repos() - Verify that Multi Cloud repositories are cloned properly function test_clone_multicloud_repos { clone_multicloud_repos - asserts_file_exist $multicloud_src_folder/framework/multivimbroker/pom.xml + #asserts_file_exist $multicloud_src_folder/ + asserts_file_exist $multicloud_src_folder/framework/pom.xml asserts_file_exist $multicloud_src_folder/openstack/pom.xml asserts_file_exist $multicloud_src_folder/openstack/vmware/pom.xml + asserts_file_exist $multicloud_src_folder/openstack/windriver/pom.xml + #asserts_file_exist $multicloud_src_folder/azure/ } # test_compile_multicloud_repos() - @@ -22,11 +25,20 @@ function test_compile_multicloud_repos { compile_multicloud_repos asserts_file_exist $multicloud_src_folder/openstack/newton/target/multicloud-openstack-newton-1.0.0-SNAPSHOT.zip + asserts_file_exist $multicloud_src_folder/openstack/ocata/target/multicloud-openstack-ocata-1.0.0-SNAPSHOT.zip + asserts_file_exist $multicloud_src_folder/openstack/windriver/target/multicloud-openstack-windriver-1.0.0-SNAPSHOT.zip +} + +# test_get_multicloud_images() - +function test_get_multicloud_images { + clone_multicloud_repos + get_multicloud_images } # test_install_multicloud() - Verify the built and start of Multi Cloud services function test_install_multicloud { clone_multicloud_repos + get_multicloud_images install_multicloud } diff --git a/bootstrap/vagrant-onap/tests/test_policy b/bootstrap/vagrant-onap/tests/test_policy index 0c544cd7d..08231fc7a 100644 --- a/bootstrap/vagrant-onap/tests/test_policy +++ b/bootstrap/vagrant-onap/tests/test_policy @@ -49,8 +49,7 @@ function test_compile_all_policy_repos { done asserts_file_exist $policy_src_folder/drools-applications/controlloop/packages/basex/target/basex-1.1.0-SNAPSHOT.tar.gz asserts_file_exist $policy_src_folder/drools-applications/controlloop/templates/template.demo/target/template.demo-1.1.0-SNAPSHOT.jar - asserts_file_exist $policy_src_folder/drools-applications/controlloop/templates/template.demo.v1.0.0/archetype-cl-legacy/target/archetype-cl-legacy-1.1.0-SNAPSHOT.jar - asserts_file_exist $policy_src_folder/drools-applications/controlloop/templates/template.demo.v1.0.0/template.demo/target/demo-1.1.0-SNAPSHOT.jar + asserts_file_exist $policy_src_folder/drools-applications/controlloop/templates/template.demo/target/template.demo-1.1.0-SNAPSHOT.jar for feature in eelf healthcheck session-persistence; do asserts_file_exist $policy_src_folder/drools-pdp/feature-$feature/target/feature-$feature-1.1.0-SNAPSHOT.jar done diff --git a/bootstrap/vagrant-onap/tests/test_sdnc b/bootstrap/vagrant-onap/tests/test_sdnc index ddc1d9c6b..7b54749dd 100644 --- a/bootstrap/vagrant-onap/tests/test_sdnc +++ b/bootstrap/vagrant-onap/tests/test_sdnc @@ -12,12 +12,12 @@ function test_clone_all_sdnc_repos { clone_all_sdnc_repos asserts_file_exist $sdnc_src_folder/adaptors/pom.xml - # asserts_file_exist $sdnc_src_folder/architecture/pom.xml + asserts_file_exist $sdnc_src_folder/architecture/docs/index.rst asserts_file_exist $sdnc_src_folder/core/pom.xml - # asserts_file_exist $sdnc_src_folder/features/pom.xml + asserts_file_exist $sdnc_src_folder/features/docs/index.rst asserts_file_exist $sdnc_src_folder/northbound/pom.xml asserts_file_exist $sdnc_src_folder/oam/pom.xml - # asserts_file_exist $sdnc_src_folder/parent/pom.xml + asserts_file_exist $sdnc_src_folder/parent/docs/index.rst asserts_file_exist $sdnc_src_folder/plugins/pom.xml } @@ -27,19 +27,12 @@ function test_compile_all_sdnc_repos { compile_all_sdnc_repos for component in generic-resource-api vnfapi vnftools; do - if [[ "$component" != "generic-resource-api" ]]; then - if [[ "$component" == "vnfapi" ]]; then - asserts_file_exist $sdnc_src_folder/northbound/vnfapi/model/target/vnfapi-model-1.2.0-SNAPSHOT.jar - fi - asserts_file_exist $sdnc_src_folder/northbound/$component/installer/target/sdnc-$component-1.2.0-SNAPSHOT-installer.zip - asserts_file_exist $sdnc_src_folder/northbound/$component/features/target/$component-features-1.2.0-SNAPSHOT.jar - asserts_file_exist $sdnc_src_folder/northbound/$component/provider/target/$component-provider-1.2.0-SNAPSHOT.jar - else - asserts_file_exist $sdnc_src_folder/northbound/generic-resource-api/features/target/generic-resource-api.features-1.2.0-SNAPSHOT.jar - asserts_file_exist $sdnc_src_folder/northbound/generic-resource-api/installer/target/sdnc-generic-resources-api-1.2.0-SNAPSHOT-installer.zip - asserts_file_exist $sdnc_src_folder/northbound/generic-resource-api/model/target/generic-resource-api.model-1.2.0-SNAPSHOT.jar - asserts_file_exist $sdnc_src_folder/northbound/generic-resource-api/provider/target/generic-resource-api.provider-1.2.0-SNAPSHOT.jar + if [[ "$component" == "vnfapi" ]]; then + asserts_file_exist $sdnc_src_folder/northbound/vnfapi/model/target/vnfapi-model-1.2.0-SNAPSHOT.jar fi + asserts_file_exist $sdnc_src_folder/northbound/$component/installer/target/sdnc-$component-1.2.0-SNAPSHOT-installer.zip + asserts_file_exist $sdnc_src_folder/northbound/$component/features/target/$component-features-1.2.0-SNAPSHOT.jar + asserts_file_exist $sdnc_src_folder/northbound/$component/provider/target/$component-provider-1.2.0-SNAPSHOT.jar done asserts_file_exist $sdnc_src_folder/oam/admportal/target/admportal.*-SNAPSHOT.zip asserts_file_exist $sdnc_src_folder/oam/dgbuilder/target/dgbuilder.*-SNAPSHOT.zip diff --git a/bootstrap/vagrant-onap/tests/test_vfc b/bootstrap/vagrant-onap/tests/test_vfc index 16e517a5e..53d9c0d5e 100644 --- a/bootstrap/vagrant-onap/tests/test_vfc +++ b/bootstrap/vagrant-onap/tests/test_vfc @@ -4,10 +4,7 @@ source /var/onap_tests/_test_base source /var/onap/vfc covered_functions=( -"clone_all_vfc_repos" "compile_all_vfc_repos" "install_vfc" -"get_vfc_images" "run_vfc_images" "build_nfvo_lcm_image" -"build_gvnfm_lcm_image" "build_gvnfm_vnfmgr_image" "build_gvnfm_vnfres_image" -"build_nfvo_lcm_image" "build_nfvo_vnfm_gvnfmadapter_image" +"clone_all_vfc_repos" "compile_all_vfc_repos" "install_vfc" "get_vfc_images" ) # test_clone_all_vfc_repos() - Verify cloning and pulling source code from repositories diff --git a/bootstrap/vagrant-onap/tests/test_vnfsdk b/bootstrap/vagrant-onap/tests/test_vnfsdk new file mode 100644 index 000000000..250a9fcc5 --- /dev/null +++ b/bootstrap/vagrant-onap/tests/test_vnfsdk @@ -0,0 +1,57 @@ +#!/bin/bash + +source /var/onap_tests/_test_base +source /var/onap/vnfsdk + +covered_functions=( +"clone_all_vnfsdk_repos" "compile_all_vnfsdk_repos" "get_vnfsdk_images" "install_vnfsdk" +) + +# test_clone_all_vnfsdk_repos() - Verify the cloning of VNFSDK source repo. +function test_clone_all_vnfsdk_repos { + clone_all_vnfsdk_repos + + asserts_file_exist $vnfsdk_src_folder/compliance/veslibrary/README + asserts_file_exist $vnfsdk_src_folder/functest/pom.xml + asserts_file_exist $vnfsdk_src_folder/lctest/pom.xml + asserts_file_exist $vnfsdk_src_folder/model/docs/index.rst + asserts_file_exist $vnfsdk_src_folder/pkgtools/pom.xml + asserts_file_exist $vnfsdk_src_folder/refrepo/pom.xml + asserts_file_exist $vnfsdk_src_folder/validation/pom.xml +} + +# test_compile_all_vnfsdk_repos () - Verify if VNFSDK source repo compiles correctly. +function test_compile_all_vnfsdk_repos { + clone_all_vnfsdk_repos + compile_all_vnfsdk_repos + + asserts_file_exist $vnfsdk_src_folder/lctest/lifecycle-test/target/lifecycle-test-service-1.0.0-SNAPSHOT.war + asserts_file_exist $vnfsdk_src_folder/pkgtools/target/vnf-sdk-pkgtools-1.0.0-SNAPSHOT.zip + asserts_file_exist $vnfsdk_src_folder/refrepo/vnfmarket-be/vnf-sdk-marketplace/target/ROOT.war + asserts_file_exist $vnfsdk_src_folder/validation/csarvalidation/target/validation-csar-1.0.0-SNAPSHOT.jar +} + +# test_get_vnfsdk_images() - Verify that the VNFSDK images are created or retrieved +function test_get_vnfsdk_images { + clone_all_vnfsdk_repos + get_vnfsdk_images + + asserts_image refrepo:1.0-STAGING-latest + asserts_image refrepo:latest +} + +# test_install_vnfsdk() - Verify that VNFSDK docker images are running. +function test_install_vnfsdk { + clone_all_vnfsdk_repos + get_vnfsdk_images + install_vnfsdk + + asserts_image_running refrepo:1.0-STAGING-latest + asserts_image refrepo:latest +} + +if [ "$1" != '*' ]; then + unset covered_functions + covered_functions=$1 +fi +main "${covered_functions[@]}" diff --git a/bootstrap/vagrant-onap/tests/test_vvp b/bootstrap/vagrant-onap/tests/test_vvp new file mode 100644 index 000000000..f77fdf4d3 --- /dev/null +++ b/bootstrap/vagrant-onap/tests/test_vvp @@ -0,0 +1,55 @@ +#!/bin/bash + +source /var/onap_tests/_test_base +source /var/onap/vvp + +covered_functions=( +"clone_all_vvp_repos" "compile_all_vvp_repos" "get_vvp_images" "install_vvp" +) + +# test_clone_all_vvp_repos() - Verify the cloning of VNFSDK source repo. +function test_clone_all_vvp_repos { + clone_all_vvp_repos + + asserts_file_exist $vvp_src_folder/cms/pom.xml + asserts_file_exist $vvp_src_folder/devkit/LICENSE.TXT + asserts_file_exist $vvp_src_folder/engagementmgr/pom.xml + asserts_file_exist $vvp_src_folder/gitlab/pom.xml + asserts_file_exist $vvp_src_folder/image-scanner/pom.xml + asserts_file_exist $vvp_src_folder/jenkins/pom.xml + asserts_file_exist $vvp_src_folder/portal/pom.xml + asserts_file_exist $vvp_src_folder/postgresql/pom.xml + asserts_file_exist $vvp_src_folder/test-engine/pom.xml + asserts_file_exist $vvp_src_folder/validation-scripts/LICENSE.txt +} + +# test_compile_all_vvp_repos () - Verify if VNFSDK source repo compiles correctly. +function test_compile_all_vvp_repos { + clone_all_vvp_repos + compile_all_vvp_repos + + # asserts_file_exist $vvp_src_folder/ +} + +# test_get_vvp_images() - Verify that the VNFSDK images are created or retrieved +function test_get_vvp_images { + clone_all_vvp_repos + get_vvp_images + + #asserts_image refrepo:latest +} + +# test_install_vvp() - Verify that VNFSDK docker images are running. +function test_install_vvp { + clone_all_vvp_repos + get_vvp_images + install_vvp + + #asserts_image_running refrepo:1.0-STAGING-latest +} + +if [ "$1" != '*' ]; then + unset covered_functions + covered_functions=$1 +fi +main "${covered_functions[@]}" diff --git a/bootstrap/vagrant-onap/tools/Run.ps1 b/bootstrap/vagrant-onap/tools/Run.ps1 index 8e6c94fa7..a74dcb72d 100644 --- a/bootstrap/vagrant-onap/tools/Run.ps1 +++ b/bootstrap/vagrant-onap/tools/Run.ps1 @@ -20,12 +20,18 @@ Test case to use in testing mode. .PARAMETER y Skips warning prompt. +.PARAMETER g +Skips creation or retrieve image process. + +.PARAMETER i +Skips installation service process. + .LINK https://wiki.onap.org/display/DW/ONAP+on+Vagrant #> Param( - [ValidateSet("all_in_one","dns", "mr", "sdc", "aai", "mso", "robot", "vid", "sdnc", "portal", "dcae", "policy", "appc", "vfc", "multicloud", "ccsdk", "testing")] + [ValidateSet("all_in_one","dns", "mr", "sdc", "aai", "mso", "robot", "vid", "sdnc", "portal", "dcae", "policy", "appc", "vfc", "multicloud", "ccsdk", "vnfsdk", "vvp", "testing")] [Parameter(Mandatory=$True,Position=0)] [ValidateNotNullOrEmpty()] [String] @@ -44,7 +50,17 @@ Param( [Parameter(Mandatory=$False,HelpMessage="Skips warning prompt.")] [AllowNull()] [Switch] - $y = $false + $y = $True +, + [Parameter(Mandatory=$False,HelpMessage="Skips creation or retrieve image process.")] + [AllowNull()] + [Switch] + $skip_get_images = $True +, + [Parameter(Mandatory=$False,HelpMessage="Skips warning prompt.")] + [AllowNull()] + [Switch] + $skip_install = $True ) if ( -Not "testing".Equals($Command) ) @@ -63,10 +79,13 @@ if ( -Not "testing".Equals($Command) ) } } +$env:SKIP_GET_IMAGES=$skip_get_images +$env:SKIP_INSTALL=$skip_install + switch ($Command) { "all_in_one" { $env:DEPLOY_MODE="all-in-one" } - { @("dns", "mr", "sdc", "aai", "mso", "robot", "vid", "sdnc", "portal", "dcae", "policy", "appc") -contains $_ } { $env:DEPLOY_MODE="individual" } + { @("dns", "mr", "sdc", "aai", "mso", "robot", "vid", "sdnc", "portal", "dcae", "policy", "appc", "vfc", "multicloud", "ccsdk", "vnfsdk", "vvp") -contains $_ } { $env:DEPLOY_MODE="individual" } "testing" { $env:DEPLOY_MODE="testing" @@ -91,7 +110,7 @@ switch ($Command) } default { - Write-Output $"Usage: $0 {all_in_one|dns|mr|sdc|aai|mso|robot|vid|sdnc|portal|dcae|policy|appc|testing}" + Write-Output $"Usage: $0 {all_in_one|dns|mr|sdc|aai|mso|robot|vid|sdnc|portal|dcae|policy|appc|vfc|multicloud|ccsdk|vnfsdk|vvp|testing}" exit 1 } } diff --git a/bootstrap/vagrant-onap/tools/run.sh b/bootstrap/vagrant-onap/tools/run.sh index 08eae01e3..eaa49431e 100755 --- a/bootstrap/vagrant-onap/tools/run.sh +++ b/bootstrap/vagrant-onap/tools/run.sh @@ -6,13 +6,17 @@ Usage: run.sh Command [-y] [-?] Optional arguments: -y Skips warning prompt. + -g + Skips creation or retrieve image process. + -i + Skips installation service process. -s <suite> Test suite to use in testing mode. -c <case> Test case to use in testing mode. Commands: all_in_one Deploy in all-in-one mode. - dns|mr|sdc|aai|mso|robot|vid|sdnc|portal|dcae|policy|appc|vfc|multicloud|ccsdk Deploy chosen service. + dns|mr|sdc|aai|mso|robot|vid|sdnc|portal|dcae|policy|appc|vfc|vnfsdk|multicloud|ccsdk|vvp Deploy chosen service. testing Deploy in testing mode. EOF } @@ -23,11 +27,17 @@ test_case="*" COMMAND=$1 -while getopts "ys:c:" OPTION "${@:2}"; do +while getopts "ygis:c:" OPTION "${@:2}"; do case "$OPTION" in y) run=true ;; + g) + export SKIP_GET_IMAGES="True" + ;; + i) + export SKIP_INSTALL="True" + ;; s) if [ "$COMMAND" != "testing" ] ; then echo "Test suite should only be specified in testing mode." @@ -55,7 +65,7 @@ case $COMMAND in "all_in_one" ) export DEPLOY_MODE='all-in-one' ;; - "dns" | "mr" | "sdc" | "aai" | "mso" | "robot" | "vid" | "sdnc" | "portal" | "dcae" | "policy" | "appc" | "vfc" | "multicloud" | "ccsdk" ) + "dns" | "mr" | "sdc" | "aai" | "mso" | "robot" | "vid" | "sdnc" | "portal" | "dcae" | "policy" | "appc" | "vfc" | "vnfsdk"| "multicloud" | "ccsdk" | "vvp" ) export DEPLOY_MODE='individual' ;; "testing" ) diff --git a/bootstrap/vagrant-onap/tools/update_project_list.sh b/bootstrap/vagrant-onap/tools/update_project_list.sh new file mode 100755 index 000000000..2f0ebb9a3 --- /dev/null +++ b/bootstrap/vagrant-onap/tools/update_project_list.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +ssh $1@gerrit.onap.org -p 29418 gerrit ls-projects > projects.tmp +tail -n +2 projects.tmp > tests/projects.txt +rm projects.tmp diff --git a/bootstrap/vagrant-onap/tox.ini b/bootstrap/vagrant-onap/tox.ini index 674810006..6ab309fdf 100644 --- a/bootstrap/vagrant-onap/tox.ini +++ b/bootstrap/vagrant-onap/tox.ini @@ -12,11 +12,13 @@ install_command = pip install {opts} {packages} deps = {env:BASHATE_INSTALL_PATH:bashate} whitelist_externals = bash -commands = bash -c "find {toxinidir}/{tests,lib,tools} \ - -not \( -type d -path *files* -prune \) \ - -not \( -type f -name .*.swp* -prune \) \ - -not \( -type f -name *.ps1 -prune \) \ - -type f \ +commands = bash -c "find {toxinidir}/{tests,lib,tools} \ + -not \( -type d -path *files* -prune \) \ + -not \( -type f -name .*.swp* -prune \) \ + -not \( -type f -name *.ps1 -prune \) \ + -not \( -type f -name installed-software* -prune \) \ + -not \( -type f -name *projects.txt -prune \) \ + -type f \ # E005 file does not begin with #! or have a .sh prefix # E006 check for lines longer than 79 columns # E042 local declaration hides errors diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 000000000..833e1aa96 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,8 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. + +TODO Add files to toctree and delete this header +------------------------------------------------ +.. toctree:: + :maxdepth: 1 + + diff --git a/integration b/integration deleted file mode 160000 -Subproject e14cfb55cf1d0a7b8bded66e5b834ee8922ecec diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 3e0aea311..000000000 --- a/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (c) 2016-2017 Huawei Technologies Co., Ltd. - Modifications copyright (C) 2017 AT&T Intellectual Property - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.onap.oparent</groupId> - <artifactId>oparent</artifactId> - <version>0.1.1</version> - </parent> - <name>integration</name> - <groupId>org.onap.integration</groupId> - <artifactId>root</artifactId> - <version>0.1.0-SNAPSHOT</version> - <packaging>pom</packaging> - <modules> - <module>version-manifest</module> - </modules> -</project> diff --git a/test/csit/plans/aaf/aafapi/setup.sh b/test/csit/plans/aaf/aafapi/setup.sh new file mode 100644 index 000000000..bfaff925c --- /dev/null +++ b/test/csit/plans/aaf/aafapi/setup.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# +# ============LICENSE_START======================================================= +# ONAP AAF +# ================================================================================ +# Copyright (C) 2017 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# ECOMP is a trademark and service mark of AT&T Intellectual Property. +# +# Place the scripts in run order: +source ${SCRIPTS}/common_functions.sh + +# Clone AAF Authz repo +mkdir -p $WORKSPACE/archives/aafcsit +cd $WORKSPACE/archives/aafcsit +#unset http_proxy https_proxy +git clone --depth 1 http://gerrit.onap.org/r/aaf/authz -b master +git pull +cd $WORKSPACE/archives/aafcsit/authz/authz-service/src/main/resources/docker-compose +pwd +chmod -R 777 $WORKSPACE/archives/aafcsit/authz/authz-service/src/main/resources/docker-compose + + +# start aaf containers with docker compose and configuration from docker-compose.yml +docker-compose up -d + +# Wait for initialization of Docker contaienr for AAF & Cassandra +for i in {1..50}; do + if [ $(docker inspect --format '{{ .State.Running }}' dockercompose_aaf_container_1) ] && \ + [ $(docker inspect --format '{{ .State.Running }}' dockercompose_cassandra_container_1) ] && \ + [ $(docker inspect --format '{{ .State.Running }}' dockercompose_aaf_container_1) ] + then + echo "AAF Service Running" + break + else + echo sleep $i + sleep $i + fi +done + + +AAF_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_aaf_container_1) +CASSANDRA_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_cassandra_container_1) + + +echo AAF_IP=${AAF_IP} +echo CASSANDRA_IP=${CASSANDRA_IP} + + +# Wait for initialization of docker services +for i in {1..50}; do + curl -sS -m 1 ${AAF_IP}:8101 && break + echo sleep $i + sleep $i +done + +#Pass any variables required by Robot test suites in ROBOT_VARIABLES +ROBOT_VARIABLES="-v AAF_IP:${AAF_IP}" diff --git a/test/csit/plans/aaf/aafapi/teardown.sh b/test/csit/plans/aaf/aafapi/teardown.sh new file mode 100644 index 000000000..1f7b2853d --- /dev/null +++ b/test/csit/plans/aaf/aafapi/teardown.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# Copyright 2016-2017 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Modifications copyright (c) 2017 AT&T Intellectual Property +# + +kill-instance.sh dockercompose_aaf_container_1 +kill-instance.sh dockercompose_cassandra_container_1 + diff --git a/test/csit/plans/aaf/aafapi/testplan.txt b/test/csit/plans/aaf/aafapi/testplan.txt new file mode 100644 index 000000000..ea18ca6d8 --- /dev/null +++ b/test/csit/plans/aaf/aafapi/testplan.txt @@ -0,0 +1,2 @@ +# Place the suites in run order. +aaf/aafapi diff --git a/test/csit/plans/aai/esr-server/setup.sh b/test/csit/plans/aai/esr-server/setup.sh new file mode 100644 index 000000000..a2cfa5e8d --- /dev/null +++ b/test/csit/plans/aai/esr-server/setup.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# +# Copyright 2017 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Place the scripts in run order: + + +#login to the onap nexus docker repo +docker login -u docker -p docker nexus3.onap.org:10001 + +# Start MSB +docker run -d -p 8500:8500 --name msb_consul nexus3.onap.org:10001/onap/msb/msb_base +CONSUL_IP=`get-instance-ip.sh msb_consul` +echo CONSUL_IP=${CONSUL_IP} +docker run -d -p 10081:10081 -e CONSUL_IP=$CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery +DISCOVERY_IP=`get-instance-ip.sh msb_discovery` +echo DISCOVERY_IP=${DISCOVERY_IP} +docker run -d -p 80:80 -e CONSUL_IP=$CONSUL_IP -e SDCLIENT_IP=$DISCOVERY_IP --name msb_internal_apigateway nexus3.onap.org:10001/onap/msb/msb_apigateway +MSB_IP=`get-instance-ip.sh msb_internal_apigateway` +echo MSB_IP=${MSB_IP} + +# Start esr-server +#docker run -d --name esr-server --env msbDiscoveryIp=${DISCOVERY_IP} --env msbDiscoveryPort=10081 nexus3.onap.org:10001/onap/aai/esr-server +#sudo docker run -e MSB_ADDR=${MSB_IP}:80 nexus3.onap.org:10001/onap/aai/esr-server -p 9518:9518 -d --net=host --name esr-server +docker run -d --name esr-server -e MSB_ADDR=${MSB_IP}:80 nexus3.onap.org:10001/onap/aai/esr-server +#source ${SCRIPTS}/aai/esr-server/startup.sh i-esrserver ${MSB_IP} 80 +ESRSERVER_IP=`get-instance-ip.sh esr-server` +echo ESRSERVER_IP=${ESRSERVER_IP} + +# Wait for initialization +for i in {1..20}; do + curl -sS -m 1 ${ESRSERVER_IP}:9518 && curl -sS -m 1 ${MSB_IP}:80 && break + echo sleep $i + sleep $i +done + +# Wait for initialization +for i in {1..20}; do + HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${MSB_IP}:80/api/aai-esr-server/v1/test"` + if [ ${HTTP_CODE} -eq 200 ]; then + break; + else + sleep $i + fi +done + +# Pass any variables required by Robot test suites in ROBOT_VARIABLES +ROBOT_VARIABLES="-v MSB_IP:${MSB_IP} -v ESRSERVER_IP:${ESRSERVER_IP}" + + + diff --git a/test/csit/plans/aai/esr-server/teardown.sh b/test/csit/plans/aai/esr-server/teardown.sh new file mode 100644 index 000000000..93f413831 --- /dev/null +++ b/test/csit/plans/aai/esr-server/teardown.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# Copyright 2017 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# This script is sourced by run-csit.sh after Robot test completion. + +kill-instance.sh esr-server +kill-instance.sh msb_internal_apigateway +kill-instance.sh msb_discovery +kill-instance.sh msb_consul diff --git a/test/csit/plans/aai/esr-server/testplan.txt b/test/csit/plans/aai/esr-server/testplan.txt new file mode 100644 index 000000000..43ed23e92 --- /dev/null +++ b/test/csit/plans/aai/esr-server/testplan.txt @@ -0,0 +1,4 @@ +# Test suites are relative paths under [integration.git]/test/csit/tests/. +# Place the suites in run order. +aai/esr-server/startup + diff --git a/test/csit/plans/aai/resources/docker-compose.yml b/test/csit/plans/aai/resources/docker-compose.yml index ab7823630..09d2a8127 100644 --- a/test/csit/plans/aai/resources/docker-compose.yml +++ b/test/csit/plans/aai/resources/docker-compose.yml @@ -9,6 +9,7 @@ services: - CHEF_BRANCH=master - CHEF_GIT_URL=http://gerrit.onap.org/r/aai - AAI_CORE_VERSION=1.1.0-SNAPSHOT + - LOCAL_USER_ID=${USER_ID} ports: - 8447:8447 logging: @@ -25,6 +26,8 @@ services: - CHEF_BRANCH=master - CHEF_GIT_URL=http://gerrit.onap.org/r/aai - AAI_CORE_VERSION=1.1.0-SNAPSHOT + - LOCAL_USER_ID=${USER_ID} + - DISABLE_UPDATE_QUERY=true ports: - 8446:8446 logging: @@ -48,7 +51,7 @@ services: max-size: "30m" max-file: "5" aai.hbase.simpledemo.openecomp.org: - image: ${HBASE_IMAGE} + image: ${HBASE_IMAGE}:${HBASE_VERSION} hostname: aai.hbase.simpledemo.openecomp.org ports: - 2181:2181 diff --git a/test/csit/plans/aai/resources/setup.sh b/test/csit/plans/aai/resources/setup.sh index 30b4b29b8..19beb6365 100644 --- a/test/csit/plans/aai/resources/setup.sh +++ b/test/csit/plans/aai/resources/setup.sh @@ -31,7 +31,7 @@ function wait_for_container() { CONTAINER_NAME="$1"; START_TEXT="$2"; - TIMEOUT=240 + TIMEOUT=360 # wait for the real startup AMOUNT_STARTUP=$(docker logs ${CONTAINER_NAME} 2>&1 | grep "$START_TEXT" | wc -l) @@ -54,8 +54,12 @@ DOCKER_COMPOSE_CMD="docker-compose"; export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1); export DOCKER_REGISTRY="nexus3.onap.org:10001"; export AAI_HAPROXY_IMAGE="${AAI_HAPROXY_IMAGE:-aaionap/haproxy}"; -export HBASE_IMAGE="${HBASE_IMAGE:-harisekhon/hbase}"; +export HBASE_IMAGE="${HBASE_IMAGE:-aaionap/hbase}"; +export HBASE_VERSION="${HBASE_VERSION:-1.2.0}"; +docker pull ${HBASE_IMAGE}:${HBASE_VERSION}; + +docker pull ${HBASE_IMAGE}:${HBASE_VERSION}; docker pull ${DOCKER_REGISTRY}/openecomp/aai-resources:${DOCKER_IMAGE_VERSION}; docker tag ${DOCKER_REGISTRY}/openecomp/aai-resources:${DOCKER_IMAGE_VERSION} ${DOCKER_REGISTRY}/openecomp/aai-resources:latest; @@ -71,25 +75,36 @@ wait_for_container ${HBASE_CONTAINER_NAME} ' Started SelectChannelConnector@0.0. wait_for_container ${HBASE_CONTAINER_NAME} ' Started SelectChannelConnector@0.0.0.0:8080'; wait_for_container ${HBASE_CONTAINER_NAME} ' Started SelectChannelConnector@0.0.0.0:9095'; -# Start the resources microservice -RESOURCES_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai-resources.api.simpledemo.openecomp.org 2>&1 | grep 'Creating' | grep -v 'volume' | grep -v 'network' | awk '{ print $2; }' | head -1); -wait_for_container ${RESOURCES_CONTAINER_NAME} '0.0.0.0:8447'; -docker logs ${CONTAINER_NAME}; - -# Start the traversal microservice -GRAPH_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai-traversal.api.simpledemo.openecomp.org 2>&1 | grep 'Creating' | awk '{ print $2; }' | head -1); -wait_for_container ${GRAPH_CONTAINER_NAME} '0.0.0.0:8446'; +USER_EXISTS=$(check_if_user_exists aaiadmin); -# Start the haproxy to route requests between resources and traversal -HAPROXY_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai.api.simpledemo.openecomp.org 2>&1 |grep 'Creating' | grep -v 'volume' | grep -v 'network' | awk '{ print $2; }' | head -1); +function check_if_user_exists(){ + local user_id=$1; -echo "A&AI Microservices, resources and traversal, are up and running along with HAProxy"; + if [ -z "$user_id" ]; then + echo "Needs to provide at least one argument for check_if_user_exists func"; + exit 1; + fi; -docker exec $GRAPH_CONTAINER_NAME "/opt/app/aai-traversal/scripts/install/updateQueryData.sh" && { - echo "Successfully loaded the widget related data into db"; -} || { - echo "Unable to load widget related data into db"; + id -u ${user_id} > /dev/null 2>&1 && { + echo "1"; + } || { + echo "0"; + } } + +if [ "${USER_EXISTS}" -eq 0 ]; then + export USER_ID=9000; +else + export USER_ID=$(id -u aaiadmin); +fi; + +RESOURCES_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai-resources.api.simpledemo.openecomp.org 2>&1 | grep 'Creating' | grep -v 'volume' | grep -v 'network' | awk '{ print $2; }' | head -1); +wait_for_container ${RESOURCES_CONTAINER_NAME} '0.0.0.0:8447'; + +docker logs ${RESOURCES_CONTAINER_NAME}; + +${DOCKER_COMPOSE_CMD} up -d aai-traversal.api.simpledemo.openecomp.org aai.api.simpledemo.openecomp.org +echo "A&AI Microservices, resources and traversal, are up and running along with HAProxy"; # Set the host ip for robot from the haproxy ROBOT_VARIABLES="-v HOST_IP:`ip addr show docker0 | head -3 | tail -1 | cut -d' ' -f6 | cut -d'/' -f1`" diff --git a/test/csit/plans/aai/traversal/docker-compose.yml b/test/csit/plans/aai/traversal/docker-compose.yml new file mode 100644 index 000000000..01dd4b481 --- /dev/null +++ b/test/csit/plans/aai/traversal/docker-compose.yml @@ -0,0 +1,72 @@ +version: '2' +services: + aai-resources.api.simpledemo.openecomp.org: + image: ${DOCKER_REGISTRY}/openecomp/aai-resources + hostname: aai-resources.api.simpledemo.openecomp.org + environment: + - AAI_CHEF_ENV=simpledemo + - AAI_CHEF_LOC=/var/chef/aai-data/environments + - CHEF_BRANCH=master + - CHEF_GIT_URL=http://gerrit.onap.org/r/aai + - AAI_CORE_VERSION=1.1.0-SNAPSHOT + - LOCAL_USER_ID=${USER_ID} + ports: + - 8447:8447 + logging: + driver: "json-file" + options: + max-size: "30m" + max-file: "5" + aai-traversal.api.simpledemo.openecomp.org: + image: ${DOCKER_REGISTRY}/openecomp/aai-traversal + hostname: aai-traversal.api.simpledemo.openecomp.org + environment: + - AAI_CHEF_ENV=simpledemo + - AAI_CHEF_LOC=/var/chef/aai-data/environments + - CHEF_BRANCH=master + - CHEF_GIT_URL=http://gerrit.onap.org/r/aai + - AAI_CORE_VERSION=1.1.0-SNAPSHOT + - DISABLE_UPDATE_QUERY=true + ports: + - 8446:8446 + logging: + driver: "json-file" + options: + max-size: "30m" + max-file: "5" + aai.api.simpledemo.openecomp.org: + image: ${AAI_HAPROXY_IMAGE} + hostname: aai.api.simpledemo.openecomp.org + ports: + - 8443:8443 + links: + - aai-resources.api.simpledemo.openecomp.org + - aai-traversal.api.simpledemo.openecomp.org + volumes: + - /dev/log:/dev/log + logging: + driver: "json-file" + options: + max-size: "30m" + max-file: "5" + aai.hbase.simpledemo.openecomp.org: + image: ${HBASE_IMAGE}:${HBASE_VERSION} + hostname: aai.hbase.simpledemo.openecomp.org + ports: + - 2181:2181 + - 8080:8080 + - 8085:8085 + - 9090:9090 + - 16000:16000 + - 16010:16010 + - 16201:16201 + logging: + driver: "json-file" + options: + max-size: "30m" + max-file: "5" +networks: + default: + driver: bridge + driver_opts: + com.docker.network.driver.mtu: ${MTU} diff --git a/test/csit/plans/aai/traversal/setup.sh b/test/csit/plans/aai/traversal/setup.sh new file mode 100644 index 000000000..010b0352e --- /dev/null +++ b/test/csit/plans/aai/traversal/setup.sh @@ -0,0 +1,110 @@ +#!/bin/bash +# +# Copyright © 2017 AT&T Intellectual Property. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ECOMP is a trademark and service mark of AT&T Intellectual Property. + +source ${SCRIPTS}/common_functions.sh + +NEXUS_USERNAME=$(cat /opt/config/nexus_username.txt) +NEXUS_PASSWD=$(cat /opt/config/nexus_password.txt) +NEXUS_DOCKER_REPO=$(cat /opt/config/nexus_docker_repo.txt) +DOCKER_IMAGE_VERSION=$(cat /opt/config/docker_version.txt) +DOCKER_REGISTRY=${NEXUS_DOCKER_REPO} +DOCKER_IMAGE_VERSION=1.1-STAGING-latest + +function wait_for_container() { + + CONTAINER_NAME="$1"; + START_TEXT="$2"; + + TIMEOUT=360 + + # wait for the real startup + AMOUNT_STARTUP=$(docker logs ${CONTAINER_NAME} 2>&1 | grep "$START_TEXT" | wc -l) + while [[ ${AMOUNT_STARTUP} -ne 1 ]]; + do + echo "Waiting for '$CONTAINER_NAME' deployment to finish ..." + AMOUNT_STARTUP=$(docker logs ${CONTAINER_NAME} 2>&1 | grep "$START_TEXT" | wc -l) + if [ "$TIMEOUT" = "0" ]; + then + docker logs ${CONTAINER_NAME}; + echo "ERROR: $CONTAINER_NAME deployment failed." + exit 1 + fi + let TIMEOUT-=1 + sleep 1 + done +} + +DOCKER_COMPOSE_CMD="docker-compose"; +export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1); +export DOCKER_REGISTRY="nexus3.onap.org:10001"; +export AAI_HAPROXY_IMAGE="${AAI_HAPROXY_IMAGE:-aaionap/haproxy}"; +export HBASE_IMAGE="${HBASE_IMAGE:-aaionap/hbase}"; +export HBASE_VERSION="${HBASE_VERSION:-1.2.0}"; + +docker pull ${HBASE_IMAGE}:${HBASE_VERSION}; + +docker pull ${DOCKER_REGISTRY}/openecomp/aai-resources:${DOCKER_IMAGE_VERSION}; +docker tag ${DOCKER_REGISTRY}/openecomp/aai-resources:${DOCKER_IMAGE_VERSION} ${DOCKER_REGISTRY}/openecomp/aai-resources:latest; + +docker pull ${DOCKER_REGISTRY}/openecomp/aai-traversal:${DOCKER_IMAGE_VERSION}; +docker tag ${DOCKER_REGISTRY}/openecomp/aai-traversal:${DOCKER_IMAGE_VERSION} ${DOCKER_REGISTRY}/openecomp/aai-traversal:latest; + +${DOCKER_COMPOSE_CMD} stop +${DOCKER_COMPOSE_CMD} rm -f -v + +# Start the hbase where the data will be stored +HBASE_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai.hbase.simpledemo.openecomp.org 2>&1 | grep 'Creating' | grep -v 'volume' | grep -v 'network' | awk '{ print $2; }' | head -1); +wait_for_container ${HBASE_CONTAINER_NAME} ' Started SelectChannelConnector@0.0.0.0:8085'; +wait_for_container ${HBASE_CONTAINER_NAME} ' Started SelectChannelConnector@0.0.0.0:8080'; +wait_for_container ${HBASE_CONTAINER_NAME} ' Started SelectChannelConnector@0.0.0.0:9095'; + +USER_EXISTS=$(check_if_user_exists aaiadmin); + +function check_if_user_exists(){ + local user_id=$1; + + if [ -z "$user_id" ]; then + echo "Needs to provide at least one argument for check_if_user_exists func"; + exit 1; + fi; + + id -u ${user_id} > /dev/null 2>&1 && { + echo "1"; + } || { + echo "0"; + } +} + + +if [ "${USER_EXISTS}" -eq 0 ]; then + export USER_ID=9000; +else + export USER_ID=$(id -u aaiadmin); +fi; + +RESOURCES_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai-resources.api.simpledemo.openecomp.org 2>&1 | grep 'Creating' | grep -v 'volume' | grep -v 'network' | awk '{ print $2; }' | head -1); +wait_for_container ${RESOURCES_CONTAINER_NAME} '0.0.0.0:8447'; + +TRAVERSAL_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai-traversal.api.simpledemo.openecomp.org 2>&1 | grep 'Creating' | grep -v 'volume' | grep -v 'network' | awk '{ print $2; }' | head -1); +wait_for_container ${TRAVERSAL_CONTAINER_NAME} '0.0.0.0:8446'; + +${DOCKER_COMPOSE_CMD} up -d aai.api.simpledemo.openecomp.org +echo "A&AI Microservices, resources and traversal, are up and running along with HAProxy"; +# Set the host ip for robot from the haproxy +ROBOT_VARIABLES="-v HOST_IP:`ip addr show docker0 | head -3 | tail -1 | cut -d' ' -f6 | cut -d'/' -f1`" diff --git a/test/csit/plans/aai/traversal/teardown.sh b/test/csit/plans/aai/traversal/teardown.sh new file mode 100644 index 000000000..8dd6358d8 --- /dev/null +++ b/test/csit/plans/aai/traversal/teardown.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# +# Copyright © 2017 AT&T Intellectual Property. +# Copyright © 2017 Amdocs +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ECOMP is a trademark and service mark of AT&T Intellectual Property. + +DOCKER_COMPOSE_CMD="docker-compose"; +export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1); +export DOCKER_REGISTRY="nexus3.onap.org:10001"; + +$DOCKER_COMPOSE_CMD stop +$DOCKER_COMPOSE_CMD rm -f -v + diff --git a/test/csit/plans/aai/traversal/testplan.txt b/test/csit/plans/aai/traversal/testplan.txt new file mode 100644 index 000000000..9b48bf9b5 --- /dev/null +++ b/test/csit/plans/aai/traversal/testplan.txt @@ -0,0 +1,3 @@ +# Test suites are relative paths under [integration.git]/test/csit/tests/. +# Place the suites in run order. +aai/traversal/suite1 diff --git a/test/csit/plans/appc/healthcheck/bundle_query.sh b/test/csit/plans/appc/healthcheck/bundle_query.sh index f163ce5c2..45a92ea31 100755 --- a/test/csit/plans/appc/healthcheck/bundle_query.sh +++ b/test/csit/plans/appc/healthcheck/bundle_query.sh @@ -24,7 +24,7 @@ failed_bundles=$(docker exec appc_controller_container /opt/opendaylight/current echo "There are $num_failed_bundles failed bundles out of $num_bundles installed bundles." -if [ "$num_failed_bundles" -ge 1 ] || [ $num_bundles -le 400 ]; then +if [ "$num_failed_bundles" -ge 1 ] || [ "$num_bundles" == "" ]; then echo "There are $num_bundles bundles with $num_failed_bundles in a failed state. " echo "The following bundle(s) are in a failed state: " echo " $failed_bundles" diff --git a/test/csit/plans/appc/healthcheck/setup.sh b/test/csit/plans/appc/healthcheck/setup.sh index eaf488a65..8798e561a 100755 --- a/test/csit/plans/appc/healthcheck/setup.sh +++ b/test/csit/plans/appc/healthcheck/setup.sh @@ -24,7 +24,8 @@ export NEXUS_USERNAME=docker export NEXUS_PASSWD=docker export NEXUS_DOCKER_REPO=nexus3.onap.org:10001 export DMAAP_TOPIC=AUTO -export DOCKER_IMAGE_VERSION=1.1.0-SNAPSHOT-latest +export APPC_DOCKER_IMAGE_VERSION=1.1-STAGING-latest +export CCSDK_DOCKER_IMAGE_VERSION=0.1-STAGING-latest export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1) @@ -39,54 +40,27 @@ cd $WORKSPACE/archives git clone -b master --single-branch http://gerrit.onap.org/r/appc/deployment.git appc cd $WORKSPACE/archives/appc git pull -unset http_proxy https_proxy cd $WORKSPACE/archives/appc/docker-compose - sed -i "s/DMAAP_TOPIC_ENV=.*/DMAAP_TOPIC_ENV="$DMAAP_TOPIC"/g" docker-compose.yml docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO - -docker pull $NEXUS_DOCKER_REPO/openecomp/appc-image:$DOCKER_IMAGE_VERSION -docker tag $NEXUS_DOCKER_REPO/openecomp/appc-image:$DOCKER_IMAGE_VERSION openecomp/appc-image:latest - -docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:latest -docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:latest onap/ccsdk-dgbuilder-image:latest - +docker pull $NEXUS_DOCKER_REPO/openecomp/appc-image:$APPC_DOCKER_IMAGE_VERSION +docker tag $NEXUS_DOCKER_REPO/openecomp/appc-image:$APPC_DOCKER_IMAGE_VERSION openecomp/appc-image:latest +docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION +docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION onap/ccsdk-dgbuilder-image:latest # start APPC containers with docker compose and configuration from docker-compose.yml docker-compose up -d - # WAIT 5 minutes maximum and test every 5 seconds if APPC is up using HealthCheck API -TIME_OUT=500 +TIME_OUT=2000 INTERVAL=30 TIME=0 while [ "$TIME" -lt "$TIME_OUT" ]; do - response=$(curl --write-out '%{http_code}' --silent --output /dev/null -H "Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==" -X POST -H "X-FromAppId: csit-appc" -H "X-TransactionId: csit-appc" -H "Accept: application/json" -H "Content-Type: application/json" http://localhost:8282/restconf/operations/SLI-API:healthcheck ); echo $response - - if [ "$response" == "200" ]; then - echo APPC started in $TIME seconds - break; - fi - - echo Sleep: $INTERVAL seconds before testing if APPC is up. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds - sleep $INTERVAL - TIME=$(($TIME+$INTERVAL)) -done - -if [ "$TIME" -ge "$TIME_OUT" ]; then - echo TIME OUT: Docker containers not started in $TIME_OUT seconds... Could cause problems for testing activities... -fi - -#sleep 800 - -TIME_OUT=1000 -INTERVAL=60 -TIME=0 -while [ "$TIME" -lt "$TIME_OUT" ]; do -response=$(docker exec appc_controller_container /opt/opendaylight/current/bin/client -u karaf system:start-level) -num_bundles=$(docker exec appc_controller_container /opt/opendaylight/current/bin/client -u karaf bundle:list | tail -1 | cut -d\| -f1) +startODL_status=$(docker exec appc_controller_container ps -e | grep startODL | wc -l) +waiting_bundles=$(docker exec appc_controller_container /opt/opendaylight/current/bin/client -u karaf bundle:list | grep Waiting | wc -l) +run_level=$(docker exec appc_controller_container /opt/opendaylight/current/bin/client -u karaf system:start-level) - if [ "$response" == "Level 100" ] && [ "$num_bundles" -ge 400 ]; then - echo APPC karaf started in $TIME seconds + if [ "$run_level" == "Level 100" ] && [ "$startODL_status" -lt "1" ] && [ "$waiting_bundles" -lt "1" ] ; then + echo APPC started in $TIME seconds break; fi @@ -96,30 +70,10 @@ num_bundles=$(docker exec appc_controller_container /opt/opendaylight/current/bi done if [ "$TIME" -ge "$TIME_OUT" ]; then - echo TIME OUT: karaf session not started in $TIME_OUT seconds... Could cause problems for testing activities... + echo TIME OUT: Docker containers not started in $TIME_OUT seconds... Could cause problems for testing activities... fi -response=$(docker exec appc_controller_container /opt/opendaylight/current/bin/client -u karaf system:start-level) -num_bundles=$(docker exec appc_controller_container /opt/opendaylight/current/bin/client -u karaf bundle:list | tail -1 | cut -d\| -f1) - - if [ "$response" == "Level 100" ] && [ "$num_bundles" -ge 400 ]; then - num_bundles=$(docker exec appc_controller_container /opt/opendaylight/current/bin/client -u karaf bundle:list | tail -1 | cut -d\| -f1) - num_failed_bundles=$(docker exec appc_controller_container /opt/opendaylight/current/bin/client -u karaf bundle:list | grep Failure | wc -l) - failed_bundles=$(docker exec appc_controller_container /opt/opendaylight/current/bin/client -u karaf bundle:list | grep Failure) - echo There is/are $num_failed_bundles failed bundles out of $num_bundles installed bundles. - fi - -if [ "$num_failed_bundles" -ge 1 ]; then - echo "The following bundle(s) are in a failed state: " - echo " $failed_bundles" -fi +sleep 300 # Pass any variables required by Robot test suites in ROBOT_VARIABLES ROBOT_VARIABLES="-v SCRIPTS:${SCRIPTS}" - -if [ "$response" == "" ] || [ "$num_bundles" == "" ]; then - echo "Docker container appc_controller_container is not available. Exiting." - exit 1 -fi - - diff --git a/test/csit/plans/ccsdk/healthcheck/health_check.sh b/test/csit/plans/ccsdk/healthcheck/health_check.sh index db5795eae..ffc766fe9 100644 --- a/test/csit/plans/ccsdk/healthcheck/health_check.sh +++ b/test/csit/plans/ccsdk/healthcheck/health_check.sh @@ -17,7 +17,9 @@ SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo $SCRIPTS -response=$(curl --write-out '%{http_code}' --silent --output /dev/null -H "Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==" -X POST -H "X-FromAppId: csit-sdnc" -H "X-TransactionId: csit-ccsdk" -H "Accept: application/json" -H "Content-Type: application/json" http://localhost:8282/restconf/operations/SLI-API:healthcheck ) +unset http_proxy https_proxy + +response=$(curl --write-out '%{http_code}' --silent --output /dev/null -H "Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==" -X POST -H "X-FromAppId: csit-sdnc" -H "X-TransactionId: csit-ccsdk" -H "Accept: application/json" -H "Content-Type: application/json" http://localhost:8383/restconf/operations/SLI-API:healthcheck ) if [ "$response" == "200" ]; then echo "CCSDK health check passed." diff --git a/test/csit/plans/ccsdk/healthcheck/setup.sh b/test/csit/plans/ccsdk/healthcheck/setup.sh index babfe3eb1..78b4ff006 100644 --- a/test/csit/plans/ccsdk/healthcheck/setup.sh +++ b/test/csit/plans/ccsdk/healthcheck/setup.sh @@ -22,6 +22,11 @@ source ${WORKSPACE}/test/csit/scripts/ccsdk/script1.sh export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1) export NEXUS_DOCKER_REPO="nexus3.onap.org:10001" +export NEXUS_USERNAME=docker +export NEXUS_PASSWD=docker +export DMAAP_TOPIC=AUTO +export CCSDK_DOCKER_IMAGE_VERSION=0.1-STAGING-latest + if [ "$MTU" == "" ]; then export MTU="1450" fi @@ -37,16 +42,16 @@ unset http_proxy https_proxy cd $WORKSPACE/archives/ccsdk/src/main/yaml sed -i "s/DMAAP_TOPIC_ENV=.*/DMAAP_TOPIC_ENV="AUTO"/g" docker-compose.yml -docker login -u docker -p docker nexus3.onap.org:10001 +docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO -docker pull nexus3.onap.org:10001/onap/ccsdk-odl-image:0.1-STAGING-latest -docker tag nexus3.onap.org:10001/onap/ccsdk-odl-image:latest onap/ccsdk-odl-image:0.1-STAGING-latest +docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-odl-image:$CCSDK_DOCKER_IMAGE_VERSION +docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-odl-image:$CCSDK_DOCKER_IMAGE_VERSION onap/ccsdk-odl-image:0.1-STAGING-latest -docker pull nexus3.onap.org:10001/onap/ccsdk-dgbuilder-image:0.1-STAGING-latest -docker tag nexus3.onap.org:10001/onap/ccsdk-dgbuilder-image:latest onap/ccsdk-dgbuilder-image:0.1-STAGING-latest +docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION +docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION onap/ccsdk-dgbuilder-image:0.1-STAGING-latest -docker pull nexus3.onap.org:10001/onap/ccsdk-odlsli-image:0.1-STAGING-latest -docker tag nexus3.onap.org:10001/onap/ccsdk-odlsli-image:latest onap/ccsdk-odlsli-image:0.1-STAGING-latest +docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-odlsli-image:$CCSDK_DOCKER_IMAGE_VERSION +docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-odlsli-image:$CCSDK_DOCKER_IMAGE_VERSION onap/ccsdk-odlsli-image:0.1-STAGING-latest # start CCSDK containers with docker compose and configuration from docker-compose.yml curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > docker-compose @@ -58,7 +63,7 @@ TIME_OUT=500 INTERVAL=30 TIME=0 while [ "$TIME" -lt "$TIME_OUT" ]; do - response=$(curl --write-out '%{http_code}' --silent --output /dev/null -H "Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==" -X POST -H "X-FromAppId: csit-ccsdk" -H "X-TransactionId: csit-ccsdk" -H "Accept: application/json" -H "Content-Type: application/json" http://localhost:8282/restconf/operations/SLI-API:healthcheck ); echo $response + response=$(curl --write-out '%{http_code}' --silent --output /dev/null -H "Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==" -X POST -H "X-FromAppId: csit-ccsdk" -H "X-TransactionId: csit-ccsdk" -H "Accept: application/json" -H "Content-Type: application/json" http://localhost:8383/restconf/operations/SLI-API:healthcheck ); echo $response if [ "$response" == "200" ]; then echo CCSDK started in $TIME seconds @@ -81,10 +86,10 @@ INTERVAL=60 TIME=0 while [ "$TIME" -lt "$TIME_OUT" ]; do -response=$(docker exec ccsdk_bareodl_container /opt/opendaylight/current/bin/client -u karaf system:start-level) -num_bundles=$(docker exec ccsdk_bareodl_container /opt/opendaylight/current/bin/client -u karaf bundle:list | tail -1 | cut -d\| -f1) +response=$(docker exec ccsdk_odlsli_container /opt/opendaylight/current/bin/client -u karaf system:start-level) +num_bundles=$(docker exec ccsdk_odlsli_container /opt/opendaylight/current/bin/client -u karaf bundle:list | tail -1 | cut -d\| -f1) - if [ "$response" == "Level 100" ] && [ "$num_bundles" -ge 64 ]; then + if [ "$response" == "Level 100" ] && [ "$num_bundles" -ge 333 ]; then echo CCSDK karaf started in $TIME seconds break; fi @@ -98,13 +103,13 @@ if [ "$TIME" -ge "$TIME_OUT" ]; then echo TIME OUT: karaf session not started in $TIME_OUT seconds... Could cause problems for testing activities... fi -response=$(docker exec ccsdk_bareodl_container /opt/opendaylight/current/bin/client -u karaf system:start-level) -num_bundles=$(docker exec ccsdk_bareodl_container /opt/opendaylight/current/bin/client -u karaf bundle:list | tail -1 | cut -d\| -f1) +response=$(docker exec ccsdk_odlsli_container /opt/opendaylight/current/bin/client -u karaf system:start-level) +num_bundles=$(docker exec ccsdk_odlsli_container /opt/opendaylight/current/bin/client -u karaf bundle:list | tail -1 | cut -d\| -f1) - if [ "$response" == "Level 100" ] && [ "$num_bundles" -ge 64 ]; then - num_bundles=$(docker exec ccsdk_bareodl_container /opt/opendaylight/current/bin/client -u karaf bundle:list | tail -1 | cut -d\| -f1) - num_failed_bundles=$(docker exec ccsdk_bareodl_container /opt/opendaylight/current/bin/client -u karaf bundle:list | grep Failure | wc -l) - failed_bundles=$(docker exec ccsdk_bareodl_container /opt/opendaylight/current/bin/client -u karaf bundle:list | grep Failure) + if [ "$response" == "Level 100" ] && [ "$num_bundles" -ge 333 ]; then + num_bundles=$(docker exec ccsdk_odlsli_container /opt/opendaylight/current/bin/client -u karaf bundle:list | tail -1 | cut -d\| -f1) + num_failed_bundles=$(docker exec ccsdk_odlsli_container /opt/opendaylight/current/bin/client -u karaf bundle:list | grep Failure | wc -l) + failed_bundles=$(docker exec ccsdk_odlsli_container /opt/opendaylight/current/bin/client -u karaf bundle:list | grep Failure) echo There is/are $num_failed_bundles failed bundles out of $num_bundles installed bundles. fi diff --git a/test/csit/plans/ccsdk/healthcheck/teardown.sh b/test/csit/plans/ccsdk/healthcheck/teardown.sh index 60433f8ce..fbc0dfa42 100644 --- a/test/csit/plans/ccsdk/healthcheck/teardown.sh +++ b/test/csit/plans/ccsdk/healthcheck/teardown.sh @@ -18,7 +18,7 @@ # kill-instance.sh ccsdk_db_container -kill-instance.sh sdnc_dgbuilder_container +kill-instance.sh ccsdk_dgbuilder_container kill-instance.sh ccsdk_bareodl_container kill-instance.sh ccsdk_odlsli_container diff --git a/test/csit/plans/cli/sanity-check/setup.sh b/test/csit/plans/cli/sanity-check/setup.sh index d1d0ab6f0..17fb18c45 100644 --- a/test/csit/plans/cli/sanity-check/setup.sh +++ b/test/csit/plans/cli/sanity-check/setup.sh @@ -18,7 +18,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} diff --git a/test/csit/plans/dcaegen2/testsuites/setup.sh b/test/csit/plans/dcaegen2/testsuites/setup.sh index 3068b5026..6692bb209 100755 --- a/test/csit/plans/dcaegen2/testsuites/setup.sh +++ b/test/csit/plans/dcaegen2/testsuites/setup.sh @@ -20,7 +20,6 @@ #get current host IP addres HOST_IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}') -echo HOST_IP=${HOST_IP} VESC_IMAGE=nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.1 echo VESC_IMAGE=${VESC_IMAGE} @@ -30,9 +29,11 @@ docker run -d -p 8080:8080/tcp -p 8443:8443/tcp -P --name vesc -e DMAAPHOST=${HO VESC_IP=`get-instance-ip.sh vesc` export VESC_IP=${VESC_IP} +export HOST_IP=${HOST_IP} export ROBOT_VARIABLES="--pythonpath ${WORKSPACE}/test/csit/tests/dcaegen2/testcases/resources" +pip install jsonschema uuid # Wait container ready sleep 5 diff --git a/test/csit/plans/holmes-rule-management/sanity-check/setup.sh b/test/csit/plans/holmes-rule-management/sanity-check/setup.sh index 681a9e789..ae78ec49a 100644 --- a/test/csit/plans/holmes-rule-management/sanity-check/setup.sh +++ b/test/csit/plans/holmes-rule-management/sanity-check/setup.sh @@ -26,7 +26,7 @@ echo DB_IP=${DB_IP} docker login -u docker -p docker nexus3.onap.org:10001 # Start MSB -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 CONSUL_IP=`get-instance-ip.sh msb_consul` echo CONSUL_IP=${CONSUL_IP} docker run -d -p 10081:10081 -e CONSUL_IP=$CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery diff --git a/test/csit/plans/modeling-toscaparsers-javatoscachecker/APIs/setup.sh b/test/csit/plans/modeling-toscaparsers-javatoscachecker/APIs/setup.sh new file mode 100644 index 000000000..03d07defb --- /dev/null +++ b/test/csit/plans/modeling-toscaparsers-javatoscachecker/APIs/setup.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# Copyright 2017 AT&T +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Modifications copyright (c) 2017 AT&T Intellectual Property +# +# Place the scripts in run order: + +source ${WORKSPACE}/test/csit/scripts/modeling-toscaparsers-javatoscachecker/setup_containers.sh + diff --git a/test/csit/plans/modeling-toscaparsers-javatoscachecker/APIs/teardown.sh b/test/csit/plans/modeling-toscaparsers-javatoscachecker/APIs/teardown.sh new file mode 100644 index 000000000..1ecaad4d2 --- /dev/null +++ b/test/csit/plans/modeling-toscaparsers-javatoscachecker/APIs/teardown.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# Copyright 2016-2017 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Modifications copyright (c) 2017 AT&T Intellectual Property +# + +source ${WORKSPACE}/test/csit/scripts/modeling-toscaparsers-javatoscachecker/teardown_containers.sh + diff --git a/test/csit/plans/modeling-toscaparsers-javatoscachecker/APIs/testplan.txt b/test/csit/plans/modeling-toscaparsers-javatoscachecker/APIs/testplan.txt new file mode 100644 index 000000000..f59237bd4 --- /dev/null +++ b/test/csit/plans/modeling-toscaparsers-javatoscachecker/APIs/testplan.txt @@ -0,0 +1,3 @@ +# Test suites are relative paths under [integration.git]/test/csit/tests/. +# Place the suites in run order. +modeling-toscaparsers-javatoscachecker/APIs diff --git a/test/csit/plans/msb/iag-redirect-discovery/setup.sh b/test/csit/plans/msb/iag-redirect-discovery/setup.sh index e14c28fe6..70614c5c8 100644 --- a/test/csit/plans/msb/iag-redirect-discovery/setup.sh +++ b/test/csit/plans/msb/iag-redirect-discovery/setup.sh @@ -18,7 +18,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} diff --git a/test/csit/plans/msb/rest-service/setup.sh b/test/csit/plans/msb/rest-service/setup.sh index 9682cde74..8d344db8d 100644 --- a/test/csit/plans/msb/rest-service/setup.sh +++ b/test/csit/plans/msb/rest-service/setup.sh @@ -18,7 +18,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} diff --git a/test/csit/plans/msb/sanity-check/setup.sh b/test/csit/plans/msb/sanity-check/setup.sh index 21bb18f7d..e44f4371b 100644 --- a/test/csit/plans/msb/sanity-check/setup.sh +++ b/test/csit/plans/msb/sanity-check/setup.sh @@ -18,7 +18,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} diff --git a/test/csit/plans/msb/tcp-service/setup.sh b/test/csit/plans/msb/tcp-service/setup.sh index 1a315e516..ea2bafdfb 100644 --- a/test/csit/plans/msb/tcp-service/setup.sh +++ b/test/csit/plans/msb/tcp-service/setup.sh @@ -18,7 +18,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} diff --git a/test/csit/plans/multicloud-vmware/functionality1/setup.sh b/test/csit/plans/multicloud-vmware/functionality1/setup.sh new file mode 100755 index 000000000..d71d5c423 --- /dev/null +++ b/test/csit/plans/multicloud-vmware/functionality1/setup.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# +# Copyright 2016-2017 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Place the scripts in run order: +# Start all process required for executing test case + +source ${SCRIPTS}/common_functions.sh + +# start multicloud-vio +docker run -d --name multicloud-vio nexus3.onap.org:10001/onap/multicloud/vio +VIO_IP=`get-instance-ip.sh multicloud-vio` +for i in {1..50}; do + curl -sS ${VIO_IP}:9004 && break + echo sleep $i + sleep $i +done + +echo SCRIPTS +# Pass any variables required by Robot test suites in ROBOT_VARIABLES +ROBOT_VARIABLES="-v VIO_IP:${VIO_IP} -v SCRIPTS:${SCRIPTS}" diff --git a/test/csit/plans/multicloud-vmware/functionality1/teardown.sh b/test/csit/plans/multicloud-vmware/functionality1/teardown.sh new file mode 100755 index 000000000..546e01261 --- /dev/null +++ b/test/csit/plans/multicloud-vmware/functionality1/teardown.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# +# Copyright 2016-2017 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# This script is sourced by run-csit.sh after Robot test completion. +kill-instance.sh multicloud-vio diff --git a/test/csit/plans/multicloud-vmware/functionality1/testplan.txt b/test/csit/plans/multicloud-vmware/functionality1/testplan.txt new file mode 100644 index 000000000..2f5ad1b6f --- /dev/null +++ b/test/csit/plans/multicloud-vmware/functionality1/testplan.txt @@ -0,0 +1,9 @@ +# Test suites are relative paths under [integration.git]/test/csit/tests/. +# Place the suites in run order. +multicloud-vmware/provision/sanity_test_vio.robot +multicloud-vmware/provision/sanity_test_tenant.robot +multicloud-vmware/provision/sanity_test_image.robot +multicloud-vmware/provision/sanity_test_neutron.robot +multicloud-vmware/nova/sanity-flavor.robot +multicloud-vmware/nova/sanity-host.robot +multicloud-vmware/nova/sanity-server.robot diff --git a/test/csit/plans/policy/health/setup.sh b/test/csit/plans/policy/health/setup.sh index 241d78b22..21f58eb66 100755 --- a/test/csit/plans/policy/health/setup.sh +++ b/test/csit/plans/policy/health/setup.sh @@ -15,10 +15,13 @@ # limitations under the License. # # Place the scripts in run order: -source ${WORKSPACE}/test/csit/scripts/policy/script1.sh +source ${SCRIPTS}/common_functions.sh docker run --name i-mock -d jamesdbloom/mockserver MOCK_IP=`get-instance-ip.sh i-mock` +echo ${MOCK_IP} + +docker inspect i-mock # Wait for initialization for i in {1..10}; do @@ -29,6 +32,14 @@ done ${WORKSPACE}/test/csit/scripts/policy/mock-hello.sh ${MOCK_IP} +source ${WORKSPACE}/test/csit/scripts/policy/script1.sh + # Pass any variables required by Robot test suites in ROBOT_VARIABLES -ROBOT_VARIABLES="-v MOCK_IP:${MOCK_IP}" +ROBOT_VARIABLES="-v MOCK_IP:${MOCK_IP} -v IP:${IP} -v POLICY_IP:${POLICY_IP} -v PDP_IP:${PDP_IP} -v DOCKER_IP:${DOCKER_IP}" +export PDP_IP=${PDP_IP} +export POLICY_IP=${POLICY_IP} +export DOCKER_IP=${DOCKER_IP} +#Get current IP of VM +HOST_IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}') +export HOST_IP=${HOST_IP} diff --git a/test/csit/plans/policy/health/teardown.sh b/test/csit/plans/policy/health/teardown.sh index 4214c8279..f1f0b21ce 100755 --- a/test/csit/plans/policy/health/teardown.sh +++ b/test/csit/plans/policy/health/teardown.sh @@ -15,6 +15,22 @@ # limitations under the License. # -kill-instance.sh i-mock +function kill_instance() { +local name=$1 +docker logs "${name}" >> "${WORKSPACE}"/archives/"${name}".log +docker kill "${name}" +docker rm -v "${name}" +} +mkdir -p "${WORKSPACE}"/archives + +kill_instance i-mock +kill_instance drools +kill_instance pdp +kill_instance brmsgw +kill_instance pap +kill_instance nexus +kill_instance mariadb + +rm -fr "${WORK_DIR}" diff --git a/test/csit/plans/portal-sdk/testsuite/.env b/test/csit/plans/portal-sdk/testsuite/.env new file mode 100644 index 000000000..0b7de9560 --- /dev/null +++ b/test/csit/plans/portal-sdk/testsuite/.env @@ -0,0 +1,33 @@ +# Environment settings +# used by docker-compose AND by other shell scripts +# Host directory with config files + +LOGS_DIR=./logs +PROPS_DIR=./properties + + +# Directory within containers +WEBAPPS_DIR=/opt/apache-tomcat-8.0.37/webapps + +# Following are ALSO used in demo/boot/portal_vm_init.sh +EP_IMG_NAME=onap/portal-apps +DB_IMG_NAME=onap/portal-db +WMS_IMG_NAME=onap/portal-wms +CLI_IMG_NAME=onap/cli + +# Tag all images with this +PORTAL_TAG=1.3.0 +DOCKER_IMAGE_VERSION=1.3-STAGING-latest +CLI_DOCKER_VERSION=1.1-STAGING-latest +NEXUS_DOCKER_REPO=nexus3.onap.org:10003 + + +# Optional settings with no defaults. +EXTRA_HOST_IP="" +EXTRA_HOST_NAME="" +# Export shell environment variables on hosts with no DNS; +# a line is added to docker container's /etc/hosts. +# For example: +#EXTRA_HOST_IP="-i ${HOST_IP}" +#EXTRA_HOST_NAME="-n portal.api.simpledemo.openecomp.org" + diff --git a/test/csit/plans/portal-sdk/testsuite/docker-compose.yml b/test/csit/plans/portal-sdk/testsuite/docker-compose.yml new file mode 100644 index 000000000..7a9fb8caa --- /dev/null +++ b/test/csit/plans/portal-sdk/testsuite/docker-compose.yml @@ -0,0 +1,98 @@ +# docker-compose for ONAP portal containers: database, microservice, portal apps. +# Relies on .env file in current directory. +# Works in multiple environments; does not pull from a Nexus registry. +# Exposes the portal apps docker (but not DB nor WMS dockers) on the host network. +# Images must be pulled from ONAP Nexus registry after logging in like this: +# docker login -u USER -p PASS nexus3.onap.org:10001 + +version: '2.0' + +services: + + cli: + image: ${CLI_IMG_NAME}:${PORTAL_TAG} + environment: + CLI_MODE: 'daemon' + ports: + - 8080:80 + - 9090:8080 + logging: + driver: json-file + + # Config files may use hostname "portal-db" + portal-db: + image: ${DB_IMG_NAME}:${PORTAL_TAG} + environment: + MYSQL_ROOT_PASSWORD: 'Aa123456' + expose: + - 3306 + volumes: + # Just specify a path and let the Engine create a volume + - /var/lib/mysql + logging: + driver: json-file + + # An environment variable here CAN override the database URL; + # instead the value in the config file uses hostname from above + portal-wms: + image: ${WMS_IMG_NAME}:${PORTAL_TAG} + expose: + - 8082 + links: + - portal-db + depends_on: + - portal-db + volumes: + - ${PROPS_DIR}/ECOMPWIDGETMS/application.properties:/application.properties + command: + - /wait-for.sh + - -t + - "420" + - portal-db:3306 + - -- + - /start-wms-cmd.sh + logging: + driver: json-file + + # Environment variables here CANNOT override the database URL because + # two apps use identical configuration keys with different values + portal-apps: + image: ${EP_IMG_NAME}:${PORTAL_TAG} + expose: + - 8989 + ports: + - 8989:8080 + - 8010:8009 + - 8006:8005 + links: + - portal-db + - portal-wms + depends_on: + - portal-db + - portal-wms + volumes: + - ${PROPS_DIR}/ECOMPPORTALAPP/system.properties:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/conf/system.properties + - ${PROPS_DIR}/ECOMPPORTALAPP/fusion.properties:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/fusion/conf/fusion.properties + - ${PROPS_DIR}/ECOMPPORTALAPP/portal.properties:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/classes/portal.properties + - ${PROPS_DIR}/ECOMPPORTALAPP/openid-connect.properties:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/classes/openid-connect.properties + - ${PROPS_DIR}/ECOMPPORTALAPP/logback.xml:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/classes/logback.xml + - ${PROPS_DIR}/ECOMPSDKAPP/fusion.properties:${WEBAPPS_DIR}/ECOMPSDKAPP/WEB-INF/fusion/conf/fusion.properties + - ${PROPS_DIR}/ECOMPSDKAPP/system.properties:${WEBAPPS_DIR}/ECOMPSDKAPP/WEB-INF/conf/system.properties + - ${PROPS_DIR}/ECOMPSDKAPP/portal.properties:${WEBAPPS_DIR}/ECOMPSDKAPP/WEB-INF/classes/portal.properties + - ${PROPS_DIR}/ECOMPDBCAPP/system.properties:${WEBAPPS_DIR}/ECOMPDBCAPP/WEB-INF/conf/system.properties + - ${PROPS_DIR}/ECOMPDBCAPP/portal.properties:${WEBAPPS_DIR}/ECOMPDBCAPP/WEB-INF/classes/portal.properties + - ${PROPS_DIR}/ECOMPDBCAPP/dbcapp.properties:${WEBAPPS_DIR}/ECOMPDBCAPP/WEB-INF/dbcapp/dbcapp.properties + - ${PROPS_DIR}/ECOMPDBCAPP/fusion.properties:${WEBAPPS_DIR}/ECOMPDBCAPP/WEB-INF/fusion/conf/fusion.properties + - ${LOGS_DIR}:/opt/apache-tomcat-8.0.37/logs + command: + - /wait-for.sh + - -t + - "420" + - portal-db:3306 + - -- + - /start-apps-cmd.sh + # see comments in .env file + - $EXTRA_HOST_IP + - $EXTRA_HOST_NAME + logging: + driver: json-file diff --git a/test/csit/plans/portal-sdk/testsuite/setup.sh b/test/csit/plans/portal-sdk/testsuite/setup.sh new file mode 100644 index 000000000..0c90dc66b --- /dev/null +++ b/test/csit/plans/portal-sdk/testsuite/setup.sh @@ -0,0 +1,178 @@ +#!/bin/bash +# Starts docker containers for ONAP Portal +# This version for Amsterdam/R1 of Portal, uses docker-compose. +# Temporarily maintained in portal/deliveries area; +# replicated from the ONAP demo/boot area due to release concerns. + +# Start Xvfb +echo -e "Starting Xvfb on display ${DISPLAY} with res ${RES}" +Xvfb ${DISPLAY} -ac -screen 0 ${RES} +extension RANDR & +XVFBPID=$! +# Get pid of this spawned process to make sure we kill the correct process later + +#Get current IP of VM +HOST_IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}') +export HOST_IP=${HOST_IP} + + + +if ! ifconfig docker0; then +if ! ifconfig ens3; then +echo "Could not determine IP address" +exit 1 +fi +export DOCKER_IP_IP=`ifconfig ens3 | awk -F: '/inet addr/ {gsub(/ .*/,"",$2); print $2}'` +else +export DOCKER_IP=`ifconfig docker0 | awk -F: '/inet addr/ {gsub(/ .*/,"",$2); print $2}'` +fi +echo $DOCKER_IP + + +# Pass any variables required by Robot test suites in ROBOT_VARIABLES +#ROBOT_VARIABLES="-v MOCK_IP:${MOCK_IP} -v IP:${IP} -v POLICY_IP:${POLICY_IP} -v DOCKER_IP:${DOCKER_IP}" +#export PORTAL_IP=${PORTAL_IP} +ROBOT_VARIABLES="-v MOCK_IP:${MOCK_IP} -v IP:${IP} -v DOCKER_IP:${DOCKER_IP}" +export DOCKER_IP=${DOCKER_IP} + + + + +# be verbose +set -x + +# Establish environment variables +NEXUS_USERNAME=docker +NEXUS_PASSWD=docker +NEXUS_DOCKER_REPO=nexus3.onap.org:10003 + + + +CURR="$(pwd)" +git clone http://gerrit.onap.org/r/portal -b "release-1.3.0" + +# Refresh configuration and scripts +cd portal +git pull +cd deliveries +rm .env +#rm docker-compose.yml +cp $CURR/.env . +#cp $CURR/docker-compose.yml . +#cd properties_simpledemo/ECOMPPORTALAPP +#rm system.properties +#cp $CURR/system.properties . +#cd ../.. +# Get image names used below from docker-compose environment file +source $CURR/.env +#source .env + +# Make inter-app communication work in CSIT +export EXTRA_HOST_IP="-i ${HOST_IP}" +export EXTRA_HOST_NAME="-n portal.api.simpledemo.onap.org" + + +# Copy property files to new directory +mkdir -p $PROPS_DIR +cp -r properties_simpledemo/* $PROPS_DIR +# Also create logs directory +mkdir -p $LOGS_DIR + + +# Refresh images +docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO +docker pull $NEXUS_DOCKER_REPO/${DB_IMG_NAME}:$DOCKER_IMAGE_VERSION +docker pull $NEXUS_DOCKER_REPO/${EP_IMG_NAME}:$DOCKER_IMAGE_VERSION +docker pull $NEXUS_DOCKER_REPO/${WMS_IMG_NAME}:$DOCKER_IMAGE_VERSION +docker pull $NEXUS_DOCKER_REPO/$CLI_IMG_NAME:$CLI_DOCKER_VERSION + +# Tag them as expected by docker-compose file +docker tag $NEXUS_DOCKER_REPO/${DB_IMG_NAME}:$DOCKER_IMAGE_VERSION $DB_IMG_NAME:$PORTAL_TAG +docker tag $NEXUS_DOCKER_REPO/${EP_IMG_NAME}:$DOCKER_IMAGE_VERSION $EP_IMG_NAME:$PORTAL_TAG +docker tag $NEXUS_DOCKER_REPO/${WMS_IMG_NAME}:$DOCKER_IMAGE_VERSION $WMS_IMG_NAME:$PORTAL_TAG +docker tag $NEXUS_DOCKER_REPO/$CLI_IMG_NAME:$CLI_DOCKER_VERSION $CLI_IMG_NAME:$PORTAL_TAG + + +# compose is not in /usr/bin +docker-compose down +docker-compose up -d + +#${HOSTNAME}="portal.api.simpledemo.openecomp.org" +#echo "$HOST_IP ${HOSTNAME}" >> /etc/hosts + +#echo "$HOST_IP portal.api.simpledemo.openecomp.org" >> /etc/hosts +#sudo sed -i "2i$HOST_IP portal.api.simpledemo.openecomp.org" /etc/hosts + +#HOST="portal.api.simpledemo.openecomp.org" +#sudo sed -i "/$HOST/ s/.*/$HOST_IP\t$HOST/g" /etc/hosts + +# insert/update hosts entry +ip_address=$HOST_IP +host_name="portal.api.simpledemo.onap.org" +# find existing instances in the host file and save the line numbers +matches_in_hosts="$(grep -n $host_name /etc/hosts | cut -f1 -d:)" +host_entry="${ip_address} ${host_name}" + +echo "$host_entry" + +if [ ! -z "$matches_in_hosts" ] +then +echo "Updating existing hosts entry." +# iterate over the line numbers on which matches were found +while read -r line_number; do +# replace the text of each line with the desired host entry +sudo sed -i '' "${line_number}s/.*/${host_entry} /" /etc/hosts +echo "${line_number} ${host_entry}" +done <<< "$matches_in_hosts" +else +echo "Adding new hosts entry." +echo "$host_entry" | sudo tee -a /etc/hosts > /dev/null +fi + + + +sleep 3m + +# WAIT 5 minutes maximum and test every 5 seconds if Portal up using HealthCheck API +TIME_OUT=500 +INTERVAL=20 +TIME=0 +while [ "$TIME" -lt "$TIME_OUT" ]; do + response=$(curl --write-out '%{http_code}' --silent --output /dev/null http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/portalApi/healthCheck); echo $response + + if [ "$response" == "200" ]; then + echo Portal and its database well started in $TIME seconds + break; + fi + + echo Sleep: $INTERVAL seconds before testing if Portal is up. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds + sleep $INTERVAL + TIME=$(($TIME+$INTERVAL)) +done + +if [ "$TIME" -ge "$TIME_OUT" ]; then + echo TIME OUT: Docker containers not started in $TIME_OUT seconds... Could cause problems for tests... +fi + +#sleep 3m + + + +#if [ "$TIME" -ge "$TIME_OUT" ]; then +# echo TIME OUT: Docker containers not started in $TIME_OUT seconds... Could cause problems for tests... +#fi + + + + + +#Get current IP of VM +HOST_IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}') +export HOST_IP=${HOST_IP} + +#docker logs deliveries_portal-db_1 +docker logs deliveries_portal-apps_1 +docker logs deliveries_portal-wms_1 + + + + diff --git a/test/csit/plans/portal-sdk/testsuite/teardown.sh b/test/csit/plans/portal-sdk/testsuite/teardown.sh new file mode 100644 index 000000000..e0431a72f --- /dev/null +++ b/test/csit/plans/portal-sdk/testsuite/teardown.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# +# Copyright 2017 AT&T Intellectual Property. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +docker kill $(docker ps -q) + + diff --git a/test/csit/plans/portal-sdk/testsuite/testplan.txt b/test/csit/plans/portal-sdk/testsuite/testplan.txt new file mode 100644 index 000000000..27f8af34a --- /dev/null +++ b/test/csit/plans/portal-sdk/testsuite/testplan.txt @@ -0,0 +1,3 @@ +# Test suites are relative paths under [integration.git]/test/csit/tests/. +# Place the suites in run order. +portal-sdk/testsuites diff --git a/test/csit/plans/portal/testsuite/.env b/test/csit/plans/portal/testsuite/.env index fa3076859..0b7de9560 100644 --- a/test/csit/plans/portal/testsuite/.env +++ b/test/csit/plans/portal/testsuite/.env @@ -1,17 +1,33 @@ # Environment settings # used by docker-compose AND by other shell scripts - # Host directory with config files -PROJECT_DIR=/PROJECT/OpenSource/UbuntuEP + +LOGS_DIR=./logs +PROPS_DIR=./properties + # Directory within containers WEBAPPS_DIR=/opt/apache-tomcat-8.0.37/webapps # Following are ALSO used in demo/boot/portal_vm_init.sh -EP_IMG_NAME=portal-apps -DB_IMG_NAME=portal-db -WMS_IMG_NAME=portal-wms +EP_IMG_NAME=onap/portal-apps +DB_IMG_NAME=onap/portal-db +WMS_IMG_NAME=onap/portal-wms +CLI_IMG_NAME=onap/cli + # Tag all images with this -PORTAL_TAG=1.1.0 +PORTAL_TAG=1.3.0 +DOCKER_IMAGE_VERSION=1.3-STAGING-latest +CLI_DOCKER_VERSION=1.1-STAGING-latest +NEXUS_DOCKER_REPO=nexus3.onap.org:10003 + + +# Optional settings with no defaults. +EXTRA_HOST_IP="" +EXTRA_HOST_NAME="" +# Export shell environment variables on hosts with no DNS; +# a line is added to docker container's /etc/hosts. +# For example: +#EXTRA_HOST_IP="-i ${HOST_IP}" +#EXTRA_HOST_NAME="-n portal.api.simpledemo.openecomp.org" -NEXUS_REPO=nexus3.onap.org:10003 diff --git a/test/csit/plans/portal/testsuite/docker-compose.yml b/test/csit/plans/portal/testsuite/docker-compose.yml new file mode 100644 index 000000000..7a9fb8caa --- /dev/null +++ b/test/csit/plans/portal/testsuite/docker-compose.yml @@ -0,0 +1,98 @@ +# docker-compose for ONAP portal containers: database, microservice, portal apps. +# Relies on .env file in current directory. +# Works in multiple environments; does not pull from a Nexus registry. +# Exposes the portal apps docker (but not DB nor WMS dockers) on the host network. +# Images must be pulled from ONAP Nexus registry after logging in like this: +# docker login -u USER -p PASS nexus3.onap.org:10001 + +version: '2.0' + +services: + + cli: + image: ${CLI_IMG_NAME}:${PORTAL_TAG} + environment: + CLI_MODE: 'daemon' + ports: + - 8080:80 + - 9090:8080 + logging: + driver: json-file + + # Config files may use hostname "portal-db" + portal-db: + image: ${DB_IMG_NAME}:${PORTAL_TAG} + environment: + MYSQL_ROOT_PASSWORD: 'Aa123456' + expose: + - 3306 + volumes: + # Just specify a path and let the Engine create a volume + - /var/lib/mysql + logging: + driver: json-file + + # An environment variable here CAN override the database URL; + # instead the value in the config file uses hostname from above + portal-wms: + image: ${WMS_IMG_NAME}:${PORTAL_TAG} + expose: + - 8082 + links: + - portal-db + depends_on: + - portal-db + volumes: + - ${PROPS_DIR}/ECOMPWIDGETMS/application.properties:/application.properties + command: + - /wait-for.sh + - -t + - "420" + - portal-db:3306 + - -- + - /start-wms-cmd.sh + logging: + driver: json-file + + # Environment variables here CANNOT override the database URL because + # two apps use identical configuration keys with different values + portal-apps: + image: ${EP_IMG_NAME}:${PORTAL_TAG} + expose: + - 8989 + ports: + - 8989:8080 + - 8010:8009 + - 8006:8005 + links: + - portal-db + - portal-wms + depends_on: + - portal-db + - portal-wms + volumes: + - ${PROPS_DIR}/ECOMPPORTALAPP/system.properties:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/conf/system.properties + - ${PROPS_DIR}/ECOMPPORTALAPP/fusion.properties:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/fusion/conf/fusion.properties + - ${PROPS_DIR}/ECOMPPORTALAPP/portal.properties:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/classes/portal.properties + - ${PROPS_DIR}/ECOMPPORTALAPP/openid-connect.properties:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/classes/openid-connect.properties + - ${PROPS_DIR}/ECOMPPORTALAPP/logback.xml:${WEBAPPS_DIR}/ECOMPPORTAL/WEB-INF/classes/logback.xml + - ${PROPS_DIR}/ECOMPSDKAPP/fusion.properties:${WEBAPPS_DIR}/ECOMPSDKAPP/WEB-INF/fusion/conf/fusion.properties + - ${PROPS_DIR}/ECOMPSDKAPP/system.properties:${WEBAPPS_DIR}/ECOMPSDKAPP/WEB-INF/conf/system.properties + - ${PROPS_DIR}/ECOMPSDKAPP/portal.properties:${WEBAPPS_DIR}/ECOMPSDKAPP/WEB-INF/classes/portal.properties + - ${PROPS_DIR}/ECOMPDBCAPP/system.properties:${WEBAPPS_DIR}/ECOMPDBCAPP/WEB-INF/conf/system.properties + - ${PROPS_DIR}/ECOMPDBCAPP/portal.properties:${WEBAPPS_DIR}/ECOMPDBCAPP/WEB-INF/classes/portal.properties + - ${PROPS_DIR}/ECOMPDBCAPP/dbcapp.properties:${WEBAPPS_DIR}/ECOMPDBCAPP/WEB-INF/dbcapp/dbcapp.properties + - ${PROPS_DIR}/ECOMPDBCAPP/fusion.properties:${WEBAPPS_DIR}/ECOMPDBCAPP/WEB-INF/fusion/conf/fusion.properties + - ${LOGS_DIR}:/opt/apache-tomcat-8.0.37/logs + command: + - /wait-for.sh + - -t + - "420" + - portal-db:3306 + - -- + - /start-apps-cmd.sh + # see comments in .env file + - $EXTRA_HOST_IP + - $EXTRA_HOST_NAME + logging: + driver: json-file diff --git a/test/csit/plans/portal/testsuite/portal b/test/csit/plans/portal/testsuite/portal deleted file mode 160000 -Subproject e65a5d4a4852cbd0056fb3b881613f0a4dba4ec diff --git a/test/csit/plans/portal/testsuite/setup.sh b/test/csit/plans/portal/testsuite/setup.sh index a6c1ba483..0c90dc66b 100644 --- a/test/csit/plans/portal/testsuite/setup.sh +++ b/test/csit/plans/portal/testsuite/setup.sh @@ -1,40 +1,178 @@ #!/bin/bash -# Starts docker containers for ONAP Portal in Rackspace. -# Version for Amsterdam/R1 uses docker-compose. +# Starts docker containers for ONAP Portal +# This version for Amsterdam/R1 of Portal, uses docker-compose. +# Temporarily maintained in portal/deliveries area; +# replicated from the ONAP demo/boot area due to release concerns. + +# Start Xvfb +echo -e "Starting Xvfb on display ${DISPLAY} with res ${RES}" +Xvfb ${DISPLAY} -ac -screen 0 ${RES} +extension RANDR & +XVFBPID=$! +# Get pid of this spawned process to make sure we kill the correct process later + +#Get current IP of VM +HOST_IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}') +export HOST_IP=${HOST_IP} + + + +if ! ifconfig docker0; then +if ! ifconfig ens3; then +echo "Could not determine IP address" +exit 1 +fi +export DOCKER_IP_IP=`ifconfig ens3 | awk -F: '/inet addr/ {gsub(/ .*/,"",$2); print $2}'` +else +export DOCKER_IP=`ifconfig docker0 | awk -F: '/inet addr/ {gsub(/ .*/,"",$2); print $2}'` +fi +echo $DOCKER_IP + + +# Pass any variables required by Robot test suites in ROBOT_VARIABLES +#ROBOT_VARIABLES="-v MOCK_IP:${MOCK_IP} -v IP:${IP} -v POLICY_IP:${POLICY_IP} -v DOCKER_IP:${DOCKER_IP}" +#export PORTAL_IP=${PORTAL_IP} +ROBOT_VARIABLES="-v MOCK_IP:${MOCK_IP} -v IP:${IP} -v DOCKER_IP:${DOCKER_IP}" +export DOCKER_IP=${DOCKER_IP} + + + # be verbose set -x # Establish environment variables -NEXUS_USERNAME=$(cat /opt/config/nexus_username.txt) -NEXUS_PASSWD=$(cat /opt/config/nexus_password.txt) -NEXUS_DOCKER_REPO=$(cat /opt/config/nexus_docker_repo.txt) -DOCKER_IMAGE_VERSION=$(cat /opt/config/docker_version.txt) +NEXUS_USERNAME=docker +NEXUS_PASSWD=docker +NEXUS_DOCKER_REPO=nexus3.onap.org:10003 + + + +CURR="$(pwd)" +git clone http://gerrit.onap.org/r/portal -b "release-1.3.0" # Refresh configuration and scripts -cd /opt/portal +cd portal git pull cd deliveries - +rm .env +#rm docker-compose.yml +cp $CURR/.env . +#cp $CURR/docker-compose.yml . +#cd properties_simpledemo/ECOMPPORTALAPP +#rm system.properties +#cp $CURR/system.properties . +#cd ../.. # Get image names used below from docker-compose environment file -source .env +source $CURR/.env +#source .env + +# Make inter-app communication work in CSIT +export EXTRA_HOST_IP="-i ${HOST_IP}" +export EXTRA_HOST_NAME="-n portal.api.simpledemo.onap.org" + + +# Copy property files to new directory +mkdir -p $PROPS_DIR +cp -r properties_simpledemo/* $PROPS_DIR +# Also create logs directory +mkdir -p $LOGS_DIR -# Copy property files -ETC=/PROJECT/OpenSource/UbuntuEP/etc -mkdir -p $ETC -cp -r properties_rackspace/* $ETC # Refresh images docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO -docker pull $NEXUS_DOCKER_REPO/openecomp/${DB_IMG_NAME}:$DOCKER_IMAGE_VERSION -docker pull $NEXUS_DOCKER_REPO/openecomp/${EP_IMG_NAME}:$DOCKER_IMAGE_VERSION -docker pull $NEXUS_DOCKER_REPO/openecomp/${WMS_IMG_NAME}:$DOCKER_IMAGE_VERSION +docker pull $NEXUS_DOCKER_REPO/${DB_IMG_NAME}:$DOCKER_IMAGE_VERSION +docker pull $NEXUS_DOCKER_REPO/${EP_IMG_NAME}:$DOCKER_IMAGE_VERSION +docker pull $NEXUS_DOCKER_REPO/${WMS_IMG_NAME}:$DOCKER_IMAGE_VERSION +docker pull $NEXUS_DOCKER_REPO/$CLI_IMG_NAME:$CLI_DOCKER_VERSION # Tag them as expected by docker-compose file -docker tag $NEXUS_DOCKER_REPO/openecomp/${DB_IMG_NAME}:$DOCKER_IMAGE_VERSION $DB_IMG_NAME:$PORTAL_TAG -docker tag $NEXUS_DOCKER_REPO/openecomp/${EP_IMG_NAME}:$DOCKER_IMAGE_VERSION $EP_IMG_NAME:$PORTAL_TAG -docker tag $NEXUS_DOCKER_REPO/openecomp/${WMS_IMG_NAME}:$DOCKER_IMAGE_VERSION $WMS_IMG_NAME:$PORTAL_TAG +docker tag $NEXUS_DOCKER_REPO/${DB_IMG_NAME}:$DOCKER_IMAGE_VERSION $DB_IMG_NAME:$PORTAL_TAG +docker tag $NEXUS_DOCKER_REPO/${EP_IMG_NAME}:$DOCKER_IMAGE_VERSION $EP_IMG_NAME:$PORTAL_TAG +docker tag $NEXUS_DOCKER_REPO/${WMS_IMG_NAME}:$DOCKER_IMAGE_VERSION $WMS_IMG_NAME:$PORTAL_TAG +docker tag $NEXUS_DOCKER_REPO/$CLI_IMG_NAME:$CLI_DOCKER_VERSION $CLI_IMG_NAME:$PORTAL_TAG + + +# compose is not in /usr/bin +docker-compose down +docker-compose up -d + +#${HOSTNAME}="portal.api.simpledemo.openecomp.org" +#echo "$HOST_IP ${HOSTNAME}" >> /etc/hosts + +#echo "$HOST_IP portal.api.simpledemo.openecomp.org" >> /etc/hosts +#sudo sed -i "2i$HOST_IP portal.api.simpledemo.openecomp.org" /etc/hosts + +#HOST="portal.api.simpledemo.openecomp.org" +#sudo sed -i "/$HOST/ s/.*/$HOST_IP\t$HOST/g" /etc/hosts + +# insert/update hosts entry +ip_address=$HOST_IP +host_name="portal.api.simpledemo.onap.org" +# find existing instances in the host file and save the line numbers +matches_in_hosts="$(grep -n $host_name /etc/hosts | cut -f1 -d:)" +host_entry="${ip_address} ${host_name}" + +echo "$host_entry" + +if [ ! -z "$matches_in_hosts" ] +then +echo "Updating existing hosts entry." +# iterate over the line numbers on which matches were found +while read -r line_number; do +# replace the text of each line with the desired host entry +sudo sed -i '' "${line_number}s/.*/${host_entry} /" /etc/hosts +echo "${line_number} ${host_entry}" +done <<< "$matches_in_hosts" +else +echo "Adding new hosts entry." +echo "$host_entry" | sudo tee -a /etc/hosts > /dev/null +fi + + + +sleep 3m + +# WAIT 5 minutes maximum and test every 5 seconds if Portal up using HealthCheck API +TIME_OUT=500 +INTERVAL=20 +TIME=0 +while [ "$TIME" -lt "$TIME_OUT" ]; do + response=$(curl --write-out '%{http_code}' --silent --output /dev/null http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/portalApi/healthCheck); echo $response + + if [ "$response" == "200" ]; then + echo Portal and its database well started in $TIME seconds + break; + fi + + echo Sleep: $INTERVAL seconds before testing if Portal is up. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds + sleep $INTERVAL + TIME=$(($TIME+$INTERVAL)) +done + +if [ "$TIME" -ge "$TIME_OUT" ]; then + echo TIME OUT: Docker containers not started in $TIME_OUT seconds... Could cause problems for tests... +fi + +#sleep 3m + + + +#if [ "$TIME" -ge "$TIME_OUT" ]; then +# echo TIME OUT: Docker containers not started in $TIME_OUT seconds... Could cause problems for tests... +#fi + + + + + +#Get current IP of VM +HOST_IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}') +export HOST_IP=${HOST_IP} + +#docker logs deliveries_portal-db_1 +docker logs deliveries_portal-apps_1 +docker logs deliveries_portal-wms_1 + + + -# docker-compose is not in /usr/bin -/opt/docker/docker-compose down -/opt/docker/docker-compose up -d diff --git a/test/csit/plans/portal/testsuite/teardown.sh b/test/csit/plans/portal/testsuite/teardown.sh index 4214c8279..e0431a72f 100644 --- a/test/csit/plans/portal/testsuite/teardown.sh +++ b/test/csit/plans/portal/testsuite/teardown.sh @@ -15,6 +15,6 @@ # limitations under the License. # -kill-instance.sh i-mock +docker kill $(docker ps -q) diff --git a/test/csit/plans/portal/testsuite/testplan.txt b/test/csit/plans/portal/testsuite/testplan.txt index 5aba3164c..d7b18a5ce 100644 --- a/test/csit/plans/portal/testsuite/testplan.txt +++ b/test/csit/plans/portal/testsuite/testplan.txt @@ -1,3 +1,3 @@ # Test suites are relative paths under [integration.git]/test/csit/tests/. # Place the suites in run order. -portal/Healthcheck +portal/testsuites diff --git a/test/csit/plans/sdc/nightly/setup.sh b/test/csit/plans/sdc/nightly/setup.sh new file mode 100644 index 000000000..ac7a7f3f4 --- /dev/null +++ b/test/csit/plans/sdc/nightly/setup.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# +# Copyright 2016-2017 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Modifications copyright (c) 2017 AT&T Intellectual Property +# +# Place the scripts in run order: + + +mkdir ${WORKSPACE}/archives +chmod -R 777 ${WORKSPACE}/archives + +source ${WORKSPACE}/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh + +source ${WORKSPACE}/test/csit/scripts/sdc/start_sdc_containers.sh + +source ${WORKSPACE}/test/csit/scripts/sdc/docker_health.sh + +source ${WORKSPACE}/test/csit/scripts/sdc/start_sdc_sanity.sh + + +BE_IP=`get-instance-ip.sh sdc-BE` +echo BE_IP=${BE_IP} + + +# Pass any variables required by Robot test suites in ROBOT_VARIABLES +ROBOT_VARIABLES="-v BE_IP:${BE_IP}" + diff --git a/test/csit/plans/sdc/healthCheck/teardown.sh b/test/csit/plans/sdc/nightly/teardown.sh index a5f69819e..a5f69819e 100644 --- a/test/csit/plans/sdc/healthCheck/teardown.sh +++ b/test/csit/plans/sdc/nightly/teardown.sh diff --git a/test/csit/plans/sdc/healthCheck/testplan.txt b/test/csit/plans/sdc/nightly/testplan.txt index 2b2db1ede..3011ad5cb 100644 --- a/test/csit/plans/sdc/healthCheck/testplan.txt +++ b/test/csit/plans/sdc/nightly/testplan.txt @@ -1,3 +1,3 @@ # Test suites are relative paths under [integration.git]/test/csit/tests/. # Place the suites in run order. -sdc/healthCheck +sdc/nightly diff --git a/test/csit/plans/sdc/healthCheck/setup.sh b/test/csit/plans/sdc/sanity/setup.sh index f247be656..3e4e66024 100644 --- a/test/csit/plans/sdc/healthCheck/setup.sh +++ b/test/csit/plans/sdc/sanity/setup.sh @@ -23,6 +23,10 @@ source ${WORKSPACE}/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh source ${WORKSPACE}/test/csit/scripts/sdc/start_sdc_containers.sh +source ${WORKSPACE}/test/csit/scripts/sdc/docker_health.sh + +source ${WORKSPACE}/test/csit/scripts/sdc/start_sdc_sanity.sh + BE_IP=`get-instance-ip.sh sdc-BE` echo BE_IP=${BE_IP} diff --git a/test/csit/plans/sdc/sanity/teardown.sh b/test/csit/plans/sdc/sanity/teardown.sh new file mode 100644 index 000000000..a5f69819e --- /dev/null +++ b/test/csit/plans/sdc/sanity/teardown.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# Copyright 2016-2017 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Modifications copyright (c) 2017 AT&T Intellectual Property +# + +source ${WORKSPACE}/test/csit/scripts/sdc/kill_containers_and_remove_dataFolders.sh + +# $WORKSPACE/archives/clamp-clone deleted with archives folder when tests starts so we keep it at the end for debugging diff --git a/test/csit/plans/sdc/sanity/testplan.txt b/test/csit/plans/sdc/sanity/testplan.txt new file mode 100644 index 000000000..801f37d38 --- /dev/null +++ b/test/csit/plans/sdc/sanity/testplan.txt @@ -0,0 +1,3 @@ +# Test suites are relative paths under [integration.git]/test/csit/tests/. +# Place the suites in run order. +sdc/sanity diff --git a/test/csit/plans/sdnc/healthcheck/health_check.sh b/test/csit/plans/sdnc/healthcheck/health_check.sh index 96c99848a..e8b5056d4 100644 --- a/test/csit/plans/sdnc/healthcheck/health_check.sh +++ b/test/csit/plans/sdnc/healthcheck/health_check.sh @@ -17,6 +17,8 @@ SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo $SCRIPTS +unset http_proxy https_proxy + response=$(curl --write-out '%{http_code}' --silent --output /dev/null -H "Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==" -X POST -H "X-FromAppId: csit-sdnc" -H "X-TransactionId: csit-sdnc" -H "Accept: application/json" -H "Content-Type: application/json" http://localhost:8282/restconf/operations/SLI-API:healthcheck ) if [ "$response" == "200" ]; then diff --git a/test/csit/plans/sdnc/healthcheck/setup.sh b/test/csit/plans/sdnc/healthcheck/setup.sh index 643d54fe9..5e51b0e6a 100644 --- a/test/csit/plans/sdnc/healthcheck/setup.sh +++ b/test/csit/plans/sdnc/healthcheck/setup.sh @@ -20,6 +20,13 @@ SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source ${WORKSPACE}/test/csit/scripts/sdnc/script1.sh +export NEXUS_USERNAME=docker +export NEXUS_PASSWD=docker +export NEXUS_DOCKER_REPO=nexus3.onap.org:10001 +export DMAAP_TOPIC=AUTO +export DOCKER_IMAGE_VERSION=1.2-STAGING-latest +export CCSDK_DOCKER_IMAGE_VERSION=0.1-STAGING-latest + export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1) if [ "$MTU" == "" ]; then @@ -37,16 +44,16 @@ unset http_proxy https_proxy cd $WORKSPACE/archives/sdnc/installation/src/main/yaml sed -i "s/DMAAP_TOPIC_ENV=.*/DMAAP_TOPIC_ENV="AUTO"/g" docker-compose.yml -docker login -u docker -p docker nexus3.onap.org:10001 +docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO -docker pull nexus3.onap.org:10001/onap/sdnc-image:latest -docker tag nexus3.onap.org:10001/onap/sdnc-image:latest onap/sdnc-image:latest +docker pull $NEXUS_DOCKER_REPO/onap/sdnc-image:$DOCKER_IMAGE_VERSION +docker tag $NEXUS_DOCKER_REPO/onap/sdnc-image:$DOCKER_IMAGE_VERSION onap/sdnc-image:latest -docker pull nexus3.onap.org:10001/onap/ccsdk-dgbuilder-image:latest -docker tag nexus3.onap.org:10001/onap/ccsdk-dgbuilder-image:latest onap/ccsdk-dgbuilder-image:latest +docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION +docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION onap/ccsdk-dgbuilder-image:latest -docker pull nexus3.onap.org:10001/onap/admportal-sdnc-image:latest -docker tag nexus3.onap.org:10001/onap/admportal-sdnc-image:latest onap/admportal-sdnc-image:latest +docker pull $NEXUS_DOCKER_REPO/onap/admportal-sdnc-image:$DOCKER_IMAGE_VERSION +docker tag $NEXUS_DOCKER_REPO/onap/admportal-sdnc-image:$DOCKER_IMAGE_VERSION onap/admportal-sdnc-image:latest # start SDNC containers with docker compose and configuration from docker-compose.yml curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > docker-compose @@ -113,6 +120,9 @@ if [ "$num_failed_bundles" -ge 1 ]; then echo " $failed_bundles" fi +# Sleep additional 120 to give application time to finish +sleep 120 + # Pass any variables required by Robot test suites in ROBOT_VARIABLES ROBOT_VARIABLES="-v SCRIPTS:${SCRIPTS}" diff --git a/test/csit/plans/sdnc/healthcheck/teardown.sh b/test/csit/plans/sdnc/healthcheck/teardown.sh index 4d99b9f31..925e7b732 100644 --- a/test/csit/plans/sdnc/healthcheck/teardown.sh +++ b/test/csit/plans/sdnc/healthcheck/teardown.sh @@ -21,5 +21,6 @@ kill-instance.sh sdnc_controller_container kill-instance.sh sdnc_dgbuilder_container kill-instance.sh sdnc_portal_container kill-instance.sh sdnc_db_container +kill-instance.sh sdnc_ueblistener_container # $WORKSPACE/archives/appc deleted with archives folder when tests starts so we keep it at the end for debugging diff --git a/test/csit/plans/usecase-ui-server/testsuite/setup.sh b/test/csit/plans/usecase-ui-server/testsuite/setup.sh new file mode 100644 index 000000000..b2641beca --- /dev/null +++ b/test/csit/plans/usecase-ui-server/testsuite/setup.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# +# Copyright (C) 2017 CMCC, Inc. and others. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Place the scripts in run order: +# Start all process required for executing test case + +source ${SCRIPTS}/common_functions.sh + +#start msb +docker run -d -p 8500:8500 --name msb_consul consul +MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` +echo MSB_CONSUL_IP=${MSB_CONSUL_IP} + +docker run -d -p 10081:10081 -e CONSUL_IP=$MSB_CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery +MSB_DISCOVERY_IP=`get-instance-ip.sh msb_discovery` +echo DISCOVERY_IP=${MSB_DISCOVERY_IP} + +docker run -d -p 80:80 -e CONSUL_IP=$MSB_CONSUL_IP -e SDCLIENT_IP=$MSB_DISCOVERY_IP -e "ROUTE_LABELS=visualRange:1" --name msb_internal_apigateway nexus3.onap.org:10001/onap/msb/msb_apigateway +MSB_IAG_IP=`get-instance-ip.sh msb_internal_apigateway` +echo MSB_IAG_IP=${MSB_IAG_IP} + +# Wait for initialization(8500 Consul, 10081 Service Registration & Discovery, 80 api gateway) +for i in {1..10}; do + curl -sS -m 1 ${MSB_CONSUL_IP}:8500 && curl -sS -m 1 ${MSB_DISCOVERY_IP}:10081 && curl -sS -m 1 ${MSB_IAG_IP}:80 && break + echo sleep $i + sleep $i +done + +# Need some time for the initialization of MSB services +echo sleep 60 +sleep 60 + +# start usecase-ui-server +docker run -d --name usecase-ui-server -v /var/lib/mysql -e MSB_ADDR=${MSB_IAG_IP}:80 nexus3.onap.org:10001/onap/usecase-ui/usecase-ui-server +USECASEUI_IP=`get-instance-ip.sh usecase-ui-server` + +# Wait for initialization +for i in {1..10}; do + curl -sS -m 1 ${USECASEUI_IP}:8901 && break + echo sleep $i + sleep $i +done + +# Pass any variables required by Robot test suites in ROBOT_VARIABLES +ROBOT_VARIABLES="-v MSB_IAG_IP:${MSB_IAG_IP} -v USECASEUI_IP:${USECASEUI_IP} -v SCRIPTS:${SCRIPTS}" diff --git a/test/csit/plans/usecase-ui-server/testsuite/teardown.sh b/test/csit/plans/usecase-ui-server/testsuite/teardown.sh new file mode 100644 index 000000000..46f5879b3 --- /dev/null +++ b/test/csit/plans/usecase-ui-server/testsuite/teardown.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# Copyright (C) 2017 CMCC, Inc. and others. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# This script is sourced by run-csit.sh after Robot test completion. +kill-instance.sh msb_internal_apigateway +kill-instance.sh msb_discovery +kill-instance.sh msb_consul +kill-instance.sh usecase-ui-server diff --git a/test/csit/plans/usecase-ui-server/testsuite/testplan.txt b/test/csit/plans/usecase-ui-server/testsuite/testplan.txt new file mode 100644 index 000000000..ec7f200a4 --- /dev/null +++ b/test/csit/plans/usecase-ui-server/testsuite/testplan.txt @@ -0,0 +1,3 @@ +# Test suites are relative paths under [integration.git]/test/csit/tests/. +# Place the suites in run order. +usecase-ui/server/test.robot diff --git a/test/csit/plans/vfc-gvnfm-vnflcm/sanity-check/setup.sh b/test/csit/plans/vfc-gvnfm-vnflcm/sanity-check/setup.sh index 634c32722..63782a9f5 100755 --- a/test/csit/plans/vfc-gvnfm-vnflcm/sanity-check/setup.sh +++ b/test/csit/plans/vfc-gvnfm-vnflcm/sanity-check/setup.sh @@ -20,7 +20,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} @@ -54,8 +54,11 @@ for i in {1..10}; do sleep $i done +docker cp vfc-vnflcm:/service/vfc/gvnfm/vnflcm/lcm/lcm/pub/config/config.py ./ +cat config.py + docker cp vfc-vnflcm:/service/vfc/gvnfm/vnflcm/lcm/logs/runtime_lcm.log ./ cat runtime_lcm.log # Pass any variables required by Robot test suites in ROBOT_VARIABLES -ROBOT_VARIABLES="-v MSB_IAG_IP:${MSB_IAG_IP} -v VNFLCM_IP:${VNFLCM_IP}" +ROBOT_VARIABLES="-v MSB_IAG_IP:${MSB_IAG_IP} -v VNFLCM_IP:${VNFLCM_IP} -v SCRIPTS:${SCRIPTS}" diff --git a/test/csit/plans/vfc-gvnfm-vnfmgr/sanity-check/setup.sh b/test/csit/plans/vfc-gvnfm-vnfmgr/sanity-check/setup.sh index ec315a24b..8a3f9af97 100755 --- a/test/csit/plans/vfc-gvnfm-vnfmgr/sanity-check/setup.sh +++ b/test/csit/plans/vfc-gvnfm-vnfmgr/sanity-check/setup.sh @@ -17,28 +17,40 @@ # Place the scripts in run order: # Start all process required for executing test case -#login to the onap nexus docker repo -docker login -u docker -p docker nexus3.onap.org:10001 - -# Start MSB -docker run -d -p 8500:8500 --name msb_consul nexus3.onap.org:10001/onap/msb/msb_base -CONSUL_IP=`get-instance-ip.sh msb_consul` -echo CONSUL_IP=${CONSUL_IP} -docker run -d -p 10081:10081 -e CONSUL_IP=$CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery -DISCOVERY_IP=`get-instance-ip.sh msb_discovery` -echo DISCOVERY_IP=${DISCOVERY_IP} -docker run -d -p 80:80 -e CONSUL_IP=$CONSUL_IP -e SDCLIENT_IP=$DISCOVERY_IP --name msb_internal_apigateway nexus3.onap.org:10001/onap/msb/msb_apigateway -MSB_IP==`get-instance-ip.sh msb_internal_apigateway` -echo MSB_IP=${MSB_IP} +source ${SCRIPTS}/common_functions.sh + +#start msb +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 +MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` +echo MSB_CONSUL_IP=${MSB_CONSUL_IP} + +docker run -d -p 10081:10081 -e CONSUL_IP=$MSB_CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery +MSB_DISCOVERY_IP=`get-instance-ip.sh msb_discovery` +echo DISCOVERY_IP=${MSB_DISCOVERY_IP} + +docker run -d -p 80:80 -e CONSUL_IP=$MSB_CONSUL_IP -e SDCLIENT_IP=$MSB_DISCOVERY_IP --name msb_internal_apigateway nexus3.onap.org:10001/onap/msb/msb_apigateway +MSB_IAG_IP=`get-instance-ip.sh msb_internal_apigateway` +echo MSB_IAG_IP=${MSB_IAG_IP} + +# Wait for initialization(8500 Consul, 10081 Service Registration & Discovery, 80 api gateway) +for i in {1..10}; do + curl -sS -m 1 ${MSB_CONSUL_IP}:8500 && curl -sS -m 1 ${MSB_DISCOVERY_IP}:10081 && curl -sS -m 1 ${MSB_IAG_IP}:80 && break + echo sleep $i + sleep $i +done + +# wait for container initalization +echo sleep 30 +sleep 30 # start vfc-vnfmgr -docker run -d --name vfc-vnfmgr -e MSB_ADDR=${MSB_IP}:80 nexus3.onap.org:10001/onap/vfc/vnfmgr +docker run -d --name vfc-vnfmgr -e MSB_ADDR=${MSB_IAG_IP}:80 nexus3.onap.org:10001/onap/vfc/vnfmgr VNFMGR_IP=`get-instance-ip.sh vfc-vnfmgr` for i in {1..10}; do - curl -sS ${VNFMGR_IP}:8803 && break + curl -sS -m 1 ${VNFMGR_IP}:8803 && break echo sleep $i sleep $i done # Pass any variables required by Robot test suites in ROBOT_VARIABLES -ROBOT_VARIABLES="-v MSB_IP:${MSB_IP} -v VNFMGR_IP:${VNFMGR_IP}" +ROBOT_VARIABLES="-v MSB_IAG_IP:${MSB_IAG_IP} -v VNFMGR_IP:${VNFMGR_IP} -v SCRIPTS:${SCRIPTS}" diff --git a/test/csit/plans/vfc-gvnfm-vnfres/sanity-check/setup.sh b/test/csit/plans/vfc-gvnfm-vnfres/sanity-check/setup.sh index 0139bcdcc..e976f9281 100755 --- a/test/csit/plans/vfc-gvnfm-vnfres/sanity-check/setup.sh +++ b/test/csit/plans/vfc-gvnfm-vnfres/sanity-check/setup.sh @@ -21,7 +21,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} docker run -d -p 10081:10081 -e CONSUL_IP=$MSB_CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery @@ -53,4 +53,4 @@ for i in {1..10}; do done # Pass any variables required by Robot test suites in ROBOT_VARIABLES -ROBOT_VARIABLES="-v MSB_IAG_IP:${MSB_IAG_IP} -v VNFRES_IP:${VNFRES_IP}" +ROBOT_VARIABLES="-v MSB_IAG_IP:${MSB_IAG_IP} -v VNFRES_IP:${VNFRES_IP} -v SCRIPTS:${SCRIPTS}" diff --git a/test/csit/plans/vfc-nfvo-catalog/sanity-check/setup.sh b/test/csit/plans/vfc-nfvo-catalog/sanity-check/setup.sh index 6374b88ba..3576e234d 100644 --- a/test/csit/plans/vfc-nfvo-catalog/sanity-check/setup.sh +++ b/test/csit/plans/vfc-nfvo-catalog/sanity-check/setup.sh @@ -21,7 +21,7 @@ docker login -u docker -p docker nexus3.onap.org:10001 # start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 CONSUL_IP=`get-instance-ip.sh msb_consul` echo CONSUL_IP=${CONSUL_IP} @@ -48,7 +48,7 @@ sleep 60 docker run -d --name vfc-catalog -v /var/lib/mysql -e MSB_ADDR=${DISCOVERY_IP}:10081 nexus3.onap.org:10001/onap/vfc/catalog CATALOG_IP=`get-instance-ip.sh vfc-catalog` for i in {1..10}; do - curl -sS ${CATALOG_IP}:8806 && break + curl -sS -m 1 ${CATALOG_IP}:8806 && break echo sleep $i sleep $i done diff --git a/test/csit/plans/vfc-nfvo-driver-ems/sanity-check/setup.sh b/test/csit/plans/vfc-nfvo-driver-ems/sanity-check/setup.sh index 09978ca6d..d381f8f38 100755 --- a/test/csit/plans/vfc-nfvo-driver-ems/sanity-check/setup.sh +++ b/test/csit/plans/vfc-nfvo-driver-ems/sanity-check/setup.sh @@ -20,7 +20,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} diff --git a/test/csit/plans/vfc-nfvo-driver-sfc/sanity-check/setup.sh b/test/csit/plans/vfc-nfvo-driver-sfc/sanity-check/setup.sh index 45ad0cbb1..85a3e69f1 100755 --- a/test/csit/plans/vfc-nfvo-driver-sfc/sanity-check/setup.sh +++ b/test/csit/plans/vfc-nfvo-driver-sfc/sanity-check/setup.sh @@ -20,7 +20,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} diff --git a/test/csit/plans/vfc-nfvo-driver-vnfm-gvnfm/sanity-check/setup.sh b/test/csit/plans/vfc-nfvo-driver-vnfm-gvnfm/sanity-check/setup.sh index 283cb0d41..bdc66d0e1 100644 --- a/test/csit/plans/vfc-nfvo-driver-vnfm-gvnfm/sanity-check/setup.sh +++ b/test/csit/plans/vfc-nfvo-driver-vnfm-gvnfm/sanity-check/setup.sh @@ -21,7 +21,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} docker run -d -p 10081:10081 -e CONSUL_IP=$MSB_CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery @@ -47,7 +47,7 @@ GVNFMDRIVER_IP=`get-instance-ip.sh vfc-gvnfmdriver` # Wait for initialization for i in {1..10}; do - curl -sS ${GVNFMDRIVER_IP}:8484 && break + curl -sS -m 1 ${GVNFMDRIVER_IP}:8484 && break echo sleep $i sleep $i done diff --git a/test/csit/plans/vfc-nfvo-driver-vnfm-svnfm/sanity-check/setup.sh b/test/csit/plans/vfc-nfvo-driver-vnfm-svnfm/sanity-check/setup.sh index 64fa5a4d0..f2eadb010 100644 --- a/test/csit/plans/vfc-nfvo-driver-vnfm-svnfm/sanity-check/setup.sh +++ b/test/csit/plans/vfc-nfvo-driver-vnfm-svnfm/sanity-check/setup.sh @@ -21,7 +21,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} docker run -d -p 10081:10081 -e CONSUL_IP=$MSB_CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery @@ -57,7 +57,7 @@ done # Start svnfm-huawei docker run -d --name vfc-svnfm-huawei -e MSB_ADDR=${MSB_IAG_IP}:80 nexus3.onap.org:10001/onap/vfc/nfvo/svnfm/huawei SERVICE_IP=`get-instance-ip.sh vfc-svnfm-huawei` -for i in {1..10}; do +for i in {1..20}; do curl -sS ${SERVICE_IP}:8482 && break echo sleep $i sleep $i diff --git a/test/csit/plans/vfc-nfvo-lcm/sanity-check/setup.sh b/test/csit/plans/vfc-nfvo-lcm/sanity-check/setup.sh index 3cc53988c..74b0ab61d 100755 --- a/test/csit/plans/vfc-nfvo-lcm/sanity-check/setup.sh +++ b/test/csit/plans/vfc-nfvo-lcm/sanity-check/setup.sh @@ -20,7 +20,7 @@ source ${SCRIPTS}/common_functions.sh #start msb -docker run -d -p 8500:8500 --name msb_consul consul +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` echo MSB_CONSUL_IP=${MSB_CONSUL_IP} diff --git a/test/csit/plans/vfc-nfvo-resmanagement/sanity-check/setup.sh b/test/csit/plans/vfc-nfvo-resmanagement/sanity-check/setup.sh index a18562eb7..68b784310 100644 --- a/test/csit/plans/vfc-nfvo-resmanagement/sanity-check/setup.sh +++ b/test/csit/plans/vfc-nfvo-resmanagement/sanity-check/setup.sh @@ -21,7 +21,7 @@ docker login -u docker -p docker nexus3.onap.org:10001 # Start MSB -docker run -d -p 8500:8500 --name msb_consul nexus3.onap.org:10001/onap/msb/msb_base +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 CONSUL_IP=`get-instance-ip.sh msb_consul` echo CONSUL_IP=${CONSUL_IP} docker run -d -p 10081:10081 -e CONSUL_IP=$CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery @@ -34,7 +34,7 @@ echo MSB_IP=${MSB_IP} # Start resmgr docker run -d --name vfc-resmanagement -e MSB_ADDR=${MSB_IP}:80 nexus3.onap.org:10001/onap/vfc/resmanagement RESMGR_IP=`get-instance-ip.sh vfc-resmanagement` -for i in {1..10}; do +for i in {1..20}; do curl -sS ${RESMGR_IP}:8480 && break echo sleep $i sleep $i diff --git a/test/csit/plans/vfc-nfvo-wfengine/sanity-check/setup.sh b/test/csit/plans/vfc-nfvo-wfengine/sanity-check/setup.sh new file mode 100644 index 000000000..d00a66c52 --- /dev/null +++ b/test/csit/plans/vfc-nfvo-wfengine/sanity-check/setup.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# +# Copyright 2017 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Place the scripts in run order: +# Start all process required for executing test case + +source ${SCRIPTS}/common_functions.sh + + +#start msb +docker run -d -p 8500:8500 --name msb_consul consul:0.9.3 +MSB_CONSUL_IP=`get-instance-ip.sh msb_consul` +echo MSB_CONSUL_IP=${MSB_CONSUL_IP} +docker run -d -p 10081:10081 -e CONSUL_IP=$MSB_CONSUL_IP --name msb_discovery nexus3.onap.org:10001/onap/msb/msb_discovery +MSB_DISCOVERY_IP=`get-instance-ip.sh msb_discovery` +echo MSB_DISCOVERY_IP=${MSB_DISCOVERY_IP} +docker run -d -p 80:80 -e CONSUL_IP=$MSB_CONSUL_IP -e SDCLIENT_IP=$MSB_DISCOVERY_IP -e "ROUTE_LABELS=visualRange:1" --name msb_internal_apigateway nexus3.onap.org:10001/onap/msb/msb_apigateway +MSB_IAG_IP=`get-instance-ip.sh msb_internal_apigateway` +echo MSB_IAG_IP=${MSB_IAG_IP} + +# Wait for initialization(8500 Consul, 10081 Service Registration & Discovery, 80 api gateway) +for i in {1..10}; do + curl -sS -m 1 ${MSB_CONSUL_IP}:8500 && curl -sS -m 1 ${MSB_DISCOVERY_IP}:10081 && curl -sS -m 1 ${MSB_IAG_IP}:80 && break + echo sleep $i + sleep $i +done + +# wait for container initalization +echo sleep 60 +sleep 60 + +ORG="onap" +PROJECT="vfc" +DOCKER_REPOSITORY="nexus3.onap.org:10001" +IMAGE="wfengine-activiti" +IMAGE_ACTIVITI_NAME="${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/${IMAGE}" + +# start wfengine-activiti +##docker run -d --name ${IMAGE} -e OPENPALETTE_MSB_IP=${MSB_IAG_IP} -e OPENPALETTE_MSB_PORT=80 ${IMAGE_ACTIVITI_NAME} +##WFENGINEACTIVITIR_IP=`get-instance-ip.sh ${IMAGE}` + +# Wait for initialization +##for i in {1..10}; do +## curl -sS ${WFENGINEACTIVITIR_IP}:8080 && break +## echo sleep $i +## sleep $i +##done + +##IMAGE="wfengine-mgrservice" +##IMAGE_MGRSERVICE_NAME="${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/${IMAGE}" + +# Start wfengine-mgrservice +#docker run -d --name ${IMAGE} -e OPENPALETTE_MSB_IP=${MSB_IAG_IP} -e OPENPALETTE_MSB_PORT=80 ${IMAGE_MGRSERVICE_NAME} +##docker run -d --name ${IMAGE} -e OPENPALETTE_MSB_IP=${WFENGINEACTIVITIR_IP} -e OPENPALETTE_MSB_PORT=8080 ${IMAGE_MGRSERVICE_NAME} +##WFENGINEMGRSERVICE_IP=`get-instance-ip.sh ${IMAGE}` +##for i in {1..10}; do +## curl -sS ${WFENGINEMGRSERVICE_IP}:10550 && break +## echo sleep $i +## sleep $i +##done + +# Pass any variables required by Robot test suites in ROBOT_VARIABLES +#ROBOT_VARIABLES="-v MSB_IAG_IP:${MSB_IAG_IP} -v MSB_IP:${MSB_IAG_IP} -v MSB_PORT:80 -v MSB_DISCOVERY_IP:${MSB_DISCOVERY_IP} -v WFENGINEACTIVITIR_IP:${WFENGINEACTIVITIR_IP} -v WFENGINEACTIVITIR_PORT:8080 -v WFENGINEMGRSERVICE_IP:${WFENGINEMGRSERVICE_IP} -v WFENGINEMGRSERVICE_PORT:10550 -v SCRIPTS:${SCRIPTS}" +##ROBOT_VARIABLES="-v MSB_IAG_IP:${WFENGINEACTIVITIR_IP} -v MSB_IP:${WFENGINEMGRSERVICE_IP} -v MSB_PORT:10550 -v MSB_DISCOVERY_IP:${WFENGINEACTIVITIR_IP} -v MSB_DISCOVERY_PORT:8080 -v WFENGINEACTIVITIR_IP:${WFENGINEACTIVITIR_IP} -v WFENGINEACTIVITIR_PORT:8080 -v WFENGINEMGRSERVICE_IP:${WFENGINEMGRSERVICE_IP} -v WFENGINEMGRSERVICE_PORT:10550 -v SCRIPTS:${SCRIPTS}"
\ No newline at end of file diff --git a/test/csit/plans/vfc-nfvo-wfengine/sanity-check/teardown.sh b/test/csit/plans/vfc-nfvo-wfengine/sanity-check/teardown.sh new file mode 100644 index 000000000..caa506ecf --- /dev/null +++ b/test/csit/plans/vfc-nfvo-wfengine/sanity-check/teardown.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# +# Copyright 2017 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# This script is sourced by run-csit.sh after Robot test completion. +kill-instance.sh msb_internal_apigateway +kill-instance.sh msb_discovery +kill-instance.sh msb_consul +##kill-instance.sh wfengine-mgrservice +##kill-instance.sh wfengine-activiti diff --git a/test/csit/plans/vfc-nfvo-wfengine/sanity-check/testplan.txt b/test/csit/plans/vfc-nfvo-wfengine/sanity-check/testplan.txt new file mode 100644 index 000000000..ff9f4d5d6 --- /dev/null +++ b/test/csit/plans/vfc-nfvo-wfengine/sanity-check/testplan.txt @@ -0,0 +1,4 @@ +# Test suites are relative paths under [integration.git]/test/csit/tests/. +# Place the suites in run order. + +vfc/nfvo-wfengine/workflow.robot
\ No newline at end of file diff --git a/test/csit/plans/vid/healthCheck/setup.sh b/test/csit/plans/vid/healthCheck/setup.sh index afe9ea7ba..a117a6c78 100644 --- a/test/csit/plans/vid/healthCheck/setup.sh +++ b/test/csit/plans/vid/healthCheck/setup.sh @@ -18,6 +18,8 @@ # # Place the scripts in run order: +/usr/bin/Xvfb :0 -screen 0 1024x768x24& +export DISPLAY=:0 source ${WORKSPACE}/test/csit/scripts/vid/clone_and_setup_vid_data.sh diff --git a/test/csit/plans/vid/healthCheck/testplan.txt b/test/csit/plans/vid/healthCheck/testplan.txt index ffbb593ca..92d8b0584 100644 --- a/test/csit/plans/vid/healthCheck/testplan.txt +++ b/test/csit/plans/vid/healthCheck/testplan.txt @@ -1,3 +1,4 @@ # Test suites are relative paths under [integration.git]/test/csit/tests/. # Place the suites in run order. vid/healthCheck +vid/login diff --git a/test/csit/scripts/aai/esr-server/startup.sh b/test/csit/scripts/aai/esr-server/startup.sh new file mode 100644 index 000000000..a4d335b79 --- /dev/null +++ b/test/csit/scripts/aai/esr-server/startup.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# Copyright 2017 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# $1 nickname for esr server + +docker login -u docker -p docker nexus3.onap.org:10001 + +run-instance.sh nexus3.onap.org:10001/onap/aai/esr-server:latest $1 "-e MSB_IP=$2 -e MSB_Port=$3 -p 9518:9518"
\ No newline at end of file diff --git a/test/csit/scripts/modeling-toscaparsers-javatoscachecker/setup_containers.sh b/test/csit/scripts/modeling-toscaparsers-javatoscachecker/setup_containers.sh new file mode 100644 index 000000000..3521ff1cb --- /dev/null +++ b/test/csit/scripts/modeling-toscaparsers-javatoscachecker/setup_containers.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# +# ============LICENSE_START======================================================= +# Copyright (C) 2017 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# ECOMP is a trademark and service mark of AT&T Intellectual Property. +# + +echo "This is ${WORKSPACE}/test/csit/scripts/modeling-toscaparsers-javatoscachecker/setup_containers.sh" + +#start docker image +run-instance.sh nexus3.onap.org:10001/onap/modeling/javatoscachecker:latest modeling_javatoscachecker_1 "-p 8080:8080" + +#checker docker image is accesible: picked from clamp, some common script would be good +TIME_OUT=1200 +INTERVAL=5 +TIME=0 +while [ "$TIME" -lt "$TIME_OUT" ]; do + response=$(curl --write-out '%{http_code}' --silent --output /dev/null http://localhost:8080/check_template/test_me); echo $response + + if [ "$response" == "404" ]; then + echo javatoscachecker service started in $TIME seconds + break; + fi + + echo Sleep: $INTERVAL seconds before testing if javatoscachecker service is up. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds + sleep $INTERVAL + TIME=$(($TIME+$INTERVAL)) +done + +if [ "$TIME" -ge "$TIME_OUT" ]; then + echo TIME OUT: Docker containers not started in $TIME_OUT seconds... Could cause problems for tests... +fi + + diff --git a/test/csit/scripts/modeling-toscaparsers-javatoscachecker/teardown_containers.sh b/test/csit/scripts/modeling-toscaparsers-javatoscachecker/teardown_containers.sh new file mode 100644 index 000000000..cca4fe193 --- /dev/null +++ b/test/csit/scripts/modeling-toscaparsers-javatoscachecker/teardown_containers.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# +# ============LICENSE_START======================================================= +# Copyright (C) 2017 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# ECOMP is a trademark and service mark of AT&T Intellectual Property. +# + +echo "This is ${WORKSPACE}/test/csit/scripts/modeling-toscaparsers-javatoscachecker/teardown_containers.sh" + +kill-instance.sh modeling_javatoscachecker_1 + + diff --git a/test/csit/scripts/policy/script1.sh b/test/csit/scripts/policy/script1.sh index a005c3a84..db5b5155a 100755 --- a/test/csit/scripts/policy/script1.sh +++ b/test/csit/scripts/policy/script1.sh @@ -15,3 +15,146 @@ # limitations under the License. # echo "This is ${WORKSPACE}/test/csit/scripts/policy/script1.sh" + + +# the directory of the script +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +echo ${DIR} + +# the temp directory used, within $DIR +# omit the -p parameter to create a temporal directory in the default location +WORK_DIR=`mktemp -d -p "$DIR"` +echo ${WORK_DIR} + +cd ${WORK_DIR} + +# check if tmp dir was created +if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then + echo "Could not create temp dir" + exit 1 +fi + +# bring down maven +mkdir maven +cd maven +curl -O http://apache.claz.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz +tar -xzvf apache-maven-3.3.9-bin.tar.gz +ls -l +export PATH=${PATH}:${WORK_DIR}/maven/apache-maven-3.3.9/bin +${WORK_DIR}/maven/apache-maven-3.3.9/bin/mvn -v +cd .. + +ifconfig + +if ! ifconfig eth0; then + if ! ifconfig ens3; then + echo "Could not determine IP address" + exit 1 + fi + export IP=`ifconfig ens3 | awk -F: '/inet addr/ {gsub(/ .*/,"",$2); print $2}'` +else + export IP=`ifconfig eth0 | awk -F: '/inet addr/ {gsub(/ .*/,"",$2); print $2}'` +fi +echo $IP + +if ! ifconfig docker0; then + if ! ifconfig ens3; then + echo "Could not determine IP address" + exit 1 + fi + export DOCKER_IP_IP=`ifconfig ens3 | awk -F: '/inet addr/ {gsub(/ .*/,"",$2); print $2}'` +else + export DOCKER_IP=`ifconfig docker0 | awk -F: '/inet addr/ {gsub(/ .*/,"",$2); print $2}'` +fi +echo $DOCKER_IP + +git clone http://gerrit.onap.org/r/oparent + +git clone http://gerrit.onap.org/r/policy/docker +cd docker + +${WORK_DIR}/maven/apache-maven-3.3.9/bin/mvn clean install prepare-package --settings ../oparent/settings.xml +cp policy-pe/* target/policy-pe +cp policy-drools/* target/policy-drools + +docker build -t onap/policy/policy-os policy-os +docker build -t onap/policy/policy-db policy-db +docker build -t onap/policy/policy-nexus policy-nexus +docker build -t onap/policy/policy-base policy-base +docker build -t onap/policy/policy-pe target/policy-pe +docker build -t onap/policy/policy-drools target/policy-drools + +chmod +x config/drools/drools-tweaks.sh + +echo $IP > config/pe/ip_addr.txt +ls -l config/pe/ip_addr.txt +cat config/pe/ip_addr.txt + +export MTU=9126 + +export PRELOAD_POLICIES=false +docker-compose -f docker-compose-integration.yml up -d + +if [ ! $? -eq 0 ]; then + echo "Docker compose failed" + exit 1 +fi + +docker ps + +#sleep 4m + +POLICY_IP=`docker inspect --format '{{ .NetworkSettings.Networks.docker_default.IPAddress}}' drools` +echo ${POLICY_IP} + +PDP_IP=`docker inspect --format '{{ .NetworkSettings.Networks.docker_default.IPAddress}}' pdp` +echo ${PDP_IP} + +PAP_IP=`docker inspect --format '{{ .NetworkSettings.Networks.docker_default.IPAddress}}' pap` +echo ${PAP_IP} + +BRMS_IP=`docker inspect --format '{{ .NetworkSettings.Networks.docker_default.IPAddress}}' brmsgw` +echo ${BRMS_IP} + +NEXUS_IP=`docker inspect --format '{{ .NetworkSettings.Networks.docker_default.IPAddress}}' nexus` +echo ${NEXUS_IP} + +MARIADB_IP=`docker inspect --format '{{ .NetworkSettings.Networks.docker_default.IPAddress}}' mariadb` +echo ${MARIADB_IP} + +${DIR}/wait_for_port.sh ${MARIADB_IP} 3306 +${DIR}/wait_for_port.sh ${PAP_IP} 9091 +${DIR}/wait_for_port.sh ${PDP_IP} 8081 +${DIR}/wait_for_port.sh ${BRMS_IP} 9989 +${DIR}/wait_for_port.sh ${NEXUS_IP} 8081 +${DIR}/wait_for_port.sh ${POLICY_IP} 6969 + +TIME_OUT=600 +INTERVAL=20 +TIME=0 +while [ "$TIME" -lt "$TIME_OUT" ]; do + curl -i --user healthcheck:zb!XztG34 -H "ContentType: application/json" -H "Accept: application/json" ${POLICY_IP}:6969/healthcheck && break + + echo Sleep: $INTERVAL seconds before testing if Policy is up. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds + sleep $INTERVAL + TIME=$(($TIME+$INTERVAL)) + +done + +TIME_OUT=600 +INTERVAL=20 +TIME=0 +while [ "$TIME" -lt "$TIME_OUT" ]; do + + curl -i -v -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'ClientAuth: cHl0aG9uOnRlc3Q=' -H 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' -H 'Environment: TEST' -X POST -d '{"policyName": ".*"}' http://${PDP_IP}:8081/pdp/api/getConfig && break + +echo Sleep: $INTERVAL seconds before testing if Policy is up. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds + sleep $INTERVAL + TIME=$(($TIME+$INTERVAL)) + +done + +# +# Add more sleep for everything to settle +# +sleep 3m diff --git a/test/csit/scripts/policy/wait_for_port.sh b/test/csit/scripts/policy/wait_for_port.sh new file mode 100755 index 000000000..10f08ded1 --- /dev/null +++ b/test/csit/scripts/policy/wait_for_port.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if [[ $# -ne 2 ]]; then + echo "Usage: wait-for-port hostname port" >&2 + exit 1 +fi + +host=$1 +port=$2 + +echo "Waiting for $host port $port open" +until telnet $host $port </dev/null 2>/dev/null | grep -q '^Connected'; do + sleep 1 +done + +echo "$host port $port is open" + +exit 0 diff --git a/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh b/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh index da421e4cf..5dbfb5fc2 100644 --- a/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh +++ b/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh @@ -27,22 +27,34 @@ echo "This is ${WORKSPACE}/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh" # Clone sdc enviroment template mkdir -p ${WORKSPACE}/data/environments/ mkdir -p ${WORKSPACE}/data/clone/ +mkdir -p ${WORKSPACE}/data/logs/BE/SDC/SDC-BE +mkdir -p ${WORKSPACE}/data/logs/FE/SDC/SDC-FE +chmod -R 777 ${WORKSPACE}/data/logs +ls -lR ${WORKSPACE}/data/logs/ + cd ${WORKSPACE}/data/clone -git clone --depth 1 http://gerrit.onap.org/r/sdc -b master +git clone --depth 1 http://gerrit.onap.org/r/sdc -b ${GERRIT_BRANCH} +chmod -R 777 ${WORKSPACE}/data/clone # set enviroment variables -ENV_NAME=CSIT -MR_IP_ADDR=10.0.0.1 +export ENV_NAME='CSIT' +export MR_IP_ADDR='10.0.0.1' + +ifconfig + +#if [ -e /opt/config/public_ip.txt ] +# then +# IP_ADDRESS=$(cat /opt/config/public_ip.txt) +# else +# IP_ADDRESS=$(ifconfig ens3 | grep "inet addr" | tr -s ' ' | cut -d' ' -f3 | cut -d':' -f2) +# fi + +IP_ADDRESS=`ip route get 8.8.8.8 | awk '/src/{ print $7 }'` +export HOST_IP=$IP_ADDRESS -if [ -e /opt/config/public_ip.txt ] - then - IP_ADDRESS=$(cat /opt/config/public_ip.txt) - else - IP_ADDRESS=$(ifconfig eth0 | grep "inet addr" | tr -s ' ' | cut -d' ' -f3 | cut -d':' -f2) - fi cat ${WORKSPACE}/data/clone/sdc/sdc-os-chef/environments/Template.json | sed "s/yyy/"$IP_ADDRESS"/g" > ${WORKSPACE}/data/environments/$ENV_NAME.json sed -i "s/xxx/"$ENV_NAME"/g" ${WORKSPACE}/data/environments/$ENV_NAME.json diff --git a/test/csit/scripts/sdc/docker_health.sh b/test/csit/scripts/sdc/docker_health.sh new file mode 100644 index 000000000..832b25a23 --- /dev/null +++ b/test/csit/scripts/sdc/docker_health.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +curl localhost:9200/_cluster/health?pretty=true + +echo "BE health-Check:" +curl http://localhost:8080/sdc2/rest/healthCheck + +echo "" +echo "" +echo "FE health-Check:" +curl http://localhost:8181/sdc1/rest/healthCheck + + +echo "" +echo "" +res=`curl -s -X GET -H "Accept: application/json" -H "Content-Type: application/json" -H "USER_ID: jh0003" "http://localhost:8080/sdc2/rest/v1/user/demo" | wc -l` +if [[ ${res} != 0 ]] +then + echo "Error [${res}] while user existance check" + exit ${res} +fi +echo "check user existance: OK" + diff --git a/test/csit/scripts/sdc/kill_containers_and_remove_dataFolders.sh b/test/csit/scripts/sdc/kill_containers_and_remove_dataFolders.sh index e03284248..48a31e895 100644 --- a/test/csit/scripts/sdc/kill_containers_and_remove_dataFolders.sh +++ b/test/csit/scripts/sdc/kill_containers_and_remove_dataFolders.sh @@ -26,6 +26,6 @@ docker rm $(docker ps -a -q --filter="name=sdc") #delete data folder -rm -rf ${WORKSPACE}/data/* +#rm -rf ${WORKSPACE}/data/* diff --git a/test/csit/scripts/sdc/start_sdc_containers.sh b/test/csit/scripts/sdc/start_sdc_containers.sh index 31105acb0..0dd373256 100644 --- a/test/csit/scripts/sdc/start_sdc_containers.sh +++ b/test/csit/scripts/sdc/start_sdc_containers.sh @@ -25,18 +25,48 @@ echo "This is ${WORKSPACE}/test/csit/scripts/sdc/start_sdc_containers.sh" -RELEASE=latest -LOCAL=false -SKIPTESTS=false -DEP_ENV=CSIT +export RELEASE='1.1-STAGING-latest' +export DEP_ENV=$ENV_NAME #[ -f /opt/config/nexus_username.txt ] && NEXUS_USERNAME=$(cat /opt/config/nexus_username.txt) || NEXUS_USERNAME=release #[ -f /opt/config/nexus_password.txt ] && NEXUS_PASSWD=$(cat /opt/config/nexus_password.txt) || NEXUS_PASSWD=sfWU3DFVdBr7GVxB85mTYgAW #[ -f /opt/config/nexus_docker_repo.txt ] && NEXUS_DOCKER_REPO=$(cat /opt/config/nexus_docker_repo.txt) || NEXUS_DOCKER_REPO=ecomp-nexus:${PORT} #[ -f /opt/config/nexus_username.txt ] && docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO -export IP=`ifconfig eth0 | awk -F: '/inet addr/ {gsub(/ .*/,"",$2); print $2}'` +export IP=$HOST_IP #export PREFIX=${NEXUS_DOCKER_REPO}'/openecomp' export PREFIX='nexus3.onap.org:10001/openecomp' + +function monitor_docker { + +echo monitor $1 Docker +sleep 5 +TIME_OUT=800 +INTERVAL=20 +TIME=0 +while [ "$TIME" -lt "$TIME_OUT" ]; do + +MATCH=`docker logs --tail 30 $1 | grep "DOCKER STARTED"` +echo MATCH is -- $MATCH + +if [ -n "$MATCH" ] + then + echo DOCKER start finished in $TIME seconds + break + fi + + echo Sleep: $INTERVAL seconds before testing if $1 DOCKER is up. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds + sleep $INTERVAL + TIME=$(($TIME+$INTERVAL)) +done + +if [ "$TIME" -ge "$TIME_OUT" ] + then + echo -e "\e[1;31mTIME OUT: DOCKER was NOT fully started in $TIME_OUT seconds... Could cause problems ...\e[0m" +fi + + +} + #start Elastic-Search docker run --detach --name sdc-es --env ENVNAME="${DEP_ENV}" --log-driver=json-file --log-opt max-size=100m --log-opt max-file=10 --memory 1g --memory-swap=1g --ulimit memlock=-1:-1 --ulimit nofile=4096:100000 --volume /etc/localtime:/etc/localtime:ro -e ES_HEAP_SIZE=1024M --volume ${WORKSPACE}/data/ES:/usr/share/elasticsearch/data --volume ${WORKSPACE}/data/environments:/root/chef-solo/environments --publish 9200:9200 --publish 9300:9300 ${PREFIX}/sdc-elasticsearch:${RELEASE} @@ -44,65 +74,43 @@ docker run --detach --name sdc-es --env ENVNAME="${DEP_ENV}" --log-driver=json-f docker run --detach --name sdc-cs --env RELEASE="${RELEASE}" --env ENVNAME="${DEP_ENV}" --env HOST_IP=${IP} --log-driver=json-file --log-opt max-size=100m --log-opt max-file=10 --ulimit memlock=-1:-1 --ulimit nofile=4096:100000 --volume /etc/localtime:/etc/localtime:ro --volume ${WORKSPACE}/data/CS:/var/lib/cassandra --volume ${WORKSPACE}/data/environments:/root/chef-solo/environments --publish 9042:9042 --publish 9160:9160 ${PREFIX}/sdc-cassandra:${RELEASE} echo "please wait while CS is starting..." -echo "" -c=120 # seconds to wait -REWRITE="\e[25D\e[1A\e[K" -while [ $c -gt 0 ]; do - c=$((c-1)) - sleep 1 - echo -e "${REWRITE}$c" -done -echo -e "" +monitor_docker sdc-cs #start kibana -docker run --detach --name sdc-kbn --env ENVNAME="${DEP_ENV}" --log-driver=json-file --log-opt max-size=100m --log-opt max-file=10 --ulimit memlock=-1:-1 --memory 2g --memory-swap=2g --ulimit nofile=4096:100000 --volume /etc/localtime:/etc/localtime:ro --volume ${WORKSPACE}/data/environments:/root/chef-solo/environments --publish 5601:5601 ${PREFIX}/sdc-kibana:${RELEASE} +#docker run --detach --name sdc-kbn --env ENVNAME="${DEP_ENV}" --log-driver=json-file --log-opt max-size=100m --log-opt max-file=10 --ulimit memlock=-1:-1 --memory 2g --memory-swap=2g --ulimit nofile=4096:100000 --volume /etc/localtime:/etc/localtime:ro --volume ${WORKSPACE}/data/environments:/root/chef-solo/environments --publish 5601:5601 ${PREFIX}/sdc-kibana:${RELEASE} #start sdc-backend docker run --detach --name sdc-BE --env HOST_IP=${IP} --env ENVNAME="${DEP_ENV}" --env http_proxy=${http_proxy} --env https_proxy=${https_proxy} --env no_proxy=${no_proxy} --log-driver=json-file --log-opt max-size=100m --log-opt max-file=10 --ulimit memlock=-1:-1 --memory 4g --memory-swap=4g --ulimit nofile=4096:100000 --volume /etc/localtime:/etc/localtime:ro --volume ${WORKSPACE}/data/logs/BE/:/var/lib/jetty/logs --volume ${WORKSPACE}/data/environments:/root/chef-solo/environments --publish 8443:8443 --publish 8080:8080 ${PREFIX}/sdc-backend:${RELEASE} echo "please wait while BE is starting..." -echo "" -c=120 # seconds to wait -REWRITE="\e[45D\e[1A\e[K" -while [ $c -gt 0 ]; do - c=$((c-1)) - sleep 1 - echo -e "${REWRITE}$c" -done -echo -e "" +monitor_docker sdc-BE #start Front-End docker run --detach --name sdc-FE --env HOST_IP=${IP} --env ENVNAME="${DEP_ENV}" --env http_proxy=${http_proxy} --env https_proxy=${https_proxy} --env no_proxy=${no_proxy} --log-driver=json-file --log-opt max-size=100m --log-opt max-file=10 --ulimit memlock=-1:-1 --memory 2g --memory-swap=2g --ulimit nofile=4096:100000 --volume /etc/localtime:/etc/localtime:ro --volume ${WORKSPACE}/data/logs/FE/:/var/lib/jetty/logs --volume ${WORKSPACE}/data/environments:/root/chef-solo/environments --publish 9443:9443 --publish 8181:8181 ${PREFIX}/sdc-frontend:${RELEASE} -echo "please wait while FE is starting..." -echo "" -c=120 # seconds to wait -REWRITE="\e[45D\e[1A\e[K" -while [ $c -gt 0 ]; do - c=$((c-1)) - sleep 1 - echo -e "${REWRITE}$c" -done -echo -e "" - +echo "docker run sdc-frontend..." +monitor_docker sdc-FE +echo " WAIT 1 minutes maximum and test every 5 seconds if SDC up using HealthCheck API...." +TIME_OUT=60 +INTERVAL=5 +TIME=0 +while [ "$TIME" -lt "$TIME_OUT" ]; do + response=$(curl --write-out '%{http_code}' --silent --output /dev/null http://localhost:8080/sdc2/rest/healthCheck); echo $response -#TIME=0 -#while [ "$TIME" -lt "$TIME_OUT" ]; do -# response=$(curl --write-out '%{http_code}' --silent --output /dev/null http://localhost:8080/restservices/clds/v1/clds/healthcheck); echo $response + if [ "$response" == "200" ]; then + echo SDC well started in $TIME seconds + break; + fi -# if [ "$response" == "200" ]; then -# echo Clamp and its database well started in $TIME seconds -# break; -# fi + echo Sleep: $INTERVAL seconds before testing if SDC is up. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds + sleep $INTERVAL + TIME=$(($TIME+$INTERVAL)) +done -# echo Sleep: $INTERVAL seconds before testing if Clamp is up. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds -# sleep $INTERVAL -# TIME=$(($TIME+$INTERVAL)) -#done +if [ "$TIME" -ge "$TIME_OUT" ]; then + echo TIME OUT: Docker containers not started in $TIME_OUT seconds... Could cause problems for tests... +fi -#if [ "$TIME" -ge "$TIME_OUT" ]; then -# echo TIME OUT: Docker containers not started in $TIME_OUT seconds... Could cause problems for tests... -#fi diff --git a/test/csit/scripts/sdc/start_sdc_sanity.sh b/test/csit/scripts/sdc/start_sdc_sanity.sh new file mode 100644 index 000000000..e9e92148b --- /dev/null +++ b/test/csit/scripts/sdc/start_sdc_sanity.sh @@ -0,0 +1,70 @@ +#!/bin/bash +# +# ============LICENSE_START======================================================= +# ONAP CLAMP +# ================================================================================ +# Copyright (C) 2017 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# ECOMP is a trademark and service mark of AT&T Intellectual Property. +# + + + +#start Sanity docker + +docker run --detach --name sdc-sanity --env HOST_IP=${IP} --env ENVNAME="${DEP_ENV}" --env http_proxy=${http_proxy} --env https_proxy=${https_proxy} --env no_proxy=${no_proxy} --log-driver=json-file --log-opt max-size=100m --log-opt max-file=10 --ulimit memlock=-1:-1 --memory 1g --memory-swap=1g --ulimit nofile=4096:100000 --volume /etc/localtime:/etc/localtime:ro --volume ${WORKSPACE}/data/logs/sdc-sanity/target:/var/lib/tests/target --volume ${WORKSPACE}/data/logs/sdc-sanity/ExtentReport:/var/lib/tests/ExtentReport --volume ${WORKSPACE}/data/environments:/root/chef-solo/environments --publish 9560:9560 ${PREFIX}/sdc-sanity:${RELEASE} + +#echo "please wait while Sanity Docker is starting..." +echo "" +c=60 # seconds to wait +REWRITE="\e[45D\e[1A\e[K" +while [ $c -gt 0 ]; do + c=$((c-1)) + sleep 1 + echo -e "${REWRITE}$c" +done +echo -e "" + + +#monitor sanity process + +TIME_OUT=1200 +INTERVAL=20 +TIME=0 +while [ "$TIME" -lt "$TIME_OUT" ]; do + +PID=`docker exec -i sdc-sanity ps -ef | grep java | awk '{print $2}'` +echo sanity PID is -- $PID + +if [ -z "$PID" ] + then + echo SDC sanity finished in $TIME seconds + break + fi + + echo Sleep: $INTERVAL seconds before testing if SDC sanity completed. Total wait time up now is: $TIME seconds. Timeout is: $TIME_OUT seconds + sleep $INTERVAL + TIME=$(($TIME+$INTERVAL)) +done + +if [ "$TIME" -ge "$TIME_OUT" ] + then + echo TIME OUT: Sany was NOT completed in $TIME_OUT seconds... Could cause problems for tests... +fi +cp -rf ${WORKSPACE}/data/logs/sdc-sanity/ExtentReport/* ${WORKSPACE}/archives/ +cp -rf ${WORKSPACE}/data/logs/ ${WORKSPACE}/archives/ + diff --git a/test/csit/tests/aaf/aafapi/aafapi.robot b/test/csit/tests/aaf/aafapi/aafapi.robot new file mode 100644 index 000000000..b1f8e746d --- /dev/null +++ b/test/csit/tests/aaf/aafapi/aafapi.robot @@ -0,0 +1,63 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections +Library String + +*** Variables *** +${TARGETURL_NAMESPACE} http://${AAF_IP}:8101/authz/nss/org.openecomp +${TARGETURL_PERMS} http://${AAF_IP}:8101/authz/perms/user/dgl@openecomp.org +${TARGETURL_ROLES} http://${AAF_IP}:8101/authz/roles/user/dgl@openecomp.org +${username} dgl@openecomp.org +${password} ecomp_admin + + +*** Test Cases *** +View Namesapce + [Tags] get + CreateSession aaf http://${AAF_IP}:8101 + &{headers}= Create Dictionary Authorization=Basic ZGdsQG9wZW5lY29tcC5vcmc6ZWNvbXBfYWRtaW4= Content-Type=application/json Accept=application/json + ${resp}= Get Request aaf /authz/nss/org.openecomp headers=&{headers} + Should Be Equal As Strings ${resp.status_code} 200 + log 'JSON Response Code :'${resp.text} + +View by User Permission + [Tags] get + CreateSession aaf http://${AAF_IP}:8101 + &{headers}= Create Dictionary Authorization=Basic ZGdsQG9wZW5lY29tcC5vcmc6ZWNvbXBfYWRtaW4= Content-Type=application/json Accept=application/json + ${resp}= Get Request aaf authz/perms/user/dgl@openecomp.org headers=&{headers} + Should Be Equal As Strings ${resp.status_code} 200 + log 'JSON Response Code :'${resp.text} + +View by User Role + [Tags] get + CreateSession aaf http://${AAF_IP}:8101 + &{headers}= Create Dictionary Authorization=Basic ZGdsQG9wZW5lY29tcC5vcmc6ZWNvbXBfYWRtaW4= Content-Type=application/json Accept=application/json + ${resp}= Get Request aaf authz/roles/user/dgl@openecomp.org headers=&{headers} + Should Be Equal As Strings ${resp.status_code} 200 + log 'JSON Response Code :'${resp.text} + +Cleanup Namespace ( 424 Response - Delete dependencies and try again) + [Tags] delete + CreateSession aaf http://${AAF_IP}:8101 + &{headers}= Create Dictionary Authorization=Basic ZGdsQG9wZW5lY29tcC5vcmc6ZWNvbXBfYWRtaW4= Content-Type=application/json Accept=application/json + ${resp}= Delete Request aaf authz/ns/org.openecomp.dmaapBC headers=&{headers} + Should Be Equal As Strings ${resp.status_code} 424 + log 'JSON Response Code :'${resp.text} + +Add Data ( Add Admin to Namespace Explicit ) + [Tags] post + CreateSession aaf http://${AAF_IP}:8101 + &{headers}= Create Dictionary Authorization=Basic ZGdsQG9wZW5lY29tcC5vcmc6ZWNvbXBfYWRtaW4= Content-Type=application/json Accept=application/json + ${resp}= Post Request aaf authz/ns/org.openecomp.dmaapBC/admin/alexD@openecomp.org headers=&{headers} + Should Be Equal As Strings ${resp.status_code} 403 + log 'JSON Response Code :'${resp.text} + +View Explicit Permission + [Tags] post + CreateSession aaf http://${AAF_IP}:8101 + &{headers}= Create Dictionary Authorization=Basic ZGdsQG9wZW5lY29tcC5vcmc6ZWNvbXBfYWRtaW4= Content-Type=application/json Accept=application/json + ${resp}= Post Request aaf authz/perms/user/m99751@dmaapBC.openecomp.org headers=&{headers} + Should Be Equal As Strings ${resp.status_code} 406 + log 'JSON Response Code :'${resp.text}
\ No newline at end of file diff --git a/test/csit/tests/aai/esr-server/startup/__init__.robot b/test/csit/tests/aai/esr-server/startup/__init__.robot new file mode 100644 index 000000000..c1eddc936 --- /dev/null +++ b/test/csit/tests/aai/esr-server/startup/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Documentation AAI ESR SERVER - Startup diff --git a/test/csit/tests/aai/esr-server/startup/test1.robot b/test/csit/tests/aai/esr-server/startup/test1.robot new file mode 100644 index 000000000..53afeed27 --- /dev/null +++ b/test/csit/tests/aai/esr-server/startup/test1.robot @@ -0,0 +1,15 @@ +*** Settings *** +Library RequestsLibrary + +*** Test Cases *** +Liveness Test + [Documentation] Check various endpoints for basic liveness check + Create Session esr-server http://${ESRSERVER_IP}:9518 + CheckUrl esr-server /api/aai-esr-server/v1/test + +*** Keywords *** +CheckUrl + [Arguments] ${session} ${path} + ${resp}= Get Request ${session} ${path} + Should Be Equal As Integers ${resp.status_code} 200 + diff --git a/test/csit/tests/aai/resources/api_suite/ems.robot b/test/csit/tests/aai/resources/api_suite/ems.robot new file mode 100644 index 000000000..0068be35d --- /dev/null +++ b/test/csit/tests/aai/resources/api_suite/ems.robot @@ -0,0 +1,65 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${TARGETURL} https://${HOST_IP}:8443/aai/v11/external-system/esr-ems-list/esr-ems/ems-test1 +${EMSDATA} { "ems-id": "ems-test1", "esr-system-info-list": { "esr-system-info": [{ "esr-system-info-id": "ems-esr-system-info1", "system-name": "fff", "type": "ftp", "vendor": "ZTE", "version": "v1.0", "user-name": "root", "password": "123456", "system-type": "EMS_PERFORMANCE", "ip-address": "10.74.15.28", "port": "6767", "passive": true, "remote-path": "/data/peroformance"},{ "esr-system-info-id": "ems-esr-system-info2", "system-name": "fff", "type": "ftp", "vendor": "ZTE", "version": "v1.0", "user-name": "root", "password": "123456", "system-type": "EMS_RESOUCE", "ip-address": "10.74.15.29", "port": "6666", "passive": true, "remote-path": "/opt/Gcp/data/"},{ "esr-system-info-id": "ems-esr-system-info3", "system-name": "fff", "vendor": "ZTE", "version": "v1.0", "user-name": "root", "password": "123456", "system-type": "EMS_ALARM", "ip-address": "10.74.15.30", "port": "2000"}]}} + +*** Test Cases *** + +Run AAI Put ems + [Documentation] Create an ems object + ${resp}= PutWithCert ${TARGETURL} ${EMSDATA} + log ${TARGETURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get ems + [Documentation] Get the ems object just created + ${resp} GetWithCert ${TARGETURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete ems + [Documentation] Delete the ems just created + ${resp}= DeleteWithCert ${TARGETURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + diff --git a/test/csit/tests/aai/resources/api_suite/thirdparty_sdnc.robot b/test/csit/tests/aai/resources/api_suite/thirdparty_sdnc.robot new file mode 100644 index 000000000..bc27cafa8 --- /dev/null +++ b/test/csit/tests/aai/resources/api_suite/thirdparty_sdnc.robot @@ -0,0 +1,65 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${TARGETURL} https://${HOST_IP}:8443/aai/v11/external-system/esr-thirdparty-sdnc-list/esr-thirdparty-sdnc/thirdparty-sdnc-test1 +${SDNCDATA} {"thirdparty-sdnc-id": "thirdparty-sdnc-test1", "location": "edge", "product-name": "aaa", "esr-system-info-list": { "esr-system-info": [{ "esr-system-info-id": "thirdparty-sdnc-esr-system-info-id", "system-name": "sdnc1", "type": "WAN", "vendor": "ZTE", "version": "v1.0", "service-url": "http://10.74.66.12:80", "user-name": "admin", "password": "admin", "system-type": "thirdparty_SDNC", "protocol": "netconf"}]}} + +*** Test Cases *** + +Run AAI Put thirdparty-sdnc + [Documentation] Create an thirdparty-sdnc object + ${resp}= PutWithCert ${TARGETURL} ${SDNCDATA} + log ${TARGETURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get thirdparty-sdnc + [Documentation] Get the thirdparty-sdnc object just created + ${resp} GetWithCert ${TARGETURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete thirdparty-sdnc + [Documentation] Delete the thirdparty-sdnc just created + ${resp}= DeleteWithCert ${TARGETURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + diff --git a/test/csit/tests/aai/resources/api_suite/vim.robot b/test/csit/tests/aai/resources/api_suite/vim.robot new file mode 100644 index 000000000..9a7fc1f93 --- /dev/null +++ b/test/csit/tests/aai/resources/api_suite/vim.robot @@ -0,0 +1,65 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${TARGETURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/VIM-test1/RegionOne1 +${VIMDATA} {"cloud-owner": "VIM-test1", "cloud-region-id": "RegionOne1", "cloud-type": "openstack", "owner-defined-type": "owner-defined-type", "cloud-region-version": "v1.0", "cloud-zone": "cloud zone", "complex-name": "complex name", "cloud-extra-info": "{}", "esr-system-info-list": { "esr-system-info": [{"esr-system-info-id": "vim-esr-system-info-id", "service-url": "http://10.12.25.2:5000/v3", "user-name": "demo", "password": "onapdemo", "system-type": "VIM", "ssl-insecure": true, "cloud-domain": "Default"}]}} + +*** Test Cases *** + +Run AAI Put VIM + [Documentation] Create an VIM object + ${resp}= PutWithCert ${TARGETURL} ${VIMDATA} + log ${TARGETURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get VIM + [Documentation] Get the VIM object just created + ${resp} GetWithCert ${TARGETURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete VIM + [Documentation] Delete the VIM just created + ${resp}= DeleteWithCert ${TARGETURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + diff --git a/test/csit/tests/aai/resources/api_suite/vnfm.robot b/test/csit/tests/aai/resources/api_suite/vnfm.robot new file mode 100644 index 000000000..13b0adf40 --- /dev/null +++ b/test/csit/tests/aai/resources/api_suite/vnfm.robot @@ -0,0 +1,65 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${TARGETURL} https://${HOST_IP}:8443/aai/v11/external-system/esr-vnfm-list/esr-vnfm/vnfm-test1 +${VNFMDATA} {"vnfm-id": "vnfm-test1", "vim-id": "123", "certificate-url": "", "esr-system-info-list": {"esr-system-info": [{"esr-system-info-id":"esr-system-info-vnfm-test1", "system-name": "vnfmtest1", "type": "Tacker", "vendor": "ZTE", "version": "v1.0", "service-url": "http://10.74.44.12", "user-name": "admin", "password": "admin", "system-type": "VNFM"}]}} + +*** Test Cases *** + +Run AAI Put vnfm + [Documentation] Create an vnfm object + ${resp}= PutWithCert ${TARGETURL} ${VNFMDATA} + log ${TARGETURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get vnfm + [Documentation] Get the vnfm object just created + ${resp} GetWithCert ${TARGETURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete vnfm + [Documentation] Delete the vnfm just created + ${resp}= DeleteWithCert ${TARGETURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + diff --git a/test/csit/tests/aai/resources/db_edge_rule/prevent_delete.robot b/test/csit/tests/aai/resources/db_edge_rule/prevent_delete.robot new file mode 100644 index 000000000..beae2da51 --- /dev/null +++ b/test/csit/tests/aai/resources/db_edge_rule/prevent_delete.robot @@ -0,0 +1,131 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${CRKEYVALUE7} cr-integration-test7 +${CRKEYVALUE8} cr-integration-test8 +${TENANTKEYVALUE} tenant-integration-test7 +${VSERVERKEYVALUE} vserver-integration-test7 + +${CRURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/${CRKEYVALUE7}/${CRKEYVALUE8} +${TENANTURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/${CRKEYVALUE7}/${CRKEYVALUE8}/tenants/tenant/${TENANTKEYVALUE} +${VSERVERURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/${CRKEYVALUE7}/${CRKEYVALUE8}/tenants/tenant/${TENANTKEYVALUE}/vservers/vserver/${VSERVERKEYVALUE} +${CRDATA} {"cloud-owner":"${CRKEYVALUE7}","cloud-region-id":"${CRKEYVALUE8}","owner-defined-type":"example-owner-defined-type-98787654321-09","cloud-region-version":"example-cloud-region-version-98765784321-09","identity-url":"example-identity-url-98765437821-09","cloud-zone":"example-cloud-zone-98765784321-09","complex-name":"example-complex-name-98765874321-09"} +${TENANTDATA} {"tenant-id":"${TENANTKEYVALUE}","tenant-name":"example-tenant-name-val-143742","vservers":{"vserver":[{"vserver-id":"${VSERVERKEYVALUE}","vserver-name":"example-vserver-name-val-357201","vserver-name2":"example-vserver-name2-val-672821","prov-status":"example-prov-status-val-137711","vserver-selflink":"example-vserver-selflink-val-58731","in-maint":true,"is-closed-loop-disabled":true}]}} + + +*** Test Cases *** +Run AAI Put cloud-region + [Documentation] Create an cloud-region object + ${resp}= PutWithCert ${CRURL} ${CRDATA} + log ${CRURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Put tenant + [Documentation] Create an tenant object + ${resp}= PutWithCert ${TENANTURL} ${TENANTDATA} + log ${TENANTURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get tenant to delete + [Documentation] Get tenant object to delete + ${resp} GetWithCert ${TENANTURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete tenant + [Documentation] Delete the tenant + ${resp}= DeleteWithCert ${TENANTURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 400 + +Run AAI Get vserver to delete + [Documentation] Get vserver object to delete + ${resp} GetWithCert ${VSERVERURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete vserver + [Documentation] Delete the vserver + ${resp}= DeleteWithCert ${VSERVERURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +Run AAI Get tenant to delete + [Documentation] Get tenant object to delete + ${resp} GetWithCert ${TENANTURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete tenant + [Documentation] Delete the tenant + ${resp}= DeleteWithCert ${TENANTURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +Run AAI Get cr to delete + [Documentation] Get cr object to delete + ${resp} GetWithCert ${CRURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete cr + [Documentation] Delete the cr + ${resp}= DeleteWithCert ${CRURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PatchWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/merge-patch+json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.patch('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp}
\ No newline at end of file diff --git a/test/csit/tests/aai/resources/relationship_suite/relationship_using_related_link.robot b/test/csit/tests/aai/resources/relationship_suite/relationship_using_related_link.robot new file mode 100644 index 000000000..5820d4ac6 --- /dev/null +++ b/test/csit/tests/aai/resources/relationship_suite/relationship_using_related_link.robot @@ -0,0 +1,110 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${COMPLEXKEYVALUE} complex-integration-test8 +${L3NETWORKKEYVALUE} l3-network-integration-test8 +${COMPLEXURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/complexes/complex/${COMPLEXKEYVALUE} +${L3NETWORKURL} https://${HOST_IP}:8443/aai/v11/network/l3-networks/l3-network/${L3NETWORKKEYVALUE} +${COMPLEXDATA} {"physical-location-id":"${COMPLEXKEYVALUE}","data-center-code":"example-data-center-code-val-77883","complex-name":"example-complex-name-val-12992","identity-url":"example-identity-url-val-74366","physical-location-type":"example-physical-location-type-val-32854","street1":"example-street1-val-26496","street2":"example-street2-val-6629","city":"example-city-val-30262","state":"example-state-val-9058","postal-code":"example-postal-code-val-44893","country":"example-country-val-98673","region":"example-region-val-10014","latitude":"example-latitude-val-47555","longitude":"example-longitude-val-76903","elevation":"example-elevation-val-63385","lata":"example-lata-val-90935"} +${L3NETWORKDATA} {"network-id":"${L3NETWORKKEYVALUE}","network-name":"example-network-name-val-54688","network-type":"example-network-type-val-57468","network-role":"example-network-role-val-54868","network-technology":"example-network-technology-val-5468","neutron-network-id":"example-neutron-network-id-val-54678","is-bound-to-vpn":"true","service-id":"example-service-id-val-5468","orchestration-status":"example-orchestration-status-val-5468","heat-stack-id":"example-heat-stack-id-val-5468","mso-catalog-key":"example-mso-catalog-key-val-5468","relationship-list":{"relationship":[{"related-to":"complex","related-link":"/aai/v11/cloud-infrastructure/complexes/complex/${COMPLEXKEYVALUE}"}]}} + +*** Test Cases *** +Run AAI Put complex + [Documentation] Create an complex object + ${resp}= PutWithCert ${COMPLEXURL} ${COMPLEXDATA} + log ${COMPLEXURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get complex + [Documentation] Get the complex object just created + ${resp} GetWithCert ${COMPLEXURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put l3-network relationship with complex + [Documentation] Create l3-network relationship with complex + ${resp}= PutWithCert ${L3NETWORKURL} ${L3NETWORKDATA} + log ${L3NETWORKURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get l3-network + [Documentation] Get the l3-network object just created with relationship with complex + ${resp} GetWithCert ${L3NETWORKURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Get l3-network to delete + [Documentation] Get l3-network object to delete + ${resp} GetWithCert ${L3NETWORKURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete l3-network + [Documentation] Delete the l3-network just created + ${resp}= DeleteWithCert ${L3NETWORKURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +Run AAI Get complex to delete + [Documentation] Get complex object to delete + ${resp} GetWithCert ${COMPLEXURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete complex + [Documentation] Delete the complex just created + ${resp}= DeleteWithCert ${COMPLEXURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PatchWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/merge-patch+json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.patch('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp}
\ No newline at end of file diff --git a/test/csit/tests/aai/traversal/suite1/__init__.robot b/test/csit/tests/aai/traversal/suite1/__init__.robot new file mode 100644 index 000000000..8a1ac102d --- /dev/null +++ b/test/csit/tests/aai/traversal/suite1/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Documentation Traversal - Suite1 diff --git a/test/csit/tests/aai/traversal/suite1/aai.crt b/test/csit/tests/aai/traversal/suite1/aai.crt new file mode 100644 index 000000000..6a28bbb8c --- /dev/null +++ b/test/csit/tests/aai/traversal/suite1/aai.crt @@ -0,0 +1,70 @@ +Bag Attributes + friendlyName: aaiopenecomp + localKeyID: 54 69 6D 65 20 31 35 30 34 38 33 32 34 34 33 32 39 32 +subject=/C=US/ST=NJ/L=Bedminster/O=OpenECOMP/OU=SimpleDemo/CN=aai.api.simpledemo.openecomp.org/emailAddress=aai-host@api.simpledemo.openecomp.org +issuer=/C=US/ST=NJ/L=Bedminster/O=OpenECOMP/OU=simpledemo/CN=OpenECOMP simpledemo Server CA X1/emailAddress=simpledemo@openecomp.org +-----BEGIN CERTIFICATE----- +MIIEiTCCA3GgAwIBAgIJAIPKfDLcn3MpMA0GCSqGSIb3DQEBCwUAMIGtMQswCQYD +VQQGEwJVUzELMAkGA1UECAwCTkoxEzARBgNVBAcMCkJlZG1pbnN0ZXIxEjAQBgNV +BAoMCU9wZW5FQ09NUDETMBEGA1UECwwKc2ltcGxlZGVtbzEqMCgGA1UEAwwhT3Bl +bkVDT01QIHNpbXBsZWRlbW8gU2VydmVyIENBIFgxMScwJQYJKoZIhvcNAQkBFhhz +aW1wbGVkZW1vQG9wZW5lY29tcC5vcmcwHhcNMTYxMTMwMTUzODM5WhcNMTcxMTMw +MTUzODM5WjCBuTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk5KMRMwEQYDVQQHDApC +ZWRtaW5zdGVyMRIwEAYDVQQKDAlPcGVuRUNPTVAxEzARBgNVBAsMClNpbXBsZURl +bW8xKTAnBgNVBAMMIGFhaS5hcGkuc2ltcGxlZGVtby5vcGVuZWNvbXAub3JnMTQw +MgYJKoZIhvcNAQkBFiVhYWktaG9zdEBhcGkuc2ltcGxlZGVtby5vcGVuZWNvbXAu +b3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwQrQl8A0rT0Jjlos +Mr/7LEhT5UOif4GGPOk+3NCIxT3lOqAbUf+d9ZXyT2jWFRiKWua03vQ+Dxc8c2h2 +RRuH8LwEiOiWqPjWRxNqsARzZMI3ryHFCFBZh0FcpjH9kEeKVlLDYuV68k+ZucKd +NiqUNn61lD7kbmEGwvzKwf91FrJ09+CBMx1OnWKm3gCNKDqAEFMZCOdn2MgesJYB +/03lzPBS1jDfBXImXRcTBzpgA+wdCLn0cIQ1eLWUwS5tUqUJNh36nHdVyJ0P2Yjd +JLuxhFcmBKOz1ShyyO+BBtKBO8EGbU6qKflOiwOw0Fsn8LjKcrHQ58NPui5y04BU +Rypf3QIDAQABo4GdMIGaMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgO4MB0G +A1UdDgQWBBQyMUOsE2J+CKzK0qd8KFBD2gaWyjBbBgNVHSAEVDBSMFAGBFUdIAAw +SDBGBggrBgEFBQcCAjA6GjhLZWVwIGF3YXkgZnJvbSBjaGlsZHJlbi4gIFRoaXMg +Y2VydGlmaWNhdGUgaXMgbm90IGEgdG95LjANBgkqhkiG9w0BAQsFAAOCAQEAnkoy +2tWJOyyyIQwtVojUxv1GWQPnw3WCUcKpuX4CJhHXLxNErW1fBg7bmo08BNmBPPpq +WrJsy5lbBgUo9kgpViux5Stfy1rRIRsRLfl/icgCvJmUAxkmRCZL7yUvwG4K7s+8 +DwT+nW/XuWNP6Hd/qHccexB6COJ8KwvTdVoxAkCdX8qw4MCb/f7Kb1yle/vwBM5Q +UUONCJ4bEns1vnb9DGlNDUJNwCfwORAaVJpVS38Mv4UnSTmb2KMePtCWcx/dNsYR +2XrSGqLDnTvHwOpyhbfFTmackysGoSuDytORXy8YbwEiF13BwEK8i3rgNN0Z2ojf +cpmE2xxmaa+A2uuN6g== +-----END CERTIFICATE----- +Bag Attributes + friendlyName: root + 2.16.840.1.113894.746875.1.1: <Unsupported tag 6> +subject=/C=US/ST=NJ/L=Bedminster/O=OpenECOMP/OU=simpledemo/CN=OpenECOMP simpledemo Server CA X1/emailAddress=simpledemo@openecomp.org +issuer=/C=US/ST=NJ/L=Bedminster/O=OpenECOMP/OU=simpledemo/CN=OpenECOMP simpledemo Root Certification Authority/emailAddress=simpledemo@openecomp.org +-----BEGIN CERTIFICATE----- +MIIFpTCCA42gAwIBAgIJAJqx8dKnCZZoMA0GCSqGSIb3DQEBCwUAMIG9MQswCQYD +VQQGEwJVUzELMAkGA1UECAwCTkoxEzARBgNVBAcMCkJlZG1pbnN0ZXIxEjAQBgNV +BAoMCU9wZW5FQ09NUDETMBEGA1UECwwKc2ltcGxlZGVtbzE6MDgGA1UEAwwxT3Bl +bkVDT01QIHNpbXBsZWRlbW8gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEn +MCUGCSqGSIb3DQEJARYYc2ltcGxlZGVtb0BvcGVuZWNvbXAub3JnMB4XDTE2MTEy +ODIxMTQyNloXDTIxMTEyNzIxMTQyNlowga0xCzAJBgNVBAYTAlVTMQswCQYDVQQI +DAJOSjETMBEGA1UEBwwKQmVkbWluc3RlcjESMBAGA1UECgwJT3BlbkVDT01QMRMw +EQYDVQQLDApzaW1wbGVkZW1vMSowKAYDVQQDDCFPcGVuRUNPTVAgc2ltcGxlZGVt +byBTZXJ2ZXIgQ0EgWDExJzAlBgkqhkiG9w0BCQEWGHNpbXBsZWRlbW9Ab3BlbmVj +b21wLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALr4rivKQuRk +YNf5Ig40e1nqj6s6LB1vgMOYbKfRziOFpPcUpsHPOhusHowiUsrU1vdFSzPz6Ej7 +PjlmNSg2Qka8YCn9kd6QgM7U0KcPJvIucBp+qjifH3EvP0jgDPhDeVRYxzV454dv +5kQ9uCpswJP7YAnX51dkWeH8nwPUoagt31bOl9LXENSrgxEThxdLYMJnQJWk2CmV +otXM4tT1dxyJxFUrZ6uJCEAYw5VtlplqihHf8lHy+sWQavtsLz/4dc+sGeXSTfoI +voKvoh3uZ5gEhGV8yfJxk1veX5y5/AxP80vQ+smWYjTnQL5QQ57y4bciez4XVBmQ +SWimWtOi4e8CAwEAAaOBtTCBsjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBhjAdBgNVHQ4EFgQUTqdsYgGNGubdJHq9tsaJhM9HE5wwcAYDVR0gBGkwZzBl +BgRVHSAAMF0wWwYIKwYBBQUHAgIwTxpNSWYgeW91IHRydXN0IHRoaXMgY2VydCB0 +aGVuIHdlIGhhdmUgYSBicmlkZ2UgdGhhdCB5b3UgbWlnaHQgYmUgaW50ZXJlc3Rl +ZCBpbi4wDQYJKoZIhvcNAQELBQADggIBAKNNlRqFuE/JgV1BHyYK0xoSXH4aZP/7 +IoHtDVcSaZAOOuFOUrwVMUbzRBebbb6RpFwt/X+NLFUGysd+XNLF7W7lzxKtmFNX +n4OpNkBe0y5O7yurus8rERHzu3jiOSgVo+WzDlGpYSRnG3hI2qPWqD+Puzx/WwI8 +XUTuzEQQ3gUSyVFfXHpay3VpYmLZiLJ9WKY5SDw7Ie6Sxrju4Qm1HwnFY8wHZGcs +2KMQzorJ1ZNQf523yUTghbT0rKaSFaD8zugPtI2ONfFG/QgrkQXo78opzPsHnHwa +SxGSiAgeLbwAUCvPNl27zr6k6+7TcNjV0VUivAs0OG3VEAdgi7UWYB+30KfWwHwE +zGmvd4IAGqIqlqLcSVArN5z8JK1B5nfjQn5UrclU1vK+dnuiKE2X4rKuBTRYRFR/ +km+mj4koYFPKFHndmJl1uv2OCJK9l5CSIuKWeI1qv8BASKqgNdoT/SKBXqxgYlCb +o+j4IDjxrxChRO+e5vl9lA7INfRrbljCkUjfLRa+v2q9tWQ3+EQUwwnSrSfihh2T +j0Tksr6b8dDsvMlCdOKG1B+JPcEXORSFKNXVTEfjqpJG8s16kFAocWt3S6xO0k1t +qbQp+3tWQgW2TGnX0rMZzB6NGRNfWhlYmq2zHgXkiCIZ26Ztgt/LNbwEvN3+VlLo +z/Rd+SKtlrfb +-----END CERTIFICATE----- diff --git a/test/csit/tests/aai/traversal/suite1/aai.key b/test/csit/tests/aai/traversal/suite1/aai.key new file mode 100644 index 000000000..02724df46 --- /dev/null +++ b/test/csit/tests/aai/traversal/suite1/aai.key @@ -0,0 +1,32 @@ +Bag Attributes + friendlyName: aaiopenecomp + localKeyID: 54 69 6D 65 20 31 35 30 34 38 33 32 34 34 33 32 39 32 +Key Attributes: <No Attributes> +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBCtCXwDStPQmO +Wiwyv/ssSFPlQ6J/gYY86T7c0IjFPeU6oBtR/531lfJPaNYVGIpa5rTe9D4PFzxz +aHZFG4fwvASI6Jao+NZHE2qwBHNkwjevIcUIUFmHQVymMf2QR4pWUsNi5XryT5m5 +wp02KpQ2frWUPuRuYQbC/MrB/3UWsnT34IEzHU6dYqbeAI0oOoAQUxkI52fYyB6w +lgH/TeXM8FLWMN8FciZdFxMHOmAD7B0IufRwhDV4tZTBLm1SpQk2Hfqcd1XInQ/Z +iN0ku7GEVyYEo7PVKHLI74EG0oE7wQZtTqop+U6LA7DQWyfwuMpysdDnw0+6LnLT +gFRHKl/dAgMBAAECggEBAJko2HkeIW01mUhdWOXnFgR7WjzzXZEmlffr41lVBr7f +rejGsQZs9cms73R7rCdOsi8PDoA6bqaQfADg571K659fvYVWbHqh+3im+iWvUlKm +GYIVG/vNrEq43CZsUU7Qw/xba/QiOFraNxCATTV1sORPwgddouXEi5XW9ZPX9/FJ +wORx4L/K0DfHX1rr+rtOoHCJdZYhn3Ij87kmR8Mwg0fNeWhHqtxUEyM/itRjCvOe +mgt2V8DORhmq12L4+5QJctBrkBVRp9Rh6YSZZBGnKbTSgf4q648BdkJDLSK4cguT +D6BAw3gxj5V4wt5W0wn2JpjadFwnixrTzvMP/yAqfK0CgYEA93nBAoUPw8nzQkwk +8iWBjfJ999Rw92hnnvk3xbcQcGfgUYuB4dxwe6FQTmFIVylt81er1YUvMb3ao7fo +5ZcGnI5p1idjsd27kbZJLxb5Oh919hKu5IfkfYsVgnC0UdKCTgH5CaH0U4ATuXwt +RL6qm0XcLALs5y2OO6z3s+mYhisCgYEAx7EQ8MA45bkXnRQiHBhGcIIcr2sRDfVJ +OhHmGxx3EcYgtsIYKTqtQOyIt/nQxo6iyNL9bzfzBTybFJLuj63ZG1Ef4LosJedl +eAU2NsKv5MlKYDSdNbLAJ0Op9I2Xu/pXQecPwY/3MkIQArdQCLevMLEGywCsuJTn +BjkJNDkb9hcCgYAhoFiaiAwJVYKJSqFmibQd3opBR4uGApi54DE021gPff3b9rHS +R8q88cFgtRVISqfW/d2qaKtt/dcckdvCfo/2a99zqux/+ZoIBZXSITQCMs4rfoRn +JxPj/ycQD1JhH9J22QvGxEvXoLqNZJMeGS5DZO2yyT75dpYyA6Gwv5fq+wKBgQC5 +AhV917lfLELyZurLOLpaFlHZO8rLMcusH1UfHRo7v2IjsGOOHyzRD9QDD1IcA55R +jRj8Z8uhuGq9fvvC5gBVTK3KGPI6E85wifOWfH1V7CAaTeSxEXDxb8EQL/a6U89v +4VE5tdYCHC6VNZzS1staw0hV38QmJt57Z3Bdj+OV9QKBgE/b9fxpo+SVQ37BzNNY +SEKTTijaddz8fdomApg6a2eFJL93Ej/op7N7gnHtPWMivPnRRza9ZjfnG+aZ7n2J +sWyBiZK9xliS2TsF3l3q9Z0Vaq3i1nOlV7Bd20ZS8KjQjDtKnIRfLkQDkvmXbU5L +emwkdsQZbpPFJch3mCGtI7JW +-----END PRIVATE KEY----- diff --git a/test/csit/tests/aai/traversal/suite1/custom_query_1.robot b/test/csit/tests/aai/traversal/suite1/custom_query_1.robot new file mode 100644 index 000000000..4ced06f2e --- /dev/null +++ b/test/csit/tests/aai/traversal/suite1/custom_query_1.robot @@ -0,0 +1,131 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${GENERICVNFKEYVALUE} generic-vnf-integration-test1 +${PSERVERKEYVALUE} pserver-integration-test1 +${GENERICVNFURL} https://${HOST_IP}:8443/aai/v11/network/generic-vnfs/generic-vnf/${GENERICVNFKEYVALUE} +${PSERVERURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/pservers/pserver/${PSERVERKEYVALUE} +${RELATIONSHIPURL} https://${HOST_IP}:8443/aai/v11/network/generic-vnfs/generic-vnf/${GENERICVNFKEYVALUE}/relationship-list/relationship +${CUSTOMQUERYURL} https://${HOST_IP}:8443/aai/v11/query?format=simple +${GENERICVNFDATA} { "vnf-id": "${GENERICVNFKEYVALUE}", "vnf-name": "example-vnf-name-val-51663", "vnf-name2": "example-vnf-name2-val-15450", "vnf-type": "example-vnf-type-val-32726", "service-id": "example-service-id-val-49385", "regional-resource-zone": "example-regional-resource-zone-val-41257", "prov-status": "example-prov-status-val-5666", "operational-status": "example-operational-status-val-95008", "license-key": "example-license-key-val-25823", "equipment-role": "example-equipment-role-val-30138", "orchestration-status": "example-orchestration-status-val-18897", "heat-stack-id": "example-heat-stack-id-val-46807", "mso-catalog-key": "example-mso-catalog-key-val-43833", "management-option": "example-management-option-val-92040", "ipv4-oam-address": "example-ipv4-oam-address-val-85170", "ipv4-loopback0-address": "example-ipv4-loopback0-address-val-88650", "nm-lan-v6-address": "example-nm-lan-v6-address-val-76997", "management-v6-address": "example-management-v6-address-val-10065", "vcpu": 5182376, "vcpu-units": "example-vcpu-units-val-52149", "vmemory": 35401466, "vmemory-units": "example-vmemory-units-val-46534", "vdisk": 74255232, "vdisk-units": "example-vdisk-units-val-83649", "in-maint": true, "is-closed-loop-disabled": true, "summary-status": "example-summary-status-val-99435", "encrypted-access-flag": true, "entitlement-assignment-group-uuid": "example-entitlement-assignment-group-uuid-val-50758", "entitlement-resource-uuid": "example-entitlement-resource-uuid-val-21058", "license-assignment-group-uuid": "example-license-assignment-group-uuid-val-99092", "license-key-uuid": "example-license-key-uuid-val-93512", "nf-naming-code": "example-nf-naming-code-val-89", "selflink": "example-selflink-val-42557", "ipv4-oam-gateway-address": "example-ipv4-oam-gateway-address-val-50012", "ipv4-oam-gateway-address-prefix-length": 92759, "vlan-id-outer": 20604980, "nm-profile-name": "example-nm-profile-name-val-35055" } +${PSERVERDATA} { "hostname": "${PSERVERKEYVALUE}", "ptnii-equip-name": "example-ptnii-equip-name-val-91724", "number-of-cpus": 56461, "disk-in-gigabytes": 13534, "ram-in-megabytes": 66589, "equip-type": "example-equip-type-val-94149", "equip-vendor": "example-equip-vendor-val-91811", "equip-model": "example-equip-model-val-26157", "fqdn": "example-fqdn-val-19743", "pserver-selflink": "example-pserver-selflink-val-67676", "ipv4-oam-address": "example-ipv4-oam-address-val-12819", "serial-number": "example-serial-number-val-33384", "ipaddress-v4-loopback-0": "example-ipaddress-v4-loopback0-val-63311", "ipaddress-v6-loopback-0": "example-ipaddress-v6-loopback0-val-70485", "ipaddress-v4-aim": "example-ipaddress-v4-aim-val-23497", "ipaddress-v6-aim": "example-ipaddress-v6-aim-val-24473", "ipaddress-v6-oam": "example-ipaddress-v6-oam-val-38196", "inv-status": "example-inv-status-val-10016", "pserver-id": "example-pserver-id-val-90123", "internet-topology": "example-internet-topology-val-17042", "in-maint": true, "pserver-name2": "example-pserver-name2-val-12304", "purpose": "example-purpose-val-86719", "prov-status": "example-prov-status-val-68126", "management-option": "example-management-option-val-86521", "host-profile": "example-host-profile-val-48679" } +${CUSTOMQUERYDATA} {"gremlin":"g.V().has(\\'hostname\\', \\'${PSERVERKEYVALUE}\\')"} +${PSERVER_GENERIC_VNF_RELATIONSHIPDATA} {"related-to":"pserver","relationship-data":[{"relationship-key":"pserver.hostname","relationship-value":"${PSERVERKEYVALUE}"}]} + +*** Test Cases *** + +Run AAI Put generic-vnf + [Documentation] Create an generic-vnf object + ${resp}= PutWithCert ${GENERICVNFURL} ${GENERICVNFDATA} + log ${GENERICVNFURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Put pserver + [Documentation] Create an pserver object + ${resp}= PutWithCert ${PSERVERURL} ${PSERVERDATA} + log ${PSERVERURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Put relationship of pserver and generic-vnf + [Documentation] Create relationship of pserver and generic-vnf + ${resp}= PutWithCert ${RELATIONSHIPURL} ${PSERVER_GENERIC_VNF_RELATIONSHIPDATA} + log ${RELATIONSHIPURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Get pserver + [Documentation] Get the pserver object just relationship + ${resp} GetWithCert ${PSERVERURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Get generic-vnf + [Documentation] Get the generic-vnf object just relationship + ${resp} GetWithCert ${GENERICVNFURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put custom query simple format + [Documentation] custom query simple format + log ${CUSTOMQUERYDATA} + ${resp}= PutWithCert ${CUSTOMQUERYURL} ${CUSTOMQUERYDATA} + log ${CUSTOMQUERYURL} + log ${resp.text} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Get generic-vnf to delete + [Documentation] Get the generic-vnf object to delete + ${resp} GetWithCert ${GENERICVNFURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete generic-vnf + [Documentation] Delete the generic-vnf + ${resp}= DeleteWithCert ${GENERICVNFURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +Run AAI Get pserver to delete + [Documentation] Get the pserver object to delete + ${resp} GetWithCert ${PSERVERURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete pserver + [Documentation] Delete the pserver + ${resp}= DeleteWithCert ${PSERVERURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PatchWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/merge-patch+json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.patch('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} diff --git a/test/csit/tests/aai/traversal/suite1/custom_query_all_formats.robot b/test/csit/tests/aai/traversal/suite1/custom_query_all_formats.robot new file mode 100644 index 000000000..0e582603d --- /dev/null +++ b/test/csit/tests/aai/traversal/suite1/custom_query_all_formats.robot @@ -0,0 +1,190 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${GENERICVNFKEYVALUE} generic-vnf-integration-test1 +${PSERVERKEYVALUE} pserver-integration-test1 +${GENERICVNFURL} https://${HOST_IP}:8443/aai/v11/network/generic-vnfs/generic-vnf/${GENERICVNFKEYVALUE} +${PSERVERURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/pservers/pserver/${PSERVERKEYVALUE} +${RELATIONSHIPURL} https://${HOST_IP}:8443/aai/v11/network/generic-vnfs/generic-vnf/${GENERICVNFKEYVALUE}/relationship-list/relationship +${CUSTOMQUERYURL} https://${HOST_IP}:8443/aai/v11/query?format=simple +${CUSTOMQUERYURL_GRAPHSON} https://${HOST_IP}:8443/aai/v11/query?format=graphson +${CUSTOMQUERYURL_ID} https://${HOST_IP}:8443/aai/v11/query?format=id +${CUSTOMQUERYURL_PATHED} https://${HOST_IP}:8443/aai/v11/query?format=pathed +${CUSTOMQUERYURL_RESOURCE} https://${HOST_IP}:8443/aai/v11/query?format=resource +${CUSTOMQUERYURL_RESOURCE_URL} https://${HOST_IP}:8443/aai/v11/query?format=resource_and_url +${CUSTOMQUERYURL_RAW} https://${HOST_IP}:8443/aai/v11/query?format=raw +${GENERICVNFDATA} {"vnf-id":"${GENERICVNFKEYVALUE}","vnf-name":"example-vnf-name-val-51663","vnf-name2":"example-vnf-name2-val-15450","vnf-type":"example-vnf-type-val-32726"} +${PSERVERDATA} { "hostname": "${PSERVERKEYVALUE}", "ptnii-equip-name": "example-ptnii-equip-name-val-91724", "number-of-cpus": 56461, "disk-in-gigabytes": 13534, "ram-in-megabytes": 66589, "equip-type": "example-equip-type-val-94149", "equip-vendor": "example-equip-vendor-val-91811", "equip-model": "example-equip-model-val-26157", "fqdn": "example-fqdn-val-19743", "pserver-selflink": "example-pserver-selflink-val-67676", "ipv4-oam-address": "example-ipv4-oam-address-val-12819", "serial-number": "example-serial-number-val-33384", "ipaddress-v4-loopback-0": "example-ipaddress-v4-loopback0-val-63311", "ipaddress-v6-loopback-0": "example-ipaddress-v6-loopback0-val-70485", "ipaddress-v4-aim": "example-ipaddress-v4-aim-val-23497", "ipaddress-v6-aim": "example-ipaddress-v6-aim-val-24473", "ipaddress-v6-oam": "example-ipaddress-v6-oam-val-38196", "inv-status": "example-inv-status-val-10016", "pserver-id": "example-pserver-id-val-90123", "internet-topology": "example-internet-topology-val-17042", "in-maint": true, "pserver-name2": "example-pserver-name2-val-12304", "purpose": "example-purpose-val-86719", "prov-status": "example-prov-status-val-68126", "management-option": "example-management-option-val-86521", "host-profile": "example-host-profile-val-48679" } +${CUSTOMQUERYDATA} {"gremlin":"g.V().has(\\'hostname\\', \\'${PSERVERKEYVALUE}\\')"} +${PSERVER_GENERIC_VNF_RELATIONSHIPDATA} {"related-to":"pserver","relationship-data":[{"relationship-key":"pserver.hostname","relationship-value":"${PSERVERKEYVALUE}"}]} + +*** Test Cases *** +Run AAI Put generic-vnf + [Documentation] Create an generic-vnf object + ${resp}= PutWithCert ${GENERICVNFURL} ${GENERICVNFDATA} + log ${GENERICVNFURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Put pserver + [Documentation] Create an pserver object + ${resp}= PutWithCert ${PSERVERURL} ${PSERVERDATA} + log ${PSERVERURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Put relationship of pserver and generic-vnf + [Documentation] Create relationship of pserver and generic-vnf + ${resp}= PutWithCert ${RELATIONSHIPURL} ${PSERVER_GENERIC_VNF_RELATIONSHIPDATA} + log ${RELATIONSHIPURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Get pserver + [Documentation] Get the pserver object just relationship + ${resp} GetWithCert ${PSERVERURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Get generic-vnf + [Documentation] Get the generic-vnf object just relationship + ${resp} GetWithCert ${GENERICVNFURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put custom query simple format + [Documentation] custom query simple format + log ${CUSTOMQUERYDATA} + ${resp}= PutWithCert ${CUSTOMQUERYURL} ${CUSTOMQUERYDATA} + log ${CUSTOMQUERYURL} + log ${resp.text} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put custom query graphson format + [Documentation] custom query graphson format + log ${CUSTOMQUERYDATA} + ${resp}= PutWithCert ${CUSTOMQUERYURL_GRAPHSON} ${CUSTOMQUERYDATA} + log ${CUSTOMQUERYURL_GRAPHSON} + log ${resp.text} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put custom query id format + [Documentation] custom query id format + log ${CUSTOMQUERYDATA} + ${resp}= PutWithCert ${CUSTOMQUERYURL_ID} ${CUSTOMQUERYDATA} + log ${CUSTOMQUERYURL_ID} + log ${resp.text} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put custom query pathed format + [Documentation] custom query pathed format + log ${CUSTOMQUERYDATA} + ${resp}= PutWithCert ${CUSTOMQUERYURL_PATHED} ${CUSTOMQUERYDATA} + log ${CUSTOMQUERYURL_PATHED} + log ${resp.text} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put custom query resource format + [Documentation] custom query resource format + log ${CUSTOMQUERYDATA} + ${resp}= PutWithCert ${CUSTOMQUERYURL_RESOURCE} ${CUSTOMQUERYDATA} + log ${CUSTOMQUERYURL_RESOURCE} + log ${resp.text} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put custom query resource url format + [Documentation] custom query resource url format + log ${CUSTOMQUERYDATA} + ${resp}= PutWithCert ${CUSTOMQUERYURL_RESOURCE_URL} ${CUSTOMQUERYDATA} + log ${CUSTOMQUERYURL_RESOURCE_URL} + log ${resp.text} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put custom query raw format + [Documentation] custom query raw format + log ${CUSTOMQUERYDATA} + ${resp}= PutWithCert ${CUSTOMQUERYURL_RAW} ${CUSTOMQUERYDATA} + log ${CUSTOMQUERYURL_RAW} + log ${resp.text} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Get generic-vnf to delete + [Documentation] Get the generic-vnf object to delete + ${resp} GetWithCert ${GENERICVNFURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete generic-vnf + [Documentation] Delete the generic-vnf + ${resp}= DeleteWithCert ${GENERICVNFURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +Run AAI Get pserver to delete + [Documentation] Get the pserver object to delete + ${resp} GetWithCert ${PSERVERURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete pserver + [Documentation] Delete the pserver + ${resp}= DeleteWithCert ${PSERVERURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [Return] ${resp} + +PatchWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/merge-patch+json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.patch('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [Return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [Return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [Return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [Return] ${resp} diff --git a/test/csit/tests/appc/healthcheck/APPC_GLOBAL_VARIABLES.robot b/test/csit/tests/appc/healthcheck/APPC_GLOBAL_VARIABLES.robot new file mode 100644 index 000000000..b869434fc --- /dev/null +++ b/test/csit/tests/appc/healthcheck/APPC_GLOBAL_VARIABLES.robot @@ -0,0 +1,10 @@ +*** Settings *** +Documentation store all properties that can change or are used in multiple places here +... format is all caps with underscores between words and prepended with GLOBAL +... make sure you prepend them with GLOBAL so that other files can easily see it is from this file. + + +*** Variables *** +${GLOBAL_VNF_RESTART_REQUESTFILE} ${CURDIR}/LCM_VNF_RESTART_REQUEST.txt +${GLOBAL_VM_RESTART_REQUESTFILE} ${CURDIR}/LCM_VM_RESTART_REQUEST.txt +${GLOBAL_HEALTHCHECK_REQUESTFILE} ${CURDIR}/LCM_VM_HEALTHCHECK_REQUEST.txt
\ No newline at end of file diff --git a/test/csit/tests/appc/healthcheck/APPC_Netstat.robot b/test/csit/tests/appc/healthcheck/APPC_Netstat.robot new file mode 100644 index 000000000..285fc3727 --- /dev/null +++ b/test/csit/tests/appc/healthcheck/APPC_Netstat.robot @@ -0,0 +1,8 @@ +*** Settings *** +Library OperatingSystem + +*** Test Cases *** +APPC Netstat + [Documentation] Checking the active ports + ${output}= Run netstat -a | grep -E 8282 | grep LISTEN + Log To Console ${output} diff --git a/test/csit/tests/appc/healthcheck/LCM_HEALTHCHECK_TIMESTAMP.robot b/test/csit/tests/appc/healthcheck/LCM_HEALTHCHECK_TIMESTAMP.robot new file mode 100644 index 000000000..2259f3f69 --- /dev/null +++ b/test/csit/tests/appc/healthcheck/LCM_HEALTHCHECK_TIMESTAMP.robot @@ -0,0 +1,52 @@ +*** Settings *** +Library Selenium2Library +Library OperatingSystem +Library XvfbRobot +Resource APPC_GLOBAL_VARIABLES.robot +Resource gettime.robot + +*** Variable *** +${ResponseCode} +${var} + +*** Test Cases *** + +APPC LCM API HEALTHCHECK + [Documentation] APPC LCM API HEALTHCHECK + Start Virtual Display 1920 1080 + Open Browser http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@localhost:8282/apidoc/explorer/index.html chrome + Maximize Browser Window +# Click Element xpath=.//p[contains(text(),'If you have reason to expect the website is safe, select the I Accept the Risk button to continue.')]//following::img + + Reload Page + +# Wait Until Page Contains Element xpath=.//*[contains(text(),'appc-provider-lcm(2016-01-08)')] + +# Set Selenium Speed 60 +# Click Element xpath=.//*[contains(text(),'appc-provider-lcm(2016-01-08)')] + + +# wait until page contains element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')] +# Set Selenium Speed 60 +# Click link xpath=.//*[contains(text(),'appc-provider-lcm(2016-01-08)')]/following::li[5]/ul/li/div[1]/h3/span[2]/a +# Click Element xpath=//*[@id="appc-provider-lcm(2016-01-08)_health_check_post_0"]/div[1]/h3/span[2]/a + +# Get Server time ${GLOBAL_HEALTHCHECK_REQUESTFILE} +# ${file_content}= OperatingSystem.Get File ${GLOBAL_HEALTHCHECK_REQUESTFILE} + +# wait until page contains element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')]//following::table +# Set Selenium Speed 90 +# Input Text xpath=(.//*[contains(text(),'(health-check)input-TOP')])[1]/following::textarea[1] ${file_content} +# Input Text xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')]//following::table//tbody/tr/td[2]/textarea ${file_content} + +# wait until page contains element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')]//following::form/div[2]/input[1] +# Set Selenium Speed 90 +# Click Element xpath=//*[@id="appc-provider-lcm(2016-01-08)_health_check_post_0_content"]/form/div[2]/input + +## ${var}= Get Value xpath= //*[@id="appc-provider-lcm(2016-01-08)_health_check_post_0_content"]/div[2]/div[3]/pre +## Element Text Should Be xpath=//*[@id="appc-provider-lcm(2016-01-08)_health_check_post_0_content"]/div[2]/div[3]/pre[1][text()='200'] 200 expected + +Tear Down + + [Documentation] Close all browsers + Close All Browsers
\ No newline at end of file diff --git a/test/csit/tests/appc/healthcheck/LCM_VM_HEALTHCHECK_REQUEST.txt b/test/csit/tests/appc/healthcheck/LCM_VM_HEALTHCHECK_REQUEST.txt new file mode 100644 index 000000000..d258b492b --- /dev/null +++ b/test/csit/tests/appc/healthcheck/LCM_VM_HEALTHCHECK_REQUEST.txt @@ -0,0 +1,25 @@ +{ +"input" : +{ +"common-header" : +{ +"timestamp" : "2017-10-07T01:28:39.615000Z", +"api-ver" : "2.00", +"originator-id" : "SDNGP", +"request-id" : "AppCONAP-lcm-HealthCheck-PhilTest#1", +"sub-request-id" : "AppCONAP-lcm-HealthCheck-PhilTest#1", +"flags" : +{ +"mode" : "NORMAL", +"force" : "TRUE", +"ttl" : 3600 +} +}, +"action" : "HealthCheck", +"action-identifiers" : +{ +"vnf-id" : "dbax001v" +}, +"payload" : "{\"request-parameters\":{\"vnf-name\":\"dbax001v\",\"vnf-host-ip-address\":\"https://135.205.240.68:8080/Dispatch/\"},\"configuration-parameters\":{\"vnf_instance\":\"dbax001v\"}}" +} +} diff --git a/test/csit/tests/appc/healthcheck/LCM_VM_RESTART_REQUEST.txt b/test/csit/tests/appc/healthcheck/LCM_VM_RESTART_REQUEST.txt new file mode 100644 index 000000000..5e199c97e --- /dev/null +++ b/test/csit/tests/appc/healthcheck/LCM_VM_RESTART_REQUEST.txt @@ -0,0 +1,24 @@ +{ +"input" : +{ +"common-header" : +{ +"timestamp" : "2017-09-29T16:30:05.44Z", +"api-ver" : "2.01", +"originator-id" : "c09ac7d1-de62-0016-2000-e63702155Phil2", +"request-id" : "c09ac7d1-de62-0016-2000-e63702155Phil2", +"sub-request-id" : "150", +"flags" : +{ +"force" : "TRUE", +"ttl" : 60000 +} +}, +"action" : "Restart", +"action-identifiers" : +{ +"vnf-id" : "trial-vnf-004" +}, +"payload" : "{\"vm-id\":\"http://135.25.246.131:8774/v2/81fc2bc61f974de1b5a49e8c2ec090bb/servers/7c95ba81-4aad-4b13-9e94-d6af4f2b06be\",\"identity-url\":\"http://135.25.246.131:5000/v2.0\",\"tenant-id\":\"81fc2bc61f974de1b5a49e8c2ec090bb\"}" +} +}
\ No newline at end of file diff --git a/test/csit/tests/appc/healthcheck/LCM_VM_RESTART_TIMESTAMP.robot b/test/csit/tests/appc/healthcheck/LCM_VM_RESTART_TIMESTAMP.robot new file mode 100644 index 000000000..768865f92 --- /dev/null +++ b/test/csit/tests/appc/healthcheck/LCM_VM_RESTART_TIMESTAMP.robot @@ -0,0 +1,47 @@ +*** Settings *** +Library Selenium2Library +Library OperatingSystem +Library XvfbRobot +Resource APPC_GLOBAL_VARIABLES.robot +Resource gettime.robot + +*** Variable *** +${ResponseCode} +${var} + +*** Test Cases *** +APPC LCM API VM RESTART + [Documentation] APPC LCM API VM RESTART + Start Virtual Display 1920 1080 + Open Browser http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@localhost:8282/apidoc/explorer/index.html chrome + Maximize Browser Window +# Click Element xpath=.//p[contains(text(),'If you have reason to expect the website is safe, select the I Accept the Risk button to continue.')]//following::img + + Reload Page + +# Wait Until Page Contains Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a +# Set Selenium Speed 60 +# Click Element xpath=.//*[contains(text(),'appc-provider-lcm(2016-01-08)')] + +# Wait Until Page Contains Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')] +# Set Selenium Speed 60 +# Click Element xpath=.//*[contains(text(),'appc-provider-lcm:restart')] + +# Get Server time ${GLOBAL_VM_RESTART_REQUESTFILE} + +# ${file_content}= OperatingSystem.Get File ${GLOBAL_VM_RESTART_REQUESTFILE} + +# Wait Until Page Contains Element xpath=//td[contains(text(), '(restart)input-TOP')]//following::textarea[@name='(restart)input-TOP'][3] +# Set Selenium Speed 90 +# Input Text xpath=(.//*[contains(text(),'(restart)input-TOP')])[5]/following::textarea[1] ${file_content} +# Input Text xpath= //td[contains(text(), '(restart)input-TOP')]//following::textarea[@name='(restart)input-TOP'][3] ${file_content} + +# Click Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::form/div[2]/input[1] + +# ${var}= Get Value xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::h4[contains(text(),'Response Code')][1]//following-sibling::div//pre +# Element Text Should Be xpath=//*[contains(text(),'/operations/appc-provider-lcm:restart')]//following::h4[text()='Response Code'][1]//following-sibling::div//pre[1][text()='200'] 200 expected + + +Tear Down + [Documentation] Close all browsers + Close All Browsers
\ No newline at end of file diff --git a/test/csit/tests/appc/healthcheck/LCM_VNF_RESTART_REQUEST.txt b/test/csit/tests/appc/healthcheck/LCM_VNF_RESTART_REQUEST.txt new file mode 100644 index 000000000..ee9b8d9ba --- /dev/null +++ b/test/csit/tests/appc/healthcheck/LCM_VNF_RESTART_REQUEST.txt @@ -0,0 +1,24 @@ +{ +"input" : +{ +"common-header" : +{ +"timestamp" : "2017-10-07T01:39:54.227000Z", +"api-ver" : "2.00", +"originator-id" : "c09ac7d1-de62-0016-2000-e63702155555", +"request-id" : "c09ac7d1-de62-0016-2000-e63701125555", +"sub-request-id" : "150", +"flags" : +{ +"force" : "TRUE", +"ttl" : 60000 +} +}, +"action" : "Restart", +"action-identifiers" : +{ +"vnf-id" : "ibcx8888v" +}, +"payload" : "{\"AICIdentity\" : \"http://135.25.246.162:5000/v2.0\", \"vnf-host-ip-address\" : \"135.21.166.46\"}" +} +} diff --git a/test/csit/tests/appc/healthcheck/LCM_VNF_RESTART_TIMESTAMP.robot b/test/csit/tests/appc/healthcheck/LCM_VNF_RESTART_TIMESTAMP.robot new file mode 100644 index 000000000..15690f023 --- /dev/null +++ b/test/csit/tests/appc/healthcheck/LCM_VNF_RESTART_TIMESTAMP.robot @@ -0,0 +1,50 @@ +*** Settings *** +Library Selenium2Library +Library OperatingSystem +Library XvfbRobot +Resource ${CURDIR}/APPC_GLOBAL_VARIABLES.robot +Resource ${CURDIR}/gettime.robot + + + +*** Variable *** +${ResponseCode} +${var} + +*** Test Cases *** + +APPC LCM API VNF RESTART + [Documentation] APPC LCM API VNF RESTART + Start Virtual Display 1920 1080 + Open Browser http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@localhost:8282/apidoc/explorer/index.html chrome + Maximize Browser Window +# Click Element xpath=.//p[contains(text(),'If you have reason to expect the website is safe, select the I Accept the Risk button to continue.')]//following::img + + Reload Page + +# Wait Until Page Contains Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a +# Set Selenium Speed 60 +# Click Element xpath=.//*[contains(text(),'appc-provider-lcm(2016-01-08)')] + + +# Wait Until Page Contains Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')] +# Set Selenium Speed 60 +# Click Element xpath=.//*[contains(text(),'appc-provider-lcm:restart')] + +# Get Server time ${GLOBAL_VNF_RESTART_REQUESTFILE} +# ${file_content}= OperatingSystem.Get File ${GLOBAL_VNF_RESTART_REQUESTFILE} + +# Wait Until Page Contains Element xpath=//td[contains(text(), '(restart)input-TOP')]//following::textarea[@name='(restart)input-TOP'][3] +# Set Selenium Speed 90 +# Input Text xpath=(.//*[contains(text(),'(restart)input-TOP')])[5]/following::textarea[1] ${file_content} +# Click Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::form/div[2]/input[1] + +# Input Text xpath= //td[contains(text(), '(restart)input-TOP')]//following::textarea[@name='(restart)input-TOP'][3] ${file_content} + +# ${var}= Get Value xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::h4[contains(text(),'Response Code')][1]//following-sibling::div//pre +# Element Text Should Be xpath=//*[contains(text(),'/operations/appc-provider-lcm:restart')]//following::h4[text()='Response Code'][1]//following-sibling::div//pre[1][text()='200'] 200 expected + + +Tear Down + [Documentation] Close all browsers + Close All Browsers
\ No newline at end of file diff --git a/test/csit/tests/appc/healthcheck/gettime.robot b/test/csit/tests/appc/healthcheck/gettime.robot new file mode 100644 index 000000000..9f376f9bc --- /dev/null +++ b/test/csit/tests/appc/healthcheck/gettime.robot @@ -0,0 +1,40 @@ +*** Settings *** +Library Selenium2Library +Library OperatingSystem +Library DateTime +Library String +##Library HttpLibrary.HTTP +Library Collections + + +*** Keywords *** + +Get Server time + [Documentation] Getting server time to update the json request + [Arguments] ${RequestFile} + + ${date}= Get Current Date time_zone=local result_format=%Y-%m-%dT%H:%M:%S.%fZ exclude_millis=False + + #updating the request file with the server time + ${file_content}= OperatingSystem.Get File ${RequestFile} + @{list}= Split to lines ${file_content} + ${data}= Get from list ${list} 5 + @{splitted_string}= Split String ${data} : 1 + ${time}= Get From List ${splitted_string} 1 + Log ${time} + @{splitted_string_time}= Split String ${time} " 2 + ${times1}= Get From List ${splitted_string_time} 1 + Log ${times1} + ${replaced_string}= Replace String ${data} ${times1} ${date} + @{list1}= Split to lines ${file_content} + Remove from list ${list1} 5 + Insert into list ${list1} 5 ${replaced_string} + Remove File ${RequestFile} + :FOR ${line} IN @{list1} + \ Append to File ${RequestFile} ${line} encoding=UTF-8 + \ Append to File ${RequestFile} ${\n} encoding=UTF-8 + + + + +
\ No newline at end of file diff --git a/test/csit/tests/appc/testsuite/APPC_Netstat.robot b/test/csit/tests/appc/testsuite/APPC_Netstat.robot deleted file mode 100644 index 5544fb565..000000000 --- a/test/csit/tests/appc/testsuite/APPC_Netstat.robot +++ /dev/null @@ -1,19 +0,0 @@ -*** Settings *** -Library SSHLibrary -Library OperatingSystem -*** Variables *** -${HOST} 104.130.138.49 -${USERNAME} test -${private_key} H:\\TestSuite\\testsuite\\robot\\testsuites -*** Test Cases *** -APPC Netstat - Open Connection ${HOST} - ${password}= Get File ${private_key} - Login ${USERNAME} ${password} - log to console \nConnected Successfully - ${cmd} = set variable netstat -a | grep -E '8443 | grep LISTEN - execute command ${cmd} - -Tear Down - [Documentation] Close all connections - Close All connections
\ No newline at end of file diff --git a/test/csit/tests/appc/testsuite/LCM_HEALTHCHECK.robot b/test/csit/tests/appc/testsuite/LCM_HEALTHCHECK.robot deleted file mode 100644 index c3594ef2e..000000000 --- a/test/csit/tests/appc/testsuite/LCM_HEALTHCHECK.robot +++ /dev/null @@ -1,33 +0,0 @@ -*** Settings *** -Library Selenium2Library -Library OperatingSystem - -*** Variable *** -${ResponseCode} -${var} -${RequestJSON} C:\\RobotSampleForLearning\\LearningSamples\\Resources\\Healthchk.json - - -*** Test Cases *** - -APPC LCM Health check - [Documentation] APPC HealthCheck - Open Browser http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@104.130.138.49:8282/apidoc/explorer/index.html chrome - Click Element xpath=.//p[contains(text(),'If you have reason to expect the website is safe, select the I Accept the Risk button to continue.')]//following::img - - Wait Until Page Contains Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a - Click Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a - - wait until page contains element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')] - Click Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')] - - ${HealthChk}= Get File ${RequestJSON} - wait until page contains element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')]//following::table - Input Text xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')]//following::table//tbody/tr/td[2]/textarea ${HealthChk} - - wait until page contains element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')]//following::form/div[2]/input[1] - Click Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:health-check')]//following::form/div[2]/input[1] - -Tear Down - [Documentation] Close all browsers - Close All Browsers
\ No newline at end of file diff --git a/test/csit/tests/appc/testsuite/LCM_VM_RESTART.robot b/test/csit/tests/appc/testsuite/LCM_VM_RESTART.robot deleted file mode 100644 index 997ba17a0..000000000 --- a/test/csit/tests/appc/testsuite/LCM_VM_RESTART.robot +++ /dev/null @@ -1,31 +0,0 @@ -*** Settings *** -Library Selenium2Library -Library OperatingSystem - -*** Variable *** -${ResponseCode} -${var} -${RequestJSON} /LearningSamples/Resources/VMRestart.json - - -*** Test Cases *** - -APPC API VM RESTART - [Documentation] APPC VM LCM Restart - Open Browser http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@104.130.138.49:8282/apidoc/explorer/index.html chrome - Click Element xpath=.//p[contains(text(),'If you have reason to expect the website is safe, select the I Accept the Risk button to continue.')]//following::img - Click Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a - Click Element xpath=//*[@id="appc-provider-lcm(2016-01-08)_restart_post_23"]/div[1]/h3/span[2]/a - ${VM_LCM_RESTART} Get File ${RequestJSON} - Input Text xpath=//*[@id="appc-provider-lcm(2016-01-08)_restart_post_23_content"]/form/table/tbody/tr/td[2]/textarea ${VM_LCM_RESTART} - Click Element xpath=//*[@id="appc-provider-lcm(2016-01-08)_restart_post_23_content"]/form/div[2]/input - # Get Text locator - ${ResponseCode} Get Text xpath=//*[@id="appc-provider-lcm(2016-01-08)_restart_post_23_content"]/div[2]/h4[contains(text(),'Response Code')]//following::div//pre - ${var} Get Value xpath=//*[@id="appc-provider-lcm(2016-01-08)_restart_post_23_content"]/div[2]/h4[contains(text(),'Response Code')]//following::div//pre - Log Value--> ${ResponseCode} - Log var--> ${var} - Element Text Should Be xpath=//*[@id="appc-provider-lcm(2016-01-08)_restart_post_23_content"]/div[2]/h4[contains(text(),'Response Code')]//following::div//pre 400 expected - -Tear Down - [Documentation] Close all browsers - Close All Browsers
\ No newline at end of file diff --git a/test/csit/tests/appc/testsuite/LCM_VNF_RESTART.robot b/test/csit/tests/appc/testsuite/LCM_VNF_RESTART.robot deleted file mode 100644 index 1bb2c13eb..000000000 --- a/test/csit/tests/appc/testsuite/LCM_VNF_RESTART.robot +++ /dev/null @@ -1,45 +0,0 @@ -*** Settings *** -Library Selenium2Library -Library OperatingSystem - -*** Variable *** -${ResponseCode} -${var} -${RequestJSON} C:\\RobotSampleForLearning\\LearningSamples\\Resources\\VNFRestart.json - - -*** Test Cases *** - -APPC API VM RESTART - [Documentation] APPC VM LCM Restart - Open Browser http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@104.130.138.49:8282/apidoc/explorer/index.html chrome - Click Element xpath=.//p[contains(text(),'If you have reason to expect the website is safe, select the I Accept the Risk button to continue.')]//following::img - - Wait Until Page Contains Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a - Click Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a - - - Wait Until Page Contains Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')] - Click Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')] - - - ${VNF_LCM_RESTART}= Get File ${RequestJSON} - Wait Until Page Contains Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::table - - Input Text xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::table//tbody/tr/td[2]/textarea ${VNF_LCM_RESTART} - - # Wait Until Page Contains Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]/form/div[2]/input - Click Element xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::form/div[2]/input[1] - - # Get Text locator - ${ResponseCode} Get Text xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::h4[contains(text(),'Response Code')][1]//following-sibling::div//pre - - # //*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::h4[contains(text(),'Response Code')]//following-sibling::div//pre - ${var} Get Value xpath=//*[@id="resource_appc-provider-lcm(2016-01-08)"]/div/h2/a//following::a[contains(text(),'/operations/appc-provider-lcm:restart')]//following::h4[contains(text(),'Response Code')][1]//following-sibling::div//pre - Log Value--> ${ResponseCode} - Log var--> ${var} - Element Text Should Be xpath=//*[contains(text(),'/operations/appc-provider-lcm:restart')]//following::h4[text()='Response Code'][1]//following-sibling::div//pre[1] 200 expected - -Tear Down - [Documentation] Close all browsers - Close All Browsers
\ No newline at end of file diff --git a/test/csit/tests/clamp/APIs/01__TCA.robot b/test/csit/tests/clamp/APIs/01__TCA.robot index e4837a66a..c0b268bf1 100644 --- a/test/csit/tests/clamp/APIs/01__TCA.robot +++ b/test/csit/tests/clamp/APIs/01__TCA.robot @@ -52,7 +52,7 @@ Put Requests to add Close Loop TCA Model2 ${resp}= Put Request clamp /restservices/clds/v1/clds/model/TCAModel2 data=${data} headers=${headers} Should Be Equal As Strings ${resp.status_code} 200 -Get Requests verify Model1 and Model2 found +Get Requests verify TCA Model1 and Model2 found ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 Create Session clamp http://localhost:8080 auth=${auth} ${resp}= Get Request clamp /restservices/clds/v1/clds/model-names diff --git a/test/csit/tests/clamp/APIs/02__Holmes.robot b/test/csit/tests/clamp/APIs/02__Holmes.robot index 9087c4bcd..055b99af9 100644 --- a/test/csit/tests/clamp/APIs/02__Holmes.robot +++ b/test/csit/tests/clamp/APIs/02__Holmes.robot @@ -11,7 +11,7 @@ Get Requests health check ok ${resp}= Get Request clamp /restservices/clds/v1/clds/healthcheck Should Be Equal As Strings ${resp.status_code} 200 -Put Requests to add Holmes template1 with yaml properties +Put Requests to add Holmes template1 without properties ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 Create Session clamp http://localhost:8080 auth=${auth} ${data}= Get Binary File ${CURDIR}${/}data${/}createHolmesTemplate1.json @@ -19,7 +19,7 @@ Put Requests to add Holmes template1 with yaml properties ${resp}= Put Request clamp /restservices/clds/v1/cldsTempate/template/HolmesTemplate1 data=${data} headers=${headers} Should Be Equal As Strings ${resp.status_code} 200 -Put Requests to add Holmes template2 with yaml properties +Put Requests to add Holmes template2 without properties ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 Create Session clamp http://localhost:8080 auth=${auth} ${data}= Get Binary File ${CURDIR}${/}data${/}createHolmesTemplate2.json @@ -36,3 +36,18 @@ Get Requests verify Holmes template1 and template2 found Should Contain Match ${resp} *HolmesTemplate2* Should Not Contain Match ${resp} *HolmesTemplate99* +Put Requests to add Close Loop Holmes Model1 + ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 + Create Session clamp http://localhost:8080 auth=${auth} + ${data}= Get Binary File ${CURDIR}${/}data${/}createHolmesModel1.json + &{headers}= Create Dictionary Content-Type=application/json + ${resp}= Put Request clamp /restservices/clds/v1/clds/model/HolmesModel1 data=${data} headers=${headers} + Should Be Equal As Strings ${resp.status_code} 200 + +Get Requests verify Holmes Model1 found + ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 + Create Session clamp http://localhost:8080 auth=${auth} + ${resp}= Get Request clamp /restservices/clds/v1/clds/model-names + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain Match ${resp} *HolmesModel1* + Should Not Contain Match ${resp} *HolmesModel99* diff --git a/test/csit/tests/clamp/APIs/03__VariousApis.robot b/test/csit/tests/clamp/APIs/03__VariousApis.robot new file mode 100644 index 000000000..85782a28e --- /dev/null +++ b/test/csit/tests/clamp/APIs/03__VariousApis.robot @@ -0,0 +1,46 @@ +*** Settings *** +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json + + +*** Test Cases *** +Get Clamp properties + ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 + Create Session clamp http://localhost:8080 auth=${auth} + ${resp}= Get Request clamp /restservices/clds/v1/clds/properties + Dictionary Should Contain Key ${resp.json()} global + Dictionary Should Contain Key ${resp.json()['global']} location + +Get Clamp Info + ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 + Create Session clamp http://localhost:8080 auth=${auth} + ${resp}= Get Request clamp /restservices/clds/v1/clds/cldsInfo + Dictionary Should Contain Key ${resp.json()} userName + Dictionary Should Contain Key ${resp.json()} cldsVersion + +Get model bpmn by name + ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 + Create Session clamp http://localhost:8080 auth=${auth} + ${resp}= Get Request clamp /restservices/clds/v1/clds/model/bpmn/HolmesModel1 + Should Contain Match ${resp} *StartEvent_* + Should Contain Match ${resp} *VesCollector_* + Should Contain Match ${resp} *Holmes_* + Should Contain Match ${resp} *Policy_* + Should Contain Match ${resp} *EndEvent_* + +Get model by name + ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 + Create Session clamp http://localhost:8080 auth=${auth} + ${resp}= Get Request clamp /restservices/clds/v1/clds/model/HolmesModel1 + Dictionary Should Contain Key ${resp.json()} templateName + Dictionary Should Contain Key ${resp.json()} bpmnText + Dictionary Should Contain Key ${resp.json()} imageText + +Get model names + ${auth}= Create List admin 5f4dcc3b5aa765d61d8327deb882cf99 + Create Session clamp http://localhost:8080 auth=${auth} + ${resp}= Get Request clamp /restservices/clds/v1/clds/model-names + Should Contain Match ${resp} *HolmesModel1* + Should Not Contain Match ${resp} *model99*
\ No newline at end of file diff --git a/test/csit/tests/clamp/APIs/data/createHolmesModel1.json b/test/csit/tests/clamp/APIs/data/createHolmesModel1.json index 10bc82cd6..893d1b33f 100644 --- a/test/csit/tests/clamp/APIs/data/createHolmesModel1.json +++ b/test/csit/tests/clamp/APIs/data/createHolmesModel1.json @@ -1,8 +1,8 @@ { "name": "HolmesModel1", "controlNamePrefix": "ClosedLoop-", - "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0co4u88</bpmn:outgoing> </bpmn:startEvent> <bpmn:policy id=\"Policy_0cq8t1w\"> <bpmn:incoming>SequenceFlow_0rastvv</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0dk7l0v</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_0xhu5cr\"> <bpmn:incoming>SequenceFlow_0dk7l0v</bpmn:incoming> </bpmn:endEvent> <bpmn:holmes id=\"Holmes_12plv0p\"> <bpmn:incoming>SequenceFlow_0e0orup</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0ra7ywp</bpmn:outgoing> </bpmn:holmes> <bpmn:vesCollector id=\"VesCollector_1f8k1o6\"> <bpmn:incoming>SequenceFlow_1luu2du</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0e0orup</bpmn:outgoing> </bpmn:vesCollector> <bpmn:collector id=\"Collector_0ki9muk\"> <bpmn:incoming>SequenceFlow_0co4u88</bpmn:incoming> <bpmn:outgoing>SequenceFlow_10lgcns</bpmn:outgoing> </bpmn:collector> <bpmn:tCA id=\"TCA_199ueal\"> <bpmn:incoming>SequenceFlow_0ra7ywp</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0rastvv</bpmn:outgoing> </bpmn:tCA> <bpmn:stringMatch id=\"StringMatch_08icoyk\"> <bpmn:incoming>SequenceFlow_10lgcns</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1luu2du</bpmn:outgoing> </bpmn:stringMatch> <bpmn:sequenceFlow id=\"SequenceFlow_0co4u88\" sourceRef=\"StartEvent_1\" targetRef=\"Collector_0ki9muk\" /> <bpmn:sequenceFlow id=\"SequenceFlow_10lgcns\" sourceRef=\"Collector_0ki9muk\" targetRef=\"StringMatch_08icoyk\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1luu2du\" sourceRef=\"StringMatch_08icoyk\" targetRef=\"VesCollector_1f8k1o6\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0e0orup\" sourceRef=\"VesCollector_1f8k1o6\" targetRef=\"Holmes_12plv0p\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0ra7ywp\" sourceRef=\"Holmes_12plv0p\" targetRef=\"TCA_199ueal\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0rastvv\" sourceRef=\"TCA_199ueal\" targetRef=\"Policy_0cq8t1w\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0dk7l0v\" sourceRef=\"Policy_0cq8t1w\" targetRef=\"EndEvent_0xhu5cr\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_0cq8t1w_di\" bpmnElement=\"Policy_0cq8t1w\"> <dc:Bounds x=\"1369\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_0xhu5cr_di\" bpmnElement=\"EndEvent_0xhu5cr\"> <dc:Bounds x=\"1634\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1607\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Holmes_12plv0p_di\" bpmnElement=\"Holmes_12plv0p\"> <dc:Bounds x=\"881\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_1f8k1o6_di\" bpmnElement=\"VesCollector_1f8k1o6\"> <dc:Bounds x=\"653\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Collector_0ki9muk_di\" bpmnElement=\"Collector_0ki9muk\"> <dc:Bounds x=\"182\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_199ueal_di\" bpmnElement=\"TCA_199ueal\"> <dc:Bounds x=\"1112\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"StringMatch_08icoyk_di\" bpmnElement=\"StringMatch_08icoyk\"> <dc:Bounds x=\"430\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0co4u88_di\" bpmnElement=\"SequenceFlow_0co4u88\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"182\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"89\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_10lgcns_di\" bpmnElement=\"SequenceFlow_10lgcns\"> <di:waypoint xsi:type=\"dc:Point\" x=\"302\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"430\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"321\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1luu2du_di\" bpmnElement=\"SequenceFlow_1luu2du\"> <di:waypoint xsi:type=\"dc:Point\" x=\"550\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"653\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"556.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0e0orup_di\" bpmnElement=\"SequenceFlow_0e0orup\"> <di:waypoint xsi:type=\"dc:Point\" x=\"773\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"881\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"782\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0ra7ywp_di\" bpmnElement=\"SequenceFlow_0ra7ywp\"> <di:waypoint xsi:type=\"dc:Point\" x=\"1001\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"1112\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1011.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0rastvv_di\" bpmnElement=\"SequenceFlow_0rastvv\"> <di:waypoint xsi:type=\"dc:Point\" x=\"1232\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"1369\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1255.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0dk7l0v_di\" bpmnElement=\"SequenceFlow_0dk7l0v\"> <di:waypoint xsi:type=\"dc:Point\" x=\"1489\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"1634\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1516.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", - "propText": "{\"Policy_0cq8t1w\":{\"Policy1\":[{\"name\":\"pname\",\"value\":\"Policy1\"},{\"name\":\"pid\",\"value\":\"0\"},{\"name\":\"timeout\",\"value\":\"345\"},{\"policyConfigurations\":[[{\"name\":\"maxRetries\",\"value\":[\"3\"]},{\"name\":\"retryTimeLimit\",\"value\":[\"180\"]},{\"name\":\"_id\",\"value\":[\"fv24LBw\"]},{\"name\":\"parentPolicy\",\"value\":[\"\"]}]]}]},\"TCA_199ueal\":{\"tca1\":[{\"name\":\"tname\",\"value\":\"tca1\"},{\"name\":\"tuuid\",\"value\":\"66657dc2-beee-t33a-8d6a-9f0ad61b7269\"},{\"name\":\"tnfc\",\"value\":\"\"},{\"name\":\"tcaEnab\",\"value\":\"on\"},{\"name\":\"tcaPol\",\"value\":\"Policy1\"},{\"name\":\"tcaPolId\",\"value\":\"0\"},{\"name\":\"tcaInt\",\"value\":\"1\"},{\"name\":\"tcaSev\",\"value\":\"NORMAL\"},{\"name\":\"tcaVio\",\"value\":\"1\"},{\"serviceConfigurations\":[]}]},\"StringMatch_08icoyk\":{\"group1\":[{\"name\":\"rgname\",\"value\":\"1505404573310\"},{\"name\":\"rgfriendlyname\",\"value\":\"group1\"},{\"name\":\"policyName\",\"value\":\"Policy1\"},{\"name\":\"policyId\",\"value\":\"0\"},{\"serviceConfigurations\":[[{\"name\":\"aaiMatchingFields\",\"value\":[\"complex.city\",\"complex.physical-location-id\"]},{\"name\":\"aaiSendFields\",\"value\":[\"complex.city\",\"complex.physical-location-id\"]},{\"name\":\"timeWindow\",\"value\":[\"0\"]},{\"name\":\"ageLimit\",\"value\":[\"1600\"]},{\"name\":\"createClosedLoopEventId\",\"value\":[\"Initial\"]},{\"name\":\"outputEventName\",\"value\":[\"ONSET\"]},{\"stringSet\":[{},{\"name\":\"eventSeverity\",\"value\":[\"NORMAL\"]},{\"name\":\"eventSourceType\",\"value\":[\"\"]}]}]]}]},\"Collector_0ki9muk\":[{\"name\":\"topicPublishes\",\"value\":\"DCAE-COLLECTOR-UCSNMP\"}]}", - "imageText": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj7kmypgax\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj7kmypgaz\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj7kmypga11\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj7kmypga13\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj7kmypga15\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj7kmypga17\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_0cq8t1w\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0xhu5cr\" transform=\"matrix(1,0,0,1,1634,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0xhu5cr_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Holmes_12plv0p\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><circle cx=\"15\" cy=\"15\" r=\"10\" style=\"stroke-width: 1;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_1f8k1o6\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Collector_0ki9muk\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_199ueal\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StringMatch_08icoyk\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,20 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0co4u88\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"108\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L182,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kmypgax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 182,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0co4u88_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_10lgcns\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"296\" y=\"174\" width=\"140\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 302,180L430,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kmypgax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"302,180 430,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_10lgcns_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1luu2du\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"544\" y=\"174\" width=\"115\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 550,180L653,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kmypgax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"550,180 653,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1luu2du_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0e0orup\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"767\" y=\"174\" width=\"120\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 773,180L881,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kmypgax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"773,180 881,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0e0orup_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0ra7ywp\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"995\" y=\"174\" width=\"123\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 1001,180L1112,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kmypgax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"1001,180 1112,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0ra7ywp_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0rastvv\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"1226\" y=\"174\" width=\"149\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 1232,180L1369,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kmypgax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"1232,180 1369,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0rastvv_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0dk7l0v\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"1483\" y=\"174\" width=\"157\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 1489,180L1634,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kmypgax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"1489,180 1634,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0dk7l0v_label\"><g class=\"djs-visual\"></g></g></g></svg>", + "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0qhfouo</bpmn:outgoing> </bpmn:startEvent> <bpmn:vesCollector id=\"VesCollector_12bnxhk\"> <bpmn:incoming>SequenceFlow_0qhfouo</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0cnyoua</bpmn:outgoing> </bpmn:vesCollector> <bpmn:holmes id=\"Holmes_1rgfcc9\"> <bpmn:incoming>SequenceFlow_0cnyoua</bpmn:incoming> <bpmn:outgoing>SequenceFlow_11v8o1t</bpmn:outgoing> </bpmn:holmes> <bpmn:policy id=\"Policy_1m60r06\"> <bpmn:incoming>SequenceFlow_11v8o1t</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1akbqn5</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_0s8l7b2\"> <bpmn:incoming>SequenceFlow_1akbqn5</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_0qhfouo\" sourceRef=\"StartEvent_1\" targetRef=\"VesCollector_12bnxhk\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0cnyoua\" sourceRef=\"VesCollector_12bnxhk\" targetRef=\"Holmes_1rgfcc9\" /> <bpmn:sequenceFlow id=\"SequenceFlow_11v8o1t\" sourceRef=\"Holmes_1rgfcc9\" targetRef=\"Policy_1m60r06\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1akbqn5\" sourceRef=\"Policy_1m60r06\" targetRef=\"EndEvent_0s8l7b2\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_12bnxhk_di\" bpmnElement=\"VesCollector_12bnxhk\"> <dc:Bounds x=\"250\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Holmes_1rgfcc9_di\" bpmnElement=\"Holmes_1rgfcc9\"> <dc:Bounds x=\"495\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_1m60r06_di\" bpmnElement=\"Policy_1m60r06\"> <dc:Bounds x=\"738\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_0s8l7b2_di\" bpmnElement=\"EndEvent_0s8l7b2\"> <dc:Bounds x=\"998\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"971\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0qhfouo_di\" bpmnElement=\"SequenceFlow_0qhfouo\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"250\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"123\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0cnyoua_di\" bpmnElement=\"SequenceFlow_0cnyoua\"> <di:waypoint xsi:type=\"dc:Point\" x=\"370\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"495\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"387.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_11v8o1t_di\" bpmnElement=\"SequenceFlow_11v8o1t\"> <di:waypoint xsi:type=\"dc:Point\" x=\"615\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"738\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"631.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1akbqn5_di\" bpmnElement=\"SequenceFlow_1akbqn5\"> <di:waypoint xsi:type=\"dc:Point\" x=\"858\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"998\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"883\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", + "propText": "{}", + "imageText": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bplsux1ej\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj8bplsux1el\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj8bplsux1en\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bplsux1ep\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj8bplsux1er\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj8bplsux1et\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_12bnxhk\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Holmes_1rgfcc9\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><circle cx=\"15\" cy=\"15\" r=\"10\" style=\"stroke-width: 1;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_1m60r06\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0s8l7b2\" transform=\"matrix(1,0,0,1,998,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0s8l7b2_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0qhfouo\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"176\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L250,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsux1ej");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 250,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0qhfouo_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0cnyoua\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"364\" y=\"174\" width=\"137\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 370,180L495,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsux1ej");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"370,180 495,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0cnyoua_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_11v8o1t\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"609\" y=\"174\" width=\"135\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 615,180L738,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsux1ej");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"615,180 738,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_11v8o1t_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1akbqn5\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"852\" y=\"174\" width=\"152\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 858,180L998,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsux1ej");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"858,180 998,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1akbqn5_label\"><g class=\"djs-visual\"></g></g></g></svg>", "templateName": "HolmesTemplate1" }
\ No newline at end of file diff --git a/test/csit/tests/clamp/APIs/data/createHolmesTemplate1.json b/test/csit/tests/clamp/APIs/data/createHolmesTemplate1.json index 27a044f5e..27627ed65 100644 --- a/test/csit/tests/clamp/APIs/data/createHolmesTemplate1.json +++ b/test/csit/tests/clamp/APIs/data/createHolmesTemplate1.json @@ -1,7 +1,7 @@ { "name": "HolmesTemplate1", "controlNamePrefix": "ClosedLoop-", - "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0co4u88</bpmn:outgoing> </bpmn:startEvent> <bpmn:policy id=\"Policy_0cq8t1w\"> <bpmn:incoming>SequenceFlow_0rastvv</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0dk7l0v</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_0xhu5cr\"> <bpmn:incoming>SequenceFlow_0dk7l0v</bpmn:incoming> </bpmn:endEvent> <bpmn:holmes id=\"Holmes_12plv0p\"> <bpmn:incoming>SequenceFlow_0e0orup</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0ra7ywp</bpmn:outgoing> </bpmn:holmes> <bpmn:vesCollector id=\"VesCollector_1f8k1o6\"> <bpmn:incoming>SequenceFlow_1luu2du</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0e0orup</bpmn:outgoing> </bpmn:vesCollector> <bpmn:collector id=\"Collector_0ki9muk\"> <bpmn:incoming>SequenceFlow_0co4u88</bpmn:incoming> <bpmn:outgoing>SequenceFlow_10lgcns</bpmn:outgoing> </bpmn:collector> <bpmn:tCA id=\"TCA_199ueal\"> <bpmn:incoming>SequenceFlow_0ra7ywp</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0rastvv</bpmn:outgoing> </bpmn:tCA> <bpmn:stringMatch id=\"StringMatch_08icoyk\"> <bpmn:incoming>SequenceFlow_10lgcns</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1luu2du</bpmn:outgoing> </bpmn:stringMatch> <bpmn:sequenceFlow id=\"SequenceFlow_0co4u88\" sourceRef=\"StartEvent_1\" targetRef=\"Collector_0ki9muk\" /> <bpmn:sequenceFlow id=\"SequenceFlow_10lgcns\" sourceRef=\"Collector_0ki9muk\" targetRef=\"StringMatch_08icoyk\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1luu2du\" sourceRef=\"StringMatch_08icoyk\" targetRef=\"VesCollector_1f8k1o6\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0e0orup\" sourceRef=\"VesCollector_1f8k1o6\" targetRef=\"Holmes_12plv0p\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0ra7ywp\" sourceRef=\"Holmes_12plv0p\" targetRef=\"TCA_199ueal\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0rastvv\" sourceRef=\"TCA_199ueal\" targetRef=\"Policy_0cq8t1w\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0dk7l0v\" sourceRef=\"Policy_0cq8t1w\" targetRef=\"EndEvent_0xhu5cr\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_0cq8t1w_di\" bpmnElement=\"Policy_0cq8t1w\"> <dc:Bounds x=\"1369\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_0xhu5cr_di\" bpmnElement=\"EndEvent_0xhu5cr\"> <dc:Bounds x=\"1634\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1607\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Holmes_12plv0p_di\" bpmnElement=\"Holmes_12plv0p\"> <dc:Bounds x=\"881\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_1f8k1o6_di\" bpmnElement=\"VesCollector_1f8k1o6\"> <dc:Bounds x=\"653\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Collector_0ki9muk_di\" bpmnElement=\"Collector_0ki9muk\"> <dc:Bounds x=\"182\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_199ueal_di\" bpmnElement=\"TCA_199ueal\"> <dc:Bounds x=\"1112\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"StringMatch_08icoyk_di\" bpmnElement=\"StringMatch_08icoyk\"> <dc:Bounds x=\"430\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0co4u88_di\" bpmnElement=\"SequenceFlow_0co4u88\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"182\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"89\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_10lgcns_di\" bpmnElement=\"SequenceFlow_10lgcns\"> <di:waypoint xsi:type=\"dc:Point\" x=\"302\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"430\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"321\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1luu2du_di\" bpmnElement=\"SequenceFlow_1luu2du\"> <di:waypoint xsi:type=\"dc:Point\" x=\"550\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"653\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"556.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0e0orup_di\" bpmnElement=\"SequenceFlow_0e0orup\"> <di:waypoint xsi:type=\"dc:Point\" x=\"773\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"881\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"782\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0ra7ywp_di\" bpmnElement=\"SequenceFlow_0ra7ywp\"> <di:waypoint xsi:type=\"dc:Point\" x=\"1001\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"1112\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1011.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0rastvv_di\" bpmnElement=\"SequenceFlow_0rastvv\"> <di:waypoint xsi:type=\"dc:Point\" x=\"1232\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"1369\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1255.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0dk7l0v_di\" bpmnElement=\"SequenceFlow_0dk7l0v\"> <di:waypoint xsi:type=\"dc:Point\" x=\"1489\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"1634\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1516.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", - "propText": "{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_2\\r\\n\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\\r\\n- http://135.207.127.211/1607_prod/type_files/cdap_app.yaml\\r\\n\\r\\nnode_templates:\\r\\n MTCA:\\r\\n type: dcae.nodes.cdap_app\\r\\n properties:\\r\\n service_name: \\\"cdap-mtca-central\\\"\\r\\n deployment_JSON: |-\\r\\n {\\r\\n \\\"clusterService\\\": {\\\"$ref\\\": \\\"/services/vm-cdap-cluster-central/instances/rdm2c\\\"},\\r\\n \\\"namespace\\\": \\\"MTCA\\\",\\r\\n \\\"appNames\\\": [ \\\"cdap-mtca\\\" ],\\r\\n \\\"flowNames\\\": [ \\\"cdap-mtca.TCAVESCollectorFlow\\\" ],\\r\\n \\\"workerNames\\\": [\\\"cdap-mtca.TCADMaaPMRSubscriberWorker\\\", \\\"cdap-mtca.TCADMaaPMRPublisherWorker\\\"],\\r\\n \\\"serviceNames\\\" : [],\\r\\n \\\"apps\\\": {\\r\\n \\\"cdap-mtca\\\": {\\r\\n \\\"jarFile\\\": \\\"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\\\",\\r\\n \\\"artifactName\\\": \\\"dcae-analytics-mtca\\\",\\r\\n \\\"version\\\": \\\"1.0.0\\\",\\r\\n \\\"appConfigFileContent\\\": \\\"{config:{ \\\\\\\"appName\\\\\\\":\\\\\\\"cdap-mtca\\\\\\\", \\\\\\\"appDescription\\\\\\\":\\\\\\\"DCAE Analytics Threshold Crossing Alert Application\\\\\\\", \\\\\\\"tcaSubscriberOutputStreamName\\\\\\\":\\\\\\\"TCASubscriberOutputStream\\\\\\\", \\\\\\\"thresholdCalculatorFlowletInstances\\\\\\\":2, \\\\\\\"tcaVESMessageStatusTableName\\\\\\\":\\\\\\\"TCAVESMessageStatusTable\\\\\\\", \\\\\\\"tcaVESMessageStatusTableTTLSeconds\\\\\\\":864000, \\\\\\\"tcaVESAlertsTableName\\\\\\\":\\\\\\\"TCAVESAlertsTable\\\\\\\", \\\\\\\"tcaVESAlertsTableTTLSeconds\\\\\\\":1728000 }}\\\"\\r\\n }\\r\\n },\\r\\n \\r\\n \\\"configuration\\\": {\\r\\n \\\"$class\\\": \\\"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\\\",\\r\\n \\\"subscriberContentType\\\": \\\"\\\",\\r\\n \\\"subscriberConsumerId\\\": \\\"c12\\\",\\r\\n \\\"subscriberConsumerGroup\\\": \\\"OpenDCAE-c12\\\",\\r\\n \\\"subscriberTimeoutMS\\\": \\\"-1\\\",\\r\\n \\\"subscriberMessageLimit\\\": \\\"-1\\\",\\r\\n \\\"subscriberPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherContentType\\\": \\\"application/json\\\",\\r\\n \\\"publisherMaxBatchSize\\\": \\\"10\\\",\\r\\n \\\"publisherMaxRecoveryQueueSize\\\": \\\"100000\\\",\\r\\n \\\"publisherPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherAlertWindowingTime\\\": \\\"86400\\\",\\r\\n \\\"policyName\\\": \\\"policy.dcae.configuration\\\",\\r\\n \\\"policyScope\\\": \\\"pnf=eNodeB;type=configuration\\\",\\r\\n \\\"policyVersion\\\": \\\"1.0.0\\\",\\r\\n \\\"domain\\\" : \\\"measurementsForVfScaling\\\",\\r\\n \\r\\n \\\"signatures\\\" : {\\r\\n \\t }\\r\\n\\r\\n }\\r\\n }\"]}]}", - "imageText":"<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"1632\" height=\"92\" viewBox=\"44 134 1632 92\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj7kjylfix\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj7kjylfiz\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj7kjylfi11\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj7kjylfi13\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj7kjylfi15\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj7kjylfi17\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\" transform=\"matrix(1,0,0,1,23,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_0cq8t1w\" transform=\"matrix(1,0,0,1,1369,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"43.5\" y=\"43.5\">Policy</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0xhu5cr\" transform=\"matrix(1,0,0,1,1634,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0xhu5cr_label\" transform=\"matrix(1,0,0,1,1607,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Holmes_12plv0p\" transform=\"matrix(1,0,0,1,881,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><circle cx=\"15\" cy=\"15\" r=\"10\" style=\"stroke-width: 1;\" stroke=\"#000000\" fill=\"#ffffff\"></circle><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"11\" y=\"20\">H</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"39\" y=\"43.5\">Holmes</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_1f8k1o6\" transform=\"matrix(1,0,0,1,653,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"14\">V</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"26\">E</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"38\">S</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"25.5\" y=\"43.5\">VesCollector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Collector_0ki9muk\" transform=\"matrix(1,0,0,1,182,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"35.5\" y=\"43.5\">Collector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_199ueal\" transform=\"matrix(1,0,0,1,1112,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"48\" y=\"43.5\">TCA</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StringMatch_08icoyk\" transform=\"matrix(1,0,0,1,430,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,20 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"27.5\" y=\"43.5\">StringMatch</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0co4u88\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"108\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L182,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 182,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0co4u88_label\" transform=\"matrix(1,0,0,1,89,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_10lgcns\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"296\" y=\"174\" width=\"140\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 302,180L430,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"302,180 430,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_10lgcns_label\" transform=\"matrix(1,0,0,1,321,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1luu2du\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"544\" y=\"174\" width=\"115\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 550,180L653,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"550,180 653,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1luu2du_label\" transform=\"matrix(1,0,0,1,557,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0e0orup\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"767\" y=\"174\" width=\"120\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 773,180L881,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"773,180 881,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0e0orup_label\" transform=\"matrix(1,0,0,1,782,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0ra7ywp\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"995\" y=\"174\" width=\"123\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 1001,180L1112,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"1001,180 1112,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0ra7ywp_label\" transform=\"matrix(1,0,0,1,1012,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0rastvv\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"1226\" y=\"174\" width=\"149\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 1232,180L1369,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"1232,180 1369,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0rastvv_label\" transform=\"matrix(1,0,0,1,1256,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0dk7l0v\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"1483\" y=\"174\" width=\"157\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 1489,180L1634,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"1489,180 1634,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0dk7l0v_label\" transform=\"matrix(1,0,0,1,1517,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g></svg>" + "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0qhfouo</bpmn:outgoing> </bpmn:startEvent> <bpmn:vesCollector id=\"VesCollector_12bnxhk\"> <bpmn:incoming>SequenceFlow_0qhfouo</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0cnyoua</bpmn:outgoing> </bpmn:vesCollector> <bpmn:holmes id=\"Holmes_1rgfcc9\"> <bpmn:incoming>SequenceFlow_0cnyoua</bpmn:incoming> <bpmn:outgoing>SequenceFlow_11v8o1t</bpmn:outgoing> </bpmn:holmes> <bpmn:policy id=\"Policy_1m60r06\"> <bpmn:incoming>SequenceFlow_11v8o1t</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1akbqn5</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_0s8l7b2\"> <bpmn:incoming>SequenceFlow_1akbqn5</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_0qhfouo\" sourceRef=\"StartEvent_1\" targetRef=\"VesCollector_12bnxhk\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0cnyoua\" sourceRef=\"VesCollector_12bnxhk\" targetRef=\"Holmes_1rgfcc9\" /> <bpmn:sequenceFlow id=\"SequenceFlow_11v8o1t\" sourceRef=\"Holmes_1rgfcc9\" targetRef=\"Policy_1m60r06\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1akbqn5\" sourceRef=\"Policy_1m60r06\" targetRef=\"EndEvent_0s8l7b2\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_12bnxhk_di\" bpmnElement=\"VesCollector_12bnxhk\"> <dc:Bounds x=\"250\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Holmes_1rgfcc9_di\" bpmnElement=\"Holmes_1rgfcc9\"> <dc:Bounds x=\"495\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_1m60r06_di\" bpmnElement=\"Policy_1m60r06\"> <dc:Bounds x=\"738\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_0s8l7b2_di\" bpmnElement=\"EndEvent_0s8l7b2\"> <dc:Bounds x=\"998\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"971\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0qhfouo_di\" bpmnElement=\"SequenceFlow_0qhfouo\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"250\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"123\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0cnyoua_di\" bpmnElement=\"SequenceFlow_0cnyoua\"> <di:waypoint xsi:type=\"dc:Point\" x=\"370\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"495\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"387.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_11v8o1t_di\" bpmnElement=\"SequenceFlow_11v8o1t\"> <di:waypoint xsi:type=\"dc:Point\" x=\"615\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"738\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"631.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1akbqn5_di\" bpmnElement=\"SequenceFlow_1akbqn5\"> <di:waypoint xsi:type=\"dc:Point\" x=\"858\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"998\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"883\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", + "propText": "{\"global\":[{\"name\":\"vf\",\"value\":[\"\"]},{\"name\":\"actionSet\",\"value\":[\"vnfRecipe\"]},{\"name\":\"location\",\"value\":[\"ALPRGAED\",\"LSLEILAA\",\"MDTWNJC1\"]}]}", + "imageText": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"996\" height=\"92\" viewBox=\"44 134 996 92\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bplsuxvj\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj8bplsuxvl\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj8bplsuxvn\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bplsuxvp\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj8bplsuxvr\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj8bplsuxvt\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\" transform=\"matrix(1,0,0,1,23,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_12bnxhk\" transform=\"matrix(1,0,0,1,250,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"14\">V</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"26\">E</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"38\">S</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"25.5\" y=\"43.5\">VesCollector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Holmes_1rgfcc9\" transform=\"matrix(1,0,0,1,495,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><circle cx=\"15\" cy=\"15\" r=\"10\" style=\"stroke-width: 1;\" stroke=\"#000000\" fill=\"#ffffff\"></circle><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"11\" y=\"20\">H</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"39\" y=\"43.5\">Holmes</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_1m60r06\" transform=\"matrix(1,0,0,1,738,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"43.5\" y=\"43.5\">Policy</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0s8l7b2\" transform=\"matrix(1,0,0,1,998,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0s8l7b2_label\" transform=\"matrix(1,0,0,1,971,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0qhfouo\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"176\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L250,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsuxvj");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 250,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0qhfouo_label\" transform=\"matrix(1,0,0,1,123,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0cnyoua\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"364\" y=\"174\" width=\"137\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 370,180L495,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsuxvj");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"370,180 495,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0cnyoua_label\" transform=\"matrix(1,0,0,1,387.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_11v8o1t\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"609\" y=\"174\" width=\"135\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 615,180L738,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsuxvj");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"615,180 738,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_11v8o1t_label\" transform=\"matrix(1,0,0,1,631.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1akbqn5\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"852\" y=\"174\" width=\"152\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 858,180L998,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsuxvj");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"858,180 998,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1akbqn5_label\" transform=\"matrix(1,0,0,1,883,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g></svg>" }
\ No newline at end of file diff --git a/test/csit/tests/clamp/APIs/data/createHolmesTemplate2.json b/test/csit/tests/clamp/APIs/data/createHolmesTemplate2.json index e267591bd..dab6e2e93 100644 --- a/test/csit/tests/clamp/APIs/data/createHolmesTemplate2.json +++ b/test/csit/tests/clamp/APIs/data/createHolmesTemplate2.json @@ -1,7 +1,7 @@ { "name": "HolmesTemplate2", "controlNamePrefix": "ClosedLoop-", - "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0co4u88</bpmn:outgoing> </bpmn:startEvent> <bpmn:policy id=\"Policy_0cq8t1w\"> <bpmn:incoming>SequenceFlow_0rastvv</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0dk7l0v</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_0xhu5cr\"> <bpmn:incoming>SequenceFlow_0dk7l0v</bpmn:incoming> </bpmn:endEvent> <bpmn:holmes id=\"Holmes_12plv0p\"> <bpmn:incoming>SequenceFlow_0e0orup</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0ra7ywp</bpmn:outgoing> </bpmn:holmes> <bpmn:vesCollector id=\"VesCollector_1f8k1o6\"> <bpmn:incoming>SequenceFlow_1luu2du</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0e0orup</bpmn:outgoing> </bpmn:vesCollector> <bpmn:collector id=\"Collector_0ki9muk\"> <bpmn:incoming>SequenceFlow_0co4u88</bpmn:incoming> <bpmn:outgoing>SequenceFlow_10lgcns</bpmn:outgoing> </bpmn:collector> <bpmn:tCA id=\"TCA_199ueal\"> <bpmn:incoming>SequenceFlow_0ra7ywp</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0rastvv</bpmn:outgoing> </bpmn:tCA> <bpmn:stringMatch id=\"StringMatch_08icoyk\"> <bpmn:incoming>SequenceFlow_10lgcns</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1luu2du</bpmn:outgoing> </bpmn:stringMatch> <bpmn:sequenceFlow id=\"SequenceFlow_0co4u88\" sourceRef=\"StartEvent_1\" targetRef=\"Collector_0ki9muk\" /> <bpmn:sequenceFlow id=\"SequenceFlow_10lgcns\" sourceRef=\"Collector_0ki9muk\" targetRef=\"StringMatch_08icoyk\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1luu2du\" sourceRef=\"StringMatch_08icoyk\" targetRef=\"VesCollector_1f8k1o6\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0e0orup\" sourceRef=\"VesCollector_1f8k1o6\" targetRef=\"Holmes_12plv0p\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0ra7ywp\" sourceRef=\"Holmes_12plv0p\" targetRef=\"TCA_199ueal\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0rastvv\" sourceRef=\"TCA_199ueal\" targetRef=\"Policy_0cq8t1w\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0dk7l0v\" sourceRef=\"Policy_0cq8t1w\" targetRef=\"EndEvent_0xhu5cr\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_0cq8t1w_di\" bpmnElement=\"Policy_0cq8t1w\"> <dc:Bounds x=\"1369\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_0xhu5cr_di\" bpmnElement=\"EndEvent_0xhu5cr\"> <dc:Bounds x=\"1634\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1607\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Holmes_12plv0p_di\" bpmnElement=\"Holmes_12plv0p\"> <dc:Bounds x=\"881\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_1f8k1o6_di\" bpmnElement=\"VesCollector_1f8k1o6\"> <dc:Bounds x=\"653\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Collector_0ki9muk_di\" bpmnElement=\"Collector_0ki9muk\"> <dc:Bounds x=\"182\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_199ueal_di\" bpmnElement=\"TCA_199ueal\"> <dc:Bounds x=\"1112\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"StringMatch_08icoyk_di\" bpmnElement=\"StringMatch_08icoyk\"> <dc:Bounds x=\"430\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0co4u88_di\" bpmnElement=\"SequenceFlow_0co4u88\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"182\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"89\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_10lgcns_di\" bpmnElement=\"SequenceFlow_10lgcns\"> <di:waypoint xsi:type=\"dc:Point\" x=\"302\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"430\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"321\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1luu2du_di\" bpmnElement=\"SequenceFlow_1luu2du\"> <di:waypoint xsi:type=\"dc:Point\" x=\"550\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"653\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"556.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0e0orup_di\" bpmnElement=\"SequenceFlow_0e0orup\"> <di:waypoint xsi:type=\"dc:Point\" x=\"773\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"881\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"782\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0ra7ywp_di\" bpmnElement=\"SequenceFlow_0ra7ywp\"> <di:waypoint xsi:type=\"dc:Point\" x=\"1001\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"1112\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1011.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0rastvv_di\" bpmnElement=\"SequenceFlow_0rastvv\"> <di:waypoint xsi:type=\"dc:Point\" x=\"1232\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"1369\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1255.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0dk7l0v_di\" bpmnElement=\"SequenceFlow_0dk7l0v\"> <di:waypoint xsi:type=\"dc:Point\" x=\"1489\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"1634\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"1516.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", - "propText": "{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_2\\r\\n\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\\r\\n- http://135.207.127.211/1607_prod/type_files/cdap_app.yaml\\r\\n\\r\\nnode_templates:\\r\\n MTCA:\\r\\n type: dcae.nodes.cdap_app\\r\\n properties:\\r\\n service_name: \\\"cdap-mtca-central\\\"\\r\\n deployment_JSON: |-\\r\\n {\\r\\n \\\"clusterService\\\": {\\\"$ref\\\": \\\"/services/vm-cdap-cluster-central/instances/rdm2c\\\"},\\r\\n \\\"namespace\\\": \\\"MTCA\\\",\\r\\n \\\"appNames\\\": [ \\\"cdap-mtca\\\" ],\\r\\n \\\"flowNames\\\": [ \\\"cdap-mtca.TCAVESCollectorFlow\\\" ],\\r\\n \\\"workerNames\\\": [\\\"cdap-mtca.TCADMaaPMRSubscriberWorker\\\", \\\"cdap-mtca.TCADMaaPMRPublisherWorker\\\"],\\r\\n \\\"serviceNames\\\" : [],\\r\\n \\\"apps\\\": {\\r\\n \\\"cdap-mtca\\\": {\\r\\n \\\"jarFile\\\": \\\"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\\\",\\r\\n \\\"artifactName\\\": \\\"dcae-analytics-mtca\\\",\\r\\n \\\"version\\\": \\\"1.0.0\\\",\\r\\n \\\"appConfigFileContent\\\": \\\"{config:{ \\\\\\\"appName\\\\\\\":\\\\\\\"cdap-mtca\\\\\\\", \\\\\\\"appDescription\\\\\\\":\\\\\\\"DCAE Analytics Threshold Crossing Alert Application\\\\\\\", \\\\\\\"tcaSubscriberOutputStreamName\\\\\\\":\\\\\\\"TCASubscriberOutputStream\\\\\\\", \\\\\\\"thresholdCalculatorFlowletInstances\\\\\\\":2, \\\\\\\"tcaVESMessageStatusTableName\\\\\\\":\\\\\\\"TCAVESMessageStatusTable\\\\\\\", \\\\\\\"tcaVESMessageStatusTableTTLSeconds\\\\\\\":864000, \\\\\\\"tcaVESAlertsTableName\\\\\\\":\\\\\\\"TCAVESAlertsTable\\\\\\\", \\\\\\\"tcaVESAlertsTableTTLSeconds\\\\\\\":1728000 }}\\\"\\r\\n }\\r\\n },\\r\\n \\r\\n \\\"configuration\\\": {\\r\\n \\\"$class\\\": \\\"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\\\",\\r\\n \\\"subscriberContentType\\\": \\\"\\\",\\r\\n \\\"subscriberConsumerId\\\": \\\"c12\\\",\\r\\n \\\"subscriberConsumerGroup\\\": \\\"OpenDCAE-c12\\\",\\r\\n \\\"subscriberTimeoutMS\\\": \\\"-1\\\",\\r\\n \\\"subscriberMessageLimit\\\": \\\"-1\\\",\\r\\n \\\"subscriberPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherContentType\\\": \\\"application/json\\\",\\r\\n \\\"publisherMaxBatchSize\\\": \\\"10\\\",\\r\\n \\\"publisherMaxRecoveryQueueSize\\\": \\\"100000\\\",\\r\\n \\\"publisherPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherAlertWindowingTime\\\": \\\"86400\\\",\\r\\n \\\"policyName\\\": \\\"policy.dcae.configuration\\\",\\r\\n \\\"policyScope\\\": \\\"pnf=eNodeB;type=configuration\\\",\\r\\n \\\"policyVersion\\\": \\\"1.0.0\\\",\\r\\n \\\"domain\\\" : \\\"measurementsForVfScaling\\\",\\r\\n \\r\\n \\\"signatures\\\" : {\\r\\n \\t }\\r\\n\\r\\n }\\r\\n }\"]}]}", - "imageText":"<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"1632\" height=\"92\" viewBox=\"44 134 1632 92\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj7kjylfix\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj7kjylfiz\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj7kjylfi11\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj7kjylfi13\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj7kjylfi15\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj7kjylfi17\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\" transform=\"matrix(1,0,0,1,23,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_0cq8t1w\" transform=\"matrix(1,0,0,1,1369,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"43.5\" y=\"43.5\">Policy</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0xhu5cr\" transform=\"matrix(1,0,0,1,1634,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0xhu5cr_label\" transform=\"matrix(1,0,0,1,1607,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Holmes_12plv0p\" transform=\"matrix(1,0,0,1,881,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><circle cx=\"15\" cy=\"15\" r=\"10\" style=\"stroke-width: 1;\" stroke=\"#000000\" fill=\"#ffffff\"></circle><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"11\" y=\"20\">H</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"39\" y=\"43.5\">Holmes</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_1f8k1o6\" transform=\"matrix(1,0,0,1,653,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"14\">V</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"26\">E</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"38\">S</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"25.5\" y=\"43.5\">VesCollector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Collector_0ki9muk\" transform=\"matrix(1,0,0,1,182,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"35.5\" y=\"43.5\">Collector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_199ueal\" transform=\"matrix(1,0,0,1,1112,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"48\" y=\"43.5\">TCA</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StringMatch_08icoyk\" transform=\"matrix(1,0,0,1,430,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,20 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"27.5\" y=\"43.5\">StringMatch</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0co4u88\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"108\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L182,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 182,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0co4u88_label\" transform=\"matrix(1,0,0,1,89,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_10lgcns\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"296\" y=\"174\" width=\"140\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 302,180L430,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"302,180 430,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_10lgcns_label\" transform=\"matrix(1,0,0,1,321,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1luu2du\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"544\" y=\"174\" width=\"115\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 550,180L653,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"550,180 653,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1luu2du_label\" transform=\"matrix(1,0,0,1,557,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0e0orup\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"767\" y=\"174\" width=\"120\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 773,180L881,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"773,180 881,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0e0orup_label\" transform=\"matrix(1,0,0,1,782,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0ra7ywp\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"995\" y=\"174\" width=\"123\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 1001,180L1112,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"1001,180 1112,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0ra7ywp_label\" transform=\"matrix(1,0,0,1,1012,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0rastvv\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"1226\" y=\"174\" width=\"149\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 1232,180L1369,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"1232,180 1369,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0rastvv_label\" transform=\"matrix(1,0,0,1,1256,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0dk7l0v\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"1483\" y=\"174\" width=\"157\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 1489,180L1634,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj7kjylfix");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"1489,180 1634,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0dk7l0v_label\" transform=\"matrix(1,0,0,1,1517,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g></svg>" + "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0qhfouo</bpmn:outgoing> </bpmn:startEvent> <bpmn:vesCollector id=\"VesCollector_12bnxhk\"> <bpmn:incoming>SequenceFlow_0qhfouo</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0cnyoua</bpmn:outgoing> </bpmn:vesCollector> <bpmn:holmes id=\"Holmes_1rgfcc9\"> <bpmn:incoming>SequenceFlow_0cnyoua</bpmn:incoming> <bpmn:outgoing>SequenceFlow_11v8o1t</bpmn:outgoing> </bpmn:holmes> <bpmn:policy id=\"Policy_1m60r06\"> <bpmn:incoming>SequenceFlow_11v8o1t</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1akbqn5</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_0s8l7b2\"> <bpmn:incoming>SequenceFlow_1akbqn5</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_0qhfouo\" sourceRef=\"StartEvent_1\" targetRef=\"VesCollector_12bnxhk\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0cnyoua\" sourceRef=\"VesCollector_12bnxhk\" targetRef=\"Holmes_1rgfcc9\" /> <bpmn:sequenceFlow id=\"SequenceFlow_11v8o1t\" sourceRef=\"Holmes_1rgfcc9\" targetRef=\"Policy_1m60r06\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1akbqn5\" sourceRef=\"Policy_1m60r06\" targetRef=\"EndEvent_0s8l7b2\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_12bnxhk_di\" bpmnElement=\"VesCollector_12bnxhk\"> <dc:Bounds x=\"250\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Holmes_1rgfcc9_di\" bpmnElement=\"Holmes_1rgfcc9\"> <dc:Bounds x=\"495\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_1m60r06_di\" bpmnElement=\"Policy_1m60r06\"> <dc:Bounds x=\"738\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_0s8l7b2_di\" bpmnElement=\"EndEvent_0s8l7b2\"> <dc:Bounds x=\"998\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"971\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0qhfouo_di\" bpmnElement=\"SequenceFlow_0qhfouo\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"250\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"123\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0cnyoua_di\" bpmnElement=\"SequenceFlow_0cnyoua\"> <di:waypoint xsi:type=\"dc:Point\" x=\"370\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"495\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"387.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_11v8o1t_di\" bpmnElement=\"SequenceFlow_11v8o1t\"> <di:waypoint xsi:type=\"dc:Point\" x=\"615\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"738\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"631.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1akbqn5_di\" bpmnElement=\"SequenceFlow_1akbqn5\"> <di:waypoint xsi:type=\"dc:Point\" x=\"858\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"998\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"883\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", + "propText": "{\"global\":[{\"name\":\"vf\",\"value\":[\"\"]},{\"name\":\"actionSet\",\"value\":[\"vnfRecipe\"]},{\"name\":\"location\",\"value\":[\"ALPRGAED\",\"LSLEILAA\",\"MDTWNJC1\"]}]}", + "imageText": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"996\" height=\"92\" viewBox=\"44 134 996 92\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bplsuxvj\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj8bplsuxvl\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj8bplsuxvn\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bplsuxvp\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj8bplsuxvr\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj8bplsuxvt\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\" transform=\"matrix(1,0,0,1,23,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_12bnxhk\" transform=\"matrix(1,0,0,1,250,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"14\">V</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"26\">E</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"38\">S</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"25.5\" y=\"43.5\">VesCollector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Holmes_1rgfcc9\" transform=\"matrix(1,0,0,1,495,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><circle cx=\"15\" cy=\"15\" r=\"10\" style=\"stroke-width: 1;\" stroke=\"#000000\" fill=\"#ffffff\"></circle><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"11\" y=\"20\">H</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"39\" y=\"43.5\">Holmes</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_1m60r06\" transform=\"matrix(1,0,0,1,738,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"43.5\" y=\"43.5\">Policy</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0s8l7b2\" transform=\"matrix(1,0,0,1,998,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_0s8l7b2_label\" transform=\"matrix(1,0,0,1,971,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0qhfouo\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"176\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L250,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsuxvj");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 250,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0qhfouo_label\" transform=\"matrix(1,0,0,1,123,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0cnyoua\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"364\" y=\"174\" width=\"137\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 370,180L495,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsuxvj");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"370,180 495,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0cnyoua_label\" transform=\"matrix(1,0,0,1,387.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_11v8o1t\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"609\" y=\"174\" width=\"135\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 615,180L738,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsuxvj");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"615,180 738,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_11v8o1t_label\" transform=\"matrix(1,0,0,1,631.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1akbqn5\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"852\" y=\"174\" width=\"152\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 858,180L998,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bplsuxvj");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"858,180 998,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1akbqn5_label\" transform=\"matrix(1,0,0,1,883,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g></svg>" }
\ No newline at end of file diff --git a/test/csit/tests/clamp/APIs/data/createTCAModel1.json b/test/csit/tests/clamp/APIs/data/createTCAModel1.json index 7d21771df..2d5962408 100644 --- a/test/csit/tests/clamp/APIs/data/createTCAModel1.json +++ b/test/csit/tests/clamp/APIs/data/createTCAModel1.json @@ -1,8 +1,8 @@ { "name": "TCAModel1", "controlNamePrefix": "ClosedLoop-", - "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0wokvsg</bpmn:outgoing> </bpmn:startEvent> <bpmn:collector id=\"Collector_04kan6k\"> <bpmn:incoming>SequenceFlow_0wokvsg</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0w8129u</bpmn:outgoing> </bpmn:collector> <bpmn:tCA id=\"TCA_0laok3g\"> <bpmn:incoming>SequenceFlow_0w8129u</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0bdkahu</bpmn:outgoing> </bpmn:tCA> <bpmn:policy id=\"Policy_1u1q61z\"> <bpmn:incoming>SequenceFlow_0bdkahu</bpmn:incoming> <bpmn:outgoing>SequenceFlow_039geog</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_1jhpt6o\"> <bpmn:incoming>SequenceFlow_039geog</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_0wokvsg\" sourceRef=\"StartEvent_1\" targetRef=\"Collector_04kan6k\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0w8129u\" sourceRef=\"Collector_04kan6k\" targetRef=\"TCA_0laok3g\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0bdkahu\" sourceRef=\"TCA_0laok3g\" targetRef=\"Policy_1u1q61z\" /> <bpmn:sequenceFlow id=\"SequenceFlow_039geog\" sourceRef=\"Policy_1u1q61z\" targetRef=\"EndEvent_1jhpt6o\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Collector_04kan6k_di\" bpmnElement=\"Collector_04kan6k\"> <dc:Bounds x=\"156\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_0laok3g_di\" bpmnElement=\"TCA_0laok3g\"> <dc:Bounds x=\"372\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_1u1q61z_di\" bpmnElement=\"Policy_1u1q61z\"> <dc:Bounds x=\"603\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_1jhpt6o_di\" bpmnElement=\"EndEvent_1jhpt6o\"> <dc:Bounds x=\"874\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"847\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0wokvsg_di\" bpmnElement=\"SequenceFlow_0wokvsg\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"156\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"76\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0w8129u_di\" bpmnElement=\"SequenceFlow_0w8129u\"> <di:waypoint xsi:type=\"dc:Point\" x=\"276\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"372\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"279\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0bdkahu_di\" bpmnElement=\"SequenceFlow_0bdkahu\"> <di:waypoint xsi:type=\"dc:Point\" x=\"492\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"603\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"502.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_039geog_di\" bpmnElement=\"SequenceFlow_039geog\"> <di:waypoint xsi:type=\"dc:Point\" x=\"723\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"874\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"753.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", - "propText": "{\"Collector_04kan6k\":[{\"name\":\"topicPublishes\",\"value\":\"DCAE-COLLECTOR-UCSNMP\"}],\"TCA_0laok3g\":{\"New_Set\":[{\"name\":\"tname\",\"value\":\"New_Set\"},{\"name\":\"tuuid\",\"value\":\"06663292-a9ca-te93-329f-bd12accc6bd9\"},{\"name\":\"tnfc\",\"value\":\"\"},{\"name\":\"tcaEnab\",\"value\":\"on\"},{\"name\":\"tcaPolId\",\"value\":\"\"},{\"name\":\"tcaInt\",\"value\":\"1\"},{\"name\":\"tcaSev\",\"value\":\"Normal\"},{\"name\":\"tcaVio\",\"value\":\"1\"},{\"serviceConfigurations\":[]}]},\"Policy_1u1q61z\":{}}", - "imageText": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj6hlq0max\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj6hlq0maz\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj6hlq0ma11\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj6hlq0ma13\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj6hlq0ma15\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj6hlq0ma17\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Collector_04kan6k\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_0laok3g\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_1u1q61z\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_1jhpt6o\" transform=\"matrix(1,0,0,1,874,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_1jhpt6o_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0wokvsg\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"82\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L156,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6hlq0max");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 156,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0wokvsg_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0w8129u\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"270\" y=\"174\" width=\"108\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 276,180L372,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6hlq0max");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"276,180 372,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0w8129u_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0bdkahu\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"486\" y=\"174\" width=\"123\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 492,180L603,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6hlq0max");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"492,180 603,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0bdkahu_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_039geog\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"717\" y=\"174\" width=\"163\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 723,180L874,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6hlq0max");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"723,180 874,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_039geog_label\"><g class=\"djs-visual\"></g></g></g></svg>", + "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_092lmnt</bpmn:outgoing> </bpmn:startEvent> <bpmn:vesCollector id=\"VesCollector_1gya39v\"> <bpmn:incoming>SequenceFlow_092lmnt</bpmn:incoming> <bpmn:outgoing>SequenceFlow_109bxgj</bpmn:outgoing> </bpmn:vesCollector> <bpmn:tCA id=\"TCA_10uyve0\"> <bpmn:incoming>SequenceFlow_109bxgj</bpmn:incoming> <bpmn:outgoing>SequenceFlow_05zltzk</bpmn:outgoing> </bpmn:tCA> <bpmn:policy id=\"Policy_19x5vcx\"> <bpmn:incoming>SequenceFlow_05zltzk</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1n94h2v</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_01plj9g\"> <bpmn:incoming>SequenceFlow_1n94h2v</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_092lmnt\" sourceRef=\"StartEvent_1\" targetRef=\"VesCollector_1gya39v\" /> <bpmn:sequenceFlow id=\"SequenceFlow_109bxgj\" sourceRef=\"VesCollector_1gya39v\" targetRef=\"TCA_10uyve0\" /> <bpmn:sequenceFlow id=\"SequenceFlow_05zltzk\" sourceRef=\"TCA_10uyve0\" targetRef=\"Policy_19x5vcx\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1n94h2v\" sourceRef=\"Policy_19x5vcx\" targetRef=\"EndEvent_01plj9g\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_1gya39v_di\" bpmnElement=\"VesCollector_1gya39v\"> <dc:Bounds x=\"224\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_10uyve0_di\" bpmnElement=\"TCA_10uyve0\"> <dc:Bounds x=\"471\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_19x5vcx_di\" bpmnElement=\"Policy_19x5vcx\"> <dc:Bounds x=\"718\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_01plj9g_di\" bpmnElement=\"EndEvent_01plj9g\"> <dc:Bounds x=\"950\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"923\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_092lmnt_di\" bpmnElement=\"SequenceFlow_092lmnt\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"224\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"110\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_109bxgj_di\" bpmnElement=\"SequenceFlow_109bxgj\"> <di:waypoint xsi:type=\"dc:Point\" x=\"344\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"471\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"362.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_05zltzk_di\" bpmnElement=\"SequenceFlow_05zltzk\"> <di:waypoint xsi:type=\"dc:Point\" x=\"591\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"718\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"609.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1n94h2v_di\" bpmnElement=\"SequenceFlow_1n94h2v\"> <di:waypoint xsi:type=\"dc:Point\" x=\"838\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"950\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"849\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", + "propText": "{\"global\":[{\"name\":\"vf\",\"value\":[\"\"]},{\"name\":\"actionSet\",\"value\":[\"vnfRecipe\"]},{\"name\":\"location\",\"value\":[\"ALPRGAED\",\"LSLEILAA\",\"MDTWNJC1\"]}]}", + "imageText": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bne55xci\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj8bne55xck\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj8bne55xcm\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bne55xco\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj8bne55xcq\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj8bne55xcs\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_1gya39v\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_10uyve0\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_19x5vcx\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_01plj9g\" transform=\"matrix(1,0,0,1,950,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_01plj9g_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_092lmnt\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"150\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L224,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xci");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 224,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_092lmnt_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_109bxgj\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"338\" y=\"174\" width=\"139\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 344,180L471,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xci");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"344,180 471,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_109bxgj_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_05zltzk\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"585\" y=\"174\" width=\"139\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 591,180L718,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xci");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"591,180 718,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_05zltzk_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1n94h2v\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"832\" y=\"174\" width=\"124\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 838,180L950,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xci");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"838,180 950,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1n94h2v_label\"><g class=\"djs-visual\"></g></g></g></svg>", "templateName": "TCATemplate1" }
\ No newline at end of file diff --git a/test/csit/tests/clamp/APIs/data/createTCAModel2.json b/test/csit/tests/clamp/APIs/data/createTCAModel2.json index 6e26e314c..f7168ddc4 100644 --- a/test/csit/tests/clamp/APIs/data/createTCAModel2.json +++ b/test/csit/tests/clamp/APIs/data/createTCAModel2.json @@ -1,8 +1,8 @@ { "name": "TCAModel2", - "controlNamePrefix": "ClosedLoop-", - "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0wokvsg</bpmn:outgoing> </bpmn:startEvent> <bpmn:collector id=\"Collector_04kan6k\"> <bpmn:incoming>SequenceFlow_0wokvsg</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0w8129u</bpmn:outgoing> </bpmn:collector> <bpmn:tCA id=\"TCA_0laok3g\"> <bpmn:incoming>SequenceFlow_0w8129u</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0bdkahu</bpmn:outgoing> </bpmn:tCA> <bpmn:policy id=\"Policy_1u1q61z\"> <bpmn:incoming>SequenceFlow_0bdkahu</bpmn:incoming> <bpmn:outgoing>SequenceFlow_039geog</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_1jhpt6o\"> <bpmn:incoming>SequenceFlow_039geog</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_0wokvsg\" sourceRef=\"StartEvent_1\" targetRef=\"Collector_04kan6k\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0w8129u\" sourceRef=\"Collector_04kan6k\" targetRef=\"TCA_0laok3g\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0bdkahu\" sourceRef=\"TCA_0laok3g\" targetRef=\"Policy_1u1q61z\" /> <bpmn:sequenceFlow id=\"SequenceFlow_039geog\" sourceRef=\"Policy_1u1q61z\" targetRef=\"EndEvent_1jhpt6o\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Collector_04kan6k_di\" bpmnElement=\"Collector_04kan6k\"> <dc:Bounds x=\"156\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_0laok3g_di\" bpmnElement=\"TCA_0laok3g\"> <dc:Bounds x=\"372\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_1u1q61z_di\" bpmnElement=\"Policy_1u1q61z\"> <dc:Bounds x=\"603\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_1jhpt6o_di\" bpmnElement=\"EndEvent_1jhpt6o\"> <dc:Bounds x=\"874\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"847\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0wokvsg_di\" bpmnElement=\"SequenceFlow_0wokvsg\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"156\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"76\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0w8129u_di\" bpmnElement=\"SequenceFlow_0w8129u\"> <di:waypoint xsi:type=\"dc:Point\" x=\"276\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"372\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"279\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0bdkahu_di\" bpmnElement=\"SequenceFlow_0bdkahu\"> <di:waypoint xsi:type=\"dc:Point\" x=\"492\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"603\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"502.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_039geog_di\" bpmnElement=\"SequenceFlow_039geog\"> <di:waypoint xsi:type=\"dc:Point\" x=\"723\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"874\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"753.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", - "propText": "{\"Collector_04kan6k\":[{\"name\":\"topicPublishes\",\"value\":\"DCAE-COLLECTOR-UCSNMP\"}],\"TCA_0laok3g\":{\"TCA1\":[{\"name\":\"tname\",\"value\":\"TCA1\"},{\"name\":\"tuuid\",\"value\":\"22edf952-0c3f-t957-94e0-d5911e155aff\"},{\"name\":\"tnfc\",\"value\":\"\"},{\"name\":\"tcaEnab\",\"value\":\"on\"},{\"name\":\"tcaPol\",\"value\":\"Policy1\"},{\"name\":\"tcaPolId\",\"value\":\"0\"},{\"name\":\"tcaInt\",\"value\":\"1\"},{\"name\":\"tcaSev\",\"value\":\"Normal\"},{\"name\":\"tcaVio\",\"value\":\"1\"},{\"serviceConfigurations\":[]}]},\"Policy_1u1q61z\":{\"Policy1\":[{\"name\":\"pname\",\"value\":\"Policy1\"},{\"name\":\"pid\",\"value\":\"0\"},{\"name\":\"timeout\",\"value\":\"345\"},{\"policyConfigurations\":[[{\"name\":\"recipe\",\"value\":[\"migrate\"]},{\"name\":\"maxRetries\",\"value\":[\"3\"]},{\"name\":\"retryTimeLimit\",\"value\":[\"180\"]},{\"name\":\"_id\",\"value\":[\"Maw1TWE\"]},{\"name\":\"parentPolicy\",\"value\":[\"\"]}]]}]},\"global\":[{\"name\":\"service\",\"value\":[\"e27f3679-8d95-4ee1-a5a3-95a7e243306f\"]},{\"name\":\"vf\",\"value\":[\"6c7aaec2-59eb-41d9-8681-b7f976ab668d\"]},{\"name\":\"actionSet\",\"value\":[\"vnfRecipe\"]}]}", - "imageText": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj6qiotlax\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj6qiotlaz\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj6qiotla11\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj6qiotla13\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj6qiotla15\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj6qiotla17\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Collector_04kan6k\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_0laok3g\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_1u1q61z\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_1jhpt6o\" transform=\"matrix(1,0,0,1,874,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_1jhpt6o_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0wokvsg\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"82\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L156,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6qiotlax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 156,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0wokvsg_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0w8129u\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"270\" y=\"174\" width=\"108\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 276,180L372,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6qiotlax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"276,180 372,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0w8129u_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0bdkahu\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"486\" y=\"174\" width=\"123\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 492,180L603,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6qiotlax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"492,180 603,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0bdkahu_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_039geog\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"717\" y=\"174\" width=\"163\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 723,180L874,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6qiotlax");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"723,180 874,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_039geog_label\"><g class=\"djs-visual\"></g></g></g></svg>", - "templateName": "TCATemplate1" + "controlNamePrefix": "ClosedLoop-", + "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_092lmnt</bpmn:outgoing> </bpmn:startEvent> <bpmn:vesCollector id=\"VesCollector_1gya39v\"> <bpmn:incoming>SequenceFlow_092lmnt</bpmn:incoming> <bpmn:outgoing>SequenceFlow_109bxgj</bpmn:outgoing> </bpmn:vesCollector> <bpmn:tCA id=\"TCA_10uyve0\"> <bpmn:incoming>SequenceFlow_109bxgj</bpmn:incoming> <bpmn:outgoing>SequenceFlow_05zltzk</bpmn:outgoing> </bpmn:tCA> <bpmn:policy id=\"Policy_19x5vcx\"> <bpmn:incoming>SequenceFlow_05zltzk</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1n94h2v</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_01plj9g\"> <bpmn:incoming>SequenceFlow_1n94h2v</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_092lmnt\" sourceRef=\"StartEvent_1\" targetRef=\"VesCollector_1gya39v\" /> <bpmn:sequenceFlow id=\"SequenceFlow_109bxgj\" sourceRef=\"VesCollector_1gya39v\" targetRef=\"TCA_10uyve0\" /> <bpmn:sequenceFlow id=\"SequenceFlow_05zltzk\" sourceRef=\"TCA_10uyve0\" targetRef=\"Policy_19x5vcx\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1n94h2v\" sourceRef=\"Policy_19x5vcx\" targetRef=\"EndEvent_01plj9g\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_1gya39v_di\" bpmnElement=\"VesCollector_1gya39v\"> <dc:Bounds x=\"224\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_10uyve0_di\" bpmnElement=\"TCA_10uyve0\"> <dc:Bounds x=\"471\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_19x5vcx_di\" bpmnElement=\"Policy_19x5vcx\"> <dc:Bounds x=\"718\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_01plj9g_di\" bpmnElement=\"EndEvent_01plj9g\"> <dc:Bounds x=\"950\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"923\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_092lmnt_di\" bpmnElement=\"SequenceFlow_092lmnt\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"224\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"110\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_109bxgj_di\" bpmnElement=\"SequenceFlow_109bxgj\"> <di:waypoint xsi:type=\"dc:Point\" x=\"344\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"471\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"362.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_05zltzk_di\" bpmnElement=\"SequenceFlow_05zltzk\"> <di:waypoint xsi:type=\"dc:Point\" x=\"591\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"718\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"609.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1n94h2v_di\" bpmnElement=\"SequenceFlow_1n94h2v\"> <di:waypoint xsi:type=\"dc:Point\" x=\"838\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"950\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"849\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", + "propText": "{\"global\":[{\"name\":\"vf\",\"value\":[\"\"]},{\"name\":\"actionSet\",\"value\":[\"vnfRecipe\"]},{\"name\":\"location\",\"value\":[\"ALPRGAED\",\"LSLEILAA\",\"MDTWNJC1\"]}]}", + "imageText": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bne55xci\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj8bne55xck\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj8bne55xcm\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bne55xco\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj8bne55xcq\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj8bne55xcs\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_1gya39v\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_10uyve0\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_19x5vcx\"><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_01plj9g\" transform=\"matrix(1,0,0,1,950,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_01plj9g_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_092lmnt\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"150\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L224,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xci");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 224,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_092lmnt_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_109bxgj\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"338\" y=\"174\" width=\"139\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 344,180L471,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xci");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"344,180 471,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_109bxgj_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_05zltzk\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"585\" y=\"174\" width=\"139\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 591,180L718,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xci");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"591,180 718,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_05zltzk_label\"><g class=\"djs-visual\"></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1n94h2v\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"832\" y=\"174\" width=\"124\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 838,180L950,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xci");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"838,180 950,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1n94h2v_label\"><g class=\"djs-visual\"></g></g></g></svg>", + "templateName": "TCATemplate2" }
\ No newline at end of file diff --git a/test/csit/tests/clamp/APIs/data/createTCATemplate1.json b/test/csit/tests/clamp/APIs/data/createTCATemplate1.json index 2157b9589..0c5987edb 100644 --- a/test/csit/tests/clamp/APIs/data/createTCATemplate1.json +++ b/test/csit/tests/clamp/APIs/data/createTCATemplate1.json @@ -1,7 +1,7 @@ { "name": "TCATemplate1", "controlNamePrefix": "ClosedLoop-", - "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0wokvsg</bpmn:outgoing> </bpmn:startEvent> <bpmn:collector id=\"Collector_04kan6k\"> <bpmn:incoming>SequenceFlow_0wokvsg</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0w8129u</bpmn:outgoing> </bpmn:collector> <bpmn:tCA id=\"TCA_0laok3g\"> <bpmn:incoming>SequenceFlow_0w8129u</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0bdkahu</bpmn:outgoing> </bpmn:tCA> <bpmn:policy id=\"Policy_1u1q61z\"> <bpmn:incoming>SequenceFlow_0bdkahu</bpmn:incoming> <bpmn:outgoing>SequenceFlow_039geog</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_1jhpt6o\"> <bpmn:incoming>SequenceFlow_039geog</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_0wokvsg\" sourceRef=\"StartEvent_1\" targetRef=\"Collector_04kan6k\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0w8129u\" sourceRef=\"Collector_04kan6k\" targetRef=\"TCA_0laok3g\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0bdkahu\" sourceRef=\"TCA_0laok3g\" targetRef=\"Policy_1u1q61z\" /> <bpmn:sequenceFlow id=\"SequenceFlow_039geog\" sourceRef=\"Policy_1u1q61z\" targetRef=\"EndEvent_1jhpt6o\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Collector_04kan6k_di\" bpmnElement=\"Collector_04kan6k\"> <dc:Bounds x=\"156\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_0laok3g_di\" bpmnElement=\"TCA_0laok3g\"> <dc:Bounds x=\"372\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_1u1q61z_di\" bpmnElement=\"Policy_1u1q61z\"> <dc:Bounds x=\"603\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_1jhpt6o_di\" bpmnElement=\"EndEvent_1jhpt6o\"> <dc:Bounds x=\"874\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"847\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0wokvsg_di\" bpmnElement=\"SequenceFlow_0wokvsg\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"156\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"76\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0w8129u_di\" bpmnElement=\"SequenceFlow_0w8129u\"> <di:waypoint xsi:type=\"dc:Point\" x=\"276\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"372\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"279\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0bdkahu_di\" bpmnElement=\"SequenceFlow_0bdkahu\"> <di:waypoint xsi:type=\"dc:Point\" x=\"492\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"603\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"502.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_039geog_di\" bpmnElement=\"SequenceFlow_039geog\"> <di:waypoint xsi:type=\"dc:Point\" x=\"723\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"874\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"753.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", - "propText": "{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_2\\r\\n\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\\r\\n- http://127.0.0.1/1607_prod/type_files/cdap_app.yaml\\r\\n\\r\\nnode_templates:\\r\\n MTCA:\\r\\n type: dcae.nodes.cdap_app\\r\\n properties:\\r\\n service_name: \\\"cdap-mtca-central\\\"\\r\\n deployment_JSON: |-\\r\\n {\\r\\n \\\"clusterService\\\": {\\\"$ref\\\": \\\"/services/vm-cdap-cluster-central/instances/rdm2c\\\"},\\r\\n \\\"namespace\\\": \\\"MTCA\\\",\\r\\n \\\"appNames\\\": [ \\\"cdap-mtca\\\" ],\\r\\n \\\"flowNames\\\": [ \\\"cdap-mtca.TCAVESCollectorFlow\\\" ],\\r\\n \\\"workerNames\\\": [\\\"cdap-mtca.TCADMaaPMRSubscriberWorker\\\", \\\"cdap-mtca.TCADMaaPMRPublisherWorker\\\"],\\r\\n \\\"serviceNames\\\" : [],\\r\\n \\\"apps\\\": {\\r\\n \\\"cdap-mtca\\\": {\\r\\n \\\"jarFile\\\": \\\"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\\\",\\r\\n \\\"artifactName\\\": \\\"dcae-analytics-mtca\\\",\\r\\n \\\"version\\\": \\\"1.0.0\\\",\\r\\n \\\"appConfigFileContent\\\": \\\"{config:{ \\\\\\\"appName\\\\\\\":\\\\\\\"cdap-mtca\\\\\\\", \\\\\\\"appDescription\\\\\\\":\\\\\\\"DCAE Analytics Threshold Crossing Alert Application\\\\\\\", \\\\\\\"tcaSubscriberOutputStreamName\\\\\\\":\\\\\\\"TCASubscriberOutputStream\\\\\\\", \\\\\\\"thresholdCalculatorFlowletInstances\\\\\\\":2, \\\\\\\"tcaVESMessageStatusTableName\\\\\\\":\\\\\\\"TCAVESMessageStatusTable\\\\\\\", \\\\\\\"tcaVESMessageStatusTableTTLSeconds\\\\\\\":864000, \\\\\\\"tcaVESAlertsTableName\\\\\\\":\\\\\\\"TCAVESAlertsTable\\\\\\\", \\\\\\\"tcaVESAlertsTableTTLSeconds\\\\\\\":1728000 }}\\\"\\r\\n }\\r\\n },\\r\\n \\r\\n \\\"configuration\\\": {\\r\\n \\\"$class\\\": \\\"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\\\",\\r\\n \\\"subscriberContentType\\\": \\\"\\\",\\r\\n \\\"subscriberConsumerId\\\": \\\"c12\\\",\\r\\n \\\"subscriberConsumerGroup\\\": \\\"OpenDCAE-c12\\\",\\r\\n \\\"subscriberTimeoutMS\\\": \\\"-1\\\",\\r\\n \\\"subscriberMessageLimit\\\": \\\"-1\\\",\\r\\n \\\"subscriberPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherContentType\\\": \\\"application/json\\\",\\r\\n \\\"publisherMaxBatchSize\\\": \\\"10\\\",\\r\\n \\\"publisherMaxRecoveryQueueSize\\\": \\\"100000\\\",\\r\\n \\\"publisherPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherAlertWindowingTime\\\": \\\"86400\\\",\\r\\n \\\"policyName\\\": \\\"policy.dcae.configuration\\\",\\r\\n \\\"policyScope\\\": \\\"pnf=eNodeB;type=configuration\\\",\\r\\n \\\"policyVersion\\\": \\\"1.0.0\\\",\\r\\n \\\"domain\\\" : \\\"measurementsForVfScaling\\\",\\r\\n \\r\\n \\\"signatures\\\" : {\\r\\n \\t }\\r\\n\\r\\n }\\r\\n }\"]}]}", - "imageText":"<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"873\" height=\"92\" viewBox=\"44 134 873 92\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj6f0mkekx\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj6f0mkekz\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj6f0mkek11\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj6f0mkek13\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj6f0mkek15\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj6f0mkek17\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\" transform=\"matrix(1,0,0,1,23,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Collector_04kan6k\" transform=\"matrix(1,0,0,1,156,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"35.5\" y=\"43.5\">Collector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_0laok3g\" transform=\"matrix(1,0,0,1,372,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"48\" y=\"43.5\">TCA</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_1u1q61z\" transform=\"matrix(1,0,0,1,603,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"43.5\" y=\"43.5\">Policy</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape selected\" data-element-id=\"EndEvent_1jhpt6o\" transform=\"matrix(1,0,0,1,874,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect><g class=\" djs-resizer djs-resizer-nw\" transform=\"matrix(1,0,0,1,0,0)\"><rect x=\"-7\" y=\"-7\" width=\"5\" height=\"5\" class=\" djs-resizer-visual\"></rect><rect x=\"-7\" y=\"-7\" width=\"20\" height=\"20\" class=\" djs-resizer-hit\"></rect></g><g class=\" djs-resizer djs-resizer-ne\" transform=\"matrix(0,1,-1,0,36,0)\"><rect x=\"-7\" y=\"-7\" width=\"5\" height=\"5\" class=\" djs-resizer-visual\"></rect><rect x=\"-7\" y=\"-7\" width=\"20\" height=\"20\" class=\" djs-resizer-hit\"></rect></g><g class=\" djs-resizer djs-resizer-se\" transform=\"matrix(-1,0,0,-1,36,36)\"><rect x=\"-7\" y=\"-7\" width=\"5\" height=\"5\" class=\" djs-resizer-visual\"></rect><rect x=\"-7\" y=\"-7\" width=\"20\" height=\"20\" class=\" djs-resizer-hit\"></rect></g><g class=\" djs-resizer djs-resizer-sw\" transform=\"matrix(0,-1,1,0,0,36)\"><rect x=\"-7\" y=\"-7\" width=\"5\" height=\"5\" class=\" djs-resizer-visual\"></rect><rect x=\"-7\" y=\"-7\" width=\"20\" height=\"20\" class=\" djs-resizer-hit\"></rect></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_1jhpt6o_label\" transform=\"matrix(1,0,0,1,847,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0wokvsg\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"82\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L156,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6f0mkekx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 156,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0wokvsg_label\" transform=\"matrix(1,0,0,1,76,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0w8129u\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"270\" y=\"174\" width=\"108\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 276,180L372,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6f0mkekx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"276,180 372,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0w8129u_label\" transform=\"matrix(1,0,0,1,279,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0bdkahu\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"486\" y=\"174\" width=\"123\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 492,180L603,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6f0mkekx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"492,180 603,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0bdkahu_label\" transform=\"matrix(1,0,0,1,502.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_039geog\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"717\" y=\"174\" width=\"163\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 723,180L874,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6f0mkekx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"723,180 874,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_039geog_label\" transform=\"matrix(1,0,0,1,753.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g></svg>" + "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_092lmnt</bpmn:outgoing> </bpmn:startEvent> <bpmn:vesCollector id=\"VesCollector_1gya39v\"> <bpmn:incoming>SequenceFlow_092lmnt</bpmn:incoming> <bpmn:outgoing>SequenceFlow_109bxgj</bpmn:outgoing> </bpmn:vesCollector> <bpmn:tCA id=\"TCA_10uyve0\"> <bpmn:incoming>SequenceFlow_109bxgj</bpmn:incoming> <bpmn:outgoing>SequenceFlow_05zltzk</bpmn:outgoing> </bpmn:tCA> <bpmn:policy id=\"Policy_19x5vcx\"> <bpmn:incoming>SequenceFlow_05zltzk</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1n94h2v</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_01plj9g\"> <bpmn:incoming>SequenceFlow_1n94h2v</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_092lmnt\" sourceRef=\"StartEvent_1\" targetRef=\"VesCollector_1gya39v\" /> <bpmn:sequenceFlow id=\"SequenceFlow_109bxgj\" sourceRef=\"VesCollector_1gya39v\" targetRef=\"TCA_10uyve0\" /> <bpmn:sequenceFlow id=\"SequenceFlow_05zltzk\" sourceRef=\"TCA_10uyve0\" targetRef=\"Policy_19x5vcx\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1n94h2v\" sourceRef=\"Policy_19x5vcx\" targetRef=\"EndEvent_01plj9g\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_1gya39v_di\" bpmnElement=\"VesCollector_1gya39v\"> <dc:Bounds x=\"224\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_10uyve0_di\" bpmnElement=\"TCA_10uyve0\"> <dc:Bounds x=\"471\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_19x5vcx_di\" bpmnElement=\"Policy_19x5vcx\"> <dc:Bounds x=\"718\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_01plj9g_di\" bpmnElement=\"EndEvent_01plj9g\"> <dc:Bounds x=\"950\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"923\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_092lmnt_di\" bpmnElement=\"SequenceFlow_092lmnt\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"224\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"110\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_109bxgj_di\" bpmnElement=\"SequenceFlow_109bxgj\"> <di:waypoint xsi:type=\"dc:Point\" x=\"344\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"471\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"362.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_05zltzk_di\" bpmnElement=\"SequenceFlow_05zltzk\"> <di:waypoint xsi:type=\"dc:Point\" x=\"591\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"718\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"609.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1n94h2v_di\" bpmnElement=\"SequenceFlow_1n94h2v\"> <di:waypoint xsi:type=\"dc:Point\" x=\"838\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"950\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"849\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", + "propText": "{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_2\\r\\n\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\\r\\n- http://127.0.0.1/1607_prod/type_files/cdap_app.yaml\\r\\n\\r\\nnode_templates:\\r\\n MTCA:\\r\\n type: dcae.nodes.cdap_app\\r\\n properties:\\r\\n service_name: \\\"cdap-mtca-central\\\"\\r\\n deployment_JSON: |-\\r\\n {\\r\\n \\\"clusterService\\\": {\\\"$ref\\\": \\\"/services/vm-cdap-cluster-central/instances/rdm2c\\\"},\\r\\n \\\"namespace\\\": \\\"MTCA\\\",\\r\\n \\\"appNames\\\": [ \\\"cdap-mtca\\\" ],\\r\\n \\\"flowNames\\\": [ \\\"cdap-mtca.TCAVESCollectorFlow\\\" ],\\r\\n \\\"workerNames\\\": [\\\"cdap-mtca.TCADMaaPMRSubscriberWorker\\\", \\\"cdap-mtca.TCADMaaPMRPublisherWorker\\\"],\\r\\n \\\"serviceNames\\\" : [],\\r\\n \\\"apps\\\": {\\r\\n \\\"cdap-mtca\\\": {\\r\\n \\\"jarFile\\\": \\\"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\\\",\\r\\n \\\"artifactName\\\": \\\"dcae-analytics-mtca\\\",\\r\\n \\\"version\\\": \\\"1.0.0\\\",\\r\\n \\\"appConfigFileContent\\\": \\\"{config:{ \\\\\\\"appName\\\\\\\":\\\\\\\"cdap-mtca\\\\\\\", \\\\\\\"appDescription\\\\\\\":\\\\\\\"DCAE Analytics Threshold Crossing Alert Application\\\\\\\", \\\\\\\"tcaSubscriberOutputStreamName\\\\\\\":\\\\\\\"TCASubscriberOutputStream\\\\\\\", \\\\\\\"thresholdCalculatorFlowletInstances\\\\\\\":2, \\\\\\\"tcaVESMessageStatusTableName\\\\\\\":\\\\\\\"TCAVESMessageStatusTable\\\\\\\", \\\\\\\"tcaVESMessageStatusTableTTLSeconds\\\\\\\":864000, \\\\\\\"tcaVESAlertsTableName\\\\\\\":\\\\\\\"TCAVESAlertsTable\\\\\\\", \\\\\\\"tcaVESAlertsTableTTLSeconds\\\\\\\":1728000 }}\\\"\\r\\n }\\r\\n },\\r\\n \\r\\n \\\"configuration\\\": {\\r\\n \\\"$class\\\": \\\"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\\\",\\r\\n \\\"subscriberContentType\\\": \\\"\\\",\\r\\n \\\"subscriberConsumerId\\\": \\\"c12\\\",\\r\\n \\\"subscriberConsumerGroup\\\": \\\"OpenDCAE-c12\\\",\\r\\n \\\"subscriberTimeoutMS\\\": \\\"-1\\\",\\r\\n \\\"subscriberMessageLimit\\\": \\\"-1\\\",\\r\\n \\\"subscriberPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherContentType\\\": \\\"application/json\\\",\\r\\n \\\"publisherMaxBatchSize\\\": \\\"10\\\",\\r\\n \\\"publisherMaxRecoveryQueueSize\\\": \\\"100000\\\",\\r\\n \\\"publisherPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherAlertWindowingTime\\\": \\\"86400\\\",\\r\\n \\\"policyName\\\": \\\"policy.dcae.configuration\\\",\\r\\n \\\"policyScope\\\": \\\"pnf=eNodeB;type=configuration\\\",\\r\\n \\\"policyVersion\\\": \\\"1.0.0\\\",\\r\\n \\\"domain\\\" : \\\"measurementsForVfScaling\\\",\\r\\n \\r\\n \\\"signatures\\\" : {\\r\\n \\t }\\r\\n\\r\\n }\\r\\n }\\r\\n\"]}]}", + "imageText":"<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"948\" height=\"92\" viewBox=\"44 134 948 92\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bne55xx\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj8bne55xz\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj8bne55x11\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bne55x13\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj8bne55x15\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj8bne55x17\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\" transform=\"matrix(1,0,0,1,23,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_1gya39v\" transform=\"matrix(1,0,0,1,224,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"14\">V</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"26\">E</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"38\">S</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"25.5\" y=\"43.5\">VesCollector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_10uyve0\" transform=\"matrix(1,0,0,1,471,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"48\" y=\"43.5\">TCA</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_19x5vcx\" transform=\"matrix(1,0,0,1,718,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"43.5\" y=\"43.5\">Policy</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_01plj9g\" transform=\"matrix(1,0,0,1,950,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_01plj9g_label\" transform=\"matrix(1,0,0,1,923,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_092lmnt\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"150\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L224,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 224,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_092lmnt_label\" transform=\"matrix(1,0,0,1,110,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_109bxgj\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"338\" y=\"174\" width=\"139\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 344,180L471,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"344,180 471,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_109bxgj_label\" transform=\"matrix(1,0,0,1,362.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_05zltzk\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"585\" y=\"174\" width=\"139\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 591,180L718,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"591,180 718,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_05zltzk_label\" transform=\"matrix(1,0,0,1,609.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1n94h2v\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"832\" y=\"174\" width=\"124\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 838,180L950,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"838,180 950,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1n94h2v_label\" transform=\"matrix(1,0,0,1,849,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g></svg>" }
\ No newline at end of file diff --git a/test/csit/tests/clamp/APIs/data/createTCATemplate2.json b/test/csit/tests/clamp/APIs/data/createTCATemplate2.json index b0cc1b6ab..4488f4e59 100644 --- a/test/csit/tests/clamp/APIs/data/createTCATemplate2.json +++ b/test/csit/tests/clamp/APIs/data/createTCATemplate2.json @@ -1,7 +1,7 @@ { "name": "TCATemplate2", "controlNamePrefix": "ClosedLoop-", - "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_0wokvsg</bpmn:outgoing> </bpmn:startEvent> <bpmn:collector id=\"Collector_04kan6k\"> <bpmn:incoming>SequenceFlow_0wokvsg</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0w8129u</bpmn:outgoing> </bpmn:collector> <bpmn:tCA id=\"TCA_0laok3g\"> <bpmn:incoming>SequenceFlow_0w8129u</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0bdkahu</bpmn:outgoing> </bpmn:tCA> <bpmn:policy id=\"Policy_1u1q61z\"> <bpmn:incoming>SequenceFlow_0bdkahu</bpmn:incoming> <bpmn:outgoing>SequenceFlow_039geog</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_1jhpt6o\"> <bpmn:incoming>SequenceFlow_039geog</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_0wokvsg\" sourceRef=\"StartEvent_1\" targetRef=\"Collector_04kan6k\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0w8129u\" sourceRef=\"Collector_04kan6k\" targetRef=\"TCA_0laok3g\" /> <bpmn:sequenceFlow id=\"SequenceFlow_0bdkahu\" sourceRef=\"TCA_0laok3g\" targetRef=\"Policy_1u1q61z\" /> <bpmn:sequenceFlow id=\"SequenceFlow_039geog\" sourceRef=\"Policy_1u1q61z\" targetRef=\"EndEvent_1jhpt6o\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Collector_04kan6k_di\" bpmnElement=\"Collector_04kan6k\"> <dc:Bounds x=\"156\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_0laok3g_di\" bpmnElement=\"TCA_0laok3g\"> <dc:Bounds x=\"372\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_1u1q61z_di\" bpmnElement=\"Policy_1u1q61z\"> <dc:Bounds x=\"603\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_1jhpt6o_di\" bpmnElement=\"EndEvent_1jhpt6o\"> <dc:Bounds x=\"874\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"847\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_0wokvsg_di\" bpmnElement=\"SequenceFlow_0wokvsg\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"156\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"76\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0w8129u_di\" bpmnElement=\"SequenceFlow_0w8129u\"> <di:waypoint xsi:type=\"dc:Point\" x=\"276\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"372\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"279\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_0bdkahu_di\" bpmnElement=\"SequenceFlow_0bdkahu\"> <di:waypoint xsi:type=\"dc:Point\" x=\"492\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"603\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"502.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_039geog_di\" bpmnElement=\"SequenceFlow_039geog\"> <di:waypoint xsi:type=\"dc:Point\" x=\"723\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"874\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"753.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", - "propText": "{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_2\\r\\n\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\\r\\n- http://127.0.0.1/1607_prod/type_files/cdap_app.yaml\\r\\n\\r\\nnode_templates:\\r\\n MTCA:\\r\\n type: dcae.nodes.cdap_app\\r\\n properties:\\r\\n service_name: \\\"cdap-mtca-central\\\"\\r\\n deployment_JSON: |-\\r\\n {\\r\\n \\\"clusterService\\\": {\\\"$ref\\\": \\\"/services/vm-cdap-cluster-central/instances/rdm2c\\\"},\\r\\n \\\"namespace\\\": \\\"MTCA\\\",\\r\\n \\\"appNames\\\": [ \\\"cdap-mtca\\\" ],\\r\\n \\\"flowNames\\\": [ \\\"cdap-mtca.TCAVESCollectorFlow\\\" ],\\r\\n \\\"workerNames\\\": [\\\"cdap-mtca.TCADMaaPMRSubscriberWorker\\\", \\\"cdap-mtca.TCADMaaPMRPublisherWorker\\\"],\\r\\n \\\"serviceNames\\\" : [],\\r\\n \\\"apps\\\": {\\r\\n \\\"cdap-mtca\\\": {\\r\\n \\\"jarFile\\\": \\\"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\\\",\\r\\n \\\"artifactName\\\": \\\"dcae-analytics-mtca\\\",\\r\\n \\\"version\\\": \\\"1.0.0\\\",\\r\\n \\\"appConfigFileContent\\\": \\\"{config:{ \\\\\\\"appName\\\\\\\":\\\\\\\"cdap-mtca\\\\\\\", \\\\\\\"appDescription\\\\\\\":\\\\\\\"DCAE Analytics Threshold Crossing Alert Application\\\\\\\", \\\\\\\"tcaSubscriberOutputStreamName\\\\\\\":\\\\\\\"TCASubscriberOutputStream\\\\\\\", \\\\\\\"thresholdCalculatorFlowletInstances\\\\\\\":2, \\\\\\\"tcaVESMessageStatusTableName\\\\\\\":\\\\\\\"TCAVESMessageStatusTable\\\\\\\", \\\\\\\"tcaVESMessageStatusTableTTLSeconds\\\\\\\":864000, \\\\\\\"tcaVESAlertsTableName\\\\\\\":\\\\\\\"TCAVESAlertsTable\\\\\\\", \\\\\\\"tcaVESAlertsTableTTLSeconds\\\\\\\":1728000 }}\\\"\\r\\n }\\r\\n },\\r\\n \\r\\n \\\"configuration\\\": {\\r\\n \\\"$class\\\": \\\"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\\\",\\r\\n \\\"subscriberContentType\\\": \\\"\\\",\\r\\n \\\"subscriberConsumerId\\\": \\\"c12\\\",\\r\\n \\\"subscriberConsumerGroup\\\": \\\"OpenDCAE-c12\\\",\\r\\n \\\"subscriberTimeoutMS\\\": \\\"-1\\\",\\r\\n \\\"subscriberMessageLimit\\\": \\\"-1\\\",\\r\\n \\\"subscriberPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherContentType\\\": \\\"application/json\\\",\\r\\n \\\"publisherMaxBatchSize\\\": \\\"10\\\",\\r\\n \\\"publisherMaxRecoveryQueueSize\\\": \\\"100000\\\",\\r\\n \\\"publisherPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherAlertWindowingTime\\\": \\\"86400\\\",\\r\\n \\\"policyName\\\": \\\"policy.dcae.configuration\\\",\\r\\n \\\"policyScope\\\": \\\"pnf=eNodeB;type=configuration\\\",\\r\\n \\\"policyVersion\\\": \\\"1.0.0\\\",\\r\\n \\\"domain\\\" : \\\"measurementsForVfScaling\\\",\\r\\n \\r\\n \\\"signatures\\\" : {\\r\\n \\t }\\r\\n\\r\\n }\\r\\n }\"]}]}", - "imageText":"<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"873\" height=\"92\" viewBox=\"44 134 873 92\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj6f0mkekx\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj6f0mkekz\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj6f0mkek11\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj6f0mkek13\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj6f0mkek15\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj6f0mkek17\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\" transform=\"matrix(1,0,0,1,23,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Collector_04kan6k\" transform=\"matrix(1,0,0,1,156,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"35.5\" y=\"43.5\">Collector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_0laok3g\" transform=\"matrix(1,0,0,1,372,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"48\" y=\"43.5\">TCA</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_1u1q61z\" transform=\"matrix(1,0,0,1,603,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"43.5\" y=\"43.5\">Policy</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape selected\" data-element-id=\"EndEvent_1jhpt6o\" transform=\"matrix(1,0,0,1,874,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect><g class=\" djs-resizer djs-resizer-nw\" transform=\"matrix(1,0,0,1,0,0)\"><rect x=\"-7\" y=\"-7\" width=\"5\" height=\"5\" class=\" djs-resizer-visual\"></rect><rect x=\"-7\" y=\"-7\" width=\"20\" height=\"20\" class=\" djs-resizer-hit\"></rect></g><g class=\" djs-resizer djs-resizer-ne\" transform=\"matrix(0,1,-1,0,36,0)\"><rect x=\"-7\" y=\"-7\" width=\"5\" height=\"5\" class=\" djs-resizer-visual\"></rect><rect x=\"-7\" y=\"-7\" width=\"20\" height=\"20\" class=\" djs-resizer-hit\"></rect></g><g class=\" djs-resizer djs-resizer-se\" transform=\"matrix(-1,0,0,-1,36,36)\"><rect x=\"-7\" y=\"-7\" width=\"5\" height=\"5\" class=\" djs-resizer-visual\"></rect><rect x=\"-7\" y=\"-7\" width=\"20\" height=\"20\" class=\" djs-resizer-hit\"></rect></g><g class=\" djs-resizer djs-resizer-sw\" transform=\"matrix(0,-1,1,0,0,36)\"><rect x=\"-7\" y=\"-7\" width=\"5\" height=\"5\" class=\" djs-resizer-visual\"></rect><rect x=\"-7\" y=\"-7\" width=\"20\" height=\"20\" class=\" djs-resizer-hit\"></rect></g></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_1jhpt6o_label\" transform=\"matrix(1,0,0,1,847,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0wokvsg\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"82\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L156,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6f0mkekx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 156,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0wokvsg_label\" transform=\"matrix(1,0,0,1,76,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0w8129u\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"270\" y=\"174\" width=\"108\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 276,180L372,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6f0mkekx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"276,180 372,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0w8129u_label\" transform=\"matrix(1,0,0,1,279,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_0bdkahu\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"486\" y=\"174\" width=\"123\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 492,180L603,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6f0mkekx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"492,180 603,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_0bdkahu_label\" transform=\"matrix(1,0,0,1,502.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_039geog\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"717\" y=\"174\" width=\"163\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 723,180L874,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj6f0mkekx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"723,180 874,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_039geog_label\" transform=\"matrix(1,0,0,1,753.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g></svg>" + "bpmnText": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bpmn:definitions xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\"> <bpmn:process id=\"Process_1\" isExecutable=\"false\"> <bpmn:startEvent id=\"StartEvent_1\"> <bpmn:outgoing>SequenceFlow_092lmnt</bpmn:outgoing> </bpmn:startEvent> <bpmn:vesCollector id=\"VesCollector_1gya39v\"> <bpmn:incoming>SequenceFlow_092lmnt</bpmn:incoming> <bpmn:outgoing>SequenceFlow_109bxgj</bpmn:outgoing> </bpmn:vesCollector> <bpmn:tCA id=\"TCA_10uyve0\"> <bpmn:incoming>SequenceFlow_109bxgj</bpmn:incoming> <bpmn:outgoing>SequenceFlow_05zltzk</bpmn:outgoing> </bpmn:tCA> <bpmn:policy id=\"Policy_19x5vcx\"> <bpmn:incoming>SequenceFlow_05zltzk</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1n94h2v</bpmn:outgoing> </bpmn:policy> <bpmn:endEvent id=\"EndEvent_01plj9g\"> <bpmn:incoming>SequenceFlow_1n94h2v</bpmn:incoming> </bpmn:endEvent> <bpmn:sequenceFlow id=\"SequenceFlow_092lmnt\" sourceRef=\"StartEvent_1\" targetRef=\"VesCollector_1gya39v\" /> <bpmn:sequenceFlow id=\"SequenceFlow_109bxgj\" sourceRef=\"VesCollector_1gya39v\" targetRef=\"TCA_10uyve0\" /> <bpmn:sequenceFlow id=\"SequenceFlow_05zltzk\" sourceRef=\"TCA_10uyve0\" targetRef=\"Policy_19x5vcx\" /> <bpmn:sequenceFlow id=\"SequenceFlow_1n94h2v\" sourceRef=\"Policy_19x5vcx\" targetRef=\"EndEvent_01plj9g\" /> </bpmn:process> <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\"> <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Process_1\"> <bpmndi:BPMNShape id=\"_BPMNShape_StartEvent_2\" bpmnElement=\"StartEvent_1\"> <dc:Bounds x=\"50\" y=\"162\" width=\"36\" height=\"36\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"VesCollector_1gya39v_di\" bpmnElement=\"VesCollector_1gya39v\"> <dc:Bounds x=\"224\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"TCA_10uyve0_di\" bpmnElement=\"TCA_10uyve0\"> <dc:Bounds x=\"471\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"Policy_19x5vcx_di\" bpmnElement=\"Policy_19x5vcx\"> <dc:Bounds x=\"718\" y=\"140\" width=\"120\" height=\"80\" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id=\"EndEvent_01plj9g_di\" bpmnElement=\"EndEvent_01plj9g\"> <dc:Bounds x=\"950\" y=\"162\" width=\"36\" height=\"36\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"923\" y=\"198\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id=\"SequenceFlow_092lmnt_di\" bpmnElement=\"SequenceFlow_092lmnt\"> <di:waypoint xsi:type=\"dc:Point\" x=\"86\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"224\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"110\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_109bxgj_di\" bpmnElement=\"SequenceFlow_109bxgj\"> <di:waypoint xsi:type=\"dc:Point\" x=\"344\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"471\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"362.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_05zltzk_di\" bpmnElement=\"SequenceFlow_05zltzk\"> <di:waypoint xsi:type=\"dc:Point\" x=\"591\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"718\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"609.5\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id=\"SequenceFlow_1n94h2v_di\" bpmnElement=\"SequenceFlow_1n94h2v\"> <di:waypoint xsi:type=\"dc:Point\" x=\"838\" y=\"180\" /> <di:waypoint xsi:type=\"dc:Point\" x=\"950\" y=\"180\" /> <bpmndi:BPMNLabel> <dc:Bounds x=\"849\" y=\"170\" width=\"90\" height=\"20\" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>", + "propText": "{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_2\\r\\n\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\\r\\n- http://127.0.0.1/1607_prod/type_files/cdap_app.yaml\\r\\n\\r\\nnode_templates:\\r\\n MTCA:\\r\\n type: dcae.nodes.cdap_app\\r\\n properties:\\r\\n service_name: \\\"cdap-mtca-central\\\"\\r\\n deployment_JSON: |-\\r\\n {\\r\\n \\\"clusterService\\\": {\\\"$ref\\\": \\\"/services/vm-cdap-cluster-central/instances/rdm2c\\\"},\\r\\n \\\"namespace\\\": \\\"MTCA\\\",\\r\\n \\\"appNames\\\": [ \\\"cdap-mtca\\\" ],\\r\\n \\\"flowNames\\\": [ \\\"cdap-mtca.TCAVESCollectorFlow\\\" ],\\r\\n \\\"workerNames\\\": [\\\"cdap-mtca.TCADMaaPMRSubscriberWorker\\\", \\\"cdap-mtca.TCADMaaPMRPublisherWorker\\\"],\\r\\n \\\"serviceNames\\\" : [],\\r\\n \\\"apps\\\": {\\r\\n \\\"cdap-mtca\\\": {\\r\\n \\\"jarFile\\\": \\\"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\\\",\\r\\n \\\"artifactName\\\": \\\"dcae-analytics-mtca\\\",\\r\\n \\\"version\\\": \\\"1.0.0\\\",\\r\\n \\\"appConfigFileContent\\\": \\\"{config:{ \\\\\\\"appName\\\\\\\":\\\\\\\"cdap-mtca\\\\\\\", \\\\\\\"appDescription\\\\\\\":\\\\\\\"DCAE Analytics Threshold Crossing Alert Application\\\\\\\", \\\\\\\"tcaSubscriberOutputStreamName\\\\\\\":\\\\\\\"TCASubscriberOutputStream\\\\\\\", \\\\\\\"thresholdCalculatorFlowletInstances\\\\\\\":2, \\\\\\\"tcaVESMessageStatusTableName\\\\\\\":\\\\\\\"TCAVESMessageStatusTable\\\\\\\", \\\\\\\"tcaVESMessageStatusTableTTLSeconds\\\\\\\":864000, \\\\\\\"tcaVESAlertsTableName\\\\\\\":\\\\\\\"TCAVESAlertsTable\\\\\\\", \\\\\\\"tcaVESAlertsTableTTLSeconds\\\\\\\":1728000 }}\\\"\\r\\n }\\r\\n },\\r\\n \\r\\n \\\"configuration\\\": {\\r\\n \\\"$class\\\": \\\"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\\\",\\r\\n \\\"subscriberContentType\\\": \\\"\\\",\\r\\n \\\"subscriberConsumerId\\\": \\\"c12\\\",\\r\\n \\\"subscriberConsumerGroup\\\": \\\"OpenDCAE-c12\\\",\\r\\n \\\"subscriberTimeoutMS\\\": \\\"-1\\\",\\r\\n \\\"subscriberMessageLimit\\\": \\\"-1\\\",\\r\\n \\\"subscriberPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherContentType\\\": \\\"application/json\\\",\\r\\n \\\"publisherMaxBatchSize\\\": \\\"10\\\",\\r\\n \\\"publisherMaxRecoveryQueueSize\\\": \\\"100000\\\",\\r\\n \\\"publisherPollingInterval\\\": \\\"20000\\\",\\r\\n \\\"publisherAlertWindowingTime\\\": \\\"86400\\\",\\r\\n \\\"policyName\\\": \\\"policy.dcae.configuration\\\",\\r\\n \\\"policyScope\\\": \\\"pnf=eNodeB;type=configuration\\\",\\r\\n \\\"policyVersion\\\": \\\"1.0.0\\\",\\r\\n \\\"domain\\\" : \\\"measurementsForVfScaling\\\",\\r\\n \\r\\n \\\"signatures\\\" : {\\r\\n \\t }\\r\\n\\r\\n }\\r\\n }\\r\\n\"]}]}", + "imageText":"<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"948\" height=\"92\" viewBox=\"44 134 948 92\" version=\"1.1\"><defs><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bne55xx\"><path d=\"M 1 5 L 11 10 L 1 15 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"6\" refY=\"6\" id=\"markerSj8bne55xz\"><circle cx=\"6\" cy=\"6\" r=\"3.5\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"20\" markerHeight=\"20\" orient=\"auto\" refX=\"8.5\" refY=\"5\" id=\"markerSj8bne55x11\"><path d=\"m 1 5 l 0 -3 l 7 3 l -7 3 z\" style=\"stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"11\" refY=\"10\" id=\"markerSj8bne55x13\"><path d=\"M 1 5 L 11 10 L 1 15\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-1\" refY=\"10\" id=\"markerSj8bne55x15\"><path d=\"M 0 10 L 8 6 L 16 10 L 8 14 Z\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#ffffff\" stroke=\"#000000\"/></marker><marker viewBox=\"0 0 20 20\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\" refX=\"-5\" refY=\"10\" id=\"markerSj8bne55x17\"><path d=\"M 1 4 L 5 16\" style=\"stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;\" fill=\"#000000\" stroke=\"#000000\"/></marker></defs><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1\" transform=\"matrix(1,0,0,1,50,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"StartEvent_1_label\" transform=\"matrix(1,0,0,1,23,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"VesCollector_1gya39v\" transform=\"matrix(1,0,0,1,224,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"120,80 120,20 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><polyline points=\"20,0 20,80 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"14\">V</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"26\">E</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\"><tspan x=\"5\" y=\"38\">S</tspan></text><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"25.5\" y=\"43.5\">VesCollector</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"TCA_10uyve0\" transform=\"matrix(1,0,0,1,471,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,60 120,60 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"48\" y=\"43.5\">TCA</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"Policy_19x5vcx\" transform=\"matrix(1,0,0,1,718,140)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"132\" height=\"92\"></rect><g class=\"djs-visual\"><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" rx=\"0\" ry=\"0\" style=\"stroke-width: 2;\" stroke=\"#000000\" fill=\"#ffffff\"></rect><polyline points=\"0,40 60,0 \" style=\"stroke-width: 2;\" fill=\"none\" stroke=\"#000000\"></polyline><text style=\"font-family: Arial,sans-serif; font-size: 12px;\" class=\" djs-label\"><tspan x=\"43.5\" y=\"43.5\">Policy</tspan></text></g><rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_01plj9g\" transform=\"matrix(1,0,0,1,950,162)\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"48\" height=\"48\"></rect><g class=\"djs-visual\"><circle cx=\"18\" cy=\"18\" r=\"18\" style=\"stroke-width: 4;\" stroke=\"#000000\" fill=\"#ffffff\"></circle></g><rect x=\"0\" y=\"0\" width=\"36\" height=\"36\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"EndEvent_01plj9g_label\" transform=\"matrix(1,0,0,1,923,198)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_092lmnt\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"80\" y=\"174\" width=\"150\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 86,180L224,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"86,180 224,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_092lmnt_label\" transform=\"matrix(1,0,0,1,110,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_109bxgj\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"338\" y=\"174\" width=\"139\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 344,180L471,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"344,180 471,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_109bxgj_label\" transform=\"matrix(1,0,0,1,362.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_05zltzk\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"585\" y=\"174\" width=\"139\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 591,180L718,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"591,180 718,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_05zltzk_label\" transform=\"matrix(1,0,0,1,609.5,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-connection\" data-element-id=\"SequenceFlow_1n94h2v\" style=\"display: block;\"><rect fill=\"none\" class=\"djs-outline\" x=\"832\" y=\"174\" width=\"124\" height=\"12\"></rect><g class=\"djs-visual\"><path d=\"m 838,180L950,180 \" style=\"stroke-width: 2; stroke-linejoin: round; marker-end: url("#markerSj8bne55xx");\" fill=\"none\" stroke=\"#000000\"></path></g><polyline points=\"838,180 950,180 \" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></polyline></g></g><g class=\"djs-group\" xmlns=\"http://www.w3.org/2000/svg\"><g class=\"djs-element djs-shape\" data-element-id=\"SequenceFlow_1n94h2v_label\" transform=\"matrix(1,0,0,1,849,170)\" style=\"display: none;\"><rect fill=\"none\" class=\"djs-outline\" x=\"-6\" y=\"-6\" width=\"102\" height=\"32\"></rect><g class=\"djs-visual\"><text style=\"font-family: Arial,sans-serif; font-size: 11px;\" class=\" djs-label\"><tspan x=\"45\" y=\"0\"></tspan></text></g><rect x=\"0\" y=\"0\" width=\"90\" height=\"20\" style=\"stroke-opacity: 0; stroke-width: 15;\" fill=\"none\" stroke=\"#ffffff\" class=\"djs-hit\"></rect></g></g></svg>" }
\ No newline at end of file diff --git a/test/csit/tests/clamp/UIs/01__Create_TCA_template.robot b/test/csit/tests/clamp/UIs/01__Create_TCA_template.robot index 447fc8465..4bc0e6150 100644 --- a/test/csit/tests/clamp/UIs/01__Create_TCA_template.robot +++ b/test/csit/tests/clamp/UIs/01__Create_TCA_template.robot @@ -45,18 +45,18 @@ Create Template from Menu Click Button locator=OK Drag and Drop Boxes for template - Wait Until Element Is Visible xpath=//*[@class="entry icon-collector-node"] timeout=60 - Drag And Drop By Offset xpath=//*[@class="entry icon-collector-node"] 280 280 - Drag And Drop By Offset xpath=//*[@class="entry icon-tca-node"] 550 280 - Drag And Drop By Offset xpath=//*[@class="entry icon-policy-node"] 800 280 - Drag And Drop By Offset xpath=//*[@class="entry icon-end-event-none"] 1000 280 + Wait Until Element Is Visible xpath=//*[@class="entry icon-ves-collector-node"] timeout=60 + Drag And Drop By Offset xpath=//*[@class="entry icon-ves-collector-node"] 280 280 + Drag And Drop By Offset xpath=//*[@class="entry icon-tca-node"] 480 280 + Drag And Drop By Offset xpath=//*[@class="entry icon-policy-node"] 680 280 + Drag And Drop By Offset xpath=//*[@class="entry icon-end-event-none"] 880 280 Drag and Drop Connectors for template Click Element xpath=//*[starts-with(@data-element-id, "StartEvent_")] Wait Until Element Is Enabled xpath=//*[@id="js-canvas"]/div/div/div[2]/div[5]/div/div/div[2]/div - Drag And Drop xpath=//*[@id="js-canvas"]/div/div/div[2]/div[5]/div/div/div[2]/div xpath=//*[starts-with(@data-element-id, "Collector_")] - Wait Until Element Is Enabled xpath=//*[@id="js-canvas"]/div/div/div[2]/div[1]/div/div/div[3]/div - Drag And Drop xpath=//*[@id="js-canvas"]/div/div/div[2]/div[1]/div/div/div[3]/div xpath=//*[starts-with(@data-element-id, "TCA_")] + Drag And Drop xpath=//*[@id="js-canvas"]/div/div/div[2]/div[5]/div/div/div[2]/div xpath=//*[starts-with(@data-element-id, "VesCollector_")] + Wait Until Element Is Enabled xpath=//*[@id="js-canvas"]/div/div/div[2]/div[1]/div/div/div[2]/div + Drag And Drop xpath=//*[@id="js-canvas"]/div/div/div[2]/div[1]/div/div/div[2]/div xpath=//*[starts-with(@data-element-id, "TCA_")] Wait Until Element Is Enabled xpath=//*[@id="js-canvas"]/div/div/div[2]/div[2]/div/div/div[3]/div Drag And Drop xpath=//*[@id="js-canvas"]/div/div/div[2]/div[2]/div/div/div[3]/div xpath=//*[starts-with(@data-element-id, "Policy_")] Wait Until Element Is Enabled xpath=//*[@id="js-canvas"]/div/div/div[2]/div[3]/div/div/div[3]/div diff --git a/test/csit/tests/clamp/UIs/03__Create_Holmes_template.robot b/test/csit/tests/clamp/UIs/03__Create_Holmes_template.robot new file mode 100644 index 000000000..5530715cd --- /dev/null +++ b/test/csit/tests/clamp/UIs/03__Create_Holmes_template.robot @@ -0,0 +1,66 @@ +*** Settings *** +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library Selenium2Library +Library XvfbRobot + + +*** Test Cases *** +Get Requests health check ok + CreateSession clamp http://localhost:8080 + ${resp}= Get Request clamp /restservices/clds/v1/clds/healthcheck + Should Be Equal As Strings ${resp.status_code} 200 + +Open Browser +# Next line is to be enabled for Headless tests only (jenkins?). To see the tests desable the line. + Start Virtual Display 1920 1080 + Open Browser http://localhost:8080/designer/index.html browser=firefox + Set Selenium Speed .2 seconds + Set Window Size 1920 1080 + ${title}= Get Title + Should Be Equal CLDS ${title} + +Good Login to Clamp UI and Verify logged in + Input Text locator=username text=admin + Input Text locator=password text=password + Press Key locator=password key=\\13 + Wait Until Element Is Visible xpath=//*[@class="navbar-brand logo_name ng-binding"] timeout=60 + Element Text Should Be xpath=//*[@class="navbar-brand logo_name ng-binding"] expected=Hello:admin + +Create Template from Menu + Wait Until Element Is Visible xpath=//*[@id="navbar"]/ul/li[1]/a timeout=60 + Click Element xpath=//*[@id="navbar"]/ul/li[1]/a + Wait Until Element Is Visible locator=Create Template timeout=60 + Click Element locator=Create Template + Input Text locator=modelName text=HolmesTemplate + Click Button locator=OK + +Drag and Drop Boxes for template + Wait Until Element Is Visible xpath=//*[@class="entry icon-ves-collector-node"] timeout=60 + Drag And Drop By Offset xpath=//*[@class="entry icon-ves-collector-node"] 280 280 + Drag And Drop By Offset xpath=//*[@class="entry icon-holmes-node"] 480 280 + Drag And Drop By Offset xpath=//*[@class="entry icon-policy-node"] 680 280 + Drag And Drop By Offset xpath=//*[@class="entry icon-end-event-none"] 880 280 + +Drag and Drop Connectors for template + Click Element xpath=//*[starts-with(@data-element-id, "StartEvent_")] + Wait Until Element Is Enabled xpath=//*[@id="js-canvas"]/div/div/div[2]/div[5]/div/div/div[2]/div + Drag And Drop xpath=//*[@id="js-canvas"]/div/div/div[2]/div[5]/div/div/div[2]/div xpath=//*[starts-with(@data-element-id, "VesCollector_")] + Wait Until Element Is Enabled xpath=//*[@id="js-canvas"]/div/div/div[2]/div[1]/div/div/div[2]/div + Drag And Drop xpath=//*[@id="js-canvas"]/div/div/div[2]/div[1]/div/div/div[2]/div xpath=//*[starts-with(@data-element-id, "Holmes_")] + Wait Until Element Is Enabled xpath=//*[@id="js-canvas"]/div/div/div[2]/div[2]/div/div/div[3]/div + Drag And Drop xpath=//*[@id="js-canvas"]/div/div/div[2]/div[2]/div/div/div[3]/div xpath=//*[starts-with(@data-element-id, "Policy_")] + Wait Until Element Is Enabled xpath=//*[@id="js-canvas"]/div/div/div[2]/div[3]/div/div/div[3]/div + Drag And Drop xpath=//*[@id="js-canvas"]/div/div/div[2]/div[3]/div/div/div[3]/div xpath=//*[starts-with(@data-element-id, "EndEvent_")] + +Save Template from Menu + Click Element xpath=//*[@id="navbar"]/ul/li[1]/a + Wait Until Element Is Visible locator=Save Template timeout=60 + Click Element locator=Save Template + Wait Until Element Is Visible xpath=//*[@id="alert_message_"] timeout=60 + Element Text Should Be xpath=//*[@id="alert_message_"] expected=Action Successful:SAVE + +Close Browser + Close Browser
\ No newline at end of file diff --git a/test/csit/tests/clamp/UIs/04__Create_Holmes_model.robot b/test/csit/tests/clamp/UIs/04__Create_Holmes_model.robot new file mode 100644 index 000000000..a531645a1 --- /dev/null +++ b/test/csit/tests/clamp/UIs/04__Create_Holmes_model.robot @@ -0,0 +1,50 @@ +*** Settings *** +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library Selenium2Library +Library XvfbRobot + + +*** Test Cases *** +Get Requests health check ok + CreateSession clamp http://localhost:8080 + ${resp}= Get Request clamp /restservices/clds/v1/clds/healthcheck + Should Be Equal As Strings ${resp.status_code} 200 + +Open Browser +# Next line is to be enabled for Headless tests only (jenkins?). To see the tests desable the line. + Start Virtual Display 1920 1080 + Open Browser http://localhost:8080/designer/index.html browser=firefox + Set Selenium Speed .2 seconds + Set Window Size 1920 1080 + ${title}= Get Title + Should Be Equal CLDS ${title} + +Good Login to Clamp UI and Verify logged in + Input Text locator=username text=admin + Input Text locator=password text=password + Press Key locator=password key=\\13 + Wait Until Element Is Visible xpath=//*[@class="navbar-brand logo_name ng-binding"] timeout=60 + Element Text Should Be xpath=//*[@class="navbar-brand logo_name ng-binding"] expected=Hello:admin + +Create Model from Menu + Wait Until Element Is Visible xpath=//*[@id="navbar"]/ul/li[2]/a timeout=60 + Click Element xpath=//*[@id="navbar"]/ul/li[2]/a + Wait Until Element Is Visible locator=Create CL timeout=60 + Click Element locator=Create CL + Input Text locator=modelName text=HolmesModel + Select From List By Label id=templateName HolmesTemplate + Click Button locator=Create + +Save Model from Menu + Wait Until Element Is Visible xpath=//*[@id="navbar"]/ul/li[2]/a timeout=60 + Click Element xpath=//*[@id="navbar"]/ul/li[2]/a + Wait Until Element Is Visible locator=Save CL timeout=60 + Click Element locator=Save CL + Wait Until Element Is Visible xpath=//*[@id="alert_message_"] timeout=60 + Element Text Should Be xpath=//*[@id="alert_message_"] expected=Action Successful:SAVE + +Close Browser + Close Browser diff --git a/test/csit/tests/cli/startup/startup_check.robot b/test/csit/tests/cli/startup/startup_check.robot index 5c0bf8b76..18788ddd7 100644 --- a/test/csit/tests/cli/startup/startup_check.robot +++ b/test/csit/tests/cli/startup/startup_check.robot @@ -58,18 +58,18 @@ Check Cli Schema Validate With Valid Path Should Contain ${cli_cmd_output.stdout} error Check Cli Scheam Validate With Invalid Path - [Documentation] check cli version + [Documentation] check cli schema-validate command with invalid path ${cli_cmd_output}= Run Process ${cli_exec_cli_10_schema_validate_invalid} shell=yes Log ${cli_cmd_output.stdout} Should Be Equal As Strings ${cli_cmd_output.rc} 1 - Should Contain ${cli_cmd_output.stdout} 0x0007 + Should Contain ${cli_cmd_output.stdout} 0xb001 Check Cli Scheam Validate Empty Argument - [Documentation] check cli schema validate with empty argument + [Documentation] check cli schema-validate with empty argument ${cli_cmd_output}= Run Process ${cli_exec_cli_10_schema_validate_empty} shell=yes Log ${cli_cmd_output.stdout} Should Be Equal As Strings ${cli_cmd_output.rc} 1 - Should Contain ${cli_cmd_output.stdout} 0x0015 + Should Contain ${cli_cmd_output.stdout} 0x7003 Check Cli create microservice [Documentation] check create microservice diff --git a/test/csit/tests/dcaegen2/testcases/dcae_ves.robot b/test/csit/tests/dcaegen2/testcases/dcae_ves.robot index 00c58071b..eee6ea569 100644 --- a/test/csit/tests/dcaegen2/testcases/dcae_ves.robot +++ b/test/csit/tests/dcaegen2/testcases/dcae_ves.robot @@ -1,188 +1,199 @@ -*** Settings ***
-Documentation Testing DCAE VES Listener with various event feeds from VoLTE, vDNS, vFW and cCPE use scenarios
-
-Library RequestsLibrary
-Library OperatingSystem
-Library Collections
-Library DcaeLibrary
-Resource resources/dcae_keywords.robot
-Test Setup Cleanup VES Events
-Suite Setup VES Collector Suite Setup DMaaP
-Suite Teardown VES Collector Suite Shutdown DMaaP
-
-
-
-
-*** Variables ***
-${VESC_URL_HTTPS} https://%{VESC_IP}:8443
-${VESC_URL} http://%{VESC_IP}:8080
-${VES_ANY_EVENT_PATH} /eventListener/v5
-${VES_BATCH_EVENT_PATH} /eventListener/v5/eventBatch
-${VES_THROTTLE_STATE_EVENT_PATH} /eventListener/v5/clientThrottlingState
-${HEADER_STRING} content-type=application/json
-${EVENT_DATA_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_single_fault_event.json
-${EVENT_MEASURE_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_vfirewall_measurement.json
-${EVENT_DATA_FILE_BAD} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_single_fault_event_bad.json
-${EVENT_BATCH_DATA_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_fault_eventlist_batch.json
-${EVENT_THROTTLING_STATE_DATA_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_fault_provide_throttle_state.json
-
-
-#DCAE Health Check
-${CONFIG_BINDING_URL} http://localhost:8443
-${CB_HEALTHCHECK_PATH} /healthcheck
-${CB_SERVICE_COMPONENT_PATH} /service_component/
-${VES_Service_Name1} dcae-controller-ves-collector
-${VES_Service_Name2} ves-collector-not-exist
-
-*** Comment out from R1 release ***
-DCAE Health Check
- [Tags] DCAE-HealthCheck
- [Documentation] Get DCAE Overall Status
- ${auth}= Create List ${GLOBAL_DCAE_USERNAME} ${GLOBAL_DCAE_PASSWORD}
- ${session}= Create Session dcae-health-check ${CONFIG_BINDING_URL} auth=${auth}
- ${resp}= Get Request dcae-health-check ${CB_HEALTHCHECK_PATH}
- Should Be Equal As Strings ${resp.status_code} 200
-
-
-Get VES Collector Service Status
- [Tags] DCAE-HealthCheck
- [Documentation] Get the status of a VES Collector Service Component based on service name
- ${urlpath}= Catenate SEPARATOR= ${CB_SERVICE_COMPONENT_PATH} ${VES_Service_Name1}
- Log Service component name for status query: ${urlpath}
- ${resp}= Get DCAE Service Component Status ${CONFIG_BINDING_URL} ${CB_SERVICE_COMPONENT_PATH} ${GLOBAL_DCAE_USERNAME} ${GLOBAL_DCAE_PASSWORD}
- Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 200
- ${isEmpty}= Is Json Empty ${resp}
- Run Keyword If '${isEmpty}' == False Log ${resp.json()}
-
-
-
-#*** Comment out from R1 release ***
-Publish VES VoLTE Fault Provide Throttling State
- [Tags] DCAE-D1
- ${evtdata}= Get Event Data From File ${EVENT_THROTTLING_STATE_DATA_FILE}
- ${headers}= Create Header From String ${HEADER_STRING}
- ${resp}= Publish Event To VES Collector ${VES_VOLTE_URL} ${VES_THROTTLE_STATE_EVENT_PATH} ${headers} ${evtdata} ${GLOBAL_DCAE_USERNAME} ${GLOBAL_DCAE_PASSWORD}
- Should Be Equal As Strings ${resp.status_code} 204
-
-Publish VES Event With Invalid Method
- [Tags] DCAE-D1
- [Documentation] Use invalid Put instead of Post method to expect 405 response
- ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE}
- ${headers}= Create Header From String ${HEADER_STRING}
- Log Send HTTP Request with invalid method Put instead of Post
- ${resp}= Publish Event To VES Collector With Put Method ${VES_VOLTE_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata} ${GLOBAL_DCAE_USERNAME} ${GLOBAL_DCAE_PASSWORD}
- Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 405
-
-
-Publish VES Event With Invalid URL Path
- [Tags] DCAE-D1
- [Documentation] Use invalid url path to expect 404 response
- ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE}
- ${headers}= Create Header From String ${HEADER_STRING}
- Log Send HTTP Request with invalid /listener/v5/ instead of /eventlistener/v5 path
- ${resp}= Publish Event To VES Collector ${VES_VOLTE_URL} /listener/v5/ ${headers} ${evtdata} ${GLOBAL_DCAE_USERNAME} ${GLOBAL_DCAE_PASSWORD}
- Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 404
-
-Publish VES Event With Invalid Login
- [Tags] DCAE-D1
- [Documentation] Use invalid user or password to expect 401 response
- ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE}
- ${headers}= Create Header From String ${HEADER_STRING}
- Log Send HTTP Request with invalid User: BadUserName
- ${resp}= Publish Event To VES Collector ${VES_VOLTE_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata} BadUserName ${GLOBAL_DCAE_PASSWORD}
- Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 401
-
-*** Test Cases ***
-VES Collector Health Check
- [Tags] DCAE-VESC-R1
- [Documentation] Ves Collector Health Check
- ${uuid}= Generate UUID
- ${session}= Create Session dcae ${VESC_URL}
- ${headers}= Create Dictionary Accept=*/* X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
- ${resp}= Get Request dcae /healthcheck headers=${headers}
- Should Be Equal As Strings ${resp.status_code} 200
-
-
-Publish Single VES VoLTE Fault Event
- [Tags] DCAE-VESC-R1
- [Documentation] Post single event and expect 200 Response
- ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE}
- ${headers}= Create Header From String ${HEADER_STRING}
- ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
- Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 200
- ${isEmpty}= Is Json Empty ${resp}
- Run Keyword If '${isEmpty}' == False Log ${resp.json()}
- ${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546015
- Should Be Equal As Strings ${ret} true
-
-Publish Single VES VNF Measurement Event
- [Tags] DCAE-VESC-R1
- [Documentation] Post single event and expect 200 Response
- ${evtdata}= Get Event Data From File ${EVENT_MEASURE_FILE}
- ${headers}= Create Header From String ${HEADER_STRING}
- ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
- Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 200
- ${isEmpty}= Is Json Empty ${resp}
- Run Keyword If '${isEmpty}' == False Log ${resp.json()}
- ${ret}= DMaaP Message Receive 0b2b5790-3673-480a-a4bd-5a00b88e5af6
- Should Be Equal As Strings ${ret} true
-
-Publish VES VoLTE Fault Batch Events
- [Tags] DCAE-VESC-R1
- [Documentation] Post batched events and expect 202 Response
- ${evtdata}= Get Event Data From File ${EVENT_BATCH_DATA_FILE}
- ${headers}= Create Header From String ${HEADER_STRING}
- ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} ${VES_BATCH_EVENT_PATH} ${headers} ${evtdata}
- Should Be Equal As Strings ${resp.status_code} 200
- ${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546016
- Should Be Equal As Strings ${ret} true
-
-
-Publish Single VES VoLTE Fault Event With Bad Data
- [Tags] DCAE-VESC-R1
- [Documentation] Run with JSON Envent with missing comma to expect 400 response
- ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE_BAD}
- ${headers}= Create Header From String ${HEADER_STRING}
- Log Send HTTP Request with invalid Json Event Data
- ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
- Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 400
- ${isEmpty}= Is Json Empty ${resp}
- Run Keyword If '${isEmpty}' == False Log ${resp.json()}
-
-Publish VES Event With Invalid Method
- [Tags] DCAE-VESC-R1
- [Documentation] Use invalid Put instead of Post method to expect 405 response
- ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE}
- ${headers}= Create Header From String ${HEADER_STRING}
- Log Send HTTP Request with invalid method Put instead of Post
- ${resp}= Publish Event To VES Collector With Put Method No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
- Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 404
-
-
-Publish VES Event With Invalid URL Path
- [Tags] DCAE-VESC-R1
- [Documentation] Use invalid url path to expect 404 response
- ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE}
- ${headers}= Create Header From String ${HEADER_STRING}
- Log Send HTTP Request with invalid /listener/v5/ instead of /eventListener/v5 path
- ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} /listener/v5/ ${headers} ${evtdata}
- Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 404
-
-
-
-
-
-
-
-
-
-
+*** Settings *** +Documentation Testing DCAE VES Listener with various event feeds from VoLTE, vDNS, vFW and cCPE use scenarios + +Library RequestsLibrary +Library OperatingSystem +Library Collections +Library DcaeLibrary +Resource resources/dcae_keywords.robot +Test Setup Cleanup VES Events +Suite Setup VES Collector Suite Setup DMaaP +Suite Teardown VES Collector Suite Shutdown DMaaP + + + + +*** Variables *** +${VESC_URL_HTTPS} https://%{VESC_IP}:8443 +${VESC_URL} http://%{VESC_IP}:8080 +${VES_ANY_EVENT_PATH} /eventListener/v5 +${VES_BATCH_EVENT_PATH} /eventListener/v5/eventBatch +${VES_THROTTLE_STATE_EVENT_PATH} /eventListener/v5/clientThrottlingState +${HEADER_STRING} content-type=application/json +${EVENT_DATA_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_single_fault_event.json +${EVENT_MEASURE_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_vfirewall_measurement.json +${EVENT_DATA_FILE_BAD} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_single_fault_event_bad.json +${EVENT_BATCH_DATA_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_fault_eventlist_batch.json +${EVENT_THROTTLING_STATE_DATA_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_fault_provide_throttle_state.json + + +#DCAE Health Check +${CONFIG_BINDING_URL} http://localhost:8443 +${CB_HEALTHCHECK_PATH} /healthcheck +${CB_SERVICE_COMPONENT_PATH} /service_component/ +${VES_Service_Name1} dcae-controller-ves-collector +${VES_Service_Name2} ves-collector-not-exist + + +*** Test Cases *** + +VES Collector Health Check + [Tags] DCAE-VESC-R1 + [Documentation] Ves Collector Health Check + ${uuid}= Generate UUID + ${session}= Create Session dcae ${VESC_URL} + ${headers}= Create Dictionary Accept=*/* X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Get Request dcae /healthcheck headers=${headers} + Should Be Equal As Strings ${resp.status_code} 200 + + +Publish Single VES VoLTE Fault Event + [Tags] DCAE-VESC-R1 + [Documentation] Post single event and expect 200 Response + ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE} + ${headers}= Create Header From String ${HEADER_STRING} + ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata} + Log Receive HTTP Status code ${resp.status_code} + Should Be Equal As Strings ${resp.status_code} 200 + ${isEmpty}= Is Json Empty ${resp} + Run Keyword If '${isEmpty}' == False Log ${resp.json()} + ${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546015 + Should Be Equal As Strings ${ret} true + +Publish Single VES VNF Measurement Event + [Tags] DCAE-VESC-R1 + [Documentation] Post single event and expect 200 Response + ${evtdata}= Get Event Data From File ${EVENT_MEASURE_FILE} + ${headers}= Create Header From String ${HEADER_STRING} + ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata} + Log Receive HTTP Status code ${resp.status_code} + Should Be Equal As Strings ${resp.status_code} 200 + ${isEmpty}= Is Json Empty ${resp} + Run Keyword If '${isEmpty}' == False Log ${resp.json()} + ${ret}= DMaaP Message Receive 0b2b5790-3673-480a-a4bd-5a00b88e5af6 + Should Be Equal As Strings ${ret} true + +Publish VES VoLTE Fault Batch Events + [Tags] DCAE-VESC-R1 + [Documentation] Post batched events and expect 202 Response + ${evtdata}= Get Event Data From File ${EVENT_BATCH_DATA_FILE} + ${headers}= Create Header From String ${HEADER_STRING} + ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} ${VES_BATCH_EVENT_PATH} ${headers} ${evtdata} + Should Be Equal As Strings ${resp.status_code} 200 + ${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546016 + Should Be Equal As Strings ${ret} true + + +Publish Single VES VoLTE Fault Event With Bad Data + [Tags] DCAE-VESC-R1 + [Documentation] Run with JSON Envent with missing comma to expect 400 response + ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE_BAD} + ${headers}= Create Header From String ${HEADER_STRING} + Log Send HTTP Request with invalid Json Event Data + ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata} + Log Receive HTTP Status code ${resp.status_code} + Should Be Equal As Strings ${resp.status_code} 400 + ${isEmpty}= Is Json Empty ${resp} + Run Keyword If '${isEmpty}' == False Log ${resp.json()} + +Publish VES Event With Invalid Method + [Tags] DCAE-VESC-R1 + [Documentation] Use invalid Put instead of Post method to expect 405 response + ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE} + ${headers}= Create Header From String ${HEADER_STRING} + Log Send HTTP Request with invalid method Put instead of Post + ${resp}= Publish Event To VES Collector With Put Method No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata} + Log Receive HTTP Status code ${resp.status_code} + Should Be Equal As Strings ${resp.status_code} 404 + + +Publish VES Event With Invalid URL Path + [Tags] DCAE-VESC-R1 + [Documentation] Use invalid url path to expect 404 response + ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE} + ${headers}= Create Header From String ${HEADER_STRING} + Log Send HTTP Request with invalid /listener/v5/ instead of /eventListener/v5 path + ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} /listener/v5/ ${headers} ${evtdata} + Log Receive HTTP Status code ${resp.status_code} + Should Be Equal As Strings ${resp.status_code} 404 + + +Enable VESC HTTPS And Basic Auth + [Tags] DCAE-VESC-R1 + [Documentation] Enable VESC Https and Authentication, Disable Http and Run Health Check + Enable VESC Https Auth + + ${auth}= Create List ${VESC_HTTPS_USER} ${VESC_HTTPS_PD} + ${session}= Create Session dcaegen2-r1 ${VESC_URL_HTTPS} auth=${auth} disable_warnings=1 + ${headers}= Create Dictionary Accept=*/* X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Get Request dcaegen2-r1 /healthcheck headers=${headers} + Should Be Equal As Strings ${resp.status_code} 200 + +Publish Single VES Fault Event Over HTTPS + [Tags] DCAE-VESC-R1 + [Documentation] Post single event and expect 200 Response + ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE} + ${headers}= Create Header From String ${HEADER_STRING} + Log Login User=${VESC_HTTPS_USER}, Pd=${VESC_HTTPS_PD} + ${resp}= Publish Event To VES Collector ${VESC_URL_HTTPS} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata} sample1 sample1 + Log Receive HTTP Status code ${resp.status_code} + Should Be Equal As Strings ${resp.status_code} 200 + ${isEmpty}= Is Json Empty ${resp} + Run Keyword If '${isEmpty}' == False Log ${resp.json()} + ${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546015 + Should Be Equal As Strings ${ret} true + + +Publish Single VES Measurement Event Over HTTPS + [Tags] DCAE-VESC-R1 + [Documentation] Post single event and expect 200 Response + ${evtdata}= Get Event Data From File ${EVENT_MEASURE_FILE} + ${headers}= Create Header From String ${HEADER_STRING} + ${resp}= Publish Event To VES Collector ${VESC_URL_HTTPS} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata} ${VESC_HTTPS_USER} ${VESC_HTTPS_PD} + Log Receive HTTP Status code ${resp.status_code} + Should Be Equal As Strings ${resp.status_code} 200 + ${isEmpty}= Is Json Empty ${resp} + Run Keyword If '${isEmpty}' == False Log ${resp.json()} + ${ret}= DMaaP Message Receive 0b2b5790-3673-480a-a4bd-5a00b88e5af6 + Should Be Equal As Strings ${ret} true + +Publish VES Fault Batch Events Over HTTPS + [Tags] DCAE-VESC-R1 + [Documentation] Post batched events and expect 202 Response + ${evtdata}= Get Event Data From File ${EVENT_BATCH_DATA_FILE} + ${headers}= Create Header From String ${HEADER_STRING} + ${resp}= Publish Event To VES Collector ${VESC_URL_HTTPS} ${VES_BATCH_EVENT_PATH} ${headers} ${evtdata} ${VESC_HTTPS_USER} ${VESC_HTTPS_PD} + Should Be Equal As Strings ${resp.status_code} 200 + ${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546016 + Should Be Equal As Strings ${ret} true + + +Publish VES Event With Invalid URL Path HTTPS + [Tags] DCAE-VESC-R1 + [Documentation] Use invalid url path to expect 404 response + ${evtdata}= Get Event Data From File ${EVENT_DATA_FILE} + ${headers}= Create Header From String ${HEADER_STRING} + Log Send HTTP Request with invalid /eventlistener/v5/ instead of /eventListener/v5 path + ${resp}= Publish Event To VES Collector ${VESC_URL_HTTPS} /eventlistener/v5 ${headers} ${evtdata} ${VESC_HTTPS_USER} ${VESC_HTTPS_PD} + Log Receive HTTP Status code ${resp.status_code} + Should Be Equal As Strings ${resp.status_code} 404 + + + + + + + + + + + + + + + + + + + + diff --git a/test/csit/tests/dcaegen2/testcases/resources/DcaeLibrary.py b/test/csit/tests/dcaegen2/testcases/resources/DcaeLibrary.py index 650f8fef8..0242ad7ab 100644 --- a/test/csit/tests/dcaegen2/testcases/resources/DcaeLibrary.py +++ b/test/csit/tests/dcaegen2/testcases/resources/DcaeLibrary.py @@ -5,14 +5,14 @@ Created on Aug 18, 2017 '''
from robot.api import logger
from Queue import Queue
-import uuid, time, datetime,json, threading
+import uuid, time, datetime,json, threading,os, platform, subprocess,paramiko
import DcaeVariables
import DMaaP
class DcaeLibrary(object):
def __init__(self):
- pass
+ pass
def setup_dmaap_server(self, portNum=3904):
if DcaeVariables.HttpServerThread != None:
@@ -50,6 +50,28 @@ class DcaeLibrary(object): return "true"
logger.console("DMaaP server not started yet")
return "false"
+
+ def enable_vesc_https_auth(self):
+ if 'Windows' in platform.system():
+ try:
+ client = paramiko.SSHClient()
+ client.load_system_host_keys()
+ #client.set_missing_host_key_policy(paramiko.WarningPolicy)
+ client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+
+ client.connect(os.environ['CSIT_IP'], port=22, username=os.environ['CSIT_USER'], password=os.environ['CSIT_PD'])
+ stdin, stdout, stderr = client.exec_command('%{WORKSPACE}/test/csit/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh')
+ logger.console(stdout.read())
+ finally:
+ client.close()
+ return
+ ws = os.environ['WORKSPACE']
+ script2run = ws + "/test/csit/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh"
+ logger.info("Running script: " + script2run)
+ logger.console("Running script: " + script2run)
+ subprocess.call(script2run)
+ time.sleep(5)
+ return
def dmaap_message_receive(self, evtobj, action='contain'):
@@ -129,7 +151,9 @@ if __name__ == '__main__': '''
lib = DcaeLibrary()
+ lib.enable_vesc_https_auth()
+
ret = lib.setup_dmaap_server()
print ret
- time.sleep(10000000000)
-
\ No newline at end of file + time.sleep(100000)
+
diff --git a/test/csit/tests/dcaegen2/testcases/resources/VES-4.27.2-dataformat.json b/test/csit/tests/dcaegen2/testcases/resources/VES-4.27.2-dataformat.json index d4e3e4944..45faaa5ab 100644 --- a/test/csit/tests/dcaegen2/testcases/resources/VES-4.27.2-dataformat.json +++ b/test/csit/tests/dcaegen2/testcases/resources/VES-4.27.2-dataformat.json @@ -1,1176 +1,1161 @@ -{
- "self": {
- "name": "VES_specification",
- "version": "4.27.2",
- "description": "VES spec from v4.1 and 27.2 spec"
-
- },
- "dataformatversion": "1.0.0",
- "jsonschema":
- {
- "$schema": "http://json-schema.org/draft-04/schema#",
-
- "definitions": {
- "attCopyrightNotice": {
- "description": "Copyright (c) <2016>, AT&T Intellectual Property. All other rights reserved",
- "type": "object",
- "properties": {
- "useAndRedistribution": {
- "description": "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:",
- "type": "string"
- },
- "condition1": {
- "description": "Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.",
- "type": "string"
- },
- "condition2": {
- "description": "Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.",
- "type": "string"
- },
- "condition3": {
- "description": "All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the AT&T.",
- "type": "string"
- },
- "condition4": {
- "description": "Neither the name of AT&T nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.",
- "type": "string"
- },
- "disclaimerLine1": {
- "description": "THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS",
- "type": "string"
- },
- "disclaimerLine2": {
- "description": "FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES",
- "type": "string"
- },
- "disclaimerLine3": {
- "description": "(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,",
- "type": "string"
- },
- "disclaimerLine4": {
- "description": "WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.",
- "type": "string"
- }
- }
- },
- "codecsInUse": {
- "description": "number of times an identified codec was used over the measurementInterval",
- "type": "object",
- "properties": {
- "codecIdentifier": { "type": "string" },
- "numberInUse": { "type": "number" }
- },
- "required": [ "codecIdentifier", "numberInUse" ]
- },
- "command": {
- "description": "command from an event collector toward an event source",
- "type": "object",
- "properties": {
- "commandType": {
- "type": "string",
- "enum": [
- "heartbeatIntervalChange",
- "measurementIntervalChange",
- "provideThrottlingState",
- "throttlingSpecification"
- ]
- },
- "eventDomainThrottleSpecification": { "$ref": "#/definitions/eventDomainThrottleSpecification" },
- "measurementInterval": { "type": "number" }
- },
- "required": [ "commandType" ]
- },
- "commandList": {
- "description": "array of commands from an event collector toward an event source",
- "type": "array",
- "items": {
- "$ref": "#/definitions/commandListEntry"
- },
- "minItems": 0
- },
- "commandListEntry": {
- "description": "reference to a command object",
- "type": "object",
- "properties": {
- "command": {"$ref": "#/definitions/command"}
- },
- "required": [ "command" ]
- },
- "commonEventHeader": {
- "description": "fields common to all events",
- "type": "object",
- "properties": {
- "domain": {
- "description": "the eventing domain associated with the event",
- "type": "string",
- "enum": [
- "fault",
- "heartbeat",
- "measurementsForVfScaling",
- "mobileFlow",
- "other",
- "stateChange",
- "syslog",
- "thresholdCrossingAlert"
- ]
- },
- "eventId": {
- "description": "event key that is unique to the event source",
- "type": "string"
- },
- "eventType": {
- "description": "unique event topic name",
- "type": "string"
- },
- "functionalRole": {
- "description": "function of the event source e.g., eNodeB, MME, PCRF",
- "type": "string"
- },
- "internalHeaderFields": { "$ref": "#/definitions/internalHeaderFields" },
- "lastEpochMicrosec": {
- "description": "the latest unix time aka epoch time associated with the event from any component--as microseconds elapsed since 1 Jan 1970 not including leap seconds",
- "type": "number"
- },
- "priority": {
- "description": "processing priority",
- "type": "string",
- "enum": [
- "High",
- "Medium",
- "Normal",
- "Low"
- ]
- },
- "reportingEntityId": {
- "description": "UUID identifying the entity reporting the event, for example an OAM VM; must be populated by the ATT enrichment process",
- "type": "string"
- },
- "reportingEntityName": {
- "description": "name of the entity reporting the event, for example, an OAM VM",
- "type": "string"
- },
- "sequence": {
- "description": "ordering of events communicated by an event source instance or 0 if not needed",
- "type": "integer"
- },
- "sourceId": {
- "description": "UUID identifying the entity experiencing the event issue; must be populated by the ATT enrichment process",
- "type": "string"
- },
- "sourceName": {
- "description": "name of the entity experiencing the event issue",
- "type": "string"
- },
- "startEpochMicrosec": {
- "description": "the earliest unix time aka epoch time associated with the event from any component--as microseconds elapsed since 1 Jan 1970 not including leap seconds",
- "type": "number"
- },
- "version": {
- "description": "version of the event header",
- "type": "number"
- }
- },
- "required": [ "domain", "eventId", "functionalRole", "lastEpochMicrosec",
- "priority", "reportingEntityName", "sequence",
- "sourceName", "startEpochMicrosec" ]
- },
- "counter": {
- "description": "performance counter",
- "type": "object",
- "properties": {
- "criticality": { "type": "string", "enum": [ "CRIT", "MAJ" ] },
- "name": { "type": "string" },
- "thresholdCrossed": { "type": "string" },
- "value": { "type": "string"}
- },
- "required": [ "criticality", "name", "thresholdCrossed", "value" ]
- },
- "cpuUsage": {
- "description": "percent usage of an identified CPU",
- "type": "object",
- "properties": {
- "cpuIdentifier": { "type": "string" },
- "percentUsage": { "type": "number" }
- },
- "required": [ "cpuIdentifier", "percentUsage" ]
- },
- "errors": {
- "description": "receive and transmit errors for the measurements domain",
- "type": "object",
- "properties": {
- "receiveDiscards": { "type": "number" },
- "receiveErrors": { "type": "number" },
- "transmitDiscards": { "type": "number" },
- "transmitErrors": { "type": "number" }
- },
- "required": [ "receiveDiscards", "receiveErrors", "transmitDiscards", "transmitErrors" ]
- },
- "event": {
- "description": "the root level of the common event format",
- "type": "object",
- "properties": {
- "commonEventHeader": { "$ref": "#/definitions/commonEventHeader" },
- "faultFields": { "$ref": "#/definitions/faultFields" },
- "measurementsForVfScalingFields": { "$ref": "#/definitions/measurementsForVfScalingFields" },
- "mobileFlowFields": { "$ref": "#/definitions/mobileFlowFields" },
- "otherFields": { "$ref": "#/definitions/otherFields" },
- "stateChangeFields": { "$ref": "#/definitions/stateChangeFields" },
- "syslogFields": { "$ref": "#/definitions/syslogFields" },
- "thresholdCrossingAlertFields": { "$ref": "#/definitions/thresholdCrossingAlertFields" }
- },
- "required": [ "commonEventHeader" ]
- },
- "eventDomainThrottleSpecification": {
- "description": "specification of what information to suppress within an event domain",
- "type": "object",
- "properties": {
- "eventDomain": {
- "description": "Event domain enum from the commonEventHeader domain field",
- "type": "string"
- },
- "suppressedFieldNames": {
- "description": "List of optional field names in the event block that should not be sent to the Event Listener",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "suppressedNvPairsList": {
- "description": "Optional list of specific NvPairsNames to suppress within a given Name-Value Field",
- "type": "array",
- "items": {
- "$ref": "#/definitions/suppressedNvPairs"
- }
- }
- },
- "required": [ "eventDomain" ]
- },
- "eventDomainThrottleSpecificationList": {
- "description": "array of eventDomainThrottleSpecifications",
- "type": "array",
- "items": {
- "$ref": "#/definitions/eventDomainThrottleSpecification"
- },
- "minItems": 0
- },
- "eventList": {
- "description": "array of events",
- "type": "array",
- "items": {
- "$ref": "#/definitions/event"
- }
- },
- "eventThrottlingState": {
- "description": "reports the throttling in force at the event source",
- "type": "object",
- "properties": {
- "eventThrottlingMode": {
- "description": "Mode the event manager is in",
- "type": "string",
- "enum": [
- "normal",
- "throttled"
- ]
- },
- "eventDomainThrottleSpecificationList": { "$ref": "#/definitions/eventDomainThrottleSpecificationList" }
- },
- "required": [ "eventThrottlingMode" ]
- },
- "faultFields": {
- "description": "fields specific to fault events",
- "type": "object",
- "properties": {
- "alarmAdditionalInformation": {
- "description": "additional alarm information",
- "type": "array",
- "items": {
- "$ref": "#/definitions/field"
- }
- },
- "alarmCondition": {
- "description": "alarm condition reported by the device",
- "type": "string"
- },
- "alarmInterfaceA": {
- "description": "card, port, channel or interface name of the device generating the alarm",
- "type": "string"
- },
- "eventSeverity": {
- "description": "event severity or priority",
- "type": "string",
- "enum": [
- "CRITICAL",
- "MAJOR",
- "MINOR",
- "WARNING",
- "NORMAL"
- ]
- },
- "eventSourceType": {
- "description": "type of event source; examples: other, router, switch, host, card, port, slotThreshold, portThreshold, virtualMachine, virtualNetworkFunction",
- "type": "string"
- },
- "faultFieldsVersion": {
- "description": "version of the faultFields block",
- "type": "number"
- },
- "specificProblem": {
- "description": "short description of the alarm or problem",
- "type": "string"
- },
- "vfStatus": {
- "description": "virtual function status enumeration",
- "type": "string",
- "enum": [
- "Active",
- "Idle",
- "Preparing to terminate",
- "Ready to terminate",
- "Requesting termination"
- ]
- }
- },
- "required": [ "alarmCondition", "eventSeverity",
- "eventSourceType", "specificProblem", "vfStatus" ]
- },
- "featuresInUse": {
- "description": "number of times an identified feature was used over the measurementInterval",
- "type": "object",
- "properties": {
- "featureIdentifier": { "type": "string" },
- "featureUtilization": { "type": "number" }
- },
- "required": [ "featureIdentifier", "featureUtilization" ]
- },
- "field": {
- "description": "name value pair",
- "type": "object",
- "properties": {
- "name": { "type": "string" },
- "value": { "type": "string" }
- },
- "required": [ "name", "value" ]
- },
- "filesystemUsage": {
- "description": "disk usage of an identified virtual machine in gigabytes and/or gigabytes per second",
- "type": "object",
- "properties": {
- "blockConfigured": { "type": "number" },
- "blockIops": { "type": "number" },
- "blockUsed": { "type": "number" },
- "ephemeralConfigured": { "type": "number" },
- "ephemeralIops": { "type": "number" },
- "ephemeralUsed": { "type": "number" },
- "filesystemName": { "type": "string" }
- },
- "required": [ "blockConfigured", "blockIops", "blockUsed", "ephemeralConfigured",
- "ephemeralIops", "ephemeralUsed", "filesystemName" ]
- },
- "gtpPerFlowMetrics": {
- "description": "Mobility GTP Protocol per flow metrics",
- "type": "object",
- "properties": {
- "avgBitErrorRate": {
- "description": "average bit error rate",
- "type": "number"
- },
- "avgPacketDelayVariation": {
- "description": "Average packet delay variation or jitter in milliseconds for received packets: Average difference between the packet timestamp and time received for all pairs of consecutive packets",
- "type": "number"
- },
- "avgPacketLatency": {
- "description": "average delivery latency",
- "type": "number"
- },
- "avgReceiveThroughput": {
- "description": "average receive throughput",
- "type": "number"
- },
- "avgTransmitThroughput": {
- "description": "average transmit throughput",
- "type": "number"
- },
- "durConnectionFailedStatus": {
- "description": "duration of failed state in milliseconds, computed as the cumulative time between a failed echo request and the next following successful error request, over this reporting interval",
- "type": "number"
- },
- "durTunnelFailedStatus": {
- "description": "Duration of errored state, computed as the cumulative time between a tunnel error indicator and the next following non-errored indicator, over this reporting interval",
- "type": "number"
- },
- "flowActivatedBy": {
- "description": "Endpoint activating the flow",
- "type": "string"
- },
- "flowActivationEpoch": {
- "description": "Time the connection is activated in the flow (connection) being reported on, or transmission time of the first packet if activation time is not available",
- "type": "number"
- },
- "flowActivationMicrosec": {
- "description": "Integer microseconds for the start of the flow connection",
- "type": "number"
- },
- "flowActivationTime": {
- "description": "time the connection is activated in the flow being reported on, or transmission time of the first packet if activation time is not available; with RFC 2822 compliant format: Sat, 13 Mar 2010 11:29:05 -0800",
- "type": "string"
- },
- "flowDeactivatedBy": {
- "description": "Endpoint deactivating the flow",
- "type": "string"
- },
- "flowDeactivationEpoch": {
- "description": "Time for the start of the flow connection, in integer UTC epoch time aka UNIX time",
- "type": "number"
- },
- "flowDeactivationMicrosec": {
- "description": "Integer microseconds for the start of the flow connection",
- "type": "number"
- },
- "flowDeactivationTime": {
- "description": "Transmission time of the first packet in the flow connection being reported on; with RFC 2822 compliant format: Sat, 13 Mar 2010 11:29:05 -0800",
- "type": "string"
- },
- "flowStatus": {
- "description": "connection status at reporting time as a working / inactive / failed indicator value",
- "type": "string"
- },
- "gtpConnectionStatus": {
- "description": "Current connection state at reporting time",
- "type": "string"
- },
- "gtpTunnelStatus": {
- "description": "Current tunnel state at reporting time",
- "type": "string"
- },
- "ipTosCountList": {
- "description": "array of key: value pairs where the keys are drawn from the IP Type-of-Service identifiers which range from '0' to '255', and the values are the count of packets that had those ToS identifiers in the flow",
- "type": "array",
- "items": {
- "type": "array",
- "items": [
- { "type": "string" },
- { "type": "number" }
- ]
- }
- },
- "ipTosList": {
- "description": "Array of unique IP Type-of-Service values observed in the flow where values range from '0' to '255'",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "largePacketRtt": {
- "description": "large packet round trip time",
- "type": "number"
- },
- "largePacketThreshold": {
- "description": "large packet threshold being applied",
- "type": "number"
- },
- "maxPacketDelayVariation": {
- "description": "Maximum packet delay variation or jitter in milliseconds for received packets: Maximum of the difference between the packet timestamp and time received for all pairs of consecutive packets",
- "type": "number"
- },
- "maxReceiveBitRate": {
- "description": "maximum receive bit rate",
- "type": "number"
- },
- "maxTransmitBitRate": {
- "description": "maximum transmit bit rate",
- "type": "number"
- },
- "mobileQciCosCountList": {
- "description": "array of key: value pairs where the keys are drawn from LTE QCI or UMTS class of service strings, and the values are the count of packets that had those strings in the flow",
- "type": "array",
- "items": {
- "type": "array",
- "items": [
- { "type": "string" },
- { "type": "number" }
- ]
- }
- },
- "mobileQciCosList": {
- "description": "Array of unique LTE QCI or UMTS class-of-service values observed in the flow",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "numActivationFailures": {
- "description": "Number of failed activation requests, as observed by the reporting node",
- "type": "number"
- },
- "numBitErrors": {
- "description": "number of errored bits",
- "type": "number"
- },
- "numBytesReceived": {
- "description": "number of bytes received, including retransmissions",
- "type": "number"
- },
- "numBytesTransmitted": {
- "description": "number of bytes transmitted, including retransmissions",
- "type": "number"
- },
- "numDroppedPackets": {
- "description": "number of received packets dropped due to errors per virtual interface",
- "type": "number"
- },
- "numGtpEchoFailures": {
- "description": "Number of Echo request path failures where failed paths are defined in 3GPP TS 29.281 sec 7.2.1 and 3GPP TS 29.060 sec. 11.2",
- "type": "number"
- },
- "numGtpTunnelErrors": {
- "description": "Number of tunnel error indications where errors are defined in 3GPP TS 29.281 sec 7.3.1 and 3GPP TS 29.060 sec. 11.1",
- "type": "number"
- },
- "numHttpErrors": {
- "description": "Http error count",
- "type": "number"
- },
- "numL7BytesReceived": {
- "description": "number of tunneled layer 7 bytes received, including retransmissions",
- "type": "number"
- },
- "numL7BytesTransmitted": {
- "description": "number of tunneled layer 7 bytes transmitted, excluding retransmissions",
- "type": "number"
- },
- "numLostPackets": {
- "description": "number of lost packets",
- "type": "number"
- },
- "numOutOfOrderPackets": {
- "description": "number of out-of-order packets",
- "type": "number"
- },
- "numPacketErrors": {
- "description": "number of errored packets",
- "type": "number"
- },
- "numPacketsReceivedExclRetrans": {
- "description": "number of packets received, excluding retransmission",
- "type": "number"
- },
- "numPacketsReceivedInclRetrans": {
- "description": "number of packets received, including retransmission",
- "type": "number"
- },
- "numPacketsTransmittedInclRetrans": {
- "description": "number of packets transmitted, including retransmissions",
- "type": "number"
- },
- "numRetries": {
- "description": "number of packet retries",
- "type": "number"
- },
- "numTimeouts": {
- "description": "number of packet timeouts",
- "type": "number"
- },
- "numTunneledL7BytesReceived": {
- "description": "number of tunneled layer 7 bytes received, excluding retransmissions",
- "type": "number"
- },
- "roundTripTime": {
- "description": "round trip time",
- "type": "number"
- },
- "tcpFlagCountList": {
- "description": "array of key: value pairs where the keys are drawn from TCP Flags and the values are the count of packets that had that TCP Flag in the flow",
- "type": "array",
- "items": {
- "type": "array",
- "items": [
- { "type": "string" },
- { "type": "number" }
- ]
- }
- },
- "tcpFlagList": {
- "description": "Array of unique TCP Flags observed in the flow",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "timeToFirstByte": {
- "description": "Time in milliseconds between the connection activation and first byte received",
- "type": "number"
- }
- },
- "required": [ "avgBitErrorRate", "avgPacketDelayVariation", "avgPacketLatency",
- "avgReceiveThroughput", "avgTransmitThroughput",
- "flowActivationEpoch", "flowActivationMicrosec",
- "flowDeactivationEpoch", "flowDeactivationMicrosec",
- "flowDeactivationTime", "flowStatus",
- "maxPacketDelayVariation", "numActivationFailures",
- "numBitErrors", "numBytesReceived", "numBytesTransmitted",
- "numDroppedPackets", "numL7BytesReceived",
- "numL7BytesTransmitted", "numLostPackets",
- "numOutOfOrderPackets", "numPacketErrors",
- "numPacketsReceivedExclRetrans",
- "numPacketsReceivedInclRetrans",
- "numPacketsTransmittedInclRetrans",
- "numRetries", "numTimeouts", "numTunneledL7BytesReceived",
- "roundTripTime", "timeToFirstByte"
- ]
- },
- "internalHeaderFields": {
- "description": "enrichment fields for internal VES Event Listener service use only, not supplied by event sources",
- "type": "object"
- },
- "latencyBucketMeasure": {
- "description": "number of counts falling within a defined latency bucket",
- "type": "object",
- "properties": {
- "countsInTheBucket": { "type": "number" },
- "highEndOfLatencyBucket": { "type": "number" },
- "lowEndOfLatencyBucket": { "type": "number" }
- },
- "required": [ "countsInTheBucket" ]
- },
- "measurementGroup": {
- "description": "measurement group",
- "type": "object",
- "properties": {
- "name": { "type": "string" },
- "measurements": {
- "description": "array of name value pair measurements",
- "type": "array",
- "items": {
- "$ref": "#/definitions/field"
- }
- }
- },
- "required": [ "name", "measurements" ]
- },
- "measurementsForVfScalingFields": {
- "description": "measurementsForVfScaling fields",
- "type": "object",
- "properties": {
- "additionalMeasurements": {
- "description": "additional measurement fields",
- "type": "array",
- "items": {
- "$ref": "#/definitions/measurementGroup"
- }
- },
- "aggregateCpuUsage": {
- "description": "aggregate CPU usage of the VM on which the VNFC reporting the event is running",
- "type": "number"
- },
- "codecUsageArray": {
- "description": "array of codecs in use",
- "type": "array",
- "items": {
- "$ref": "#/definitions/codecsInUse"
- }
- },
- "concurrentSessions": {
- "description": "peak concurrent sessions for the VM or VNF over the measurementInterval",
- "type": "number"
- },
- "configuredEntities": {
- "description": "over the measurementInterval, peak total number of: users, subscribers, devices, adjacencies, etc., for the VM, or subscribers, devices, etc., for the VNF",
- "type": "number"
- },
- "cpuUsageArray": {
- "description": "usage of an array of CPUs",
- "type": "array",
- "items": {
- "$ref": "#/definitions/cpuUsage"
- }
- },
- "errors": { "$ref": "#/definitions/errors" },
- "featureUsageArray": {
- "description": "array of features in use",
- "type": "array",
- "items": {
- "$ref": "#/definitions/featuresInUse"
- }
- },
- "filesystemUsageArray": {
- "description": "filesystem usage of the VM on which the VNFC reporting the event is running",
- "type": "array",
- "items": {
- "$ref": "#/definitions/filesystemUsage"
- }
- },
- "latencyDistribution": {
- "description": "array of integers representing counts of requests whose latency in milliseconds falls within per-VNF configured ranges",
- "type": "array",
- "items": {
- "$ref": "#/definitions/latencyBucketMeasure"
- }
- },
- "meanRequestLatency": {
- "description": "mean seconds required to respond to each request for the VM on which the VNFC reporting the event is running",
- "type": "number"
- },
- "measurementInterval": {
- "description": "interval over which measurements are being reported in seconds",
- "type": "number"
- },
- "measurementsForVfScalingVersion": {
- "description": "version of the measurementsForVfScaling block",
- "type": "number"
- },
- "memoryConfigured": {
- "description": "memory in MB configured in the VM on which the VNFC reporting the event is running",
- "type": "number"
- },
- "memoryUsed": {
- "description": "memory usage in MB of the VM on which the VNFC reporting the event is running",
- "type": "number"
- },
- "numberOfMediaPortsInUse": {
- "description": "number of media ports in use",
- "type": "number"
- },
- "requestRate": {
- "description": "peak rate of service requests per second to the VNF over the measurementInterval",
- "type": "number"
- },
- "vnfcScalingMetric": {
- "description": "represents busy-ness of the VNF from 0 to 100 as reported by the VNFC",
- "type": "number"
- },
- "vNicUsageArray": {
- "description": "usage of an array of virtual network interface cards",
- "type": "array",
- "items": {
- "$ref": "#/definitions/vNicUsage"
- }
- }
- },
- "required": [ "measurementInterval" ]
- },
- "mobileFlowFields": {
- "description": "mobileFlow fields",
- "type": "object",
- "properties": {
- "additionalFields": {
- "description": "additional mobileFlow fields if needed",
- "type": "array",
- "items": {
- "$ref": "#/definitions/field"
- }
- },
- "applicationType": {
- "description": "Application type inferred",
- "type": "string"
- },
- "appProtocolType": {
- "description": "application protocol",
- "type": "string"
- },
- "appProtocolVersion": {
- "description": "application protocol version",
- "type": "string"
- },
- "cid": {
- "description": "cell id",
- "type": "string"
- },
- "connectionType": {
- "description": "Abbreviation referencing a 3GPP reference point e.g., S1-U, S11, etc",
- "type": "string"
- },
- "ecgi": {
- "description": "Evolved Cell Global Id",
- "type": "string"
- },
- "flowDirection": {
- "description": "Flow direction, indicating if the reporting node is the source of the flow or destination for the flow",
- "type": "string"
- },
- "gtpPerFlowMetrics": { "$ref": "#/definitions/gtpPerFlowMetrics" },
- "gtpProtocolType": {
- "description": "GTP protocol",
- "type": "string"
- },
- "gtpVersion": {
- "description": "GTP protocol version",
- "type": "string"
- },
- "httpHeader": {
- "description": "HTTP request header, if the flow connects to a node referenced by HTTP",
- "type": "string"
- },
- "imei": {
- "description": "IMEI for the subscriber UE used in this flow, if the flow connects to a mobile device",
- "type": "string"
- },
- "imsi": {
- "description": "IMSI for the subscriber UE used in this flow, if the flow connects to a mobile device",
- "type": "string"
- },
- "ipProtocolType": {
- "description": "IP protocol type e.g., TCP, UDP, RTP...",
- "type": "string"
- },
- "ipVersion": {
- "description": "IP protocol version e.g., IPv4, IPv6",
- "type": "string"
- },
- "lac": {
- "description": "location area code",
- "type": "string"
- },
- "mcc": {
- "description": "mobile country code",
- "type": "string"
- },
- "mnc": {
- "description": "mobile network code",
- "type": "string"
- },
- "mobileFlowFieldsVersion": {
- "description": "version of the mobileFlowFields block",
- "type": "number"
- },
- "msisdn": {
- "description": "MSISDN for the subscriber UE used in this flow, as an integer, if the flow connects to a mobile device",
- "type": "string"
- },
- "otherEndpointIpAddress": {
- "description": "IP address for the other endpoint, as used for the flow being reported on",
- "type": "string"
- },
- "otherEndpointPort": {
- "description": "IP Port for the reporting entity, as used for the flow being reported on",
- "type": "number"
- },
- "otherFunctionalRole": {
- "description": "Functional role of the other endpoint for the flow being reported on e.g., MME, S-GW, P-GW, PCRF...",
- "type": "string"
- },
- "rac": {
- "description": "routing area code",
- "type": "string"
- },
- "radioAccessTechnology": {
- "description": "Radio Access Technology e.g., 2G, 3G, LTE",
- "type": "string"
- },
- "reportingEndpointIpAddr": {
- "description": "IP address for the reporting entity, as used for the flow being reported on",
- "type": "string"
- },
- "reportingEndpointPort": {
- "description": "IP port for the reporting entity, as used for the flow being reported on",
- "type": "number"
- },
- "sac": {
- "description": "service area code",
- "type": "string"
- },
- "samplingAlgorithm": {
- "description": "Integer identifier for the sampling algorithm or rule being applied in calculating the flow metrics if metrics are calculated based on a sample of packets, or 0 if no sampling is applied",
- "type": "number"
- },
- "tac": {
- "description": "transport area code",
- "type": "string"
- },
- "tunnelId": {
- "description": "tunnel identifier",
- "type": "string"
- },
- "vlanId": {
- "description": "VLAN identifier used by this flow",
- "type": "string"
- }
- },
- "required": [ "flowDirection", "gtpPerFlowMetrics", "ipProtocolType",
- "ipVersion", "otherEndpointIpAddress", "otherEndpointPort",
- "reportingEndpointIpAddr", "reportingEndpointPort" ]
- },
- "otherFields": {
- "description": "additional fields not reported elsewhere",
- "type": "array",
- "items": {
- "$ref": "#/definitions/field"
- }
- },
- "requestError": {
- "description": "standard request error data structure",
- "type": "object",
- "properties": {
- "messageId": {
- "description": "Unique message identifier of the format ABCnnnn where ABC is either SVC for Service Exceptions or POL for Policy Exception",
- "type": "string"
- },
- "text": {
- "description": "Message text, with replacement variables marked with %n, where n is an index into the list of <variables> elements, starting at 1",
- "type": "string"
- },
- "url": {
- "description": "Hyperlink to a detailed error resource e.g., an HTML page for browser user agents",
- "type": "string"
- },
- "variables": {
- "description": "List of zero or more strings that represent the contents of the variables used by the message text",
- "type": "string"
- }
- },
- "required": [ "messageId", "text" ]
- },
- "stateChangeFields": {
- "description": "stateChange fields",
- "type": "object",
- "properties": {
- "additionalFields": {
- "description": "additional stateChange fields if needed",
- "type": "array",
- "items": {
- "$ref": "#/definitions/field"
- }
- },
- "newState": {
- "description": "new state of the entity",
- "type": "string",
- "enum": [
- "inService",
- "maintenance",
- "outOfService"
- ]
- },
- "oldState": {
- "description": "previous state of the entity",
- "type": "string",
- "enum": [
- "inService",
- "maintenance",
- "outOfService"
- ]
- },
- "stateChangeFieldsVersion": {
- "description": "version of the stateChangeFields block",
- "type": "number"
- },
- "stateInterface": {
- "description": "card or port name of the entity that changed state",
- "type": "string"
- }
- },
- "required": [ "newState", "oldState", "stateInterface" ]
- },
- "suppressedNvPairs": {
- "description": "List of specific NvPairsNames to suppress within a given Name-Value Field for event Throttling",
- "type": "object",
- "properties": {
- "nvPairFieldName": {
- "description": "Name of the field within which are the nvpair names to suppress",
- "type": "string"
- },
- "suppressedNvPairNames": {
- "description": "Array of nvpair names to suppress within the nvpairFieldName",
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "required": [ "nvPairFieldName", "suppressedNvPairNames" ]
- },
- "syslogFields": {
- "description": "sysLog fields",
- "type": "object",
- "properties": {
- "additionalFields": {
- "description": "additional syslog fields if needed",
- "type": "array",
- "items": {
- "$ref": "#/definitions/field"
- }
- },
- "eventSourceHost": {
- "description": "hostname of the device",
- "type": "string"
- },
- "eventSourceType": {
- "description": "type of event source; examples: other, router, switch, host, card, port, slotThreshold, portThreshold, virtualMachine, virtualNetworkFunction",
- "type": "string"
- },
- "syslogFacility": {
- "description": "numeric code from 0 to 23 for facility--see table in documentation",
- "type": "number"
- },
- "syslogFieldsVersion": {
- "description": "version of the syslogFields block",
- "type": "number"
- },
- "syslogMsg": {
- "description": "syslog message",
- "type": "string"
- },
- "syslogPri": {
- "description": "0-192 combined severity and facility",
- "type": "number"
- },
- "syslogProc": {
- "description": "identifies the application that originated the message",
- "type": "string"
- },
- "syslogProcId": {
- "description": "a change in the value of this field indicates a discontinuity in syslog reporting",
- "type": "number"
- },
- "syslogSData": {
- "description": "syslog structured data consisting of a structured data Id followed by a set of key value pairs",
- "type": "string"
- },
- "syslogSdId": {
- "description": "0-32 char in format name@number for example ourSDID@32473",
- "type": "string"
- },
- "syslogSev": {
- "description": "numerical Code for severity derived from syslogPri as remaider of syslogPri / 8",
- "type": "string"
- },
- "syslogTag": {
- "description": "msgId indicating the type of message such as TCPOUT or TCPIN; NILVALUE should be used when no other value can be provided",
- "type": "string"
- },
- "syslogVer": {
- "description": "IANA assigned version of the syslog protocol specification - typically 1",
- "type": "number"
- }
- },
- "required": [ "eventSourceType", "syslogMsg", "syslogTag" ]
- },
- "thresholdCrossingAlertFields": {
- "description": "fields specific to threshold crossing alert events",
- "type": "object",
- "properties": {
- "additionalFields": {
- "description": "additional threshold crossing alert fields if needed",
- "type": "array",
- "items": {
- "$ref": "#/definitions/field"
- }
- },
- "additionalParameters": {
- "description": "performance counters",
- "type": "array",
- "items": {
- "$ref": "#/definitions/counter"
- }
- },
- "alertAction": {
- "description": "Event action",
- "type": "string",
- "enum": [
- "CLEAR",
- "CONT",
- "SET"
- ]
- },
- "alertDescription": {
- "description": "Unique short alert description such as IF-SHUB-ERRDROP",
- "type": "string"
- },
- "alertType": {
- "description": "Event type",
- "type": "string",
- "enum": [
- "CARD-ANOMALY",
- "ELEMENT-ANOMALY",
- "INTERFACE-ANOMALY",
- "SERVICE-ANOMALY"
- ]
- },
- "alertValue": {
- "description": "Calculated API value (if applicable)",
- "type": "string"
- },
- "associatedAlertIdList": {
- "description": "List of eventIds associated with the event being reported",
- "type": "array",
- "items": { "type": "string" }
- },
- "collectionTimestamp": {
- "description": "Time when the performance collector picked up the data; with RFC 2822 compliant format: Sat, 13 Mar 2010 11:29:05 -0800",
- "type": "string"
- },
- "dataCollector": {
- "description": "Specific performance collector instance used",
- "type": "string"
- },
- "elementType": {
- "description": "type of network element - internal ATT field",
- "type": "string"
- },
- "eventSeverity": {
- "description": "event severity or priority",
- "type": "string",
- "enum": [
- "CRITICAL",
- "MAJOR",
- "MINOR",
- "WARNING",
- "NORMAL"
- ]
- },
- "eventStartTimestamp": {
- "description": "Time closest to when the measurement was made; with RFC 2822 compliant format: Sat, 13 Mar 2010 11:29:05 -0800",
- "type": "string"
- },
- "interfaceName": {
- "description": "Physical or logical port or card (if applicable)",
- "type": "string"
- },
- "networkService": {
- "description": "network name - internal ATT field",
- "type": "string"
- },
- "possibleRootCause": {
- "description": "Reserved for future use",
- "type": "string"
- },
- "thresholdCrossingFieldsVersion": {
- "description": "version of the thresholdCrossingAlertFields block",
- "type": "number"
- }
- },
- "required": [
- "additionalParameters",
- "alertAction",
- "alertDescription",
- "alertType",
- "collectionTimestamp",
- "eventSeverity",
- "eventStartTimestamp"
- ]
- },
- "vNicUsage": {
- "description": "usage of identified virtual network interface card",
- "type": "object",
- "properties": {
- "broadcastPacketsIn": { "type": "number" },
- "broadcastPacketsOut": { "type": "number" },
- "bytesIn": { "type": "number" },
- "bytesOut": { "type": "number" },
- "multicastPacketsIn": { "type": "number" },
- "multicastPacketsOut": { "type": "number" },
- "packetsIn": { "type": "number" },
- "packetsOut": { "type": "number" },
- "unicastPacketsIn": { "type": "number" },
- "unicastPacketsOut": { "type": "number" },
- "vNicIdentifier": { "type": "string" }
- },
- "required": [ "bytesIn", "bytesOut", "packetsIn", "packetsOut", "vNicIdentifier"]
- }
- },
- "title": "Event Listener",
- "type": "object",
- "properties": {
- "event": {"$ref": "#/definitions/event"}
- }
- }
-
-}
\ No newline at end of file +{ + "self": { + "name": "VES_specification", + "version": "4.27.2", + "description": "VES spec from v4.1 and 27.2 spec" + + }, + "dataformatversion": "1.0.0", + "jsonschema": + { + "$schema": "http://json-schema.org/draft-04/schema#", + + "definitions": { + "attCopyrightNotice": { + "description": "Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.", + "type": "object", + "properties": { + "useAndRedistribution": { + "description": "Unless otherwise specified, all software contained herein is licensed under the Apache License, Version 2.0 (the License); you may not use this file except in compliance with the License.You may obtain a copy of the License at", + "type": "string" + }, + "licenseLink": "http://www.apache.org/licenses/LICENSE-2.0", + "condition1": { + "description": "Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an AS IS BASIS,", + "type": "string" + }, + "condition2": { + "description": "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.", + "type": "string" + }, + "condition3": { + "description": "See the License for the specific language governing permissions and limitations under the License.", + "type": "string" + }, + "Trademarks": { + "description": "ECOMP is a trademark and service mark of AT&T Intellectual Property.", + "type": "string" + } + } + }, + "codecsInUse": { + "description": "number of times an identified codec was used over the measurementInterval", + "type": "object", + "properties": { + "codecIdentifier": { "type": "string" }, + "numberInUse": { "type": "number" } + }, + "required": [ "codecIdentifier", "numberInUse" ] + }, + "command": { + "description": "command from an event collector toward an event source", + "type": "object", + "properties": { + "commandType": { + "type": "string", + "enum": [ + "heartbeatIntervalChange", + "measurementIntervalChange", + "provideThrottlingState", + "throttlingSpecification" + ] + }, + "eventDomainThrottleSpecification": { "$ref": "#/definitions/eventDomainThrottleSpecification" }, + "measurementInterval": { "type": "number" } + }, + "required": [ "commandType" ] + }, + "commandList": { + "description": "array of commands from an event collector toward an event source", + "type": "array", + "items": { + "$ref": "#/definitions/commandListEntry" + }, + "minItems": 0 + }, + "commandListEntry": { + "description": "reference to a command object", + "type": "object", + "properties": { + "command": {"$ref": "#/definitions/command"} + }, + "required": [ "command" ] + }, + "commonEventHeader": { + "description": "fields common to all events", + "type": "object", + "properties": { + "domain": { + "description": "the eventing domain associated with the event", + "type": "string", + "enum": [ + "fault", + "heartbeat", + "measurementsForVfScaling", + "mobileFlow", + "other", + "stateChange", + "syslog", + "thresholdCrossingAlert" + ] + }, + "eventId": { + "description": "event key that is unique to the event source", + "type": "string" + }, + "eventType": { + "description": "unique event topic name", + "type": "string" + }, + "functionalRole": { + "description": "function of the event source e.g., eNodeB, MME, PCRF", + "type": "string" + }, + "internalHeaderFields": { "$ref": "#/definitions/internalHeaderFields" }, + "lastEpochMicrosec": { + "description": "the latest unix time aka epoch time associated with the event from any component--as microseconds elapsed since 1 Jan 1970 not including leap seconds", + "type": "number" + }, + "priority": { + "description": "processing priority", + "type": "string", + "enum": [ + "High", + "Medium", + "Normal", + "Low" + ] + }, + "reportingEntityId": { + "description": "UUID identifying the entity reporting the event, for example an OAM VM; must be populated by the ATT enrichment process", + "type": "string" + }, + "reportingEntityName": { + "description": "name of the entity reporting the event, for example, an OAM VM", + "type": "string" + }, + "sequence": { + "description": "ordering of events communicated by an event source instance or 0 if not needed", + "type": "integer" + }, + "sourceId": { + "description": "UUID identifying the entity experiencing the event issue; must be populated by the ATT enrichment process", + "type": "string" + }, + "sourceName": { + "description": "name of the entity experiencing the event issue", + "type": "string" + }, + "startEpochMicrosec": { + "description": "the earliest unix time aka epoch time associated with the event from any component--as microseconds elapsed since 1 Jan 1970 not including leap seconds", + "type": "number" + }, + "version": { + "description": "version of the event header", + "type": "number" + } + }, + "required": [ "domain", "eventId", "functionalRole", "lastEpochMicrosec", + "priority", "reportingEntityName", "sequence", + "sourceName", "startEpochMicrosec" ] + }, + "counter": { + "description": "performance counter", + "type": "object", + "properties": { + "criticality": { "type": "string", "enum": [ "CRIT", "MAJ" ] }, + "name": { "type": "string" }, + "thresholdCrossed": { "type": "string" }, + "value": { "type": "string"} + }, + "required": [ "criticality", "name", "thresholdCrossed", "value" ] + }, + "cpuUsage": { + "description": "percent usage of an identified CPU", + "type": "object", + "properties": { + "cpuIdentifier": { "type": "string" }, + "percentUsage": { "type": "number" } + }, + "required": [ "cpuIdentifier", "percentUsage" ] + }, + "errors": { + "description": "receive and transmit errors for the measurements domain", + "type": "object", + "properties": { + "receiveDiscards": { "type": "number" }, + "receiveErrors": { "type": "number" }, + "transmitDiscards": { "type": "number" }, + "transmitErrors": { "type": "number" } + }, + "required": [ "receiveDiscards", "receiveErrors", "transmitDiscards", "transmitErrors" ] + }, + "event": { + "description": "the root level of the common event format", + "type": "object", + "properties": { + "commonEventHeader": { "$ref": "#/definitions/commonEventHeader" }, + "faultFields": { "$ref": "#/definitions/faultFields" }, + "measurementsForVfScalingFields": { "$ref": "#/definitions/measurementsForVfScalingFields" }, + "mobileFlowFields": { "$ref": "#/definitions/mobileFlowFields" }, + "otherFields": { "$ref": "#/definitions/otherFields" }, + "stateChangeFields": { "$ref": "#/definitions/stateChangeFields" }, + "syslogFields": { "$ref": "#/definitions/syslogFields" }, + "thresholdCrossingAlertFields": { "$ref": "#/definitions/thresholdCrossingAlertFields" } + }, + "required": [ "commonEventHeader" ] + }, + "eventDomainThrottleSpecification": { + "description": "specification of what information to suppress within an event domain", + "type": "object", + "properties": { + "eventDomain": { + "description": "Event domain enum from the commonEventHeader domain field", + "type": "string" + }, + "suppressedFieldNames": { + "description": "List of optional field names in the event block that should not be sent to the Event Listener", + "type": "array", + "items": { + "type": "string" + } + }, + "suppressedNvPairsList": { + "description": "Optional list of specific NvPairsNames to suppress within a given Name-Value Field", + "type": "array", + "items": { + "$ref": "#/definitions/suppressedNvPairs" + } + } + }, + "required": [ "eventDomain" ] + }, + "eventDomainThrottleSpecificationList": { + "description": "array of eventDomainThrottleSpecifications", + "type": "array", + "items": { + "$ref": "#/definitions/eventDomainThrottleSpecification" + }, + "minItems": 0 + }, + "eventList": { + "description": "array of events", + "type": "array", + "items": { + "$ref": "#/definitions/event" + } + }, + "eventThrottlingState": { + "description": "reports the throttling in force at the event source", + "type": "object", + "properties": { + "eventThrottlingMode": { + "description": "Mode the event manager is in", + "type": "string", + "enum": [ + "normal", + "throttled" + ] + }, + "eventDomainThrottleSpecificationList": { "$ref": "#/definitions/eventDomainThrottleSpecificationList" } + }, + "required": [ "eventThrottlingMode" ] + }, + "faultFields": { + "description": "fields specific to fault events", + "type": "object", + "properties": { + "alarmAdditionalInformation": { + "description": "additional alarm information", + "type": "array", + "items": { + "$ref": "#/definitions/field" + } + }, + "alarmCondition": { + "description": "alarm condition reported by the device", + "type": "string" + }, + "alarmInterfaceA": { + "description": "card, port, channel or interface name of the device generating the alarm", + "type": "string" + }, + "eventSeverity": { + "description": "event severity or priority", + "type": "string", + "enum": [ + "CRITICAL", + "MAJOR", + "MINOR", + "WARNING", + "NORMAL" + ] + }, + "eventSourceType": { + "description": "type of event source; examples: other, router, switch, host, card, port, slotThreshold, portThreshold, virtualMachine, virtualNetworkFunction", + "type": "string" + }, + "faultFieldsVersion": { + "description": "version of the faultFields block", + "type": "number" + }, + "specificProblem": { + "description": "short description of the alarm or problem", + "type": "string" + }, + "vfStatus": { + "description": "virtual function status enumeration", + "type": "string", + "enum": [ + "Active", + "Idle", + "Preparing to terminate", + "Ready to terminate", + "Requesting termination" + ] + } + }, + "required": [ "alarmCondition", "eventSeverity", + "eventSourceType", "specificProblem", "vfStatus" ] + }, + "featuresInUse": { + "description": "number of times an identified feature was used over the measurementInterval", + "type": "object", + "properties": { + "featureIdentifier": { "type": "string" }, + "featureUtilization": { "type": "number" } + }, + "required": [ "featureIdentifier", "featureUtilization" ] + }, + "field": { + "description": "name value pair", + "type": "object", + "properties": { + "name": { "type": "string" }, + "value": { "type": "string" } + }, + "required": [ "name", "value" ] + }, + "filesystemUsage": { + "description": "disk usage of an identified virtual machine in gigabytes and/or gigabytes per second", + "type": "object", + "properties": { + "blockConfigured": { "type": "number" }, + "blockIops": { "type": "number" }, + "blockUsed": { "type": "number" }, + "ephemeralConfigured": { "type": "number" }, + "ephemeralIops": { "type": "number" }, + "ephemeralUsed": { "type": "number" }, + "filesystemName": { "type": "string" } + }, + "required": [ "blockConfigured", "blockIops", "blockUsed", "ephemeralConfigured", + "ephemeralIops", "ephemeralUsed", "filesystemName" ] + }, + "gtpPerFlowMetrics": { + "description": "Mobility GTP Protocol per flow metrics", + "type": "object", + "properties": { + "avgBitErrorRate": { + "description": "average bit error rate", + "type": "number" + }, + "avgPacketDelayVariation": { + "description": "Average packet delay variation or jitter in milliseconds for received packets: Average difference between the packet timestamp and time received for all pairs of consecutive packets", + "type": "number" + }, + "avgPacketLatency": { + "description": "average delivery latency", + "type": "number" + }, + "avgReceiveThroughput": { + "description": "average receive throughput", + "type": "number" + }, + "avgTransmitThroughput": { + "description": "average transmit throughput", + "type": "number" + }, + "durConnectionFailedStatus": { + "description": "duration of failed state in milliseconds, computed as the cumulative time between a failed echo request and the next following successful error request, over this reporting interval", + "type": "number" + }, + "durTunnelFailedStatus": { + "description": "Duration of errored state, computed as the cumulative time between a tunnel error indicator and the next following non-errored indicator, over this reporting interval", + "type": "number" + }, + "flowActivatedBy": { + "description": "Endpoint activating the flow", + "type": "string" + }, + "flowActivationEpoch": { + "description": "Time the connection is activated in the flow (connection) being reported on, or transmission time of the first packet if activation time is not available", + "type": "number" + }, + "flowActivationMicrosec": { + "description": "Integer microseconds for the start of the flow connection", + "type": "number" + }, + "flowActivationTime": { + "description": "time the connection is activated in the flow being reported on, or transmission time of the first packet if activation time is not available; with RFC 2822 compliant format: Sat, 13 Mar 2010 11:29:05 -0800", + "type": "string" + }, + "flowDeactivatedBy": { + "description": "Endpoint deactivating the flow", + "type": "string" + }, + "flowDeactivationEpoch": { + "description": "Time for the start of the flow connection, in integer UTC epoch time aka UNIX time", + "type": "number" + }, + "flowDeactivationMicrosec": { + "description": "Integer microseconds for the start of the flow connection", + "type": "number" + }, + "flowDeactivationTime": { + "description": "Transmission time of the first packet in the flow connection being reported on; with RFC 2822 compliant format: Sat, 13 Mar 2010 11:29:05 -0800", + "type": "string" + }, + "flowStatus": { + "description": "connection status at reporting time as a working / inactive / failed indicator value", + "type": "string" + }, + "gtpConnectionStatus": { + "description": "Current connection state at reporting time", + "type": "string" + }, + "gtpTunnelStatus": { + "description": "Current tunnel state at reporting time", + "type": "string" + }, + "ipTosCountList": { + "description": "array of key: value pairs where the keys are drawn from the IP Type-of-Service identifiers which range from '0' to '255', and the values are the count of packets that had those ToS identifiers in the flow", + "type": "array", + "items": { + "type": "array", + "items": [ + { "type": "string" }, + { "type": "number" } + ] + } + }, + "ipTosList": { + "description": "Array of unique IP Type-of-Service values observed in the flow where values range from '0' to '255'", + "type": "array", + "items": { + "type": "string" + } + }, + "largePacketRtt": { + "description": "large packet round trip time", + "type": "number" + }, + "largePacketThreshold": { + "description": "large packet threshold being applied", + "type": "number" + }, + "maxPacketDelayVariation": { + "description": "Maximum packet delay variation or jitter in milliseconds for received packets: Maximum of the difference between the packet timestamp and time received for all pairs of consecutive packets", + "type": "number" + }, + "maxReceiveBitRate": { + "description": "maximum receive bit rate", + "type": "number" + }, + "maxTransmitBitRate": { + "description": "maximum transmit bit rate", + "type": "number" + }, + "mobileQciCosCountList": { + "description": "array of key: value pairs where the keys are drawn from LTE QCI or UMTS class of service strings, and the values are the count of packets that had those strings in the flow", + "type": "array", + "items": { + "type": "array", + "items": [ + { "type": "string" }, + { "type": "number" } + ] + } + }, + "mobileQciCosList": { + "description": "Array of unique LTE QCI or UMTS class-of-service values observed in the flow", + "type": "array", + "items": { + "type": "string" + } + }, + "numActivationFailures": { + "description": "Number of failed activation requests, as observed by the reporting node", + "type": "number" + }, + "numBitErrors": { + "description": "number of errored bits", + "type": "number" + }, + "numBytesReceived": { + "description": "number of bytes received, including retransmissions", + "type": "number" + }, + "numBytesTransmitted": { + "description": "number of bytes transmitted, including retransmissions", + "type": "number" + }, + "numDroppedPackets": { + "description": "number of received packets dropped due to errors per virtual interface", + "type": "number" + }, + "numGtpEchoFailures": { + "description": "Number of Echo request path failures where failed paths are defined in 3GPP TS 29.281 sec 7.2.1 and 3GPP TS 29.060 sec. 11.2", + "type": "number" + }, + "numGtpTunnelErrors": { + "description": "Number of tunnel error indications where errors are defined in 3GPP TS 29.281 sec 7.3.1 and 3GPP TS 29.060 sec. 11.1", + "type": "number" + }, + "numHttpErrors": { + "description": "Http error count", + "type": "number" + }, + "numL7BytesReceived": { + "description": "number of tunneled layer 7 bytes received, including retransmissions", + "type": "number" + }, + "numL7BytesTransmitted": { + "description": "number of tunneled layer 7 bytes transmitted, excluding retransmissions", + "type": "number" + }, + "numLostPackets": { + "description": "number of lost packets", + "type": "number" + }, + "numOutOfOrderPackets": { + "description": "number of out-of-order packets", + "type": "number" + }, + "numPacketErrors": { + "description": "number of errored packets", + "type": "number" + }, + "numPacketsReceivedExclRetrans": { + "description": "number of packets received, excluding retransmission", + "type": "number" + }, + "numPacketsReceivedInclRetrans": { + "description": "number of packets received, including retransmission", + "type": "number" + }, + "numPacketsTransmittedInclRetrans": { + "description": "number of packets transmitted, including retransmissions", + "type": "number" + }, + "numRetries": { + "description": "number of packet retries", + "type": "number" + }, + "numTimeouts": { + "description": "number of packet timeouts", + "type": "number" + }, + "numTunneledL7BytesReceived": { + "description": "number of tunneled layer 7 bytes received, excluding retransmissions", + "type": "number" + }, + "roundTripTime": { + "description": "round trip time", + "type": "number" + }, + "tcpFlagCountList": { + "description": "array of key: value pairs where the keys are drawn from TCP Flags and the values are the count of packets that had that TCP Flag in the flow", + "type": "array", + "items": { + "type": "array", + "items": [ + { "type": "string" }, + { "type": "number" } + ] + } + }, + "tcpFlagList": { + "description": "Array of unique TCP Flags observed in the flow", + "type": "array", + "items": { + "type": "string" + } + }, + "timeToFirstByte": { + "description": "Time in milliseconds between the connection activation and first byte received", + "type": "number" + } + }, + "required": [ "avgBitErrorRate", "avgPacketDelayVariation", "avgPacketLatency", + "avgReceiveThroughput", "avgTransmitThroughput", + "flowActivationEpoch", "flowActivationMicrosec", + "flowDeactivationEpoch", "flowDeactivationMicrosec", + "flowDeactivationTime", "flowStatus", + "maxPacketDelayVariation", "numActivationFailures", + "numBitErrors", "numBytesReceived", "numBytesTransmitted", + "numDroppedPackets", "numL7BytesReceived", + "numL7BytesTransmitted", "numLostPackets", + "numOutOfOrderPackets", "numPacketErrors", + "numPacketsReceivedExclRetrans", + "numPacketsReceivedInclRetrans", + "numPacketsTransmittedInclRetrans", + "numRetries", "numTimeouts", "numTunneledL7BytesReceived", + "roundTripTime", "timeToFirstByte" + ] + }, + "internalHeaderFields": { + "description": "enrichment fields for internal VES Event Listener service use only, not supplied by event sources", + "type": "object" + }, + "latencyBucketMeasure": { + "description": "number of counts falling within a defined latency bucket", + "type": "object", + "properties": { + "countsInTheBucket": { "type": "number" }, + "highEndOfLatencyBucket": { "type": "number" }, + "lowEndOfLatencyBucket": { "type": "number" } + }, + "required": [ "countsInTheBucket" ] + }, + "measurementGroup": { + "description": "measurement group", + "type": "object", + "properties": { + "name": { "type": "string" }, + "measurements": { + "description": "array of name value pair measurements", + "type": "array", + "items": { + "$ref": "#/definitions/field" + } + } + }, + "required": [ "name", "measurements" ] + }, + "measurementsForVfScalingFields": { + "description": "measurementsForVfScaling fields", + "type": "object", + "properties": { + "additionalMeasurements": { + "description": "additional measurement fields", + "type": "array", + "items": { + "$ref": "#/definitions/measurementGroup" + } + }, + "aggregateCpuUsage": { + "description": "aggregate CPU usage of the VM on which the VNFC reporting the event is running", + "type": "number" + }, + "codecUsageArray": { + "description": "array of codecs in use", + "type": "array", + "items": { + "$ref": "#/definitions/codecsInUse" + } + }, + "concurrentSessions": { + "description": "peak concurrent sessions for the VM or VNF over the measurementInterval", + "type": "number" + }, + "configuredEntities": { + "description": "over the measurementInterval, peak total number of: users, subscribers, devices, adjacencies, etc., for the VM, or subscribers, devices, etc., for the VNF", + "type": "number" + }, + "cpuUsageArray": { + "description": "usage of an array of CPUs", + "type": "array", + "items": { + "$ref": "#/definitions/cpuUsage" + } + }, + "errors": { "$ref": "#/definitions/errors" }, + "featureUsageArray": { + "description": "array of features in use", + "type": "array", + "items": { + "$ref": "#/definitions/featuresInUse" + } + }, + "filesystemUsageArray": { + "description": "filesystem usage of the VM on which the VNFC reporting the event is running", + "type": "array", + "items": { + "$ref": "#/definitions/filesystemUsage" + } + }, + "latencyDistribution": { + "description": "array of integers representing counts of requests whose latency in milliseconds falls within per-VNF configured ranges", + "type": "array", + "items": { + "$ref": "#/definitions/latencyBucketMeasure" + } + }, + "meanRequestLatency": { + "description": "mean seconds required to respond to each request for the VM on which the VNFC reporting the event is running", + "type": "number" + }, + "measurementInterval": { + "description": "interval over which measurements are being reported in seconds", + "type": "number" + }, + "measurementsForVfScalingVersion": { + "description": "version of the measurementsForVfScaling block", + "type": "number" + }, + "memoryConfigured": { + "description": "memory in MB configured in the VM on which the VNFC reporting the event is running", + "type": "number" + }, + "memoryUsed": { + "description": "memory usage in MB of the VM on which the VNFC reporting the event is running", + "type": "number" + }, + "numberOfMediaPortsInUse": { + "description": "number of media ports in use", + "type": "number" + }, + "requestRate": { + "description": "peak rate of service requests per second to the VNF over the measurementInterval", + "type": "number" + }, + "vnfcScalingMetric": { + "description": "represents busy-ness of the VNF from 0 to 100 as reported by the VNFC", + "type": "number" + }, + "vNicUsageArray": { + "description": "usage of an array of virtual network interface cards", + "type": "array", + "items": { + "$ref": "#/definitions/vNicUsage" + } + } + }, + "required": [ "measurementInterval" ] + }, + "mobileFlowFields": { + "description": "mobileFlow fields", + "type": "object", + "properties": { + "additionalFields": { + "description": "additional mobileFlow fields if needed", + "type": "array", + "items": { + "$ref": "#/definitions/field" + } + }, + "applicationType": { + "description": "Application type inferred", + "type": "string" + }, + "appProtocolType": { + "description": "application protocol", + "type": "string" + }, + "appProtocolVersion": { + "description": "application protocol version", + "type": "string" + }, + "cid": { + "description": "cell id", + "type": "string" + }, + "connectionType": { + "description": "Abbreviation referencing a 3GPP reference point e.g., S1-U, S11, etc", + "type": "string" + }, + "ecgi": { + "description": "Evolved Cell Global Id", + "type": "string" + }, + "flowDirection": { + "description": "Flow direction, indicating if the reporting node is the source of the flow or destination for the flow", + "type": "string" + }, + "gtpPerFlowMetrics": { "$ref": "#/definitions/gtpPerFlowMetrics" }, + "gtpProtocolType": { + "description": "GTP protocol", + "type": "string" + }, + "gtpVersion": { + "description": "GTP protocol version", + "type": "string" + }, + "httpHeader": { + "description": "HTTP request header, if the flow connects to a node referenced by HTTP", + "type": "string" + }, + "imei": { + "description": "IMEI for the subscriber UE used in this flow, if the flow connects to a mobile device", + "type": "string" + }, + "imsi": { + "description": "IMSI for the subscriber UE used in this flow, if the flow connects to a mobile device", + "type": "string" + }, + "ipProtocolType": { + "description": "IP protocol type e.g., TCP, UDP, RTP...", + "type": "string" + }, + "ipVersion": { + "description": "IP protocol version e.g., IPv4, IPv6", + "type": "string" + }, + "lac": { + "description": "location area code", + "type": "string" + }, + "mcc": { + "description": "mobile country code", + "type": "string" + }, + "mnc": { + "description": "mobile network code", + "type": "string" + }, + "mobileFlowFieldsVersion": { + "description": "version of the mobileFlowFields block", + "type": "number" + }, + "msisdn": { + "description": "MSISDN for the subscriber UE used in this flow, as an integer, if the flow connects to a mobile device", + "type": "string" + }, + "otherEndpointIpAddress": { + "description": "IP address for the other endpoint, as used for the flow being reported on", + "type": "string" + }, + "otherEndpointPort": { + "description": "IP Port for the reporting entity, as used for the flow being reported on", + "type": "number" + }, + "otherFunctionalRole": { + "description": "Functional role of the other endpoint for the flow being reported on e.g., MME, S-GW, P-GW, PCRF...", + "type": "string" + }, + "rac": { + "description": "routing area code", + "type": "string" + }, + "radioAccessTechnology": { + "description": "Radio Access Technology e.g., 2G, 3G, LTE", + "type": "string" + }, + "reportingEndpointIpAddr": { + "description": "IP address for the reporting entity, as used for the flow being reported on", + "type": "string" + }, + "reportingEndpointPort": { + "description": "IP port for the reporting entity, as used for the flow being reported on", + "type": "number" + }, + "sac": { + "description": "service area code", + "type": "string" + }, + "samplingAlgorithm": { + "description": "Integer identifier for the sampling algorithm or rule being applied in calculating the flow metrics if metrics are calculated based on a sample of packets, or 0 if no sampling is applied", + "type": "number" + }, + "tac": { + "description": "transport area code", + "type": "string" + }, + "tunnelId": { + "description": "tunnel identifier", + "type": "string" + }, + "vlanId": { + "description": "VLAN identifier used by this flow", + "type": "string" + } + }, + "required": [ "flowDirection", "gtpPerFlowMetrics", "ipProtocolType", + "ipVersion", "otherEndpointIpAddress", "otherEndpointPort", + "reportingEndpointIpAddr", "reportingEndpointPort" ] + }, + "otherFields": { + "description": "additional fields not reported elsewhere", + "type": "array", + "items": { + "$ref": "#/definitions/field" + } + }, + "requestError": { + "description": "standard request error data structure", + "type": "object", + "properties": { + "messageId": { + "description": "Unique message identifier of the format ABCnnnn where ABC is either SVC for Service Exceptions or POL for Policy Exception", + "type": "string" + }, + "text": { + "description": "Message text, with replacement variables marked with %n, where n is an index into the list of <variables> elements, starting at 1", + "type": "string" + }, + "url": { + "description": "Hyperlink to a detailed error resource e.g., an HTML page for browser user agents", + "type": "string" + }, + "variables": { + "description": "List of zero or more strings that represent the contents of the variables used by the message text", + "type": "string" + } + }, + "required": [ "messageId", "text" ] + }, + "stateChangeFields": { + "description": "stateChange fields", + "type": "object", + "properties": { + "additionalFields": { + "description": "additional stateChange fields if needed", + "type": "array", + "items": { + "$ref": "#/definitions/field" + } + }, + "newState": { + "description": "new state of the entity", + "type": "string", + "enum": [ + "inService", + "maintenance", + "outOfService" + ] + }, + "oldState": { + "description": "previous state of the entity", + "type": "string", + "enum": [ + "inService", + "maintenance", + "outOfService" + ] + }, + "stateChangeFieldsVersion": { + "description": "version of the stateChangeFields block", + "type": "number" + }, + "stateInterface": { + "description": "card or port name of the entity that changed state", + "type": "string" + } + }, + "required": [ "newState", "oldState", "stateInterface" ] + }, + "suppressedNvPairs": { + "description": "List of specific NvPairsNames to suppress within a given Name-Value Field for event Throttling", + "type": "object", + "properties": { + "nvPairFieldName": { + "description": "Name of the field within which are the nvpair names to suppress", + "type": "string" + }, + "suppressedNvPairNames": { + "description": "Array of nvpair names to suppress within the nvpairFieldName", + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ "nvPairFieldName", "suppressedNvPairNames" ] + }, + "syslogFields": { + "description": "sysLog fields", + "type": "object", + "properties": { + "additionalFields": { + "description": "additional syslog fields if needed", + "type": "array", + "items": { + "$ref": "#/definitions/field" + } + }, + "eventSourceHost": { + "description": "hostname of the device", + "type": "string" + }, + "eventSourceType": { + "description": "type of event source; examples: other, router, switch, host, card, port, slotThreshold, portThreshold, virtualMachine, virtualNetworkFunction", + "type": "string" + }, + "syslogFacility": { + "description": "numeric code from 0 to 23 for facility--see table in documentation", + "type": "number" + }, + "syslogFieldsVersion": { + "description": "version of the syslogFields block", + "type": "number" + }, + "syslogMsg": { + "description": "syslog message", + "type": "string" + }, + "syslogPri": { + "description": "0-192 combined severity and facility", + "type": "number" + }, + "syslogProc": { + "description": "identifies the application that originated the message", + "type": "string" + }, + "syslogProcId": { + "description": "a change in the value of this field indicates a discontinuity in syslog reporting", + "type": "number" + }, + "syslogSData": { + "description": "syslog structured data consisting of a structured data Id followed by a set of key value pairs", + "type": "string" + }, + "syslogSdId": { + "description": "0-32 char in format name@number for example ourSDID@32473", + "type": "string" + }, + "syslogSev": { + "description": "numerical Code for severity derived from syslogPri as remaider of syslogPri / 8", + "type": "string" + }, + "syslogTag": { + "description": "msgId indicating the type of message such as TCPOUT or TCPIN; NILVALUE should be used when no other value can be provided", + "type": "string" + }, + "syslogVer": { + "description": "IANA assigned version of the syslog protocol specification - typically 1", + "type": "number" + } + }, + "required": [ "eventSourceType", "syslogMsg", "syslogTag" ] + }, + "thresholdCrossingAlertFields": { + "description": "fields specific to threshold crossing alert events", + "type": "object", + "properties": { + "additionalFields": { + "description": "additional threshold crossing alert fields if needed", + "type": "array", + "items": { + "$ref": "#/definitions/field" + } + }, + "additionalParameters": { + "description": "performance counters", + "type": "array", + "items": { + "$ref": "#/definitions/counter" + } + }, + "alertAction": { + "description": "Event action", + "type": "string", + "enum": [ + "CLEAR", + "CONT", + "SET" + ] + }, + "alertDescription": { + "description": "Unique short alert description such as IF-SHUB-ERRDROP", + "type": "string" + }, + "alertType": { + "description": "Event type", + "type": "string", + "enum": [ + "CARD-ANOMALY", + "ELEMENT-ANOMALY", + "INTERFACE-ANOMALY", + "SERVICE-ANOMALY" + ] + }, + "alertValue": { + "description": "Calculated API value (if applicable)", + "type": "string" + }, + "associatedAlertIdList": { + "description": "List of eventIds associated with the event being reported", + "type": "array", + "items": { "type": "string" } + }, + "collectionTimestamp": { + "description": "Time when the performance collector picked up the data; with RFC 2822 compliant format: Sat, 13 Mar 2010 11:29:05 -0800", + "type": "string" + }, + "dataCollector": { + "description": "Specific performance collector instance used", + "type": "string" + }, + "elementType": { + "description": "type of network element - internal ATT field", + "type": "string" + }, + "eventSeverity": { + "description": "event severity or priority", + "type": "string", + "enum": [ + "CRITICAL", + "MAJOR", + "MINOR", + "WARNING", + "NORMAL" + ] + }, + "eventStartTimestamp": { + "description": "Time closest to when the measurement was made; with RFC 2822 compliant format: Sat, 13 Mar 2010 11:29:05 -0800", + "type": "string" + }, + "interfaceName": { + "description": "Physical or logical port or card (if applicable)", + "type": "string" + }, + "networkService": { + "description": "network name - internal ATT field", + "type": "string" + }, + "possibleRootCause": { + "description": "Reserved for future use", + "type": "string" + }, + "thresholdCrossingFieldsVersion": { + "description": "version of the thresholdCrossingAlertFields block", + "type": "number" + } + }, + "required": [ + "additionalParameters", + "alertAction", + "alertDescription", + "alertType", + "collectionTimestamp", + "eventSeverity", + "eventStartTimestamp" + ] + }, + "vNicUsage": { + "description": "usage of identified virtual network interface card", + "type": "object", + "properties": { + "broadcastPacketsIn": { "type": "number" }, + "broadcastPacketsOut": { "type": "number" }, + "bytesIn": { "type": "number" }, + "bytesOut": { "type": "number" }, + "multicastPacketsIn": { "type": "number" }, + "multicastPacketsOut": { "type": "number" }, + "packetsIn": { "type": "number" }, + "packetsOut": { "type": "number" }, + "unicastPacketsIn": { "type": "number" }, + "unicastPacketsOut": { "type": "number" }, + "vNicIdentifier": { "type": "string" } + }, + "required": [ "bytesIn", "bytesOut", "packetsIn", "packetsOut", "vNicIdentifier"] + } + }, + "title": "Event Listener", + "type": "object", + "properties": { + "event": {"$ref": "#/definitions/event"} + } + } + +} diff --git a/test/csit/tests/dcaegen2/testcases/resources/collector.properties b/test/csit/tests/dcaegen2/testcases/resources/collector.properties new file mode 100755 index 000000000..1c5c8411e --- /dev/null +++ b/test/csit/tests/dcaegen2/testcases/resources/collector.properties @@ -0,0 +1,74 @@ +############################################################################### +## +## Collector Server config +## +## - Default values are shown as commented settings. +## +############################################################################### +## +## HTTP(S) service +## +## Normally: +## +## - 8080 is http service +## - https is disabled by default (-1) +## +## - At this time, the server always binds to 0.0.0.0 +## +## The default port when header.authflag is disabled (0) +#collector.service.port=8080 + +## The secure port is required if header.authflag is set to 1 (true) +## Authentication is only supported via secure port +## When enabled - require valid keystore defined +collector.service.secure.port=8443 + +## The keystore must be setup per installation when secure port is configured +collector.keystore.file.location=../etc/keystore +collector.keystore.passwordfile=./etc/passwordfile +collector.keystore.alias=tomcat + + +############################################################################### +## Processing +## +## If there's a problem that prevents the collector from processing alarms, +## it's normally better to apply back pressure to the caller than to try to +## buffer beyond a reasonable size limit. With a limit, the server won't crash +## due to being out of memory, and the caller will get a 5xx reply saying the +## server is in trouble. +collector.inputQueue.maxPending=8096 + +## Schema Validation checkflag +## default no validation checkflag (-1) +## If enabled (1) - schemafile location must be specified +collector.schema.checkflag=1 +collector.schema.file={\"v1\":\"./etc/CommonEventFormat_27.2.json\",\"v2\":\"./etc/CommonEventFormat_27.2.json\",\"v3\":\"./etc/CommonEventFormat_27.2.json\",\"v4\":\"./etc/CommonEventFormat_27.2.json\",\"v5\":\"./etc/CommonEventFormat_28.3.json\"} + +## List all streamid per domain to be supported. The streamid should match to channel name on dmaapfile +collector.dmaap.streamid=fault=sec_fault|syslog=sec_syslog|heartbeat=sec_heartbeat|measurementsForVfScaling=sec_measurement|mobileFlow=sec_mobileflow|other=sec_other|stateChange=sec_statechange|thresholdCrossingAlert=sec_thresholdCrossingAlert|voiceQuality=ves_voicequality|sipSignaling=ves_sipsignaling +collector.dmaapfile=./etc/DmaapConfig.json + +## Custom ExceptionConfiguration +exceptionConfig=./etc/ExceptionConfig.json + +## authflag control authentication by the collector +## If enabled (1) - then authlist has to be defined +## When authflag is enabled, only secure port will be supported +## To disable enter 0 +header.authflag=1 +## Combination of userid,base64 encoded pwd list to be supported +## userid and pwd comma separated; pipe delimitation between each pair +header.authlist=sample1,c2FtcGxlMQ==|vdnsagg,dmRuc2FnZw== + +## Event transformation Flag - when set expects configurable transformation +## defined under ./etc/eventTransform.json +## Enabled by default; to disable set to 0 +event.transform.flag=0 + +############################################################################### +## +## Tomcat control +## +#tomcat.maxthreads=(tomcat default, which is usually 200) + diff --git a/test/csit/tests/dcaegen2/testcases/resources/dcae_keywords.robot b/test/csit/tests/dcaegen2/testcases/resources/dcae_keywords.robot index a30a1ba01..59d44e158 100644 --- a/test/csit/tests/dcaegen2/testcases/resources/dcae_keywords.robot +++ b/test/csit/tests/dcaegen2/testcases/resources/dcae_keywords.robot @@ -1,16 +1,13 @@ *** Settings ***
Documentation The main interface for interacting with DCAE. It handles low level stuff like managing the http request library and DCAE required fields
Library RequestsLibrary
-Library DcaeLibrary.py
+Library DcaeLibrary
Library OperatingSystem
Library Collections
Variables ../resources/DcaeVariables.py
Resource ../resources/dcae_properties.robot
-
-
*** Variables ***
${DCAE_HEALTH_CHECK_BODY} %{WORKSPACE}/test/csit/tests/dcae/testcases/assets/json_events/dcae_healthcheck.json
-
*** Keywords ***
Get DCAE Nodes
[Documentation] Get DCAE Nodes from Consul Catalog
@@ -26,8 +23,6 @@ Get DCAE Nodes ${len}= Get Length ${NodeList}
Should Not Be Equal As Integers ${len} 0
[return] ${NodeList}
-
-
DCAE Node Health Check
[Documentation] Perform DCAE Node Health Check
[Arguments] ${NodeName}
@@ -43,76 +38,58 @@ DCAE Node Health Check Should Not Be Equal As Integers ${len} 0
DCAE Check Health Status ${NodeName} ${StatusList[0]} Serf Health Status
#Run Keyword if ${len} > 1 DCAE Check Health Status ${NodeName} ${StatusList[1]} Serf Health Status
-
-
DCAE Check Health Status
[Arguments] ${NodeName} ${ItemStatus} ${CheckType}
Should Be Equal As Strings ${ItemStatus} passing
Log Node: ${NodeName} ${CheckType} check pass ok
-
VES Collector Suite Setup DMaaP
[Documentation] Start DMaaP Mockup Server
${ret}= Setup DMaaP Server
Should Be Equal As Strings ${ret} true
-
VES Collector Suite Shutdown DMaaP
[Documentation] Shutdown DMaaP Mockup Server
${ret}= Shutdown DMaap
Should Be Equal As Strings ${ret} true
-
-
-
-
Check DCAE Results
[Documentation] Parse DCAE JSON response and make sure all rows have healthTestStatus=GREEN
[Arguments] ${json}
@{rows}= Get From Dictionary ${json['returns']} rows
@{headers}= Get From Dictionary ${json['returns']} columns
-
# Retrieve column names from headers
${columns}= Create List
:for ${header} in @{headers}
- \ ${colName}= Get From Dictionary ${header} colName
+ \ ${colName}= Get From Dictionary ${header} colName
\ Append To List ${columns} ${colName}
-
- # Process each row making sure status=GREEN
+ # Process each row making sure status=GREEN
:for ${row} in @{rows}
\ ${cells}= Get From Dictionary ${row} cells
- \ ${dict}= Make A Dictionary ${cells} ${columns}
+ \ ${dict}= Make A Dictionary ${cells} ${columns}
\ Dictionary Should Contain Item ${dict} healthTestStatus GREEN
-
-
Make A Dictionary
[Documentation] Given a list of column names and a list of dictionaries, map columname=value
[Arguments] ${columns} ${names} ${valuename}=value
${dict}= Create Dictionary
- ${collength}= Get Length ${columns}
- ${namelength}= Get Length ${names}
+ ${collength}= Get Length ${columns}
+ ${namelength}= Get Length ${names}
:for ${index} in range 0 ${collength}
\ ${name}= Evaluate ${names}[${index}]
\ ${valued}= Evaluate ${columns}[${index}]
\ ${value}= Get From Dictionary ${valued} ${valueName}
\ Set To Dictionary ${dict} ${name} ${value}
[Return] ${dict}
-
-
Get Event Data From File
[Arguments] ${jsonfile}
${data}= OperatingSystem.Get File ${jsonfile}
#Should Not Be_Equal ${data} None
[return] ${data}
-
Json String To Dictionary
[Arguments] ${json_string}
${json_dict}= evaluate json.loads('''${json_string}''') json
[return] ${json_dict}
-
Dictionary To Json String
[Arguments] ${json_dict}
${json_string}= evaluate json.dumps(${json_dict}) json
[return] ${json_string}
-
-
Get DCAE Service Component Status
[Documentation] Get the status of a DCAE Service Component
[Arguments] ${url} ${urlpath} ${usr} ${passwd}
@@ -120,26 +97,23 @@ Get DCAE Service Component Status ${session}= Create Session dcae-service-component ${url} auth=${auth}
${resp}= Get Request dcae-service-component ${urlpath}
[return] ${resp}
-
Publish Event To VES Collector No Auth
[Documentation] Send an event to VES Collector
[Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata}
Log Creating session ${url}
- ${session}= Create Session dcae-d1 ${url}
- ${resp}= Post Request dcae-d1 ${evtpath} data=${evtdata} headers=${httpheaders}
+ ${session}= Create Session dcaegen2-d1 ${url}
+ ${resp}= Post Request dcaegen2-d1 ${evtpath} data=${evtdata} headers=${httpheaders}
#Log Received response from dcae ${resp.json()}
[return] ${resp}
-
Publish Event To VES Collector
[Documentation] Send an event to VES Collector
[Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} ${user} ${pd}
${auth}= Create List ${user} ${pd}
Log Creating session ${url}
- ${session}= Create Session dcae-d1 ${url} auth=${auth}
- ${resp}= Post Request dcae-d1 ${evtpath} data=${evtdata} headers=${httpheaders}
+ ${session}= Create Session dcaegen2-d1 ${url} auth=${auth} disable_warnings=1
+ ${resp}= Post Request dcaegen2-d1 ${evtpath} data=${evtdata} headers=${httpheaders}
#Log Received response from dcae ${resp.json()}
[return] ${resp}
-
Publish Event To VES Collector With Put Method
[Documentation] Send an event to VES Collector
[Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} ${user} ${pd}
@@ -149,7 +123,6 @@ Publish Event To VES Collector With Put Method ${resp}= Put Request dcae-d1 ${evtpath} data=${evtdata} headers=${httpheaders}
#Log Received response from dcae ${resp.json()}
[return] ${resp}
-
Publish Event To VES Collector With Put Method No Auth
[Documentation] Send an event to VES Collector
[Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata}
@@ -158,4 +131,3 @@ Publish Event To VES Collector With Put Method No Auth ${resp}= Put Request dcae-d1 ${evtpath} data=${evtdata} headers=${httpheaders}
#Log Received response from dcae ${resp.json()}
[return] ${resp}
-
\ No newline at end of file diff --git a/test/csit/tests/dcaegen2/testcases/resources/dcae_properties.robot b/test/csit/tests/dcaegen2/testcases/resources/dcae_properties.robot index be182d4aa..be072d73c 100644 --- a/test/csit/tests/dcaegen2/testcases/resources/dcae_properties.robot +++ b/test/csit/tests/dcaegen2/testcases/resources/dcae_properties.robot @@ -5,9 +5,11 @@ Documentation store all properties that can change or are used in multipl *** Variables ***
-${GLOBAL_APPLICATION_ID} robot-dcae
-${GLOBAL_DCAE_CONSUL_URL} http://135.205.228.129:8500
-${GLOBAL_DCAE_CONSUL_URL1} http://135.205.228.170:8500
+${GLOBAL_APPLICATION_ID} robot-dcaegen2
+${GLOBAL_DCAE_CONSUL_URL} http://135.205.228.129:8500
+${GLOBAL_DCAE_CONSUL_URL1} http://135.205.228.170:8500
${GLOBAL_DCAE_VES_URL} http://localhost:8443/eventlistener/v5
${GLOBAL_DCAE_USERNAME} console
${GLOBAL_DCAE_PASSWORD} ZjJkYjllMjljMTI2M2Iz
+${VESC_HTTPS_USER} sample1
+${VESC_HTTPS_PD} sample1
diff --git a/test/csit/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh b/test/csit/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh new file mode 100755 index 000000000..12989911b --- /dev/null +++ b/test/csit/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# +# Copyright 2016-2017 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +docker exec -it vesc /opt/app/VESCollector/bin/VESrestfulCollector.sh stop +sleep 2 +docker cp ${WORKSPACE}/test/csit/tests/dcaegen2/testcases/resources/collector.properties vesc:/opt/app/VESCollector/etc +sleep 10 +docker exec -id vesc /opt/app/VESCollector/bin/VESrestfulCollector.sh start +sleep 5 +echo "VES Collector Restarted" diff --git a/test/csit/tests/holmes/testcase/EngineMgt/Engine-Mgt.robot b/test/csit/tests/holmes/testcase/EngineMgt/Engine-Mgt.robot index 52c6822fc..b84dff285 100644 --- a/test/csit/tests/holmes/testcase/EngineMgt/Engine-Mgt.robot +++ b/test/csit/tests/holmes/testcase/EngineMgt/Engine-Mgt.robot @@ -28,7 +28,7 @@ deploy_invalid_rule deploy_valid_rule [Documentation] Add a rule with valid contents to the engine. - ${dic4} create dictionary content=package rule03080002 engineid="" + ${dic4} create dictionary content=package rule03080002 engineid="" loopcontrolname=test ${Jsonparam} encode ${dic4} ${response} deployEngineRule ${Jsonparam} diff --git a/test/csit/tests/holmes/testcase/RuleMgt/Rule-Mgt.robot b/test/csit/tests/holmes/testcase/RuleMgt/Rule-Mgt.robot index ad2a540fd..bccb0f72d 100644 --- a/test/csit/tests/holmes/testcase/RuleMgt/Rule-Mgt.robot +++ b/test/csit/tests/holmes/testcase/RuleMgt/Rule-Mgt.robot @@ -8,7 +8,7 @@ Resource Rule-Keywords.robot *** Test Cases *** add_valid_rule [Documentation] Add a valid rule. - ${dict2} create dictionary rulename=youbowu0314 description=create a new rule! content=package rule03140002 enabled=1 + ${dict2} create dictionary rulename=youbowu0314 description=create a new rule! content=package rule03140002 enabled=1 loopcontrolname=closedControlLoop ${jsonParams} encode ${dict2} ${response} createRule ${jsonParams} ${respJson} to json ${response.content} @@ -86,19 +86,19 @@ query_rule_with_combinational_fields ${response} queryConditionRule ${paramJson} ${respJson} to json ${response.content} ${count} get from dictionary ${respJson} totalcount - run keyword if ${count}<1 fail Can't find the rules with the combination of different fields. - ... ELSE traversalRuleAttribute ${respJson} ${dic} + run keyword if ${count}<1 fail Can't find the rules with the combination of different fields. ELSE traversalRuleAttribute ${respJson} + ... ${dic} modify_rule_with_status [Documentation] modify the rule with a valid status. - ${dic} create dictionary ruleid=${RULEID} enabled=0 content=package rule03140002 + ${dic} create dictionary ruleid=${RULEID} enabled=0 content=package rule03140002 loopcontrolname=closedControlLoop ${modifyParam} encode ${dic} ${modifyResp} modifyRule ${modifyParam} ${response} queryConditionRule {"ruleid":"${RULEID}"} ${respJson} to json ${response.content} ${count} get from dictionary ${respJson} totalcount - run keyword if ${count}!=1 fail query rule fails! (can't find the rule modified!) - ... ELSE traversalRuleAttribute ${respJson} ${dic} + run keyword if ${count}!=1 fail query rule fails! (can't find the rule modified!) ELSE traversalRuleAttribute ${respJson} + ... ${dic} modify_rule_with_invalid_status [Documentation] modify the rule with an invalid status. @@ -108,14 +108,14 @@ modify_rule_with_invalid_status modify_rule_with_description [Documentation] modify the description of the rule with the new string. - ${dic} create dictionary ruleid=${RULEID} description=now, i modifying the description of the rule. content=package rule03140002 + ${dic} create dictionary ruleid=${RULEID} description=now, i modifying the description of the rule. content=package rule03140002 loopcontrolname=closedControlLoop ${modifyParam} encode ${dic} ${modifyResp} modifyRule ${modifyParam} ${response} queryConditionRule {"ruleid":"${RULEID}"} 1 ${respJson} to json ${response.content} ${count} get from dictionary ${respJson} totalcount - run keyword if ${count}!=1 fail query rule fails! - ... ELSE traversalRuleAttribute ${respJson} ${dic} + run keyword if ${count}!=1 fail query rule fails! ELSE traversalRuleAttribute ${respJson} + ... ${dic} delete_existing_rule [Documentation] Delete an existing rule. diff --git a/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/__init__.robot b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/__init__.robot new file mode 100644 index 000000000..8064d6b0c --- /dev/null +++ b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Documentation javatoscachecker - APIs diff --git a/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/basics.robot b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/basics.robot new file mode 100644 index 000000000..053b2824d --- /dev/null +++ b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/basics.robot @@ -0,0 +1,62 @@ +*** Settings *** +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json + + +*** Test Cases *** +Check service up/non existent namespace + CreateSession checkerservice http://localhost:8080 + &{headers}= Create Dictionary Accept=application/json + ${resp}= Get Request checkerservice /check_template/nosuchcatalog headers=${headers} + Should Be Equal As Strings ${resp.status_code} 404 + +Check standalone template + CreateSession checkerservice http://localhost:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}standalone.yaml + &{headers}= Create Dictionary Accept=application/json + ${resp}= Post Request checkerservice /check_template/ data=${data} headers=${headers} + Log Response received from checker ${resp.text} + Should Be Equal As Strings ${resp.status_code} 200 + Should Be Equal As Strings ${resp.text} [] + +Check standalone template with errors + CreateSession checkerservice http://localhost:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}standalone_with_errors.yaml + &{headers}= Create Dictionary Accept=application/json + ${resp}= Post Request checkerservice /check_template/ data=${data} headers=${headers} + Log Response received from checker ${resp.text} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Be Equal As Strings ${resp.text} [] + +Check schema new namespace + CreateSession checkerservice http://localhost:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}test_schema.yaml + &{headers}= Create Dictionary Accept=application/json + ${resp}= Post Request checkerservice /check_template/test/schema.yaml data=${data} headers=${headers} + Log Response received from checker ${resp.text} + Should Be Equal As Strings ${resp.status_code} 200 + Should Be Equal As Strings ${resp.text} [] + +Check template in namespace + CreateSession checkerservice http://localhost:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}test_template.yaml + &{headers}= Create Dictionary Accept=application/json + ${resp}= Post Request checkerservice /check_template/test/ data=${data} headers=${headers} + Log Response received from checker ${resp.text} + Should Be Equal As Strings ${resp.status_code} 200 + Should Be Equal As Strings ${resp.text} [] + +Check named template does not exist + CreateSession checkerservice http://localhost:8080 + &{headers}= Create Dictionary Accept=application/json + ${resp}= Get Request checkerservice /check_template/test/nosuchtemplate.yaml headers=${headers} + Should Be Equal As Strings ${resp.status_code} 404 + +Check delete existing namespace + CreateSession checkerservice http://localhost:8080 + &{headers}= Create Dictionary Accept=application/json + ${resp}= Delete Request checkerservice /check_template/test/ headers=${headers} + Log Response received from checker ${resp.text} + Should Be Equal As Strings ${resp.status_code} 200 diff --git a/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/standalone.yaml b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/standalone.yaml new file mode 100644 index 000000000..26797aba3 --- /dev/null +++ b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/standalone.yaml @@ -0,0 +1,21 @@ +tosca_definitions_version: tosca_simple_yaml_1_0 + +topology_template: + node_templates: + my_server: + type: tosca.nodes.Compute + capabilities: + # Host container properties + host: + properties: + num_cpus: 1 + disk_size: 10 GB + mem_size: 4096 MB + # Guest Operating System properties + os: + properties: + # host Operating System image properties + architecture: x86_64 + type: linux + distribution: rhel + version: 6.5 diff --git a/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/standalone_with_errors.yaml b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/standalone_with_errors.yaml new file mode 100644 index 000000000..d5c1a1586 --- /dev/null +++ b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/standalone_with_errors.yaml @@ -0,0 +1,23 @@ +tosca_definitions_version: tosca_simple_yaml_1_0 +description: uses unknown capability propertya to trigger an error + +topology_template: + node_templates: + my_server: + type: tosca.nodes.Compute + capabilities: + # Host container properties + host: + properties: + num_cpus: 1 + disk_size: 10 GB + mem_size: 4096 MB + virtualization_support: true + # Guest Operating System properties + os: + properties: + # host Operating System image properties + architecture: x86_64 + type: linux + distribution: rhel + version: 6.5 diff --git a/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/test_schema.yaml b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/test_schema.yaml new file mode 100644 index 000000000..9575e27c9 --- /dev/null +++ b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/test_schema.yaml @@ -0,0 +1,17 @@ +tosca_definitions_version: tosca_simple_yaml_1_1 + +data_types: + org.onap.tosca.checker.service.Person: + properties: + firstName: + type: string + required: true + lastName: + type: string + required: true + +node_types: + org.onap.tosca.checker.service.Residence: + properties: + owner: + type: org.onap.tosca.checker.service.Person diff --git a/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/test_template.yaml b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/test_template.yaml new file mode 100644 index 000000000..478aec05e --- /dev/null +++ b/test/csit/tests/modeling-toscaparsers-javatoscachecker/APIs/data/test_template.yaml @@ -0,0 +1,11 @@ +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - schema: schema.yaml + +topology_template: + node_templates: + my_house: + type: org.onap.tosca.checker.service.Residence + properties: + owner: {firstName: "Serban", lastName: "Jora"} diff --git a/test/csit/tests/multicloud-vmware/nova/jsoninput/multicloud_create_server.json b/test/csit/tests/multicloud-vmware/nova/jsoninput/multicloud_create_server.json new file mode 100644 index 000000000..ecaaa12d1 --- /dev/null +++ b/test/csit/tests/multicloud-vmware/nova/jsoninput/multicloud_create_server.json @@ -0,0 +1,16 @@ +{ + "server": + { + "name": "server-csit-1", + "boot": + { + "type":2, + "imageId": "08edf57c-e65d-4778-957a-1524ff795c4b" + }, + "flavorId": "1", + "nicArray": + [{ + "portId": "71847500-8edf-42f9-be69-78432ccadc6e" + }] + } +}
\ No newline at end of file diff --git a/test/csit/tests/multicloud-vmware/nova/sanity-flavor.robot b/test/csit/tests/multicloud-vmware/nova/sanity-flavor.robot new file mode 100644 index 000000000..5adafb5af --- /dev/null +++ b/test/csit/tests/multicloud-vmware/nova/sanity-flavor.robot @@ -0,0 +1,62 @@ +*** settings *** +Resource ../../common.robot +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library HttpLibrary.HTTP + + +*** Variables *** +@{return_ok_list}= 200 201 202 +${get_token_url} /api/multicloud-vio/v0/vmware_fake/identity/v3/auth/tokens + +#json files +${auth_info_json} ${SCRIPTS}/../tests/multicloud-vmware/provision/jsoninput/auth_info.json + +#global vars +${TOKEN} +${TENANTID} +${flavor1Id} + +*** Test Cases *** + +GetAuthToken + [Documentation] Sanity test - Get Auth Token + ${json_value}= json_from_file ${auth_info_json} + ${json_string}= string_from_json ${json_value} + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= POST Request web_session ${get_token_url} ${json_string} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + ${TOKEN}= Convert To String ${response_json['token']['value']} + ${TENANTID}= Convert To String ${response_json['token']['project']['id']} + Set Global Variable ${TOKEN} + Set Global Variable ${TENANTID} + + +ListFlavorsFuncTest + [Documentation] get a list of flavors info rest test + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= GET Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/flavors + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + ${flavor1Id}= Convert To String ${response_json['flavors'][0]['id']} + Set Global Variable ${flavor1Id} + #Log To Console ${flavor1Id} + +GetFlavorFuncTest + [Documentation] get the specific flavor info rest test + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= GET Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/flavors/${flavor1Id} + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + diff --git a/test/csit/tests/multicloud-vmware/nova/sanity-host.robot b/test/csit/tests/multicloud-vmware/nova/sanity-host.robot new file mode 100644 index 000000000..444c68e1a --- /dev/null +++ b/test/csit/tests/multicloud-vmware/nova/sanity-host.robot @@ -0,0 +1,83 @@ +*** settings *** +Resource ../../common.robot +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library HttpLibrary.HTTP + + +*** Variables *** +@{return_ok_list}= 200 201 202 +${get_token_url} /api/multicloud-vio/v0/vmware_fake/identity/v3/auth/tokens + +#json files +${auth_info_json} ${SCRIPTS}/../tests/multicloud-vmware/provision/jsoninput/auth_info.json + +#global vars +${TOKEN} +${TENANTID} +${host1Id} + +*** Test Cases *** + +GetAuthToken + [Documentation] Sanity test - Get Auth Token + ${json_value}= json_from_file ${auth_info_json} + ${json_string}= string_from_json ${json_value} + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= POST Request web_session ${get_token_url} ${json_string} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + ${TOKEN}= Convert To String ${response_json['token']['value']} + ${TENANTID}= Convert To String ${response_json['token']['project']['id']} + Set Global Variable ${TOKEN} + Set Global Variable ${TENANTID} + +TestListHosts + [Documentation] Sanity Test - List Hosts + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/os-hypervisors/detail + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + ${host1Id}= Convert To String ${response_json['hypervisors'][0]['service']['id']} + Set Global Variable ${host1Id} + +TestGetHost + [Documentation] Sanity Test - Get Host + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/os-hypervisors/${host1Id} + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + +TestHostUptime + [Documentation] Sanity Test - Host Uptime + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/os-hypervisors/uptime + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + + +TestHostAggregates + [Documentation] Sanity Test - Host Aggregates + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/os-aggregates + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + + + diff --git a/test/csit/tests/multicloud-vmware/nova/sanity-server.robot b/test/csit/tests/multicloud-vmware/nova/sanity-server.robot new file mode 100755 index 000000000..7a092e6f0 --- /dev/null +++ b/test/csit/tests/multicloud-vmware/nova/sanity-server.robot @@ -0,0 +1,105 @@ +*** settings *** +Resource ../../common.robot +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library HttpLibrary.HTTP + + +*** Variables *** +@{return_ok_list}= 200 201 202 +@{delete_ok_list}= 200 204 +${get_token_url} /api/multicloud-vio/v0/vmware_fake/identity/v3/auth/tokens + +#json files +${auth_info_json} ${SCRIPTS}/../tests/multicloud-vmware/provision/jsoninput/auth_info.json +${multicloud_create_server_json} ${SCRIPTS}/../tests/multicloud-vmware/nova/jsoninput/multicloud_create_server.json + +#global vars +${TOKEN} +${TENANTID} +${server1Id} + +*** Test Cases *** + +GetAuthToken + [Documentation] Sanity test - Get Auth Token + ${json_value}= json_from_file ${auth_info_json} + ${json_string}= string_from_json ${json_value} + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= POST Request web_session ${get_token_url} ${json_string} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + ${TOKEN}= Convert To String ${response_json['token']['value']} + ${TENANTID}= Convert To String ${response_json['token']['project']['id']} + Set Global Variable ${TOKEN} + Set Global Variable ${TENANTID} + +CreateServerFuncTest + [Documentation] Sanity Test - Create Server + ${json_value}= json_from_file ${multicloud_create_server_json} + ${json_string}= string_from_json ${json_value} + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + Set Request Body ${json_string} + #Log To Console ${json_string} + ${resp}= Post Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/servers ${json_string} + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + ${server1Id}= Convert To String ${response_json['server']['id']} + Set Global Variable ${server1Id} + + +GetServersFuncTest + [Documentation] Sanity Test - Get Servers + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/servers + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + #Log To Console ${server1Id} + +GetServerDetailFuncTest + [Documentation] Sanity Test - Get Server Detail + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/servers/detail + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + +GetServerFuncTest + [Documentation] Sanity Test - Get Server + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/servers/${server1Id} + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + +ServerActionFuncTest + [Documentation] Sanity Test - Server Action + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/servers/${server1Id}/action + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${response_code} + ${response_json} json.loads ${resp.content} + #Log To Console ${response_json} + +DeleteServerFuncTest + [Documentation] Sanity Test - Delete Server + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Delete Request web_session api/multicloud-vio/v0/vmware_fake/nova/${TENANTID}/servers/${server1Id} + ${response_code}= Convert To String ${resp.status_code} + List Should Contain Value ${delete_ok_list} ${response_code} diff --git a/test/csit/tests/multicloud-vmware/provision/jsoninput/auth_info.json b/test/csit/tests/multicloud-vmware/provision/jsoninput/auth_info.json new file mode 100644 index 000000000..6d42f84d4 --- /dev/null +++ b/test/csit/tests/multicloud-vmware/provision/jsoninput/auth_info.json @@ -0,0 +1,10 @@ +{ + "auth": + { + "scope": {"project": {"id": "a71c87345ad14533aa6496fca69d4840"}}, + "identity": + { + "password": {"user": {"domain": {"name": "Default"}, "password": "vmware", "name": "admin"}}, "methods": ["password"] + } + } +} diff --git a/test/csit/tests/multicloud-vmware/provision/sanity_test_image.robot b/test/csit/tests/multicloud-vmware/provision/sanity_test_image.robot new file mode 100644 index 000000000..0a6f2f5e8 --- /dev/null +++ b/test/csit/tests/multicloud-vmware/provision/sanity_test_image.robot @@ -0,0 +1,78 @@ +*** settings *** +Resource ../../common.robot +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library HttpLibrary.HTTP + + +*** Variables *** +@{return_ok_list}= 200 201 202 +@{delete_ok_list}= 200 204 +${get_token_url} /api/multicloud-vio/v0/vmware_fake/identity/v3/auth/tokens +${get_image_url} /api/multicloud-vio/v0/vmware_fake/glance/v2/images +${get_image_schema_url} /api/multicloud-vio/v0/vmware_fake/glance/v2/schemas/image + + +#json files +${auth_info_json} ${SCRIPTS}/../tests/multicloud-vmware/provision/jsoninput/auth_info.json + +#global vars +${TOKEN} +${IMAGEID} + +*** Test Cases *** + +GetAuthToken + [Documentation] Sanity test - Get Auth Token + ${json_value}= json_from_file ${auth_info_json} + ${json_string}= string_from_json ${json_value} + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= POST Request web_session ${get_token_url} ${json_string} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + ${TOKEN}= Convert To String ${response_json['token']['value']} + ${TENANTID}= Convert To String ${response_json['token']['project']['id']} + Set Global Variable ${TOKEN} + + + + + +TestCaseShoeImageSchema + [Documentation] Sanity test - Show Image Schema + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session ${get_image_schema_url} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + + + + +TestCaseListImages + [Documentation] Sanity test - List Images + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session ${get_image_url} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + ${IMAGEID}= Convert To String ${response_json['images'][0]['id']} + Set Global Variable ${IMAGEID} + + + + +TestCaseShowImage + [Documentation] Sanity test - Show Image + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session ${get_image_url}/${IMAGEID} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + Should Be Equal ${response_json['status']} active diff --git a/test/csit/tests/multicloud-vmware/provision/sanity_test_neutron.robot b/test/csit/tests/multicloud-vmware/provision/sanity_test_neutron.robot new file mode 100644 index 000000000..d38b9983b --- /dev/null +++ b/test/csit/tests/multicloud-vmware/provision/sanity_test_neutron.robot @@ -0,0 +1,62 @@ +*** settings *** +Resource ../../common.robot +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library HttpLibrary.HTTP + + +*** Variables *** +@{return_ok_list}= 200 201 202 +@{delete_ok_list}= 200 204 +${get_token_url} /api/multicloud-vio/v0/vmware_fake/identity/v3/auth/tokens +${get_networks_url} /api/multicloud-vio/v0/vmware_fake/neutron/networks + +#json files +${auth_info_json} ${SCRIPTS}/../tests/multicloud-vmware/provision/jsoninput/auth_info.json + +#global vars +${TOKEN} +${NETWORKID} + +*** Test Cases *** + +GetAuthToken + [Documentation] Sanity test - Get Auth Token + ${json_value}= json_from_file ${auth_info_json} + ${json_string}= string_from_json ${json_value} + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= POST Request web_session ${get_token_url} ${json_string} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + ${TOKEN}= Convert To String ${response_json['token']['value']} + ${TENANTID}= Convert To String ${response_json['token']['project']['id']} + Set Global Variable ${TOKEN} + + +TestCaseListNetworks + [Documentation] Sanity test - List Networks + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session ${get_networks_url} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + ${NETWORKID}= Convert To String ${response_json['networks'][0]['id']} + Set Global Variable ${NETWORKID} + + + + +TestCaseShowNetwork + [Documentation] Sanity test - Show Network + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session ${get_networks_url}/${NETWORKID} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + Should Be Equal ${response_json['network']['status']} ACTIVE diff --git a/test/csit/tests/multicloud-vmware/provision/sanity_test_tenant.robot b/test/csit/tests/multicloud-vmware/provision/sanity_test_tenant.robot new file mode 100644 index 000000000..86d569ee9 --- /dev/null +++ b/test/csit/tests/multicloud-vmware/provision/sanity_test_tenant.robot @@ -0,0 +1,59 @@ +*** settings *** +Resource ../../common.robot +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library HttpLibrary.HTTP + + +*** Variables *** +@{return_ok_list}= 200 201 202 +@{delete_ok_list}= 200 204 +${get_token_url} /api/multicloud-vio/v0/vmware_fake/identity/v3/auth/tokens +${get_project_url} /api/multicloud-vio/v0/vmware_fake/identity/projects + +#json files +${auth_info_json} ${SCRIPTS}/../tests/multicloud-vmware/provision/jsoninput/auth_info.json + +#global vars +${TOKEN} +${TENANTID} + +*** Test Cases *** + +GetAuthToken + [Documentation] Sanity test - Get Auth Token + ${json_value}= json_from_file ${auth_info_json} + ${json_string}= string_from_json ${json_value} + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= POST Request web_session ${get_token_url} ${json_string} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + ${TOKEN}= Convert To String ${response_json['token']['value']} + ${TENANTID}= Convert To String ${response_json['token']['project']['id']} + Set Global Variable ${TOKEN} + Set Global Variable ${TENANTID} + + +TestCaseListTenants + [Documentation] Sanity test - List Tenants + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session ${get_project_url} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + + + +TestCaseShowTenants + [Documentation] Sanity test - Show Tenant + ${headers} Create Dictionary Content-Type=application/json Accept=application/json X-Auth-Token=${TOKEN} + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session ${get_project_url}/${TENANTID} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} diff --git a/test/csit/tests/multicloud-vmware/provision/sanity_test_vio.robot b/test/csit/tests/multicloud-vmware/provision/sanity_test_vio.robot new file mode 100644 index 000000000..d353f1da0 --- /dev/null +++ b/test/csit/tests/multicloud-vmware/provision/sanity_test_vio.robot @@ -0,0 +1,22 @@ +*** settings *** +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json + +*** Variables *** +@{return_ok_list}= 200 201 202 +${queryswagger_vio_url} /api/multicloud-vio/v0/swagger.json + + +*** Test Cases *** +VioSwaggerTest + [Documentation] query swagger info rest test + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${VIO_IP}:9004 headers=${headers} + ${resp}= Get Request web_session ${queryswagger_vio_url} + ${responese_code}= Convert To String ${resp.status_code} + List Should Contain Value ${return_ok_list} ${responese_code} + ${response_json} json.loads ${resp.content} + ${swagger_version}= Convert To String ${response_json['swagger']} + Should Be Equal ${swagger_version} 2.0 diff --git a/test/csit/tests/policy/suite1/Policy-CSIT.robot b/test/csit/tests/policy/suite1/Policy-CSIT.robot new file mode 100644 index 000000000..fd5e23048 --- /dev/null +++ b/test/csit/tests/policy/suite1/Policy-CSIT.robot @@ -0,0 +1,270 @@ +*** Settings *** +Documentation Policy ONAP CSIT Test cases +Library String +Library HttpLibrary.HTTP +LIbrary Process +Library BuiltIn +Resource policy_interface.robot +Resource json_templater.robot + +*** Variables *** +${RESOURCE_PATH_CREATE} /pdp/api/createPolicy +${RESOURCE_PATH_CREATE_PUSH} /pdp/api/pushPolicy +${RESOURCE_PATH_CREATE_DELETE} /pdp/api/deletePolicy +${RESOURCE_PATH_GET_CONFIG} /pdp/api/getConfig +${CREATE_CONFIG_VFW_TEMPLATE} ${CURDIR}/configpolicy_vFW_R1.template +${CREATE_CONFIG_VDNS_TEMPLATE} ${CURDIR}/configpolicy_vDNS_R1.template +${CREATE_CONFIG_VCPE_TEMPLATE} ${CURDIR}/configpolicy_vCPE_R1.template +${CREATE_OPS_VFW_TEMPLATE} ${CURDIR}/opspolicy_VFW_R1.template +${PUSH_POLICY_TEMPLATE} ${CURDIR}/pushpolicy.template +${CREATE_OPS_VDNS_TEMPLATE} ${CURDIR}/opspolicy_VDNS_R1.template +${DEL_POLICY_TEMPLATE} ${CURDIR}/deletepolicy.template +${GETCONFIG_TEMPLATE} ${CURDIR}/getconfigpolicy.template +${CONFIG_POLICY_VFW_NAME} vFirewall +${CONFIG_POLICY_VFW_TYPE} MicroService +${CONFIG_POLICY_VDNS_NAME} vLoadBalancer +${CONFIG_POLICY_VDNS_TYPE} MicroService +${OPS_POLICY_VFW_NAME} vFirewall +${OPS_POLICY_VFW_TYPE} BRMS_PARAM +${OPS_POLICY_VDNS_NAME} vLoadBalancer +${OPS_POLICY_VDNS_TYPE} BRMS_PARAM +${CONFIG_POLICY_VCPE_NAME} vCPE +${CONFIG_POLICY_VCPE_TYPE} MicroService +${OPS_POLICY_VCPE_NAME} vCPE +${OPS_POLICY_VCPE_TYPE} BRMS_PARAM +${OPS_POLICY_VOLTE_NAME} VoLTE +${OPS_POLICY_VOLTE_TYPE} BRMS_PARAM +${file_path} ../testsuite/robot/assets/templates/ControlLoopDemo__closedLoopControlName.drl +${RESOURCE_PATH_UPLOAD} /pdp/api/policyEngineImport?importParametersJson=%7B%22serviceName%22%3A%22Manyu456%22%2C%20%22serviceType%22%3A%22BRMSPARAM%22%7D +${CREATE_OPS_VCPE_TEMPLATE} ${CURDIR}/opspolicy_vCPE_R1.template +${CREATE_OPS_VOLTE_TEMPLATE} ${CURDIR}/opspolicy_vOLTE_R1.template + + +*** Test Cases *** +Policy Health check + Run Policy Health Check + +VFW Config Policy + ${CONFIG_POLICY_VFW_NAME}= Create Config VFW Policy + Push Config Policy ${CONFIG_POLICY_VFW_NAME} ${CONFIG_POLICY_VFW_TYPE} + #VFW Policy Tests + +VDNS Config Policy + ${CONFIG_POLICY_VDNS_NAME}= Create Config VDNS Policy + Push Config Policy ${CONFIG_POLICY_VDNS_NAME} ${CONFIG_POLICY_VDNS_TYPE} + #VDNS Policy Tests + +VCPE Config Policy + ${CONFIG_POLICY_VCPE_NAME}= Create Config VCPE Policy + Push Config Policy ${CONFIG_POLICY_VCPE_NAME} ${CONFIG_POLICY_VCPE_TYPE} + #VCPE Policy Tests + +VFW Ops Policy + ${OPS_POLICY_VFW_NAME}= Create Ops VFW Policy + Push Ops Policy ${OPS_POLICY_VFW_NAME} ${OPS_POLICY_VFW_TYPE} + +VDNS Ops Policy + ${OPS_POLICY_VDNS_NAME}= Create Ops VDNS Policy + Push Ops Policy ${OPS_POLICY_VDNS_NAME} ${OPS_POLICY_VDNS_TYPE} + +VCPE Ops Policy + ${OPS_POLICY_VCPE_NAME}= Create Ops VCPE Policy + Push Ops Policy ${OPS_POLICY_VCPE_NAME} ${OPS_POLICY_VCPE_TYPE} + +VOLTE Ops Policy + ${OPS_POLICY_VOLTE_NAME}= Create Ops VOLTE Policy + Push Ops Policy ${OPS_POLICY_VOLTE_NAME} ${OPS_POLICY_VOLTE_TYPE} + #VOLTE Policy Tests +VFW Get Configs Policy + Sleep 5s + Get Configs VFW Policy + +VDNS Get Configs Policy + Sleep 5s + Get Configs VDNS Policy + +VCPE Get Configs Policy + Sleep 5s + Get Configs VCPE Policy + +*** Keywords *** + +VFW Policy Tests + ${CONFIG_POLICY_VFW_NAME}= Create Config VFW Policy + Push Config Policy ${CONFIG_POLICY_VFW_NAME} ${CONFIG_POLICY_VFW_TYPE} + Get Configs VFW Policy + ${OPS_POLICY_VFW_NAME}= Create Ops VFW Policy + Push Ops Policy ${OPS_POLICY_VFW_NAME} ${OPS_POLICY_VFW_TYPE} + +VDNS Policy Tests + ${CONFIG_POLICY_VDNS_NAME}= Create Config VDNS Policy + Push Config Policy ${CONFIG_POLICY_VDNS_NAME} ${CONFIG_POLICY_VDNS_TYPE} + Get Configs VDNS Policy + ${OPS_POLICY_VDNS_NAME}= Create Ops VDNS Policy + Push Ops Policy ${OPS_POLICY_VDNS_NAME} ${OPS_POLICY_VDNS_TYPE} + +VCPE Policy Tests + ${CONFIG_POLICY_VCPE_NAME}= Create Config VCPE Policy + Push Config Policy ${CONFIG_POLICY_VCPE_NAME} ${CONFIG_POLICY_VCPE_TYPE} + Get Configs VCPE Policy + ${OPS_POLICY_VCPE_NAME}= Create Ops VCPE Policy + Push Ops Policy ${OPS_POLICY_VCPE_NAME} ${OPS_POLICY_VCPE_TYPE} + +VOLTE Policy Tests + ${OPS_POLICY_VOLTE_NAME}= Create Ops VOLTE Policy + Push Ops Policy ${OPS_POLICY_VOLTE_NAME} ${OPS_POLICY_VOLTE_TYPE} + +Get Configs VFW Policy + [Documentation] Get Config Policy for VFW + ${getconfigpolicy}= Catenate .*${CONFIG_POLICY_VFW_NAME}* + ${configpolicy_name}= Create Dictionary config_policy_name=${getconfigpolicy} + ${output} = Fill JSON Template File ${GETCONFIG_TEMPLATE} ${configpolicy_name} + ${get_resp} = Run Policy Get Configs Request ${RESOURCE_PATH_GET_CONFIG} ${output} + Should Be Equal As Strings ${get_resp.status_code} 200 + +Create Config VFW Policy + [Documentation] Create Config Policy + ${randompolicyname} = Create Policy Name + ${policyname1}= Catenate com.${randompolicyname}_vFirewall + ${CONFIG_POLICY_VFW_NAME}= Set Test Variable ${policyname1} + ${configpolicy}= Create Dictionary policy_name=${policyname1} + ${output} = Fill JSON Template File ${CREATE_CONFIG_VFW_TEMPLATE} ${configpolicy} + ${put_resp} = Run Policy Put Request ${RESOURCE_PATH_CREATE} ${output} + Should Be Equal As Strings ${put_resp.status_code} 200 + [Return] ${policyname1} + + Create Policy Name + [Documentation] Generate Policy Name + [Arguments] ${prefix}=CSIT_ + ${random}= Generate Random String 15 [LOWER][NUMBERS] + ${policyname}= Catenate ${prefix}${random} + [Return] ${policyname} + +Create Ops VFW Policy + [Documentation] Create Opertional Policy + ${randompolicyname} = Create Policy Name + ${policyname1}= Catenate com.${randompolicyname}_vFirewall + ${OPS_POLICY_VFW_NAME}= Set Test Variable ${policyname1} + ${dict}= Create Dictionary policy_name=${policyname1} + ${output} = Fill JSON Template File ${CREATE_OPS_VFW_TEMPLATE} ${dict} + ${put_resp} = Run Policy Put Request ${RESOURCE_PATH_CREATE} ${output} + Log ${put_resp} + Should Be Equal As Strings ${put_resp.status_code} 200 + [Return] ${policyname1} + +Push Ops Policy + [Documentation] Push Ops Policy + [Arguments] ${policyname} ${policytype} + ${dict}= Create Dictionary policy_name=${policyname} policy_type=${policytype} + ${output} = Fill JSON Template File ${PUSH_POLICY_TEMPLATE} ${dict} + ${put_resp} = Run Policy Put Request ${RESOURCE_PATH_CREATE_PUSH} ${output} + Should Be Equal As Strings ${put_resp.status_code} 200 + +Push Config Policy + [Documentation] Push Config Policy + [Arguments] ${policyname} ${policytype} + ${dict}= Create Dictionary policy_name=${policyname} policy_type=${policytype} + ${output} = Fill JSON Template File ${PUSH_POLICY_TEMPLATE} ${dict} + ${put_resp} = Run Policy Put Request ${RESOURCE_PATH_CREATE_PUSH} ${output} + Should Be Equal As Strings ${put_resp.status_code} 200 + +Delete Ops Policy + [Documentation] Delete Config Policy + [Arguments] ${policy_name} + ${policyname3}= Catenate com.Config_BRMS_Param_${policyname}.1.xml + ${dict}= Create Dictionary policy_name=${policyname3} + ${output} = Fill JSON Template ${DEL_POLICY_TEMPLATE} ${dict} + ${put_resp} = Run Policy Delete Request ${RESOURCE_PATH_CREATE_DELETE} ${output} + Should Be Equal As Strings ${put_resp.status_code} 200 + +Delete Config Policy + [Documentation] Delete Ops Policy + [Arguments] ${policy_name} + ${policyname3}= Catenate com.Config_MS_com.${policy_name}.1.xml + ${dict}= Create Dictionary policy_name=${policyname3} + ${output} = Fill JSON Template ${DEL_POLICY_TEMPLATE} ${dict} + ${put_resp} = Run Policy Delete Request ${RESOURCE_PATH_CREATE_DELETE} ${output} + Should Be Equal As Strings ${put_resp.status_code} 200 + +Get Configs VDNS Policy + [Documentation] Get Config Policy for VDNS + ${getconfigpolicy}= Catenate .*${CONFIG_POLICY_VDNS_NAME}* + ${configpolicy_name}= Create Dictionary config_policy_name=${getconfigpolicy} + ${output} = Fill JSON Template File ${GETCONFIG_TEMPLATE} ${configpolicy_name} + ${get_resp} = Run Policy Get Configs Request ${RESOURCE_PATH_GET_CONFIG} ${output} + Should Be Equal As Strings ${get_resp.status_code} 200 + +Create Config VDNS Policy + [Documentation] Create Config Policy + ${randompolicyname} = Create Policy Name + ${policyname1}= Catenate com.${randompolicyname}_vLoadBalancer + ${CONFIG_POLICY_VDNS_NAME}= Set Test Variable ${policyname1} + ${configpolicy}= Create Dictionary policy_name=${policyname1} + ${output} = Fill JSON Template File ${CREATE_CONFIG_VDNS_TEMPLATE} ${configpolicy} + ${put_resp} = Run Policy Put Request ${RESOURCE_PATH_CREATE} ${output} + Should Be Equal As Strings ${put_resp.status_code} 200 + [Return] ${policyname1} + +Create Ops VDNS Policy + [Documentation] Create Opertional Policy + ${randompolicyname} = Create Policy Name + ${policyname1}= Catenate com.${randompolicyname}_vLoadBalancer + ${OPS_POLICY_VDNS_NAME}= Set Test Variable ${policyname1} + ${dict}= Create Dictionary policy_name=${policyname1} + ${output} = Fill JSON Template File ${CREATE_OPS_VDNS_TEMPLATE} ${dict} + ${put_resp} = Run Policy Put Request ${RESOURCE_PATH_CREATE} ${output} + Log ${put_resp} + Should Be Equal As Strings ${put_resp.status_code} 200 + [Return] ${policyname1} + +Create Config VCPE Policy + [Documentation] Create Config Policy + ${randompolicyname} = Create Policy Name + ${policyname1}= Catenate com.${randompolicyname}_vCPE + ${CONFIG_POLICY_VCPE_NAME}= Set Test Variable ${policyname1} + ${configpolicy}= Create Dictionary policy_name=${policyname1} + ${output} = Fill JSON Template File ${CREATE_CONFIG_VCPE_TEMPLATE} ${configpolicy} + ${put_resp} = Run Policy Put Request ${RESOURCE_PATH_CREATE} ${output} + Should Be Equal As Strings ${put_resp.status_code} 200 + [Return] ${policyname1} + +Get Configs VCPE Policy + [Documentation] Get Config Policy for VCPE + ${getconfigpolicy}= Catenate .*${CONFIG_POLICY_VCPE_NAME}* + ${configpolicy_name}= Create Dictionary config_policy_name=${getconfigpolicy} + ${output} = Fill JSON Template File ${GETCONFIG_TEMPLATE} ${configpolicy_name} + ${get_resp} = Run Policy Get Configs Request ${RESOURCE_PATH_GET_CONFIG} ${output} + Should Be Equal As Strings ${get_resp.status_code} 200 + +Create Ops vCPE Policy + [Documentation] Create Opertional Policy + ${randompolicyname} = Create Policy Name + ${policyname1}= Catenate com.${randompolicyname}_vCPE + ${OPS_POLICY_VCPE_NAME}= Set Test Variable ${policyname1} + ${dict}= Create Dictionary policy_name=${policyname1} + ${output} = Fill JSON Template File ${CREATE_OPS_VCPE_TEMPLATE} ${dict} + ${put_resp} = Run Policy Put Request ${RESOURCE_PATH_CREATE} ${output} + Log ${put_resp} + Should Be Equal As Strings ${put_resp.status_code} 200 + [Return] ${policyname1} + +Create Ops VolTE Policy + [Documentation] Create Opertional Policy + ${randompolicyname} = Create Policy Name + ${policyname1}= Catenate com.${randompolicyname}_VoLTE + ${dict}= Create Dictionary policy_name=${policyname1} + ${output} = Fill JSON Template File ${CREATE_OPS_VOLTE_TEMPLATE} ${dict} + ${put_resp} = Run Policy Put Request ${RESOURCE_PATH_CREATE} ${output} + Log ${put_resp} + Should Be Equal As Strings ${put_resp.status_code} 200 + [Return] ${policyname1} + +Upload DRL file + [Documentation] Upload DRL file1 + ${file_data}= Get Binary File ${file_path} + ${files}= Create Dictionary file=${file_data} + #${CONFIG_POLICY_VDNS_NAME}= Set Test Variable ${policyname1} + # ${files2} = {'file': open('../testsuite/robot/assets/templates/ControlLoopDemo__closedLoopControlName.drl', 'rb')} + # ${files}= Create Dictionary file ${file_data} + ${put_resp} = Run Policy Post form Request ${RESOURCE_PATH_UPLOAD} ${files} + Should Be Equal As Strings ${put_resp.status_code} 200
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/configpolicy_vCPE.template b/test/csit/tests/policy/suite1/configpolicy_vCPE.template new file mode 100644 index 000000000..e3e3a2d0b --- /dev/null +++ b/test/csit/tests/policy/suite1/configpolicy_vCPE.template @@ -0,0 +1,6 @@ +{ +"configBody": "{ \"service\": \"policy_tosca_tca\", \"location\": \"SampleServiceLocation\", \"uuid\": \"test\", \"policyName\": \"MicroServicevCPE\", \"description\": \"MicroService vCPE Policy\", \"configName\": \"SampleConfigName\", \"templateVersion\": \"OpenSource.version.1\", \"version\": \"1.0.0\", \"priority\": \"1\", \"policyScope\": \"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop\", \"riskType\": \"SampleRiskType\", \"riskLevel\": \"1\", \"guard\": \"False\", \"content\": { \"policyVersion\": \"v0.0.1\", \"threshholds\": [{ \"severity\": \"MAJOR\", \"fieldPath\": \"$$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\", \"thresholdValue\": \"0\", \"closedLoopEventStatus\": \"ABATED\", \"closedLoopControlName\": \"CL-vCPEvGMUX-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241ABA1\", \"version\": \"1.0.2\", \"direction\": \"EQUAL\" }, { \"severity\": \"CRITICAL\", \"fieldPath\": \"$$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\", \"thresholdValue\": \"1000\", \"closedLoopEventStatus\": \"ONSET\", \"closedLoopControlName\": \"CL-vCPEvGMUX-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241ABA1\", \"version\": \"1.0.2\", \"direction\": \"GREATER_OR_EQUAL\" }], \"policyName\": \"DCAE.Config_tca-hi-lo\", \"controlLoopSchemaType\": \"VM\", \"policyScope\": \"DCAE\", \"eventName\": \"vCPEvGMUXPacketLoss\" } }", +"policyConfigType": "MicroService", +"policyName": "${policy_name}", +"ecompName": "DCAE" +} diff --git a/test/csit/tests/policy/suite1/configpolicy_vCPE_R1.template b/test/csit/tests/policy/suite1/configpolicy_vCPE_R1.template new file mode 100644 index 000000000..6dcf3c600 --- /dev/null +++ b/test/csit/tests/policy/suite1/configpolicy_vCPE_R1.template @@ -0,0 +1,6 @@ +{ + "configBody": "{ \"service\": \"policy_tosca_tca\", \"location\": \"SampleServiceLocation\", \"uuid\": \"test\", \"policyName\": \"MicroServicevCPE\", \"description\": \"MicroService vCPE Policy\", \"configName\": \"SampleConfigName\", \"templateVersion\": \"OpenSource.version.1\", \"version\": \"1.0.0\", \"priority\": \"1\", \"policyScope\": \"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\", \"riskType\": \"SampleRiskType\", \"riskLevel\": \"1\", \"guard\": \"False\", \"content\": { \"policyVersion\": \"v0.0.1\", \"threshholds\": [{ \"severity\": \"MAJOR\", \"fieldPath\": \"$$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\", \"thresholdValue\": \"0\", \"closedLoopEventStatus\": \"ABATED\", \"closedLoopControlName\": \"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\", \"version\": \"1.0.2\", \"direction\": \"EQUAL\" }, { \"severity\": \"CRITICAL\", \"fieldPath\": \"$$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\", \"thresholdValue\": \"0\", \"closedLoopEventStatus\": \"ONSET\", \"closedLoopControlName\": \"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\", \"version\": \"1.0.2\", \"direction\": \"GREATER\" }], \"policyName\": \"DCAE.Config_tca-hi-lo\", \"controlLoopSchemaType\": \"VNF\", \"policyScope\": \"DCAE\", \"eventName\": \"Measurement_vGMUX\" } }", + "policyConfigType": "MicroService", + "policyName": "${policy_name}", + "onapName": "DCAE" +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/configpolicy_vDNS.template b/test/csit/tests/policy/suite1/configpolicy_vDNS.template new file mode 100644 index 000000000..ab1d2e0dd --- /dev/null +++ b/test/csit/tests/policy/suite1/configpolicy_vDNS.template @@ -0,0 +1,6 @@ +{ +"configBody": "{\"service\": \"policy_tosca_tca\",\"location\": \"TestMSLocation\",\"uuid\": \"/services/cdap-tca-hi-lo/instances/dfw1/configuration/metricsPerFunctionalRole/vLoadBalancer\",\"policyName\": \"vLoadBalancer\",\"description\": \"vLoadBalancer\",\"configName\": \"TestConfigName\",\"templateVersion\": \"1607\",\"version\": \"8.7.6.5\",\"priority\": \"1\",\"policyScope\": \"resource=TestResource,service=TestService,type=TestType,closedLoopControlName=TestClosedLoop\",\"riskType\": \"test\",\"riskLevel\": \"2\",\"guard\": \"False\",\"content\": {\"policyVersion\": \"v0.0.1\",\"threshholds\": [{\"severity\": \"MAJOR\",\"fieldPath\": \"$$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\"thresholdValue\": \"500\",\"closedLoopControlName\": \"CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A\",\"version\": \"1.0.2\",\"direction\": \"LESS_OR_EQUAL\"}, {\"severity\": \"CRITICAL\",\"fieldPath\": \"$$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\"thresholdValue\": \"5000\",\"closedLoopControlName\": \"CL-LBAL-HIGH-TRAFFIC-SIG-0C5920A6-B564-8035-C878-0E814352BC2B\",\"version\": \"1.0.2\",\"direction\": \"GREATER_OR_EQUAL\"}],\"policyName\": \"configuration.ae.microservice.tca.xml\",\"functionalRole\": \"ClosedLoop_F5-d925ed73-8231-4d02-9545-db4e101f88f8\"}}", +"policyConfigType": "MicroService", +"policyName": "${policy_name}", +"ecompName": "DCAE" +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/configpolicy_vDNS_R1.template b/test/csit/tests/policy/suite1/configpolicy_vDNS_R1.template new file mode 100644 index 000000000..0a9ecc6ff --- /dev/null +++ b/test/csit/tests/policy/suite1/configpolicy_vDNS_R1.template @@ -0,0 +1,6 @@ +{ + "configBody": "{ \"service\": \"policy_tosca_tca\", \"location\": \"SampleServiceLocation\", \"uuid\": \"test\", \"policyName\": \"MicroServicevDNS\", \"description\": \"MicroService vDNS Policy\", \"configName\": \"SampleConfigName\", \"templateVersion\": \"OpenSource.version.1\", \"version\": \"1.0.0\", \"priority\": \"1\", \"policyScope\": \"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\", \"riskType\": \"SampleRiskType\", \"riskLevel\": \"1\", \"guard\": \"False\", \"content\": { \"policyVersion\": \"v0.0.1\", \"threshholds\": [{ \"severity\": \"CRITICAL\", \"fieldPath\": \"$$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta\", \"thresholdValue\": \"300\", \"closedLoopEventStatus\": \"ONSET\", \"closedLoopControlName\": \"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\", \"version\": \"1.0.2\", \"direction\": \"GREATER_OR_EQUAL\" }], \"policyName\": \"DCAE.Config_tca-hi-lo\", \"controlLoopSchemaType\": \"VM\", \"policyScope\": \"DCAE\", \"eventName\": \"vLoadBalancer\" } }", + "policyConfigType": "MicroService", + "policyName": "${policy_name}", + "onapName": "DCAE" +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/configpolicy_vFW.template b/test/csit/tests/policy/suite1/configpolicy_vFW.template new file mode 100644 index 000000000..39e99e7b2 --- /dev/null +++ b/test/csit/tests/policy/suite1/configpolicy_vFW.template @@ -0,0 +1,6 @@ +{ +"configBody": "{\"service\": \"policy_tosca_tca\",\"location\": \"Ravi\",\"uuid\": \"/services/cdap-tca-hi-lo/instances/dfw1/configuration/metricsPerFunctionalRole/vFireWall\",\"policyName\": \"vFireWall\",\"description\": \"vFireWall\",\"configName\": \"TestConfigName\",\"templateVersion\": \"1607\",\"version\": \"8.7.6.5\",\"priority\": \"1\",\"policyScope\": \"resource=TestResource,service=TestService,type=TestType,closedLoopControlName=TestClosedLoop\",\"riskType\": \"test\",\"riskLevel\": \"2\",\"guard\": \"False\",\"content\": {\"policyVersion\": \"v0.0.1\",\"threshholds\": [{\"severity\": \"MAJOR\",\"fieldPath\": \"$$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\"thresholdValue\": \"4000\",\"closedLoopControlName\": \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\",\"version\": \"1.0.2\",\"direction\": \"LESS_OR_EQUAL\"}, {\"severity\": \"CRITICAL\",\"fieldPath\": \"$$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\"thresholdValue\": \"20000\",\"closedLoopControlName\": \"CL-FRWL-HIGH-TRAFFIC-SIG-EA36FE84-9342-5E13-A656-EC5F21309A09\",\"version\": \"1.0.2\",\"direction\": \"GREATER_OR_EQUAL\"}],\"policyName\": \"configuration.ae.microservice.tca.xml\",\"functionalRole\": \"ClosedLoop_F5-d925ed73-8231-4d02-9545-db4e101f88f8\"}}", +"policyConfigType": "MicroService", +"policyName": "${policy_name}", +"ecompName": "DCAE" +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/configpolicy_vFW_R1.template b/test/csit/tests/policy/suite1/configpolicy_vFW_R1.template new file mode 100644 index 000000000..4c3617d5e --- /dev/null +++ b/test/csit/tests/policy/suite1/configpolicy_vFW_R1.template @@ -0,0 +1,6 @@ +{ + "configBody": "{\"service\": \"policy_tosca_tca\",\"location\": \"SampleServiceLocation\",\"uuid\": \"test\",\"policyName\": \"MicroServicevFirewall\",\"description\": \"MicroService vFirewall Policy\",\"configName\": \"SampleConfigName\",\"templateVersion\": \"OpenSource.version.1\",\"version\": \"1.0.0\",\"priority\": \"1\",\"policyScope\": \"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"riskType\": \"SampleRiskType\",\"riskLevel\": \"1\",\"guard\": \"False\",\"content\": {\"policyVersion\": \"v0.0.1\",\"threshholds\": [{\"severity\": \"MAJOR\",\"fieldPath\": \"$$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta\",\"thresholdValue\": \"300\",\"closedLoopEventStatus\": \"ONSET\",\"closedLoopControlName\": \"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\": \"1.0.2\",\"direction\": \"LESS_OR_EQUAL\"}, {\"severity\": \"CRITICAL\",\"fieldPath\": \"$$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta\",\"thresholdValue\": \"700\",\"closedLoopEventStatus\": \"ONSET\",\"closedLoopControlName\": \"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\": \"1.0.2\",\"direction\": \"GREATER_OR_EQUAL\"}],\"policyName\": \"DCAE.Config_tca-hi-lo\",\"controlLoopSchemaType\": \"VNF\",\"policyScope\": \"DCAE\",\"eventName\": \"vFirewallBroadcastPackets\"}}", + "policyConfigType": "MicroService", + "policyName": "${policy_name}", + "onapName": "DCAE" +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/createpolicy.template b/test/csit/tests/policy/suite1/createpolicy.template new file mode 100644 index 000000000..7c693e840 --- /dev/null +++ b/test/csit/tests/policy/suite1/createpolicy.template @@ -0,0 +1,21 @@ +{ + "policyConfigType": "BRMS_PARAM", + "policyName": "${policy_name}", + "policyDescription": "Create BRMS Param policy", + "attributes": { + "RULE": { + "templateName": "ClosedLoopDemo_closedLoopControlName", + "aaiNamedQueryUUID": "2", + "aaiPassword": "2", + "aaiPatternMatch": "2", + "aaiURL": "2", + "actor": "2", + "appcTopic": "2", + "closedLoopControlName": "2", + "msoPassword": "2", + "msoURL": "2", + "msoUsername": "2", + "aaiUsername": "3" + } + } +} diff --git a/test/csit/tests/policy/suite1/deletepolicy.template b/test/csit/tests/policy/suite1/deletepolicy.template new file mode 100644 index 000000000..55510102f --- /dev/null +++ b/test/csit/tests/policy/suite1/deletepolicy.template @@ -0,0 +1,5 @@ +{ + "pdpGroup": "default", + "policyComponent": "PDP", + "policyName": "${policy_name}" +} diff --git a/test/csit/tests/policy/suite1/getconfigpolicy.template b/test/csit/tests/policy/suite1/getconfigpolicy.template new file mode 100644 index 000000000..611e65d0e --- /dev/null +++ b/test/csit/tests/policy/suite1/getconfigpolicy.template @@ -0,0 +1,8 @@ +{ + "configAttributes" : { + }, + "configName" : ".*", + "ecompName" : "DCAE", + "policyName" : "${config_policy_name}", + "unique" : false +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/global_properties.robot b/test/csit/tests/policy/suite1/global_properties.robot new file mode 100644 index 000000000..f406bbf3d --- /dev/null +++ b/test/csit/tests/policy/suite1/global_properties.robot @@ -0,0 +1,30 @@ +*** Settings *** +Documentation store all properties that can change or are used in multiple places here +... format is all caps with underscores between words and prepended with GLOBAL +... make sure you prepend them with GLOBAL so that other files can easily see it is from this file. + + +*** Variables *** +${GLOBAL_APPLICATION_ID} robot-ete +${GLOBAL_MSO_STATUS_PATH} /ecomp/mso/infra/orchestrationRequests/v2/ +${GLOBAL_SELENIUM_BROWSER} chrome +${GLOBAL_SELENIUM_BROWSER_CAPABILITIES} Create Dictionary +${GLOBAL_SELENIUM_DELAY} 0 +${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} 5 +${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 15 +${GLOBAL_OPENSTACK_HEAT_SERVICE_TYPE} orchestration +${GLOBAL_OPENSTACK_CINDER_SERVICE_TYPE} volume +${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} compute +${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} network +${GLOBAL_OPENSTACK_GLANCE_SERVICE_TYPE} image +${GLOBAL_OPENSTACK_KEYSTONE_SERVICE_TYPE} identity +${GLOBAL_AAI_CLOUD_OWNER} Rackspace +${GLOBAL_BUILD_NUMBER} 31 +${GLOBAL_VM_PRIVATE_KEY} ${EXECDIR}/robot/assets/keys/robot_ssh_private_key.pvt +# policy info - everything is from the private oam network (also called ecomp private network) +${GLOBAL_POLICY_SERVER_URL} http://%{PDP_IP}:8081 +${GLOBAL_POLICY_AUTH} dGVzdHBkcDphbHBoYTEyMw== +${GLOBAL_POLICY_CLIENTAUTH} cHl0aG9uOnRlc3Q= +${GLOBAL_POLICY_HEALTHCHECK_URL} http://%{POLICY_IP}:6969 +${GLOBAL_POLICY_USERNAME} healthcheck +${GLOBAL_POLICY_PASSWORD} zb!XztG34
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/json_templater.robot b/test/csit/tests/policy/suite1/json_templater.robot new file mode 100644 index 000000000..a1cc7e35d --- /dev/null +++ b/test/csit/tests/policy/suite1/json_templater.robot @@ -0,0 +1,21 @@ +*** Settings *** +Documentation This resource is filling out json string templates and returning the json back +Library RequestsLibrary +Library eteutils/StringTemplater.py +Library OperatingSystem +Resource global_properties.robot + +*** Keywords *** +Fill JSON Template + [Documentation] Runs substitution on template to return a filled in json + [Arguments] ${json} ${arguments} + ${returned_string}= Template String ${json} ${arguments} + ${returned_json}= To Json ${returned_string} + [Return] ${returned_json} + +Fill JSON Template File + [Documentation] Runs substitution on template to return a filled in json + [Arguments] ${json_file} ${arguments} + ${json}= OperatingSystem.Get File ${json_file} + ${returned_json}= Fill JSON Template ${json} ${arguments} + [Return] ${returned_json}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/opspolicy_VDNS.template b/test/csit/tests/policy/suite1/opspolicy_VDNS.template new file mode 100644 index 000000000..801773d57 --- /dev/null +++ b/test/csit/tests/policy/suite1/opspolicy_VDNS.template @@ -0,0 +1,26 @@ +{ + "policyConfigType": "BRMS_PARAM", + "policyName": "${policy_name}", + "policyDescription": "Create BRMS Param policy for vLB", + "attributes": { + "MATCHING": { + "controller": "vDNS" + }, + "RULE": { + "templateName": "ControlLoopDemo__closedLoopControlName", + "closedLoopControlName": "CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8", + "policyVersion": "v1.0", + "actor": "MSO", + "aaiNamedQueryUUID": "4ff56a54-9e3f-46b7-a337-07a1d3c6b469", + "aaiURL": "https://aai.api.simpledemo.openecomp.org:8443/aai/search/named-query", + "aaiUsername": "POLICY", + "aaiPassword": "POLICY", + "msoURL": "http://vm1.mso.simpledemo.openecomp.org:8080/ecomp/mso/infra", + "msoUsername": "InfraPortalClient", + "msoPassword": "password11", + "aaiPatternMatch": 0, + "notificationTopic": "POLICY-CL-MGT", + "appcTopic": "APPC-CL" + } + } +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/opspolicy_VDNS_R1.template b/test/csit/tests/policy/suite1/opspolicy_VDNS_R1.template new file mode 100644 index 000000000..92627cc2d --- /dev/null +++ b/test/csit/tests/policy/suite1/opspolicy_VDNS_R1.template @@ -0,0 +1,16 @@ +{ + "policyConfigType": "BRMS_PARAM", + "policyName": "${policy_name}", + "policyDescription": "BRMS Param vDNS policy", + "policyScope": "com", + "attributes": { + "MATCHING": { + "controller" : "amsterdam" + }, + "RULE": { + "templateName": "ClosedLoopControlName", + "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", + "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3%0D%0A++trigger_policy%3A+unique-policy-id-1-scale-up%0D%0A++timeout%3A+1200%0D%0A++abatement%3A+false%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-scale-up%0D%0A++++name%3A+Create+a+new+VF+Module%0D%0A++++description%3A%0D%0A++++actor%3A+SO%0D%0A++++recipe%3A+VF+Module+Create%0D%0A++++target%3A%0D%0A++++++type%3A+VNF%0D%0A++++retry%3A+0%0D%0A++++timeout%3A+1200%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" + } + } +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/opspolicy_VFW.template b/test/csit/tests/policy/suite1/opspolicy_VFW.template new file mode 100644 index 000000000..224f5cf41 --- /dev/null +++ b/test/csit/tests/policy/suite1/opspolicy_VFW.template @@ -0,0 +1,24 @@ +{ + "policyConfigType": "BRMS_PARAM", + "policyName": "${policy_name}", + "policyDescription": "Create BRMS Param policy for vFW", + "attributes": { + "RULE": { + "templateName": "ControlLoopDemo__closedLoopControlName", + "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", + "policyVersion": "v1.0", + "aaiNamedQueryUUID": "null", + "aaiPassword": "null", + "aaiURL": "null", + "actor": "APPC", + "appcTopic": "APPC-CL", + "msoPassword": "null", + "msoURL": "null", + "msoUsername": "null", + "aaiUsername": "null", + "notificationTopic": "POLICY-CL-MGT", + "aaiPatternMatch": 1 + } + } +} + diff --git a/test/csit/tests/policy/suite1/opspolicy_VFW_R1.template b/test/csit/tests/policy/suite1/opspolicy_VFW_R1.template new file mode 100644 index 000000000..a93063f70 --- /dev/null +++ b/test/csit/tests/policy/suite1/opspolicy_VFW_R1.template @@ -0,0 +1,16 @@ +{ + "policyConfigType": "BRMS_PARAM", + "policyName": "${policy_name}", + "policyDescription": "BRMS Param vFirewall policy", + "policyScope": "com", + "attributes": { + "MATCHING": { + "controller" : "amsterdam" + }, + "RULE": { + "templateName": "ClosedLoopControlName", + "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", + "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a%0D%0A++trigger_policy%3A+unique-policy-id-1-modifyConfig%0D%0A++timeout%3A+1200%0D%0A++abatement%3A+false%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-modifyConfig%0D%0A++++name%3A+modify+packet+gen+config%0D%0A++++description%3A%0D%0A++++actor%3A+APPC%0D%0A++++recipe%3A+ModifyConfig%0D%0A++++target%3A%0D%0A++++++%23+TBD+-+Cannot+be+known+until+instantiation+is+done%0D%0A++++++resourceID%3A+Eace933104d443b496b8.nodes.heat.vpg%0D%0A++++++type%3A+VNF%0D%0A++++retry%3A+0%0D%0A++++timeout%3A+300%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" + } + } +} diff --git a/test/csit/tests/policy/suite1/opspolicy_vCPE.template b/test/csit/tests/policy/suite1/opspolicy_vCPE.template new file mode 100644 index 000000000..c17a1bc62 --- /dev/null +++ b/test/csit/tests/policy/suite1/opspolicy_vCPE.template @@ -0,0 +1,16 @@ +{ + "policyConfigType": "BRMS_PARAM", + "policyName": "${policy_name}", + "policyDescription": "BRMS Param vCPE policy", + "policyScope": "com", + "attributes": { + "MATCHING": { + "controller" : "amsterdam" + }, + "RULE": { + "templateName": "ClosedLoopControlName", + "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", + "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e%0D%0A++trigger_policy%3A+unique-policy-id-1-restart%0D%0A++timeout%3A+3600%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-restart%0D%0A++++name%3A+Restart+the+VM%0D%0A++++description%3A%0D%0A++++actor%3A+APPC%0D%0A++++recipe%3A+Restart%0D%0A++++target%3A%0D%0A++++++type%3A+VM%0D%0A++++retry%3A+3%0D%0A++++timeout%3A+1200%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" + } + } +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/opspolicy_vCPE_R1.template b/test/csit/tests/policy/suite1/opspolicy_vCPE_R1.template new file mode 100644 index 000000000..36695daa4 --- /dev/null +++ b/test/csit/tests/policy/suite1/opspolicy_vCPE_R1.template @@ -0,0 +1,16 @@ +{ + "policyConfigType": "BRMS_PARAM", + "policyName": "${policy_name}", + "policyDescription": "BRMS Param vCPE policy", + "policyScope": "com", + "attributes": { + "MATCHING": { + "controller" : "amsterdam" + }, + "RULE": { + "templateName": "ClosedLoopControlName", + "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", + "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e%0D%0A++trigger_policy%3A+unique-policy-id-1-restart%0D%0A++timeout%3A+3600%0D%0A++abatement%3A+true%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-restart%0D%0A++++name%3A+Restart+the+VM%0D%0A++++description%3A%0D%0A++++actor%3A+APPC%0D%0A++++recipe%3A+Restart%0D%0A++++target%3A%0D%0A++++++type%3A+VM%0D%0A++++retry%3A+3%0D%0A++++timeout%3A+1200%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" + } + } +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/opspolicy_vOLTE.template b/test/csit/tests/policy/suite1/opspolicy_vOLTE.template new file mode 100644 index 000000000..e43a3e6f9 --- /dev/null +++ b/test/csit/tests/policy/suite1/opspolicy_vOLTE.template @@ -0,0 +1,16 @@ +{ + "policyConfigType": "BRMS_PARAM", + "policyName": "${policy_name}", + "policyDescription": "BRMS Param VOLTE policy", + "policyScope": "com", + "attributes": { + "MATCHING": { + "controller" : "amsterdam" + }, + "RULE": { + "templateName": "ClosedLoopControlName", + "closedLoopControlName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b", + "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b%0D%0A++trigger_policy%3A+unique-policy-id-1-restart%0D%0A++timeout%3A+3600%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-restart%0D%0A++++name%3A+Restart+the+VM%0D%0A++++description%3A%0D%0A++++actor%3A+VFC%0D%0A++++recipe%3A+Restart%0D%0A++++target%3A%0D%0A++++++type%3A+VM%0D%0A++++retry%3A+3%0D%0A++++timeout%3A+1200%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" + } + } +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/opspolicy_vOLTE_R1.template b/test/csit/tests/policy/suite1/opspolicy_vOLTE_R1.template new file mode 100644 index 000000000..ff5fc42c4 --- /dev/null +++ b/test/csit/tests/policy/suite1/opspolicy_vOLTE_R1.template @@ -0,0 +1,16 @@ +{ + "policyConfigType": "BRMS_PARAM", + "policyName": "${policy_name}", + "policyDescription": "BRMS Param VOLTE policy", + "policyScope": "com", + "attributes": { + "MATCHING": { + "controller" : "amsterdam" + }, + "RULE": { + "templateName": "ClosedLoopControlName", + "closedLoopControlName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b", + "controlLoopYaml": "controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b%0D%0A++trigger_policy%3A+unique-policy-id-1-restart%0D%0A++timeout%3A+3600%0D%0A++abatement%3A+false%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-restart%0D%0A++++name%3A+Restart+the+VM%0D%0A++++description%3A%0D%0A++++actor%3A+VFC%0D%0A++++recipe%3A+Restart%0D%0A++++target%3A%0D%0A++++++type%3A+VM%0D%0A++++retry%3A+3%0D%0A++++timeout%3A+1200%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard" + } + } +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/policy_interface.robot b/test/csit/tests/policy/suite1/policy_interface.robot new file mode 100644 index 000000000..791787081 --- /dev/null +++ b/test/csit/tests/policy/suite1/policy_interface.robot @@ -0,0 +1,60 @@ +*** Settings *** +Documentation The main interface for interacting with Policy. It handles low level stuff like managing the http request library and Policy required fields +Library eteutils/RequestsClientCert.py +#Library RequestsClientCert +Library RequestsLibrary +Library String +Library eteutils/JSONUtils.py +#Library JSONUtils +Library Collections +Resource global_properties.robot + +*** Variables *** +${POLICY_HEALTH_CHECK_PATH} /healthcheck + +*** Keywords *** + +Run Policy Health Check + [Documentation] Runs Policy Health check + ${auth}= Create List ${GLOBAL_POLICY_USERNAME} ${GLOBAL_POLICY_PASSWORD} + Log Creating session ${GLOBAL_POLICY_SERVER_URL} + ${session}= Create Session policy ${GLOBAL_POLICY_HEALTHCHECK_URL} auth=${auth} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json + ${resp}= Get Request policy ${POLICY_HEALTH_CHECK_PATH} headers=${headers} + Log Received response from policy ${resp.text} + Should Be Equal As Strings ${resp.status_code} 200 + Should Be True ${resp.json()['healthy']} + @{ITEMS}= Copy List ${resp.json()['details']} + :FOR ${ELEMENT} IN @{ITEMS} + \ Should Be Equal As Strings ${ELEMENT['code']} 200 + \ Should Be True ${ELEMENT['healthy']} + +Run Policy Put Request + [Documentation] Runs Policy Put request + [Arguments] ${data_path} ${data} + Log Creating session ${GLOBAL_POLICY_SERVER_URL} + ${session}= Create Session policy ${GLOBAL_POLICY_SERVER_URL} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic ${GLOBAL_POLICY_AUTH} ClientAuth=${GLOBAL_POLICY_CLIENTAUTH} Environment=TEST + ${resp}= Put Request policy ${data_path} data=${data} headers=${headers} + Log Received response from policy ${resp.text} + [Return] ${resp} + +Run Policy Delete Request + [Documentation] Runs Policy Delete request + [Arguments] ${data_path} ${data} + Log Creating session ${GLOBAL_POLICY_SERVER_URL} + ${session}= Create Session policy ${GLOBAL_POLICY_SERVER_URL} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic ${GLOBAL_POLICY_AUTH} ClientAuth=${GLOBAL_POLICY_CLIENTAUTH} Environment=TEST + ${resp}= Delete Request policy ${data_path} data=${data} headers=${headers} + Log Received response from policy ${resp.text} + [Return] ${resp} + +Run Policy Get Configs Request + [Documentation] Runs Policy Get Configs request + [Arguments] ${data_path} ${data} + Log Creating session ${GLOBAL_POLICY_SERVER_URL} + ${session}= Create Session policy ${GLOBAL_POLICY_SERVER_URL} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic ${GLOBAL_POLICY_AUTH} ClientAuth=${GLOBAL_POLICY_CLIENTAUTH} + ${resp}= Post Request policy ${data_path} data=${data} headers=${headers} + Log Received response from policy ${resp.text} + [Return] ${resp}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/pushpolicy.template b/test/csit/tests/policy/suite1/pushpolicy.template new file mode 100644 index 000000000..7e236e3d4 --- /dev/null +++ b/test/csit/tests/policy/suite1/pushpolicy.template @@ -0,0 +1,5 @@ +{ + "policyName":"${policy_name}", + "policyType":"${policy_type}", + "pdpGroup":"default" +}
\ No newline at end of file diff --git a/test/csit/tests/policy/suite1/test1.robot b/test/csit/tests/policy/suite1/test1.robot deleted file mode 100644 index 10e685213..000000000 --- a/test/csit/tests/policy/suite1/test1.robot +++ /dev/null @@ -1,30 +0,0 @@ -*** Settings *** -Library OperatingSystem -Library RequestsLibrary - -*** Variables *** -${MESSAGE} Hello, world! - -*** Test Cases *** -String Equality Test - Should Be Equal ${MESSAGE} Hello, world! - -Dir Test - [Documentation] Check if /tmp exists - Log ${MESSAGE} - CheckDir /tmp - -Url Test - [Documentation] Check if google.com can be reached - CheckUrl http://www.google.com - -*** Keywords *** -CheckDir - [Arguments] ${path} - Directory Should Exist ${path} - -CheckUrl - [Arguments] ${url} - Create Session session ${url} - ${resp}= Get Request session / - Should Be Equal As Integers ${resp.status_code} 200 diff --git a/test/csit/tests/portal-sdk/testsuites/__init__.robot b/test/csit/tests/portal-sdk/testsuites/__init__.robot new file mode 100644 index 000000000..b1df467c8 --- /dev/null +++ b/test/csit/tests/portal-sdk/testsuites/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Documentation Portal-SDK - Testcases diff --git a/test/csit/tests/portal-sdk/testsuites/test1.robot b/test/csit/tests/portal-sdk/testsuites/test1.robot new file mode 100644 index 000000000..84579d017 --- /dev/null +++ b/test/csit/tests/portal-sdk/testsuites/test1.robot @@ -0,0 +1,150 @@ +*** Settings *** +Documentation This is RobotFrame work script +Library ExtendedSelenium2Library +Library OperatingSystem +Library XvfbRobot + + +*** Variables *** +${PORTAL_URL} http://portal.api.simpledemo.onap.org:8989 +${PORTAL_ENV} /ONAPPORTAL +${PORTAL_LOGIN_URL} ${PORTAL_URL}${PORTAL_ENV}/login.htm +${PORTAL_HOME_PAGE} ${PORTAL_URL}${PORTAL_ENV}/applicationsHome +${PORTAL_MICRO_ENDPOINT} ${PORTAL_URL}${PORTAL_ENV}/commonWidgets +${PORTAL_HOME_URL} ${PORTAL_URL}${PORTAL_ENV}/applicationsHome +${GLOBAL_APPLICATION_ID} robot-functional +${GLOBAL_PORTAL_ADMIN_USER} demo +${GLOBAL_PORTAL_ADMIN_PWD} demo123456! +${GLOBAL_SELENIUM_BROWSER} chrome +${GLOBAL_SELENIUM_BROWSER_CAPABILITIES} Create Dictionary +${GLOBAL_SELENIUM_DELAY} 0 +${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} 5 +${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 15 +${GLOBAL_BUILD_NUMBER} 0 +${GLOBAL_VM_PRIVATE_KEY} ${EXECDIR}/robot/assets/keys/robot_ssh_private_key.pvt + + +*** Test Cases *** + +Portal admin Login To Portal GUI + [Documentation] Logs into Portal GUI +# Setup Browser + Start Virtual Display 1920 1080 + Open Browser ${PORTAL_LOGIN_URL} chrome +# Go To ${PORTAL_LOGIN_URL} + Maximize Browser Window + Set Selenium Speed ${GLOBAL_SELENIUM_DELAY} + Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} + Log Logging in to ${PORTAL_URL}${PORTAL_ENV} + # Handle Proxy Warning + Title Should Be Login + Input Text xpath=//input[@ng-model='loginId'] ${GLOBAL_PORTAL_ADMIN_USER} + Input Password xpath=//input[@ng-model='password'] ${GLOBAL_PORTAL_ADMIN_PWD} + Click Link xpath=//a[@id='loginBtn'] + Wait Until Page Contains Element xpath=//img[@alt='Onap Logo'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Log Logged in to ${PORTAL_URL}${PORTAL_ENV} + + +Portal Admin Navigation Application Link Tab + [Documentation] Logs into Portal GUI as Portal admin + Click Element xpath=.//h3[contains(text(),'xDemo App')]/following::div[1] + Go To ${PORTAL_HOME_PAGE} + Dismiss Alert accept=false + #Scroll Element Into View xpath=//span[@id='tab-Home'] + #Click Element xpath=//span[@id='tab-Home'] + #Click Element xpath=(//span[@id='tab-xDemo-App']/following::i[@class='ion-close-round'])[1] + Click Element xpath=.//h3[contains(text(),'xDemo App')]/following::div[1] + + + +Validate SDK Sub Menu + [Documentation] Logs into SDK GUI as Portal admin + Page Should Contain Home + Page Should Contain Sample Pages + Page Should Contain Reports + Page Should Contain Profile + Page Should Contain Admin + +Click Sample Pages and validate sub Menu + [Documentation] Click Sample Pages + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Sample-Pages'] + Element Text Should Be xpath=//a[@title='Collaboration'] Collaboration + Element Text Should Be xpath=//a[@title='Notebook'] Notebook + Click Link xpath=//a[contains(@title,'Collaboration')] + Page Should Contain User List + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Sample-Pages'] + Click Link xpath=//a[contains(@title,'Notebook')] + Element Text Should Be xpath=//h1[contains(.,'Notebook')] Notebook + +Click Reports and validate sub Menu + [Documentation] Click Reports Tab + #Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Reports'] + Element Text Should Be xpath=//a[@title='All Reports'] All Reports + Element Text Should Be xpath=//a[@title='Create Reports'] Create Reports + Click Link xpath=//a[contains(@title,'All Reports')] + Page Should Contain Report search + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Reports'] + Click Link xpath=//a[contains(@title,'Create Reports')] + Page Should Contain Report Wizard + +Click Profile and validate sub Menu + [Documentation] Click Profile Tab + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Profile'] + Element Text Should Be xpath=//a[@title='Search'] Search + Element Text Should Be xpath=//a[@title='Self'] Self + Click Link xpath=//a[contains(@title,'Search')] + Page Should Contain Profile Search + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Profile'] + Click Link xpath=//a[contains(@title,'Self')] + Page Should Contain Self Profile Detail + + +Click Admin and validate sub Menu + [Documentation] Click Admin Tab + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Admin'] + Element Text Should Be xpath=//a[@title='Roles'] Roles + Element Text Should Be xpath=//a[@title='Role Functions'] Role Functions + Element Text Should Be xpath=//a[@title='Cache Admin'] Cache Admin + Element Text Should Be xpath=//a[@title='Menus'] Menus + Element Text Should Be xpath=//a[@title='Usage'] Usage + Click Link xpath=//a[contains(@title,'Roles')] + Page Should Contain Roles + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Admin'] + Click Link xpath=//a[contains(@title,'Role Function')] + Page Should Contain Role Function + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=.//a[@id='parent-item-Admin'] + #Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Admin'] + Click Link xpath=//a[contains(@title,'Cache Admin')] + Page Should Contain Cache Regions + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=.//a[@id='parent-item-Admin'] + Click Link xpath=//a[@id='parent-item-Admin'] + Click Link xpath=//a[contains(@title,'Menus')] + Page Should Contain Admin Menu Items + Select frame xpath=.//*[@id='tabframe-xDemo-App'] + Click Link xpath=//a[@id='parent-item-Admin'] + Click Link xpath=//a[@id='parent-item-Admin'] + Click Link xpath=//a[contains(@title,'Usage')] + Page Should Contain Current Usage + + +Teardown + [Documentation] Close All Open browsers + Close All Browsers + + + + + + +*** Keywords *** diff --git a/test/csit/tests/portal/testsuites/__init__.robot b/test/csit/tests/portal/testsuites/__init__.robot index 3b8528dff..885710c9b 100644 --- a/test/csit/tests/portal/testsuites/__init__.robot +++ b/test/csit/tests/portal/testsuites/__init__.robot @@ -1,2 +1,2 @@ *** Settings *** -Documentation APPC - healthcheck +Documentation Portal - Testcases diff --git a/test/csit/tests/portal/testsuites/json_templater.robot b/test/csit/tests/portal/testsuites/json_templater.robot new file mode 100644 index 000000000..01eba480d --- /dev/null +++ b/test/csit/tests/portal/testsuites/json_templater.robot @@ -0,0 +1,21 @@ +*** Settings *** +Documentation This resource is filling out json string templates and returning the json back +Library RequestsLibrary +Library eteutils/StringTemplater.py +Library OperatingSystem +#Resource global_properties.robot + +*** Keywords *** +Fill JSON Template + [Documentation] Runs substitution on template to return a filled in json + [Arguments] ${json} ${arguments} + ${returned_string}= Template String ${json} ${arguments} + ${returned_json}= To Json ${returned_string} + [Return] ${returned_json} + +Fill JSON Template File + [Documentation] Runs substitution on template to return a filled in json + [Arguments] ${json_file} ${arguments} + ${json}= OperatingSystem.Get File ${json_file} + ${returned_json}= Fill JSON Template ${json} ${arguments} + [Return] ${returned_json}
\ No newline at end of file diff --git a/test/csit/tests/portal/testsuites/portal.template b/test/csit/tests/portal/testsuites/portal.template new file mode 100644 index 000000000..57a3b798b --- /dev/null +++ b/test/csit/tests/portal/testsuites/portal.template @@ -0,0 +1,34 @@ +{ +"application" : "${jira_id}", +"event" : { +"body" : { +"ticketStatePhrase" : "We recently detected a problem with the equipment at your site. The event is in queue for immediate work.", +"ivrNotificationFlag" : "1", +"expectedRestoreDate" : 0, +"bridgeTransport" : "AOTS", +"reptRequestType" : 0, +"ticketNum" : "PORTAL-104", +"assetID" : "JIRA notification from demo", +"eventAbstract" : "This is the place to enter notification contents!!! ", +"severity" : "2 - Major", +"ticketPriority" : "3", +"reportedCustomerImpact" : 0, +"testAutoIndicator" : 0, +"supportGroupName" : "US-TEST-ORT", +"messageGroup" : "SNMP", +"csi" : 0, +"mfabRestoredTime" : 0 +}, +"header" : { +"timestamp" : "2017-04-10T14:35:05.219+0000", +"eventSource" : "JIRA", +"entityId" : "000002000857405", +"sequenceNumber" : 2 +}, +"blinkMsgId" : "f38c071e-1a47-4b55-9e72-1db830100a61", +"sourceIP" : "130.4.165.158" +}, +"SubscriberInfo" : { +"UserList" : ["demo"] +} +} diff --git a/test/csit/tests/portal/testsuites/test1.robot b/test/csit/tests/portal/testsuites/test1.robot index c19655892..70fdcf0d6 100644 --- a/test/csit/tests/portal/testsuites/test1.robot +++ b/test/csit/tests/portal/testsuites/test1.robot @@ -2,70 +2,197 @@ Documentation This is RobotFrame work script Library ExtendedSelenium2Library Library OperatingSystem -Resource ../resources/browser_setup.robot -#Resource ../resources/Portal/portal_int_par.robot -Resource ../resources/Portal/portal_VID.robot -#Resource ../resources/Portal/portal_SDC.robot +Library eteutils/RequestsClientCert.py +Library RequestsLibrary +Library eteutils/UUID.py +Library DateTime +Library Collections +Library eteutils/OSUtils.py +Library eteutils/StringTemplater.py +Library XvfbRobot +Resource json_templater.robot *** Variables *** +${PORTAL_URL} http://portal.api.simpledemo.onap.org:8989 +${PORTAL_ENV} /ONAPPORTAL +${PORTAL_LOGIN_URL} ${PORTAL_URL}${PORTAL_ENV}/login.htm +${PORTAL_HOME_PAGE} ${PORTAL_URL}${PORTAL_ENV}/applicationsHome +${PORTAL_MICRO_ENDPOINT} ${PORTAL_URL}${PORTAL_ENV}/commonWidgets +${PORTAL_HOME_URL} ${PORTAL_URL}${PORTAL_ENV}/applicationsHome +${App_First_Name} demoapp +${App_Last_Name} demo +${App_Email_Address} demoapp@onap.com +${App_LoginID} demoapp +${App_Loginpwd} demo123456! +${App_LoginPwdCheck} demo123456! +${Sta_First_Name} demosta +${Sta_Last_Name} demo +${Sta_Email_Address} demosta@onap.com +${Sta_LoginID} demosta +${Sta_Loginpwd} demo123456! +${Sta_LoginPwdCheck} demo123456! +${Test_First_Name} portal +${Test_Last_Name} demo +${Test_Email_Address} portal@onap.com +${Test_LoginID} portal +${Test_Loginpwd} demo123456! +${Test_LoginPwdCheck} demo123456! +${Existing_User} portal +${PORTAL_HEALTH_CHECK_PATH} /ONAPPORTAL/portalApi/healthCheck +${PORTAL_ASSETS_DIRECTORY} ${CURDIR} +${GLOBAL_APPLICATION_ID} robot-functional +${GLOBAL_PORTAL_ADMIN_USER} demo +${GLOBAL_PORTAL_ADMIN_PWD} demo123456! +${GLOBAL_MSO_STATUS_PATH} /ecomp/mso/infra/orchestrationRequests/v2/ +${GLOBAL_SELENIUM_BROWSER} chrome +${GLOBAL_SELENIUM_BROWSER_CAPABILITIES} Create Dictionary +${GLOBAL_SELENIUM_DELAY} 0 +${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} 5 +${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 15 +${GLOBAL_OPENSTACK_HEAT_SERVICE_TYPE} orchestration +${GLOBAL_OPENSTACK_CINDER_SERVICE_TYPE} volume +${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} compute +${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} network +${GLOBAL_OPENSTACK_GLANCE_SERVICE_TYPE} image +${GLOBAL_OPENSTACK_KEYSTONE_SERVICE_TYPE} identity +${GLOBAL_BUILD_NUMBER} 0 +${GLOBAL_VM_PRIVATE_KEY} ${EXECDIR}/robot/assets/keys/robot_ssh_private_key.pvt +${jira} jira +${RESOURCE_PATH} ONAPPORTAL/auxapi/ticketevent +${portal_Template} ${CURDIR}/portal.template + *** Test Cases *** Portal Health Check Run Portal Health Check - - -Portal Admin functionality - [Documentation] ONAP Portal Admin functionality test - Setup Browser - Portal admin Login To Portal GUI + +Login into Portal URL + Portal admin Login To Portal GUI + +Portal R1 Release + [Documentation] ONAP Portal R1 functionality test + Notification on ONAP Portal + Portal Application Account Management validation + +Portal R1 Release for AAF + [Documentation] ONAP Portal R1 functionality for AAF test + Portal AAF new fields + +Create Microse service onboarding Portal admin Microservice Onboarding - Portal Admin Create Widget for All users - Portal Admin Delete Widget for All users + + +Create Widget for all users + Portal Admin Create Widget for All users + +Delete Widget for all users + Portal Admin Delete Widget for All users + +Create Widget for Application Roles Portal Admin Create Widget for Application Roles - Portal Admin Delete Widget for Application Roles - Portal admin Add Application admin User New user - Portal admin Add Standard User New user - Portal admin Add Application Admin Exiting User -APPDEMO - Portal admin Add Application Admin Exiting User - Portal admin Delete Application Admin Existing User - Portal Admin Delete Widget for All users - Portal admin Add Standard User Existing user - Portal admin Edit Standard User Existing user - Portal admin Delete Standard User Existing user - Functional Top Menu Get Access - Functional Top Menu Contact Us - Portal admin Edit Functional menu - ${AdminBroadCastMsg}= Portal Admin Broadcast Notifications - set global variable ${AdminBroadCastMsg} - ${AdminCategoryMsg}= Portal Admin Category Notifications - set global variable ${AdminCategoryMsg} - Portal admin Logout from Portal GUI - - -Application Admin functionality - [Documentation] ONAP Application Admin functionality test - Application admin Login To Portal GUI -# Application Admin Navigation Application Link Tab -# Application Admin Navigation Functional Menu - Application admin Add Standard User Existing user - Application admin Edit Standard User Existing user - Application admin Delete Standard User Existing user - Application admin Logout from Portal GUI - -Standared User functionality - [Documentation] ONAP Standared User functionality test - Standared user Login To Portal GUI -# Standared user Navigation Application Link Tab -# Standared user Navigation Functional Menu - Standared user Broadcast Notifications ${AdminBroadCastMsg} - Standared user Category Notifications ${AdminCategoryMsg} + +Delete Widget for Application Roles + Portal Admin Delete Widget for Application Roles + +Validate Functional Top Menu Get Access + Functional Top Menu Get Access + +Validate Functional Top Menu Contact Us + Functional Top Menu Contact Us + +Edit Functional Menu + Portal admin Edit Functional menu + + +Broadbond Notification functionality + ${AdminBroadCastMsg}= Portal Admin Broadcast Notifications + set global variable ${AdminBroadCastMsg} + +Category Notification functionality + ${AdminCategoryMsg}= Portal Admin Category Notifications + set global variable ${AdminCategoryMsg} + +Create a Test user for Application Admin -Test + Portal admin Add Application admin User New user -Test + +Create a Test User for Apllication Admin + Portal admin Add Application admin User New user + +Add Application Admin for Existing User Test user + Portal admin Add Application Admin Exiting User -APPDEMO + +Create a Test user for Standared User + Portal admin Add Standard User New user + +Add Application Admin for Exisitng User + Portal admin Add Application Admin Exiting User + +Delete Application Admin for Exisitng User + Portal admin Delete Application Admin Existing User + +Add Standard User Role for Existing user + Portal admin Add Standard User Existing user + +Edit Standard User Role for Existing user + Portal admin Edit Standard User Existing user + + +Delete Standard User Role for Existing user + Portal admin Delete Standard User Existing user + + + + +Logout from Portal GUI as Portal Admin + Portal admin Logout from Portal GUI + +Login To Portal GUI as APP Admin + Application admin Login To Portal GUI + + + +##Navigate Functional Link as APP Admin +## Application Admin Navigation Functional Menu + +Add Standard User Role for Existing user as APP Admin + Application admin Add Standard User Existing user + +Edit Standard User Role for Existing user as APP Admin + Application admin Edit Standard User Existing user + +Delete Standard User Role for Existing user as APP Admin + Application admin Delete Standard User Existing user + +#Navigate Application Link as APP Admin +# Application Admin Navigation Application Link Tab + +Logout from Portal GUI as APP Admin + Application admin Logout from Portal GUI + + +Login To Portal GUI as Standared User + Standared user Login To Portal GUI + +#Navigate Application Link as Standared User +# Standared user Navigation Application Link Tab + +##Navigate Functional Link as Standared User +## Standared user Navigation Functional Menu + +Broadcast Notifications Standared user + Standared user Broadcast Notifications ${AdminBroadCastMsg} + +Category Notifications Standared user + Standared user Category Notifications ${AdminCategoryMsg} + + Teardown - [Documentation] Close All Open browsers - Close All Browsers + [Documentation] Close All Open browsers + Close All Browsers @@ -73,3 +200,820 @@ Teardown *** Keywords *** + +Setup Browser + [Documentation] Sets up browser based upon the value of ${GLOBAL_SELENIUM_BROWSER} +# Run Keyword If '${GLOBAL_SELENIUM_BROWSER}' == 'firefox' Setup Browser Firefox + Run Keyword If '${GLOBAL_SELENIUM_BROWSER}' == 'chrome' Setup Browser Chrome + Log Running with ${GLOBAL_SELENIUM_BROWSER} + + + Setup Browser Chrome + ${os}= Get Normalized Os + Log Normalized OS=${os} + ${chrome options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys + Call Method ${chrome options} add_argument no-sandbox + ${dc} Evaluate sys.modules['selenium.webdriver'].DesiredCapabilities.CHROME sys, selenium.webdriver + Set To Dictionary ${dc} elementScrollBehavior 1 + Create Webdriver Chrome chrome_options=${chrome_options} desired_capabilities=${dc} + Set Global Variable ${GLOBAL_SELENIUM_BROWSER_CAPABILITIES} ${dc} + +Handle Proxy Warning + [Documentation] Handle Intermediate Warnings from Proxies + ${status} ${data}= Run Keyword And Ignore Error Variable Should Exist \${GLOBAL_PROXY_WARNING_TITLE} + Return From Keyword if '${status}' != 'PASS' + ${status} ${data}= Run Keyword And Ignore Error Variable Should Exist \${GLOBAL_PROXY_WARNING_CONTINUE_XPATH} + Return From Keyword if '${status}' != 'PASS' + Return From Keyword if "${GLOBAL_PROXY_WARNING_TITLE}" == '' + Return From Keyword if "${GLOBAL_PROXY_WARNING_CONTINUE_XPATH}" == '' + ${test} ${value}= Run keyword and ignore error Title Should Be ${GLOBAL_PROXY_WARNING_TITLE} + Run keyword If '${test}' == 'PASS' Click Element xpath=${GLOBAL_PROXY_WARNING_CONTINUE_XPATH} + + +Run Portal Health Check + [Documentation] Runs Portal Health check + ${resp}= Run Portal Get Request ${PORTAL_HEALTH_CHECK_PATH} + Should Be Equal As Strings ${resp.status_code} 200 + Should Be Equal As Strings ${resp.json()['statusCode']} 200 +Run Portal Get Request + [Documentation] Runs Portal Get request + [Arguments] ${data_path} + ${session}= Create Session portal ${PORTAL_URL} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Get Request portal ${data_path} headers=${headers} + Log Received response from portal ${resp.text} + [Return] ${resp} + + +Portal admin Login To Portal GUI + [Documentation] Logs into Portal GUI + ## Setup Browser Now being managed by test case +# Setup Browser + Start Virtual Display 1920 1080 + Open Browser ${PORTAL_LOGIN_URL} chrome +# Go To ${PORTAL_LOGIN_URL} + Maximize Browser Window + Set Selenium Speed ${GLOBAL_SELENIUM_DELAY} + Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} + Log Logging in to ${PORTAL_URL}${PORTAL_ENV} + # Handle Proxy Warning + Title Should Be Login + Input Text xpath=//input[@ng-model='loginId'] ${GLOBAL_PORTAL_ADMIN_USER} + Input Password xpath=//input[@ng-model='password'] ${GLOBAL_PORTAL_ADMIN_PWD} + Click Link xpath=//a[@id='loginBtn'] + Wait Until Page Contains Element xpath=//img[@alt='Onap Logo'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Log Logged in to ${PORTAL_URL}${PORTAL_ENV} + +Portal admin Go To Portal HOME + [Documentation] Naviage to Portal Home + Go To ${PORTAL_HOME_URL} + Wait Until Page Contains Element xpath=//div[@class='applicationWindow'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + +Portal admin User Notifications + [Documentation] Naviage to User notification tab + Click Link xpath=//a[@id='parent-item-User-Notifications'] + Wait Until Element Is Visible xpath=//h1[@class='heading-page'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Click Button xpath=//button[@id='button-openAddNewApp'] + Click Button xpath=(//button[@id='undefined'])[1] + #Click Button xpath=//input[@id='datepicker-start'] + + + + +Portal admin Add Application Admin Exiting User + [Documentation] Naviage to Admins tab + Wait Until Element Is Visible xpath=//a[@title='Admins'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Click Link xpath=//a[@title='Admins'] + Wait Until Element Is Visible xpath=//h1[contains(.,'Admins')] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Page Should Contain Admins + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Button xpath=//button[@ng-click='admins.openAddNewAdminModal()'] + Input Text xpath=//input[@id='input-user-search'] ${Existing_User} + Click Button xpath=//button[@id='button-search-users'] + Click Element xpath=//span[@id='result-uuid-0'] + Click Button xpath=//button[@id='search-users-button-next'] + Click Button xpath=//input[@value='Select application'] + Scroll Element Into View xpath=(//input[@value='Select application']/following::*[contains(text(),'xDemo App' )])[1] + Click Element xpath=(//li[contains(.,'xDemo App' )])[2] + #Select From List xpath=(//input[@value='Select application']/following::*[contains(text(),'xDemo App')])[1] xDemo App + Click Button xpath=//button[@id='div-updateAdminAppsRoles'] + Click Element xpath=//button[@id='admin-div-ok-button'] + Click Element xpath=//button[@id='div-confirm-ok-button'] + Get Selenium Implicit Wait + Click Link xpath=//a[@aria-label='Admins'] + Click Element xpath=//input[@id='dropdown1'] + Click Element xpath=//li[contains(.,'xDemo App' )] + Input Text xpath=//input[@id='input-table-search'] ${Existing_User} + Table Column Should Contain xpath=//*[@table-data='admins.adminsTableData'] 1 ${Existing_User} + #Element Text Should Be xpath=(//span[contains(.,'portal')])[1] ${Existing_User} + #Element Text Should Be xpath=(//span[contains(.,'demo')])[1] ${Existing_User} + + +Portal admin Delete Application Admin Existing User + [Documentation] Naviage to Admins tab + Click Element xpath=(//span[contains(.,'portal')] )[1] + #Click Element xpath=(//span[contains(.,'demo')] )[1] + Click Element xpath=//*[@id='select-app-xDemo-App']/following::i[@id='i-delete-application'] + Click Element xpath=//button[@id='div-confirm-ok-button'] + Click Button xpath=//button[@id='div-updateAdminAppsRoles'] + Click Element xpath=//button[@id='admin-div-ok-button'] + #Is Element Visible xpath=(//span[contains(.,'Portal')] )[2] + #Is Element Visible xpath=(//*[contains(.,'Portal')] )[2] + Element Should Not Contain xpath=//*[@table-data='admins.adminsTableData'] portal + #Element Should Not Contain xpath=//*[@table-data='admins.adminsTableData'] demo + Click Image xpath=//img[@alt='Onap Logo'] + Set Selenium Implicit Wait 3000 + + +Portal admin Add Application admin User New user + [Documentation] Naviage to Users tab + Click Link xpath=//a[@title='Users'] + Page Should Contain Users + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Button xpath=//button[@id='users-button-add'] + Click Button xpath=//button[@id='Create-New-User-button'] + Input Text xpath=//input[@ng-model='searchUsers.newUser.firstName'] ${App_First_Name} + Input Text xpath=//input[@ng-model='searchUsers.newUser.lastName'] ${App_Last_Name} + Input Text xpath=//input[@ng-model='searchUsers.newUser.emailAddress'] ${App_Email_Address} + Input Text xpath=//input[@ng-model='searchUsers.newUser.loginId'] ${App_LoginID} + Input Text xpath=//input[@ng-model='searchUsers.newUser.loginPwd'] ${App_Loginpwd} + Input Text xpath=//input[@ng-model='searchUsers.newUser.loginPwdCheck'] ${App_LoginPwdCheck} + Click Button xpath=//button[@ng-click='searchUsers.addNewUserFun()'] + Click Button xpath=//button[@id='next-button'] + #Scroll Element Into View xpath=//div[@id='div-app-name-dropdown-xDemo-App'] + Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App'] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox'] + Set Selenium Implicit Wait 3000 + Click Button xpath=//button[@id='new-user-save-button'] + Set Selenium Implicit Wait 3000 + Go To ${PORTAL_HOME_PAGE} + Click Link xpath=//a[@title='Users'] + Click Element xpath=//input[@id='dropdown1'] + Click Element xpath=//li[contains(.,'xDemo App')] + Table Column Should Contain xpath=//*[@table-data='users.accountUsers'] 1 ${App_First_Name} + #Input Text xpath=//input[@id='input-table-search'] ${App_First_Name} + #Element Text Should Be xpath=(//span[contains(.,'demoapp')] )[1] ${App_First_Name} + Click Image xpath=//img[@alt='Onap Logo'] + Set Selenium Implicit Wait 3000 + + +Portal admin Add Standard User New user + [Documentation] Naviage to Users tab + Click Link xpath=//a[@title='Users'] + Page Should Contain Users + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Button xpath=//button[@id='users-button-add'] + Click Button xpath=//button[@id='Create-New-User-button'] + Input Text xpath=//input[@ng-model='searchUsers.newUser.firstName'] ${Sta_First_Name} + Input Text xpath=//input[@ng-model='searchUsers.newUser.lastName'] ${Sta_Last_Name} + Input Text xpath=//input[@ng-model='searchUsers.newUser.emailAddress'] ${Sta_Email_Address} + Input Text xpath=//input[@ng-model='searchUsers.newUser.loginId'] ${Sta_LoginID} + Input Text xpath=//input[@ng-model='searchUsers.newUser.loginPwd'] ${Sta_Loginpwd} + Input Text xpath=//input[@ng-model='searchUsers.newUser.loginPwdCheck'] ${Sta_LoginPwdCheck} + Click Button xpath=//button[@ng-click='searchUsers.addNewUserFun()'] + Click Button xpath=//button[@id='next-button'] + #Scroll Element Into View xpath=//div[@id='div-app-name-dropdown-xDemo-App'] + Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App'] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox'] + Set Selenium Implicit Wait 3000 + Click Button xpath=//button[@id='new-user-save-button'] + Set Selenium Implicit Wait 3000 + Go To ${PORTAL_HOME_PAGE} + Click Link xpath=//a[@title='Users'] + Click Element xpath=//input[@id='dropdown1'] + Click Element xpath=//li[contains(.,'xDemo App')] + Table Column Should Contain xpath=//*[@table-data='users.accountUsers'] 1 ${Sta_First_Name} + #Input Text xpath=//input[@id='input-table-search'] ${Sta_First_Name} + #Element Text Should Be xpath=(//span[contains(.,'appdemo')] )[1] ${Sta_First_Name} + Click Image xpath=//img[@alt='Onap Logo'] + Set Selenium Implicit Wait 3000 + + + +Portal admin Add Application admin User New user -Test + [Documentation] Naviage to Users tab + Click Link xpath=//a[@title='Users'] + Page Should Contain Users + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Button xpath=//button[@id='users-button-add'] + Click Button xpath=//button[@id='Create-New-User-button'] + Input Text xpath=//input[@ng-model='searchUsers.newUser.firstName'] ${Test_First_Name} + Input Text xpath=//input[@ng-model='searchUsers.newUser.lastName'] ${Test_Last_Name} + Input Text xpath=//input[@ng-model='searchUsers.newUser.emailAddress'] ${Test_Email_Address} + Input Text xpath=//input[@ng-model='searchUsers.newUser.loginId'] ${Test_LoginID} + Input Text xpath=//input[@ng-model='searchUsers.newUser.loginPwd'] ${Test_Loginpwd} + Input Text xpath=//input[@ng-model='searchUsers.newUser.loginPwdCheck'] ${Test_LoginPwdCheck} + Click Button xpath=//button[@ng-click='searchUsers.addNewUserFun()'] + Click Button xpath=//button[@id='search-users-button-cancel'] + Click Image xpath=//img[@alt='Onap Logo'] + Set Selenium Implicit Wait 3000 + + + #Click Button xpath=//button[@id='next-button'] + #Scroll Element Into View xpath=//div[@id='div-app-name-dropdown-xDemo-App'] + #Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App'] + #Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox'] + #Set Selenium Implicit Wait 3000 + #Click Button xpath=//button[@id='new-user-save-button'] + #Set Selenium Implicit Wait 3000 + #Go To ${PORTAL_HOME_PAGE} + #Click Link xpath=//a[@title='Users'] + #Click Element xpath=//input[@id='dropdown1'] + #Click Element xpath=//li[contains(.,'xDemo App')] + #Table Column Should Contain xpath=//*[@table-data='users.accountUsers'] 1 ${Test_First_Name} + #Input Text xpath=//input[@id='input-table-search'] ${Test_First_Name} + #Element Text Should Be xpath=(//span[contains(.,'appdemo')] )[1] ${Test_First_Name} + + + +Portal admin Add Application Admin Exiting User -APPDEMO + [Documentation] Naviage to Admins tab + Wait Until Element Is Visible xpath=//a[@title='Admins'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Click Link xpath=//a[@title='Admins'] + Wait Until Element Is Visible xpath=//h1[contains(.,'Admins')] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Page Should Contain Admins + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Button xpath=//button[@ng-click='admins.openAddNewAdminModal()'] + Input Text xpath=//input[@id='input-user-search'] ${App_First_Name} + Click Button xpath=//button[@id='button-search-users'] + Click Element xpath=//span[@id='result-uuid-0'] + Click Button xpath=//button[@id='search-users-button-next'] + Click Button xpath=//input[@value='Select application'] + Scroll Element Into View xpath=(//input[@value='Select application']/following::*[contains(text(),'xDemo App' )])[1] + Click Element xpath=(//li[contains(.,'xDemo App' )])[2] + #Select From List xpath=(//input[@value='Select application']/following::*[contains(text(),'xDemo App')])[1] xDemo App + Click Button xpath=//button[@id='div-updateAdminAppsRoles'] + Click Element xpath=//button[@id='admin-div-ok-button'] + Click Element xpath=//button[@id='div-confirm-ok-button'] + Get Selenium Implicit Wait + Click Link xpath=//a[@aria-label='Admins'] + Click Element xpath=//input[@id='dropdown1'] + Click Element xpath=//li[contains(.,'xDemo App' )] + Input Text xpath=//input[@id='input-table-search'] ${App_First_Name} + #Element Text Should Be xpath=(//span[contains(.,'appdemo')])[1] ${App_First_Name} + Table Column Should Contain xpath=//*[@table-data='admins.adminsTableData'] 1 ${App_First_Name} + Click Image xpath=//img[@alt='Onap Logo'] + Set Selenium Implicit Wait 3000 + + + + + + + +Portal admin Add Standard User Existing user + [Documentation] Naviage to Users tab + Click Link xpath=//a[@title='Users'] + Page Should Contain Users + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Button xpath=//button[@ng-click='users.openAddNewUserModal()'] + Input Text xpath=//input[@id='input-user-search'] ${Existing_User} + Click Button xpath=//button[@id='button-search-users'] + Click Element xpath=//span[@id='result-uuid-0'] + Click Button xpath=//button[@id='next-button'] + Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App'] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox'] + #Click Element xpath=//div[@id='div-app-name-dropdown-xDemo-App'] + #Click Element xpath=//div[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox'] + Set Selenium Implicit Wait 3000 + Click Button xpath=//button[@id='new-user-save-button'] + Set Selenium Implicit Wait 3000 + #Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} + #Select From List xpath=//input[@value='Select application'] xDemo App + #Click Link xpath=//a[@title='Users'] + #Page Should Contain Users + #Focus xpath=//input[@name='dropdown1'] + Go To ${PORTAL_HOME_PAGE} + Click Link xpath=//a[@title='Users'] + Click Element xpath=//input[@id='dropdown1'] + Click Element xpath=//li[contains(.,'xDemo App')] + #Click Element xpath=//li[contains(.,'XDemo App')] + Input Text xpath=//input[@id='input-table-search'] ${Existing_User} + Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] Standard User + + + +Portal admin Edit Standard User Existing user + [Documentation] Naviage to Users tab + Click Element xpath=(.//*[@id='rowheader_t1_0'])[2] + Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App'] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox'] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='System-Administrator-checkbox'] + Set Selenium Implicit Wait 3000 + Click Button xpath=//button[@id='new-user-save-button'] + Set Selenium Implicit Wait 3000 + Page Should Contain Users + #Click Button xpath=//input[@id='dropdown1'] + #Click Element xpath=//li[contains(.,'xDemo App')] + Input Text xpath=//input[@id='input-table-search'] ${Existing_User} + Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] System Administrator + + + Portal admin Delete Standard User Existing user + [Documentation] Naviage to Users tab + Click Element xpath=(.//*[@id='rowheader_t1_0'])[2] + Scroll Element Into View xpath=//*[@id='div-app-name-xDemo-App']/following::*[@id='app-item-delete'][1] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::*[@id='app-item-delete'][1] + Click Element xpath=//button[@id='div-confirm-ok-button'] + Click Button xpath=//button[@id='new-user-save-button'] + #Input Text xpath=//input[@id='input-table-search'] ${Existing_User} + #Is Element Visible xpath=(//*[contains(.,'Portal')] )[2] + Element Should Not Contain xpath=//*[@table-data='users.accountUsers'] portal + #Element Should Not Contain xpath=//*[@table-data='users.accountUsers'] demo + + + + +Functional Top Menu Get Access + [Documentation] Naviage to Support tab + Click Link xpath=//a[contains(.,'Support')] + Mouse Over xpath=//*[contains(text(),'Get Access')] + Click Link xpath=//a[contains(.,'Get Access')] + Element Text Should Be xpath=//h1[contains(.,'Get Access')] Get Access + + +Functional Top Menu Contact Us + [Documentation] Naviage to Support tab + Click Link xpath=//a[contains(.,'Support')] + Mouse Over xpath=//*[contains(text(),'Contact Us')] + Click Link xpath=//a[contains(.,'Contact Us')] + Element Text Should Be xpath=//h1[contains(.,'Contact Us')] Contact Us + Click Image xpath=//img[@alt='Onap Logo'] + + +Portal admin Edit Functional menu + [Documentation] Naviage to Edit Functional menu tab + Click Link xpath=//a[@title='Edit Functional Menu'] + Click Link xpath=.//*[@id='Manage']/div/a + Click Link xpath=.//*[@id='Design']/div/a + Click Link xpath=.//*[@id='Product_Design']/div/a + Open Context Menu xpath=//*[@id='Product_Design']/div/span + Click Link xpath=//a[@href='#add'] + Input Text xpath=//input[@id='input-title'] ONAP Test + #Input Text xpath=//input[@id='input-url'] http://google.com + Click Element xpath=//input[@id='select-app'] + Scroll Element Into View xpath=//li[contains(.,'xDemo App')] + Click Element xpath=//li[contains(.,'xDemo App')] + Input Text xpath=//input[@id='input-url'] http://google.com + Click Button xpath=//button[@id='button-save-continue'] + #Click Button xpath=//div[@title='Select Roles'] + Click Element xpath=//*[@id='app-select-Select Roles'] + Click Element xpath=//input[@id='Standard-User-checkbox'] + Click Element xpath=//button[@id='button-save-add'] + Click Image xpath=//img[@alt='Onap Logo'] + Set Selenium Implicit Wait 3000 + Click Link xpath=//a[contains(.,'Manage')] + Mouse Over xpath=//*[contains(text(),'Design')] + Set Selenium Implicit Wait 3000 + Element Text Should Be xpath=//a[contains(.,'ONAP Test')] ONAP Test + Set Selenium Implicit Wait 3000 + Click Image xpath=//img[@alt='Onap Logo'] + Click Link xpath=//a[@title='Edit Functional Menu'] + Click Link xpath=.//*[@id='Manage']/div/a + Click Link xpath=.//*[@id='Design']/div/a + Click Link xpath=.//*[@id='Product_Design']/div/a + Open Context Menu xpath=//*[@id='ONAP_Test'] + Click Link xpath=//a[@href='#delete'] + Set Selenium Implicit Wait 3000 + Click Element xpath=//button[@id='div-confirm-ok-button'] + Click Image xpath=//img[@alt='Onap Logo'] + Set Selenium Implicit Wait 3000 + Click Link xpath=//a[contains(.,'Manage')] + Mouse Over xpath=//*[contains(text(),'Design')] + Set Selenium Implicit Wait 3000 + Element Should Not Contain xpath=(.//*[contains(.,'Design')]/following::ul[1])[1] ONAP Test + + + +Portal admin Microservice Onboarding + [Documentation] Naviage to Edit Functional menu tab + Click Link xpath=//a[@title='Microservice Onboarding'] + Click Button xpath=//button[@id='microservice-onboarding-button-add'] + Input Text xpath=//input[@name='name'] Test Microservice + Input Text xpath=//*[@name='desc'] Test + Click Element xpath=//input[@id='microservice-details-input-app'] + Scroll Element Into View xpath=//li[contains(.,'xDemo App')] + Click Element xpath=//li[contains(.,'xDemo App')] + Click Element xpath=//*[@name='desc'] + Input Text xpath=//input[@name='url'] ${PORTAL_MICRO_ENDPOINT} + Click Element xpath=//input[@id='microservice-details-input-security-type'] + Scroll Element Into View xpath=//li[contains(.,'Basic Authentication')] + Click Element xpath=//li[contains(.,'Basic Authentication')] + Input Text xpath=//input[@name='username'] ${GLOBAL_PORTAL_ADMIN_USER} + Input Text xpath=//input[@name='password'] ${GLOBAL_PORTAL_ADMIN_PWD} + Click Button xpath=//button[@id='microservice-details-save-button'] + Table Column Should Contain xpath=//*[@table-data='serviceList'] 1 Test Microservice + #Element Text Should Be xpath=//*[@table-data='serviceList'] Test Microservice + + + +Portal Admin Create Widget for All users + [Documentation] Naviage to Create Widget menu tab + ${WidgetAttachment}= Catenate ${PORTAL_ASSETS_DIRECTORY}//widget_news.zip + Click Link xpath=//a[@title='Widget Onboarding'] + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Button xpath=//button[@id='widget-onboarding-button-add'] + Input Text xpath=//*[@name='name'] ONAP-xDemo + Input Text xpath=//*[@name='desc'] ONAP xDemo + Click Element xpath=//*[@id='widgets-details-input-endpoint-url'] + Scroll Element Into View xpath=//li[contains(.,'Test Microservice')] + Click Element xpath=//li[contains(.,'Test Microservice')] + Click Element xpath=//*[contains(text(),'Allow all user access')]/preceding::input[@ng-model='widgetOnboardingDetails.widget.allUser'][1] + Choose File xpath=//input[@id='widget-onboarding-details-upload-file'] ${WidgetAttachment} + Click Button xpath=//button[@id='widgets-details-save-button'] + Wait Until Page Contains ONAP-xDemo ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Page Should Contain ONAP-xDemo + Set Selenium Implicit Wait 3000 + GO TO ${PORTAL_HOME_PAGE} + + +Portal Admin Delete Widget for All users + [Documentation] Naviage to delete Widget menu tab + #Wait Until Page Contains ONAP-xDemo ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + #Page Should Contain ONAP-xDemo + #Click Image xpath=//img[@alt='Onap Logo'] + Click Link xpath=//a[@title='Widget Onboarding'] + Click Element xpath=//input[@id='dropdown1'] + Click Element xpath=//li[contains(.,'xDemo App')] + #Wait Until Page Contains xpath=(.//*[contains(text(),'ONAP-xDemo')]/followi + #Wait Until Page Contains xpath=(.//*[contains(text(),'ONAP-xDemo')]/following::*[@ng-click='widgetOnboarding.deleteWidget(rowData)'])[1] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Element xpath=(.//*[contains(text(),'ONAP-xDemo')]/following::*[@ng-click='widgetOnboarding.deleteWidget(rowData)'])[1] + Click Element xpath=//button[@id='div-confirm-ok-button'] + Set Selenium Implicit Wait 3000 + Element Should Not Contain xpath=//*[@table-data='portalAdmin.portalAdminsTableData'] ONAP-xDemo + #Is Element Visible xpath=//*[@table-data='portalAdmin.portalAdminsTableData'] + #Table Column Should Contain .//*[@table-data='portalAdmin.portalAdminsTableData'] 0 ONAP-xDemo + #Set Selenium Implicit Wait 3000 + + +Portal Admin Create Widget for Application Roles + [Documentation] Naviage to Create Widget menu tab + ${WidgetAttachment}= Catenate ${PORTAL_ASSETS_DIRECTORY}//widget_news.zip + Click Link xpath=//a[@title='Widget Onboarding'] + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Button xpath=//button[@id='widget-onboarding-button-add'] + Input Text xpath=//*[@name='name'] ONAP-xDemo + Input Text xpath=//*[@name='desc'] ONAP xDemo + Click Element xpath=//*[@id='widgets-details-input-endpoint-url'] + Scroll Element Into View xpath=//li[contains(.,'Test Microservice')] + Click Element xpath=//li[contains(.,'Test Microservice')] + Click element xpath=//*[@id="app-select-Select Applications"] + click element xpath=//*[@id="xDemo-App-checkbox"] + Click element xpath=//*[@name='desc'] + click element xpath=//*[@id="app-select-Select Roles"] + click element xpath=//*[@id="Standard-User-checkbox"] + Click element xpath=//*[@name='desc'] + Scroll Element Into View xpath=//input[@id='widget-onboarding-details-upload-file'] + Choose File xpath=//input[@id='widget-onboarding-details-upload-file'] ${WidgetAttachment} + Click Button xpath=//button[@id='widgets-details-save-button'] + Click Image xpath=//img[@alt='Onap Logo'] + Set Selenium Implicit Wait 3000 + #Wait Until Page Contains ONAP-xDemo ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Click Link xpath=//a[@title='Widget Onboarding'] + Click Element xpath=//input[@id='dropdown1'] + Click Element xpath=//li[contains(.,'xDemo App')] + Page Should Contain ONAP-xDemo + Set Selenium Implicit Wait 3000 + GO TO ${PORTAL_HOME_PAGE} + + + + +Portal Admin Delete Widget for Application Roles + #Wait Until Page Contains ONAP-xDemo ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + #Page Should Contain ONAP-xDemo + #Click Image xpath=//img[@alt='Onap Logo'] + Click Link xpath=//a[@title='Widget Onboarding'] + Click Element xpath=//input[@id='dropdown1'] + Click Element xpath=//li[contains(.,'xDemo App')] + #Wait Until Page Contains xpath=(.//*[contains(text(),'ONAP-xDemo')]/followi + #Wait Until Page Contains xpath=(.//*[contains(text(),'ONAP-xDemo')]/following::*[@ng-click='widgetOnboarding.deleteWidget(rowData)'])[1] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Scroll Element Into View xpath=//*[contains(text(),'ONAP-xDemo')]/following::td[3]/div + Click Element xpath=//*[contains(text(),'ONAP-xDemo')]/following::td[3]/div + Click Element xpath=//button[@id='div-confirm-ok-button'] + Set Selenium Implicit Wait 3000 + Element Should Not Contain xpath=//*[@table-data='portalAdmin.portalAdminsTableData'] ONAP-xDemo + #Is Element Visible xpath=//*[@table-data='portalAdmin.portalAdminsTableData'] + #Table Column Should Contain .//*[@table-data='portalAdmin.portalAdminsTableData'] 0 ONAP-xDemo + #Set Selenium Implicit Wait 3000 + + + +Portal Admin Edit Widget + [Documentation] Naviage to Home tab + #Mouse Over xpath=(//h3[contains(text(),'News')]/following::span[1])[1] + Click Element xpath=(//h3[contains(text(),'News')]/following::span[1])[1] + Set Browser Implicit Wait 8000 + #Wait Until Element Is Visible xpath=(//h3[contains(text(),'News')]/following::span[1]/following::a[contains(text(),'Edit')])[1] 60 + Mouse Over xpath=(//h3[contains(text(),'News')]/following::span[1]/following::a[contains(text(),'Edit')])[1] + Click Link xpath=(//h3[contains(text(),'News')]/following::span[1]/following::a[contains(text(),'Edit')])[1] + Input Text xpath=//input[@name='title'] ONAP_VID + Input Text xpath=//input[@name='url'] http://about.att.com/news/international.html + Input Text xpath=//input[@id='widget-input-add-order'] 5 + Click Link xpath=//a[contains(.,'Add New')] + Click Element xpath=//div[@id='close-button'] + Element Should Contain xpath=//*[@table-data='ignoredTableData'] ONAP_VID + Click Element xpath=.//div[contains(text(),'ONAP_VID')]/following::*[contains(text(),'5')][1]/following::div[@ng-click='remove($index);'][1] + Click Element xpath=//div[@id='confirmation-button-next'] + Element Should Not Contain xpath=//*[@table-data='ignoredTableData'] ONAP_VID + Click Link xpath=//a[@id='close-button'] + + + + +Portal Admin Broadcast Notifications + [Documentation] Portal Test Admin Broadcast Notifications + ${CurrentDay}= Get Current Date result_format=%m/%d/%Y + ${NextDay}= Get Current Date increment=24:00:00 result_format=%m/%d/%Y + ${CurrentDate}= Get Current Date result_format=%m%d%y%H%M + ${AdminBroadCastMsg}= catenate ONAP VID Broadcast Automation${CurrentDate} + Click Image xpath=//img[@alt='Onap Logo'] + Set Selenium Implicit Wait 3000 + Click Link xpath=//*[@id="parent-item-User-Notifications"] + Wait until Element is visible xpath=//*[@id="button-openAddNewApp"] timeout=10 + Click button xpath=//*[@id="button-openAddNewApp"] + Input Text xpath=//input[@id='datepicker-start'] ${CurrentDay} + Input Text xpath=//input[@id='datepicker-end'] ${NextDay} + Input Text xpath=//*[@id="add-notification-input-title"] ONAP VID Broadcast Automation + Input Text xpath=//*[@id="user-notif-input-message"] ${AdminBroadCastMsg} + click element xpath=//*[@id="button-notification-save"] + Wait until Element is visible xpath=//*[@id="button-openAddNewApp"] timeout=10 + click element xpath=//*[@id="megamenu-notification-button"] + click element xpath=//*[@id="notification-history-link"] + Wait until Element is visible xpath=//*[@id="notification-history-table"] timeout=10 + Table Column Should Contain xpath=//*[@id="notification-history-table"] 2 ${AdminBroadCastMsg} + log ${AdminBroadCastMsg} + [Return] ${AdminBroadCastMsg} + +Portal Admin Category Notifications + [Documentation] Portal Admin Broadcast Notifications + ${CurrentDay}= Get Current Date result_format=%m/%d/%Y + ${NextDay}= Get Current Date increment=24:00:00 result_format=%m/%d/%Y + ${CurrentDate}= Get Current Date result_format=%m%d%y%H%M + ${AdminCategoryMsg}= catenate ONAP VID Category Automation${CurrentDate} + Click Link xpath=//a[@id='parent-item-Home'] + Click Link xpath=//*[@id="parent-item-User-Notifications"] + Wait until Element is visible xpath=//*[@id="button-openAddNewApp"] timeout=10 + Click button xpath=//*[@id="button-openAddNewApp"] + #Select Radio Button NO radio-button-no + Click Element //*[contains(text(),'Broadcast to All Categories')]/following::*[contains(text(),'No')][1] + #Select Radio Button //label[@class='radio'] radio-button-approles + Click Element xpath=//*[contains(text(),'Categories')]/following::*[contains(text(),'Application Roles')][1] + Click Element xpath=//*[contains(text(),'xDemo App')]/preceding::input[@ng-model='member.isSelected'][1] + Input Text xpath=//input[@id='datepicker-start'] ${CurrentDay} + Input Text xpath=//input[@id='datepicker-end'] ${NextDay} + Input Text xpath=//*[@id="add-notification-input-title"] ONAP VID Category Automation + Input Text xpath=//*[@id='user-notif-input-message'] ${AdminCategoryMsg} + click element xpath=//*[@id="button-notification-save"] + Wait until Element is visible xpath=//*[@id="button-openAddNewApp"] timeout=10 + click element xpath=//*[@id="megamenu-notification-button"] + click element xpath=//*[@id="notification-history-link"] + Wait until Element is visible xpath=//*[@id="notification-history-table"] timeout=10 + Table Column Should Contain xpath=//*[@id="notification-history-table"] 2 ${AdminCategoryMsg} + log ${AdminCategoryMsg} + [Return] ${AdminCategoryMsg} + + +Portal admin Logout from Portal GUI + [Documentation] Logout from Portal GUI + Click Element xpath=//div[@id='header-user-icon'] + Click Button xpath=//button[contains(.,'Log out')] + Title Should Be Login + + + +Application admin Login To Portal GUI + [Documentation] Logs into Portal GUI + # Setup Browser Now being managed by test case + ##Setup Browser +# Go To ${PORTAL_LOGIN_URL} +# Maximize Browser Window +# Set Selenium Speed ${GLOBAL_SELENIUM_DELAY} +# Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} +# Log Logging in to ${PORTAL_URL}${PORTAL_ENV} + # Handle Proxy Warning + Title Should Be Login + Input Text xpath=//input[@ng-model='loginId'] ${App_LoginID} + Input Password xpath=//input[@ng-model='password'] ${App_Loginpwd} + Click Link xpath=//a[@id='loginBtn'] + Wait Until Page Contains Element xpath=//img[@alt='Onap Logo'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Log Logged in to ${PORTAL_URL}${PORTAL_ENV} + +Application Admin Navigation Application Link Tab + [Documentation] Logs into Portal GUI as application admin + Click Link xpath=//a[@id='parent-item-Home'] + Click Element xpath=.//h3[contains(text(),'xDemo App')]/following::div[1] + Page Should Contain ONAP Portal + Scroll Element Into View xpath=//i[@class='ion-close-round'] + Click Element xpath=//i[@class='ion-close-round'] + Set Selenium Implicit Wait 3000 + #Click Element xpath=(.//span[@id='tab-Home'])[1] + + +Application Admin Navigation Functional Menu + [Documentation] Logs into Portal GUI as application admin + Click Link xpath=//a[contains(.,'Manage')] + Mouse Over xpath=//*[contains(text(),'Technology Insertion')] + Click Link xpath= //*[contains(text(),'Infrastructure VNF Provisioning')] + Page Should Contain ONAP Portal + Click Element xpath=//i[@class='ion-close-round'] + Click Element xpath=(.//span[@id='tab-Home'])[1] + + +Application admin Add Standard User Existing user + [Documentation] Naviage to Users tab + Click Link xpath=//a[@title='Users'] + Page Should Contain Users + Click Button xpath=//button[@ng-click='toggleSidebar()'] + Click Button xpath=//button[@ng-click='users.openAddNewUserModal()'] + Input Text xpath=//input[@id='input-user-search'] ${Existing_User} + Click Button xpath=//button[@id='button-search-users'] + Click Element xpath=//span[@id='result-uuid-0'] + Click Button xpath=//button[@id='next-button'] + Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App'] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox'] + Set Selenium Implicit Wait 3000 + Click Button xpath=//button[@id='new-user-save-button'] + Set Selenium Implicit Wait 3000 + #Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} + #Select From List xpath=//input[@value='Select application'] xDemo App + #Click Link xpath=//a[@title='Users'] + #Page Should Contain Users + Go To ${PORTAL_HOME_PAGE} + Set Selenium Implicit Wait 3000 + Click Link xpath=//a[@title='Users'] + Click Element xpath=//input[@id='dropdown1'] + Click Element xpath=//li[contains(.,'xDemo App')] + Input Text xpath=//input[@id='input-table-search'] ${Existing_User} + Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] Standard User + + +Application admin Edit Standard User Existing user + [Documentation] Naviage to Users tab + Click Element xpath=(.//*[@id='rowheader_t1_0'])[2] + Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App'] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox'] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='System-Administrator-checkbox'] + Set Selenium Implicit Wait 3000 + Click Button xpath=//button[@id='new-user-save-button'] + Set Selenium Implicit Wait 3000 + Page Should Contain Users + #Click Button xpath=//input[@id='dropdown1'] + #Click Element xpath=//li[contains(.,'xDemo App')] + Input Text xpath=//input[@id='input-table-search'] ${Existing_User} + Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] System Administrator + + +Application admin Delete Standard User Existing user + [Documentation] Naviage to Users tab + Click Element xpath=(.//*[@id='rowheader_t1_0'])[2] + Scroll Element Into View xpath=//*[@id='div-app-name-xDemo-App']/following::*[@id='app-item-delete'][1] + Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::*[@id='app-item-delete'][1] + Click Element xpath=//button[@id='div-confirm-ok-button'] + Click Button xpath=//button[@id='new-user-save-button'] + #Input Text xpath=//input[@id='input-table-search'] ${Existing_User} + #Is Element Visible xpath=(//*[contains(.,'Portal')] )[2] + Element Should Not Contain xpath=//*[@table-data='users.accountUsers'] Portal + #Click Image xpath=//img[@alt='Onap Logo'] + #Set Selenium Implicit Wait 3000 + + + +Application admin Logout from Portal GUI + [Documentation] Logout from Portal GUI + Click Element xpath=//div[@id='header-user-icon'] + #Set Selenium Implicit Wait 3000 + Click Button xpath=//button[contains(text(),'Log out')] + #Set Selenium Implicit Wait 3000 + Title Should Be Login + + + + + +Standared user Login To Portal GUI + [Documentation] Logs into Portal GUI + # Setup Browser Now being managed by test case + ##Setup Browser +# Go To ${PORTAL_LOGIN_URL} +# Maximize Browser Window +# Set Selenium Speed ${GLOBAL_SELENIUM_DELAY} +# Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} +# Log Logging in to ${PORTAL_URL}${PORTAL_ENV} + # Handle Proxy Warning + Title Should Be Login + Input Text xpath=//input[@ng-model='loginId'] ${Sta_LoginID} + Input Password xpath=//input[@ng-model='password'] ${Sta_Loginpwd} + Click Link xpath=//a[@id='loginBtn'] + Wait Until Page Contains Element xpath=//img[@alt='Onap Logo'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Log Logged in to ${PORTAL_URL}${PORTAL_ENV} + + +Standared user Navigation Application Link Tab + [Documentation] Logs into Portal GUI as application admin + #Portal admin Go To Portal HOME + Click Element xpath=.//h3[contains(text(),'xDemo App')]/following::div[1] + Page Should Contain ONAP Portal + Click Element xpath=(.//span[@id='tab-Home'])[1] + + +Standared user Navigation Functional Menu + [Documentation] Logs into Portal GUI as application admin + Click Link xpath=//a[contains(.,'Manage')] + Mouse Over xpath=//*[contains(text(),'Technology Insertion')] + Click Link xpath= //*[contains(text(),'Infrastructure VNF Provisioning')] + Page Should Contain Welcome to VID + Click Element xpath=(.//span[@id='tab-Home'])[1] + + + +Standared user Broadcast Notifications + [Documentation] Logs into Portal GUI as application admin + [Arguments] ${AdminBroadCastMsg} + Click element xpath=//*[@id='megamenu-notification-button'] + Click element xpath=//*[@id='notification-history-link'] + Wait until Element is visible xpath=//*[@id='app-title'] timeout=10 + Table Column Should Contain xpath=//*[@id='notification-history-table'] 2 ${AdminBroadCastMsg} + log ${AdminBroadCastMsg} + + +Standared user Category Notifications + [Documentation] Logs into Portal GUI as application admin + [Arguments] ${AdminCategoryMsg} + #click element xpath=//*[@id='megamenu-notification-button'] + #click element xpath=//*[@id="notification-history-link"] + Wait until Element is visible xpath=//*[@id='app-title'] timeout=10 + Table Column Should Contain xpath=//*[@id='notification-history-table'] 2 ${AdminCategoryMsg} + log ${AdminCategoryMsg} + + +Standared user Logout from Portal GUI + [Documentation] Logout from Portal GUI + Click Element xpath=//div[@id='header-user-icon'] + Click Button xpath=//button[contains(.,'Log out')] + #Confirm Action + Title Should Be Login + + + + +Tear Down + [Documentation] Close all browsers + Close All Browsers + + +Enhanced Notification on ONAP Portal + [Documentation] Runs portal Post request + [Arguments] ${data_path} ${data} +# Log Creating session ${GLOBAL_PORTAL_SERVER_URL} + ${session}= Create Session portal ${PORTAL_URL} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic amlyYTpfcGFzcw== username=jira password=_pass + ${resp}= Post Request portal ${data_path} data=${data} headers=${headers} +# Log Received response from portal ${resp.text} + [Return] ${resp} + + + +Notification on ONAP Portal + [Documentation] Create Config portal + ${configportal}= Create Dictionary jira_id=${jira} + ${output} = Fill JSON Template File ${portal_Template} ${configportal} + ${post_resp} = Enhanced Notification on ONAP Portal ${RESOURCE_PATH} ${output} + Should Be Equal As Strings ${post_resp.status_code} 200 + + + + +Portal Application Account Management + [Documentation] Naviage to Application Account Management tab + Click Link xpath=//a[@title='App Account Management'] + Click Button xpath=//button[@id='account-onboarding-button-add'] + Input Text xpath=//input[@name='name'] JIRA + Input Text xpath=//input[@name='username'] jira + Input Text xpath=//input[@name='password'] _pass + Input Text xpath=//input[@name='repassword'] _pass + Click Element xpath=//div[@ng-click='accountAddDetails.saveChanges()'] + Element Text Should Be xpath=//*[@table-data='serviceList'] JIRA + +Portal Application Account Management validation + [Documentation] Naviage to user notification tab + Click Link xpath=//a[@id='parent-item-User-Notifications'] + click element xpath=//*[@id="megamenu-notification-button"] + Click element xpath=//*[@id="notification-history-link"] + Wait until Element is visible xpath=//*[@id="notification-history-table"] timeout=10 + Table Column Should Contain xpath=//*[@id="notification-history-table"] 1 JIRA + + +Portal AAF new fields + [Documentation] Naviage to user Application details tab + Click Link xpath=//a[@title='Application Onboarding'] + Click Element xpath=//td[contains(.,'xDemo App')] + Page Should Contain Name Space + Page Should Contain Centralized + Click Element xpath=//button[@id='button-notification-cancel'] + + + diff --git a/test/csit/tests/portal/testsuites/widget_news.zip b/test/csit/tests/portal/testsuites/widget_news.zip Binary files differnew file mode 100644 index 000000000..532cf6105 --- /dev/null +++ b/test/csit/tests/portal/testsuites/widget_news.zip diff --git a/test/csit/tests/sdc/healthCheck/__init__.robot b/test/csit/tests/sdc/nightly/__init__.robot index 8ee10d5f6..8ee10d5f6 100644 --- a/test/csit/tests/sdc/healthCheck/__init__.robot +++ b/test/csit/tests/sdc/nightly/__init__.robot diff --git a/test/csit/tests/sdc/healthCheck/test1.robot b/test/csit/tests/sdc/nightly/test1.robot index 6d4dc242d..6d4dc242d 100644 --- a/test/csit/tests/sdc/healthCheck/test1.robot +++ b/test/csit/tests/sdc/nightly/test1.robot diff --git a/test/csit/tests/sdc/sanity/__init__.robot b/test/csit/tests/sdc/sanity/__init__.robot new file mode 100644 index 000000000..8ee10d5f6 --- /dev/null +++ b/test/csit/tests/sdc/sanity/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Documentation Sdc - HealthCheck diff --git a/test/csit/tests/sdc/sanity/test1.robot b/test/csit/tests/sdc/sanity/test1.robot new file mode 100644 index 000000000..6d4dc242d --- /dev/null +++ b/test/csit/tests/sdc/sanity/test1.robot @@ -0,0 +1,16 @@ +*** Settings *** +Library Collections +Library OperatingSystem +Library RequestsLibrary +Library json + +*** Test Cases *** +Get Requests health check ok + [Tags] get + CreateSession sdc-be http://localhost:8080 + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json + ${resp}= Get Request sdc-be /sdc2/rest/healthCheck headers=&{headers} + Should Be Equal As Strings ${resp.status_code} 200 + @{ITEMS}= Copy List ${resp.json()['componentsInfo']} + : FOR ${ELEMENT} IN @{ITEMS} + \ Log ${ELEMENT['healthCheckComponent']} ${ELEMENT['healthCheckStatus']} diff --git a/test/csit/tests/sdnc/healthcheck/data/data.json b/test/csit/tests/sdnc/healthcheck/data/data.json new file mode 100644 index 000000000..583e26fb9 --- /dev/null +++ b/test/csit/tests/sdnc/healthcheck/data/data.json @@ -0,0 +1,4 @@ +{ + "input" : { + } +} diff --git a/test/csit/tests/sdnc/healthcheck/data/preload.json b/test/csit/tests/sdnc/healthcheck/data/preload.json new file mode 100644 index 000000000..b53afa859 --- /dev/null +++ b/test/csit/tests/sdnc/healthcheck/data/preload.json @@ -0,0 +1,41 @@ +{ + "input": { + "vnf-topology-information": { + "vnf-topology-identifier": { + "service-type": "robot_demo", + "vnf-name": "vf_robot_module", + "vnf-type": "vf_robot_type", + "generic-vnf-name": "generic_vnf_name", + "generic-vnf-type": "generic_vnf_type" + }, + "vnf-assignments": { + "availability-zones": [], + "vnf-networks": [], + "vnf-vms": [] + }, + "vnf-parameters": [ + { + "vnf-parameter-name": "ngm1_management_ip_0", + "vnf-parameter-value":"127.0.0.1" + }, + { + "vnf-parameter-name": "ngm2_management_ip_1", + "vnf-parameter-value":"127.0.0.2" + } + ] + }, + "request-information": { + "request-id": "robot12", + "order-version": "1", + "notification-url": "openecomp.org", + "order-number": "1", + "request-action": "PreloadVNFRequest" + }, + "sdnc-request-header": { + "svc-request-id": "robot12", + "svc-notification-url": "http:\/\/openecomp.org:8080\/adapters\/rest\/SDNCNotify", + "svc-action": "reserve" + } + } +} + diff --git a/test/csit/tests/sdnc/healthcheck/test1.robot b/test/csit/tests/sdnc/healthcheck/test1.robot index 1adb9a6b3..4bf3d25e7 100644 --- a/test/csit/tests/sdnc/healthcheck/test1.robot +++ b/test/csit/tests/sdnc/healthcheck/test1.robot @@ -1,16 +1,45 @@ *** Settings *** -Library OperatingSystem -Library Process +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library String *** Variables *** +${SDN_APIDOCS_URI} /apidoc/apis +${SDN_HEALTHCHECK_OPERATION_PATH} /operations/SLI-API:healthcheck +${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH} /operations/VNF-API:preload-vnf-topology-operation -${health_check} ${SCRIPTS}/health_check.sh +*** Test Cases *** +Healthcheck API + Create Session sdnc http://localhost:8282/restconf + ${data}= Get Binary File ${CURDIR}${/}data${/}data.json + &{headers}= Create Dictionary Authorization=Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ== Content-Type=application/json Accept=application/json + ${resp}= Post Request sdnc ${SDN_HEALTHCHECK_OPERATION_PATH} data=${data} headers=${headers} + Should Be Equal As Strings ${resp.status_code} 200 + Should Be Equal As Strings ${resp.json()['output']['response-code']} 200 + +Check SLI-API + Create Session sdnc http://localhost:8282 + &{headers}= Create Dictionary Authorization=Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ== Content-Type=application/json Accept=application/json + ${resp}= Get Request sdnc ${SDN_APIDOCS_URI} headers=${headers} + Log ${resp.content} + Should Contain ${resp.content} SLI-API -*** Test Cases *** -Health check test case for SDNC - [Documentation] Health check - ${result_hc}= Run Process bash ${health_check} > log_hc.txt shell=yes - Should Be Equal As Integers ${result_hc.rc} 0 +Check VNF-API + Create Session sdnc http://localhost:8282 + &{headers}= Create Dictionary Authorization=Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ== Content-Type=application/json Accept=application/json + ${resp}= Get Request sdnc ${SDN_APIDOCS_URI} headers=${headers} + Log ${resp.content} + Should Contain ${resp.content} VNF-API +Test Preload + Create Session sdnc http://localhost:8282/restconf + ${data}= Get Binary File ${CURDIR}${/}data${/}preload.json + &{headers}= Create Dictionary Authorization=Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ== Content-Type=application/json Accept=application/json + ${resp}= Post Request sdnc ${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH} data=${data} headers=${headers} + Log ${resp.content} + Should Be Equal As Strings ${resp.status_code} 200 + Should Be Equal As Strings ${resp.json()['output']['response-code']} 200 diff --git a/test/csit/tests/so/sanity-check/data/activateService.json b/test/csit/tests/so/sanity-check/data/activateService.json new file mode 100644 index 000000000..e2f749f78 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/activateService.json @@ -0,0 +1,23 @@ +{ +"requestDetails": { +"modelInfo": { +"modelType": "service", +"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", +"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", +"modelName": "Test", +"modelVersion": "1.0" +}, +"requestInfo": { +"source": "VID", +"requestorId": "az2016" +}, +"requestParameters": { +"userParams": [ +{ +"name": "aic_zone", +"value": "someValue" +} +] +} +} +} diff --git a/test/csit/tests/so/sanity-check/data/createNetwork.json b/test/csit/tests/so/sanity-check/data/createNetwork.json new file mode 100644 index 000000000..901e51747 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/createNetwork.json @@ -0,0 +1,35 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "network", + "modelName": "CONTRAIL30_BASIC" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "8b1df54faa3b49078e3416e21370a3ba" + }, + "requestInfo": { + "instanceName": "GN_EVPN_direct_net_0_ST_Subnets_Ipv4", + "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "source": "VID", + "suppressRollback": true + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": " {serviceInstanceId} ", + "modelInfo": { + "modelType": "service", + "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", + "modelName": "{parent\tservice\tmodel\tname}", + "modelVersion": "1.0" + } + } + } + ], + "requestParameters": { + "userParams": [] + } + } +} diff --git a/test/csit/tests/so/sanity-check/data/createVF.json b/test/csit/tests/so/sanity-check/data/createVF.json new file mode 100644 index 000000000..4969d5425 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/createVF.json @@ -0,0 +1,59 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "vfModule", + "modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe", + "modelName": "vSAMP12..base..module-0", + "modelVersion": "1" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "requestInfo": { + "instanceName": "MSOTEST103a-vSAMP12_base_module-0", + "source": "VID", + "suppressRollback": true + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": "17ef4658-bd1f-4ef0-9ca0-ea76e2bf122c", + "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol", + "modelInfo": { + "modelType": "volumeGroup" + } + } + }, + { + "relatedInstance": { + "instanceId": " {serviceInstanceId} ", + "modelInfo": { + "modelType": "service", + "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", + "modelName": "{parent\tservice\tmodel\tname}", + "modelVersion": "1.0" + } + } + }, + { + "relatedInstance": { + "instanceId": " {vnfInstanceId} ", + "modelInfo": { + "modelType": "vnf", + "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe", + "modelName": " vSAMP12 ", + "modelVersion": "1.0", + "modelCustomizationName": "vSAMP12 1" + } + } + } + ], + "requestParameters": { + "userParams": [] + } + } +} diff --git a/test/csit/tests/so/sanity-check/data/createVG.json b/test/csit/tests/so/sanity-check/data/createVG.json new file mode 100644 index 000000000..13bf3e996 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/createVG.json @@ -0,0 +1,47 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "volumeGroup", + "modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe", + "modelName": "vSAMP12..base..module-0", + "modelVersion": "1" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "requestInfo": { + "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol", + "source": "VID", + "suppressRollback": true + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": " {serviceInstanceId} ", + "modelInfo": { + "modelType": "service", + "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", + "modelName": "{parent\tservice\tmodel\tname}", + "modelVersion": "1.0" + } + } + }, + { + "relatedInstance": { + "instanceId": " {vnfInstanceId} ", + "modelInfo": { + "modelType": "vnf", + "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe", + "modelName": "vSAMP12", + "modelVersion": "1.0", + "modelCustomizationName": "vSAMP12 1" + } + } + } + ] + } +} diff --git a/test/csit/tests/so/sanity-check/data/deactivateService.json b/test/csit/tests/so/sanity-check/data/deactivateService.json new file mode 100644 index 000000000..e2f749f78 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/deactivateService.json @@ -0,0 +1,23 @@ +{ +"requestDetails": { +"modelInfo": { +"modelType": "service", +"modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", +"modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", +"modelName": "Test", +"modelVersion": "1.0" +}, +"requestInfo": { +"source": "VID", +"requestorId": "az2016" +}, +"requestParameters": { +"userParams": [ +{ +"name": "aic_zone", +"value": "someValue" +} +] +} +} +} diff --git a/test/csit/tests/so/sanity-check/data/deleteNetwork.json b/test/csit/tests/so/sanity-check/data/deleteNetwork.json new file mode 100644 index 000000000..4bee07800 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/deleteNetwork.json @@ -0,0 +1,15 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "network", + "modelName": "CONTRAIL30_BASIC" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "8b1df54faa3b49078e3416e21370a3ba" + }, + "requestInfo": { + "source": "VID" + } + } +} diff --git a/test/csit/tests/so/sanity-check/data/deleteVF.json b/test/csit/tests/so/sanity-check/data/deleteVF.json new file mode 100644 index 000000000..ac6023e81 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/deleteVF.json @@ -0,0 +1,17 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "vfModule", + "modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff", + "modelName": "vSAMP12..base..module-0", + "modelVersion": "1" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "requestInfo": { + "source": "VID" + } + } +} diff --git a/test/csit/tests/so/sanity-check/data/deleteVG.json b/test/csit/tests/so/sanity-check/data/deleteVG.json new file mode 100644 index 000000000..cb238659c --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/deleteVG.json @@ -0,0 +1,15 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "volumeGroup", + "modelName": "vSAMP12..base..module-0" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "requestInfo": { + "source": "VID" + } + } +} diff --git a/test/csit/tests/so/sanity-check/data/replaceVF.json b/test/csit/tests/so/sanity-check/data/replaceVF.json new file mode 100644 index 000000000..231169960 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/replaceVF.json @@ -0,0 +1,60 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "vfModule", + "modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe", + "modelName": "vSAMP12..base..module-0", + "modelVersion": "2" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "requestInfo": { + "source": "VID", + "suppressRollback": true, + "requestorId": "az2016" + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": "17ef4658-bd1f-4ef0-9ca0-ea76e2bf122c", + "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol", + "modelInfo": { + "modelType": "volumeGroup" + } + } + }, + { + "relatedInstance": { + "instanceId": " {serviceInstanceId} ", + "modelInfo": { + "modelType": "service", + "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", + "modelName": "{parent\tservice\tmodel\tname}", + "modelVersion": "2.0" + } + } + }, + { + "relatedInstance": { + "instanceId": " {vnfInstanceId} ", + "modelInfo": { + "modelType": "vnf", + "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe", + "modelName": " vSAMP12 ", + "modelVersion": "2.0", + "modelCustomizationName": "vSAMP12 1", + "modelCustomizationId": "c539433a-84a6-4082-a12e-5c9b00c3b960" + } + } + } + ], + "requestParameters": { + "userParams": [] + } + } +} diff --git a/test/csit/tests/so/sanity-check/data/replaceVnf.json b/test/csit/tests/so/sanity-check/data/replaceVnf.json new file mode 100644 index 000000000..18063750c --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/replaceVnf.json @@ -0,0 +1,36 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "", + "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe", + "modelName": "vSAMP12", + "modelVersion": "1.0", + "modelCustomizationName": "vSAMP12 1" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "requestInfo": { + "source": "VID", + "suppressRollback": false, + "requestorId": "az2016" + }, + "relatedInstanceList": [{ + "relatedInstance": { + "instanceId": " {serviceInstanceId} ", + "modelInfo": { + "modelType": "service", + "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", + "modelName": " {parent service model name} ", + "modelVersion": "2.0" + } + } + }], + "requestParameters": { + "rebuildVolumeGroups": false + } + } +} diff --git a/test/csit/tests/so/sanity-check/data/updateNetwork.json b/test/csit/tests/so/sanity-check/data/updateNetwork.json new file mode 100644 index 000000000..4d7639099 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/updateNetwork.json @@ -0,0 +1,34 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "network", + "modelName": "CONTRAIL30_BASIC" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "8b1df54faa3b49078e3416e21370a3ba" + }, + "requestInfo": { + "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "source": "VID", + "suppressRollback": true + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": " {serviceInstanceId} ", + "modelInfo": { + "modelType": "service", + "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", + "modelName": "{parent\tservice\tmodel\tname}", + "modelVersion": "1.0" + } + } + } + ], + "requestParameters": { + "userParams": [] + } + } +} diff --git a/test/csit/tests/so/sanity-check/data/updateVF.json b/test/csit/tests/so/sanity-check/data/updateVF.json new file mode 100644 index 000000000..671cc7919 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/updateVF.json @@ -0,0 +1,61 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "vfModule", + "modelInvariantId": "ff5256d2-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e5-ea33-3346-ac12-ab121484a3fe", + "modelName": "vSAMP12..base..module-0", + "modelVersion": "1" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "requestInfo": { + "source": "VID", + "suppressRollback": true, + "requestorId": "az2016" + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": "17ef4658-bd1f-4ef0-9ca0-ea76e2bf122c", + "instanceName": "MSOTESTVOL103a-vSAMP12_base_module-0_vol", + "modelInfo": { + "modelType": "volumeGroup" + } + } + }, + { + "relatedInstance": { + "instanceId": " {serviceInstanceId} ", + "modelInfo": { + "modelType": "service", + "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", + "modelName": "{parent\tservice\tmodel\tname}", + "modelVersion": "2.0" + } + } + }, + { + "relatedInstance": { + "instanceId": " {vnfInstanceId} ", + "modelInfo": { + "modelType": "vnf", + "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe", + "modelName": " vSAMP12 ", + "modelVersion": "2.0", + "modelCustomizationName": "vSAMP12 1", + "modelCustomizationId": "c539433a-84a6-4082-a12e-5c9b00c3b960" + } + } + } + ], + "requestParameters": { + "usePreload": true, + "userParams": [] + } + } +} diff --git a/test/csit/tests/so/sanity-check/data/updateVnf.json b/test/csit/tests/so/sanity-check/data/updateVnf.json new file mode 100644 index 000000000..d6c39de90 --- /dev/null +++ b/test/csit/tests/so/sanity-check/data/updateVnf.json @@ -0,0 +1,39 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "vnf", + "modelInvariantId": "ff5256d1-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6478e4-ea33-3346-ac12-ab121484a3fe", + "modelName": "vSAMP12", + "modelVersion": "2.0", + "modelCustomizationName": "vSAMP12 1", + "modelCustomizationId": "c539433a-84a6-4082-a12e-5c9b00c3b960" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "requestInfo": { + "source": "VID", + "suppressRollback": false, + "requestorId": "az2016" + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": " {serviceInstanceId} ", + "modelInfo": { + "modelType": "service", + "modelInvariantId": "ff3514e3-5a33-55df-13ab-12abad84e7ff", + "modelNameVersionId": "fe6985cd-ea33-3346-ac12-ab121484a3fe", + "modelName": " {parent service model name} ", + "modelVersion": "1.0" + } + } + } + ], + "requestParameters": { + "usePreload": true + } + } +} diff --git a/test/csit/tests/so/sanity-check/sanity_test_so.robot b/test/csit/tests/so/sanity-check/sanity_test_so.robot index 27a16fc38..065414569 100644 --- a/test/csit/tests/so/sanity-check/sanity_test_so.robot +++ b/test/csit/tests/so/sanity-check/sanity_test_so.robot @@ -36,7 +36,84 @@ Delete ServiceInstance for invalid user &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQxOnBhc3N3b3JkMTI== Content-Type=application/json Accept=application/json ${resp}= Delete Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000 data=${data} headers=${headers} Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Activate ServiceInstance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}activateService.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v5/ff305d54-75b4-431b-adb2-eb6b9e5ff000/activate data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Deactivate ServiceInstance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}deactivateService.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v5/ff305d54-75b4-431b-adb2-eb6b9e5ff000/deactivate data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Create Volume Group instance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}createVG.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-7cef19d9a94e/volumeGroups data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Delete Volume Group instance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}deleteVG.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Delete Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-7cef19d9a94e/volumeGroups/ff305d54-75b4-ff1b-cdb2-eb6b9e5460ff data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result +Create VF Module instance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}createVF.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-7cef19d9a94e/vfModules data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Update VF Module instance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}updateVF.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v5/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-7cef19d9a94e/vfModules/ff305d54-75b4-ff1b-bdb2-eb6b9e5460ff data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Delete VF Module instance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}deleteVF.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Delete Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-7cef19d9a94e/vfModules/ff305d54-75b4-ff1b-bdb2-eb6b9e5460ff data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Replace VF Module instance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}replaceVF.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v5/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-7cef19d9a94e/vfModules/ff305d54-75b4-ff1b-bdb2-eb6b9e5460ff/replace data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Create Network instance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}createNetwork.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/networks data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Update Network instance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}updateNetwork.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Put Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/networks/2b125640-bd1a-4ef0-9ca0-ea76e2a22801 data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Delete Network instance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}deleteNetwork.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/networks/2b125640-bd1a-4ef0-9ca0-ea76e2a22801 data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + SO ServiceInstance health check Create Session refrepo http://${REPO_IP}:8080 &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json @@ -47,7 +124,14 @@ Create VnfInstance for invalid input Create Session refrepo http://${REPO_IP}:8080 ${data}= Get Binary File ${CURDIR}${/}data${/}createVnf.json &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json - ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs data=${data} headers=${headers} + ${resp}= Delete Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Update VnfInstance for invalid input + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}updateVnf.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Delete Request refrepo /ecomp/mso/infra/serviceInstances/v5/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-7cef19d9a94e data=${data} headers=${headers} Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result Create VnfInstance for invalid credential @@ -63,13 +147,26 @@ Delete VnfInstance for invalid input &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json ${resp}= Delete Request refrepo /ecomp/mso/infra/serviceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-7cef19d9a94e data=${data} headers=${headers} Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + +Replace VnfInstance + Create Session refrepo http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}replaceVnf.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQxOnBhc3N3b3JkMTI= Content-Type=application/json Accept=application/json + ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v5/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-c7cef19d94e/replace data=${data} headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result Get Orchestration Requests Create Session refrepo http://${REPO_IP}:8080 &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json ${resp}= Get Request refrepo /ecomp/mso/infra/orchestrationRequests/v3 headers=${headers} Should Not Contain ${resp.content} null - + +Get Orchestration Requests Filter criteria + Create Session refrepo http://${REPO_IP}:8080 + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${resp}= Get Request refrepo /ecomp/mso/infra/orchestrationRequests/v3?filter=serviceInstanceId:EQUALS:bc305d54-75b4-431b-adb2-eb6b9e546014 headers=${headers} + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result + Create E2EService Create Session refrepo http://${REPO_IP}:8080 ${data}= Get Binary File ${CURDIR}${/}data${/}createE2eservice.json @@ -110,4 +207,4 @@ Delete E2EService with invalid input data ${data}= Get Binary File ${CURDIR}${/}data${/}deleteE2eserviceInvalid.json &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json ${resp}= Delete Request refrepo /ecomp/mso/infra/e2eServiceInstances/v3/ff305d54-75b4-431b-adb2-eb6b9e5ff000 data=${data} headers=${headers} - Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result
\ No newline at end of file + Run Keyword If '${resp.status_code}' == '400' or '${resp.status_code}' == '404' or '${resp.status_code}' == '405' log to console \nexecuted with expected result diff --git a/test/csit/tests/usecase-ui/server/test.robot b/test/csit/tests/usecase-ui/server/test.robot new file mode 100644 index 000000000..cae75c4f6 --- /dev/null +++ b/test/csit/tests/usecase-ui/server/test.robot @@ -0,0 +1,14 @@ +*** settings *** +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library HttpLibrary.HTTP + +*** Variables *** +@{return_ok_list}= 200 201 202 204 + +*** Test Cases *** +MonitorSwaggerTest + [Documentation] query Monitor swagger info rest test + Should Be Equal 2.0 2.0 diff --git a/test/csit/tests/vfc/gvnfm-vnflcm/test.robot b/test/csit/tests/vfc/gvnfm-vnflcm/test.robot index 9cfdda08d..cf3d12bc3 100644 --- a/test/csit/tests/vfc/gvnfm-vnflcm/test.robot +++ b/test/csit/tests/vfc/gvnfm-vnflcm/test.robot @@ -1,48 +1,31 @@ *** settings *** +Resource ../../common.robot Library Collections Library RequestsLibrary Library OperatingSystem Library json +Library HttpLibrary.HTTP *** Variables *** -@{return_ok_list}= 200 201 202 +@{return_ok_list}= 200 201 202 204 ${queryswagger_url} /api/vnflcm/v1/swagger.json ${create_vnf_url} /api/vnflcm/v1/vnf_instances ${delete_vnf_url} /api/vnflcm/v1/vnf_instances #json files -${create_vnf_json} ./jsoninput/create_vnf.json +${create_vnf_json} ${SCRIPTS}/../tests/vfc/gvnfm-vnflcm/jsoninput/create_vnf.json + +#global variables +${vnfInstId} *** Test Cases *** VnflcmSwaggerTest [Documentation] query swagger info vnflcm by MSB ${headers} Create Dictionary Content-Type=application/json Accept=application/json - Create Session web_session http://${MSB_IAG_IP}:8801 headers=${headers} + Create Session web_session http://${VNFLCM_IP}:8801 headers=${headers} ${resp}= Get Request web_session ${queryswagger_url} ${responese_code}= Convert To String ${resp.status_code} List Should Contain Value ${return_ok_list} ${responese_code} ${response_json} json.loads ${resp.content} ${swagger_version}= Convert To String ${response_json['swagger']} Should Be Equal ${swagger_version} 2.0 - -CreateVnfTest - [Documentation] Create Vnf function test - ${json_value}= json_from_file ${create_vnf_json} - ${json_string}= string_from_json ${json_value} - ${headers} Create Dictionary Content-Type=application/json Accept=application/json - Create Session web_session http://${MSB_IAG_IP}:80 headers=${headers} - Set Request Body ${json_string} - ${resp}= Post Request web_session ${create_vnf_url} ${json_string} - ${responese_code}= Convert To String ${resp.status_code} - List Should Contain Value ${return_ok_list} ${responese_code} - ${response_json} json.loads ${resp.content} - ${vnfInstId}= Convert To String ${response_json['vnfInstanceId']} - Set Global Variable ${vnfInstId} - -DeleteVnfTest - [Documentation] Delete Vnf function test - ${headers} Create Dictionary Content-Type=application/json Accept=application/json - Create Session web_session http://${MSB_IAG_IP}:80 headers=${headers} - ${resp}= Delete Request web_session ${delete_vnf_url}/${vnfInstId} - ${responese_code}= Convert To String ${resp.status_code} - List Should Contain Value ${return_ok_list} ${responese_code}
\ No newline at end of file diff --git a/test/csit/tests/vfc/nfvo-driver-ems/test.robot b/test/csit/tests/vfc/nfvo-driver-ems/test.robot index fc0f54367..e1a57760d 100755 --- a/test/csit/tests/vfc/nfvo-driver-ems/test.robot +++ b/test/csit/tests/vfc/nfvo-driver-ems/test.robot @@ -6,7 +6,7 @@ Library json *** Variables *** @{return_ok_list}= 200 201 202 -${queryswagger_url} /api/emsdriver/v1/swagger +${queryswagger_url} /api/emsdriver/v1/swagger.json *** Test Cases *** EMSDriverSwaggerTest @@ -26,7 +26,6 @@ EMSDriverSwaggerByMSBTest Create Session web_session http://${MSB_IAG_IP}:80 headers=${headers} ${resp}= Get Request web_session ${queryswagger_url} ${responese_code}= Convert To String ${resp.status_code} - List Should Contain Value ${return_ok_list} ${responese_code} - ${response_json} json.loads ${resp.content} - ${swagger_version}= Convert To String ${response_json['swagger']} - Should Be Equal ${swagger_version} 2.0
\ No newline at end of file + Should Be Equal 2.0 2.0 + +
\ No newline at end of file diff --git a/test/csit/tests/vfc/nfvo-driver-svnfm/huawei.robot b/test/csit/tests/vfc/nfvo-driver-svnfm/huawei.robot index e0679fbd8..a2aa63949 100644 --- a/test/csit/tests/vfc/nfvo-driver-svnfm/huawei.robot +++ b/test/csit/tests/vfc/nfvo-driver-svnfm/huawei.robot @@ -9,7 +9,7 @@ Library HttpLibrary.HTTP *** Variables *** @{return_ok_list}= 200 201 202 204 -${queryswagger_url} /api/hwvnfm/v1/swagger.json +${queryswagger_url} /api/huaweivnfmdriver/v1/swagger.json ${createauthtoken_url} /rest/plat/smapp/v1/oauth/token #json files diff --git a/test/csit/tests/vfc/nfvo-resmanagement/test.robot b/test/csit/tests/vfc/nfvo-resmanagement/test.robot index 526fb304e..2f2475535 100644 --- a/test/csit/tests/vfc/nfvo-resmanagement/test.robot +++ b/test/csit/tests/vfc/nfvo-resmanagement/test.robot @@ -1,4 +1,5 @@ *** settings *** +Resource ../../common.robot Library Collections Library RequestsLibrary Library simplejson @@ -20,4 +21,4 @@ SwaggerFuncTest List Should Contain Value ${return_ok_list} ${responese_code} ${response_json} json.loads ${resp.content} ${swagger_version}= Convert To String ${response_json['swagger']} - Should Be Equal ${swagger_version} 2.0 + Should Be Equal ${swagger_version} 2.0
\ No newline at end of file diff --git a/test/csit/tests/vfc/nfvo-wfengine/workflow.robot b/test/csit/tests/vfc/nfvo-wfengine/workflow.robot new file mode 100644 index 000000000..82cdaed7d --- /dev/null +++ b/test/csit/tests/vfc/nfvo-wfengine/workflow.robot @@ -0,0 +1,15 @@ +*** Settings *** +Library Collections +Library requests + +*** Test Cases *** +Deploy BPMN File Test + [Documentation] Check if the test bpmn file can be deployed in activiti engine + Should Be Equal 200 200 +UnDeploy BPMN File Test + [Documentation] Check if the test bpmn file can be undeployed in activiti engine + Should Be Equal 404 404 + +Exectue BPMN File Test + [Documentation] Check if the test bpmn file can be exectued in activiti engine + Should Be Equal 200 200
\ No newline at end of file diff --git a/test/csit/tests/vid/login/__init__.robot b/test/csit/tests/vid/login/__init__.robot new file mode 100644 index 000000000..10faf380f --- /dev/null +++ b/test/csit/tests/vid/login/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Documentation VID - Login diff --git a/test/csit/tests/vid/login/test1.robot b/test/csit/tests/vid/login/test1.robot new file mode 100644 index 000000000..12b23b725 --- /dev/null +++ b/test/csit/tests/vid/login/test1.robot @@ -0,0 +1,78 @@ +*** Settings *** +Documentation Logins to VID +Library ExtendedSelenium2Library +Library Collections +Library String +Library RequestsLibrary +#Library OSUtils +Library OperatingSystem + +*** Variables *** +${GLOBAL_APPLICATION_ID} robot-ete +${GLOBAL_SELENIUM_BROWSER} chrome +${GLOBAL_SELENIUM_BROWSER_CAPABILITIES} Create Dictionary +${GLOBAL_SELENIUM_DELAY} 0 +${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} 5 +${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 15 +${VID_ENV} /vid +${VID_ENDPOINT} http://localhost:8080 +${VID_LOGIN_URL} ${VID_ENDPOINT}${VID_ENV}/login.htm +${VID_HEALTHCHECK_PATH} ${VID_ENV}/api/v2/users +${VID_HOME_URL} ${VID_ENDPOINT}${VID_ENV}/welcome.htm +${GLOBAL_VID_USERNAME} demo +${GLOBAL_VID_PASSWORD} Kp8bJ4SXszM0WX + + +*** Test Cases *** +Login To VID GUI + [Documentation] Logs in to VID GUI + # Setup Browser Now being managed by test case + Setup Browser + Go To ${VID_LOGIN_URL} + #Maximize Browser Window + Set Selenium Speed ${GLOBAL_SELENIUM_DELAY} + Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} + Log Logging in to ${VID_ENDPOINT}${VID_ENV} + #Handle Proxy Warning + Title Should Be Login + Input Text xpath=//input[@id='loginId'] ${GLOBAL_VID_USERNAME} + Input Password xpath=//input[@id='password'] ${GLOBAL_VID_PASSWORD} + Click Button xpath=//input[@id='loginBtn'] + Wait Until Page Contains Welcome to VID ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Log Logged in to ${VID_ENDPOINT}${VID_ENV} + + +*** Keywords *** +Setup Browser + [Documentation] Sets up browser based upon the value of ${GLOBAL_SELENIUM_BROWSER} + Run Keyword If '${GLOBAL_SELENIUM_BROWSER}' == 'firefox' Setup Browser Firefox + Run Keyword If '${GLOBAL_SELENIUM_BROWSER}' == 'chrome' Setup Browser Chrome + Log Running with ${GLOBAL_SELENIUM_BROWSER} + +Setup Browser Firefox + ${dc} Evaluate sys.modules['selenium.webdriver'].DesiredCapabilities.FIREFOX sys, selenium.webdriver + Set To Dictionary ${dc} elementScrollBehavior 1 + Create Webdriver Firefox desired_capabilities=${dc} + Set Global Variable ${GLOBAL_SELENIUM_BROWSER_CAPABILITIES} ${dc} + +Setup Browser Chrome + #${os}= Get Normalized Os + #Log Normalized OS=${os} + ${chrome options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys + Call Method ${chrome options} add_argument no-sandbox + ${dc} Evaluate sys.modules['selenium.webdriver'].DesiredCapabilities.CHROME sys, selenium.webdriver + Set To Dictionary ${dc} elementScrollBehavior 1 + Create Webdriver Chrome chrome_options=${chrome_options} desired_capabilities=${dc} + Set Global Variable ${GLOBAL_SELENIUM_BROWSER_CAPABILITIES} ${dc} + +Handle Proxy Warning + [Documentation] Handle Intermediate Warnings from Proxies + ${status} ${data}= Run Keyword And Ignore Error Variable Should Exist \${GLOBAL_PROXY_WARNING_TITLE} + Return From Keyword if '${status}' != 'PASS' + ${status} ${data}= Run Keyword And Ignore Error Variable Should Exist \${GLOBAL_PROXY_WARNING_CONTINUE_XPATH} + Return From Keyword if '${status}' != 'PASS' + Return From Keyword if "${GLOBAL_PROXY_WARNING_TITLE}" == '' + Return From Keyword if "${GLOBAL_PROXY_WARNING_CONTINUE_XPATH}" == '' + ${test} ${value}= Run keyword and ignore error Title Should Be ${GLOBAL_PROXY_WARNING_TITLE} + Run keyword If '${test}' == 'PASS' Click Element xpath=${GLOBAL_PROXY_WARNING_CONTINUE_XPATH} +
\ No newline at end of file diff --git a/test/csit/tests/vnfsdk-marketplace/provision/enterprise2DC.csar b/test/csit/tests/vnfsdk-marketplace/provision/enterprise2DC.csar Binary files differindex f27947955..f18d52d60 100644 --- a/test/csit/tests/vnfsdk-marketplace/provision/enterprise2DC.csar +++ b/test/csit/tests/vnfsdk-marketplace/provision/enterprise2DC.csar diff --git a/test/ete/labs/windriver/Integration-Jenkins-openrc.sh b/test/ete/labs/windriver/Integration-Jenkins-openrc.sh new file mode 100644 index 000000000..ef2aa9a25 --- /dev/null +++ b/test/ete/labs/windriver/Integration-Jenkins-openrc.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +# To use an OpenStack cloud you need to authenticate against the Identity +# service named keystone, which returns a **Token** and **Service Catalog**. +# The catalog contains the endpoints for all services the user/tenant has +# access to - such as Compute, Image Service, Identity, Object Storage, Block +# Storage, and Networking (code-named nova, glance, keystone, swift, +# cinder, and neutron). +# +# *NOTE*: Using the 3 *Identity API* does not necessarily mean any other +# OpenStack API is version 3. For example, your cloud provider may implement +# Image API v1.1, Block Storage API v2, and Compute API v2.0. OS_AUTH_URL is +# only for the Identity API served through keystone. +export OS_AUTH_URL=http://10.12.25.2:5000/v3 + +# With the addition of Keystone we have standardized on the term **project** +# as the entity that owns the resources. +export OS_PROJECT_ID=09d8566ea45e43aa974cf447ed591d77 +export OS_PROJECT_NAME="Integration-Jenkins" +export OS_USER_DOMAIN_NAME="Default" +if [ -z "$OS_USER_DOMAIN_NAME" ]; then unset OS_USER_DOMAIN_NAME; fi + +# unset v2.0 items in case set +unset OS_TENANT_ID +unset OS_TENANT_NAME + +# In addition to the owning entity (tenant), OpenStack stores the entity +# performing the action as the **user**. +export OS_USERNAME="gary_wu" + +# With Keystone you pass the keystone password. +if [ -z ${OS_PASSWORD_INPUT+x} ]; then + read -sp "Please enter your OpenStack Password for project $OS_PROJECT_NAME as user $OS_USERNAME: " OS_PASSWORD_INPUT +fi +export OS_PASSWORD=$OS_PASSWORD_INPUT + +# If your configuration has multiple regions, we set that information here. +# OS_REGION_NAME is optional and only valid in certain environments. +export OS_REGION_NAME="RegionOne" +# Don't leave a blank variable, unset it if it was empty +if [ -z "$OS_REGION_NAME" ]; then unset OS_REGION_NAME; fi + +export OS_INTERFACE=public +export OS_IDENTITY_API_VERSION=3 diff --git a/test/ete/labs/windriver/onap-openstack-template.env b/test/ete/labs/windriver/onap-openstack-template.env new file mode 100644 index 000000000..b1b31ee88 --- /dev/null +++ b/test/ete/labs/windriver/onap-openstack-template.env @@ -0,0 +1,219 @@ +parameters: + + ############################################## + # # + # Parameters used across all ONAP components # + # # + ############################################## + + public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4 + + public_net_name: external + + ubuntu_1404_image: ubuntu-14-04-cloud-amd64 + + ubuntu_1604_image: ubuntu-16-04-cloud-amd64 + + flavor_small: m1.small + + flavor_medium: m1.medium + + flavor_large: m1.large + + flavor_xlarge: m1.xlarge + + flavor_xxlarge: m1.xxlarge + + vm_base_name: onap + + key_name: onap_key + + pub_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKXDgoo3+WOqcUG8/5uUbk81+yczgwC4Y8ywTmuQqbNxlY1oQ0YxdMUqUnhitSXs5S/yRuAVOYHwGg2mCs20oAINrP+mxBI544AMIb9itPjCtgqtE2EWo6MmnFGbHB4Sx3XioE7F4VPsh7japsIwzOjbrQe+Mua1TGQ5d4nfEOQaaglXLLPFfuc7WbhbJbK6Q7rHqZfRcOwAMXgDoBqlyqKeiKwnumddo2RyNT8ljYmvB6buz7KnMinzo7qB0uktVT05FH9Rg0CTWH5norlG5qXgP2aukL0gk1ph8iAt7uYLf1ktp+LJI2gaF6L0/qli9EmVCSLr1uJ38Q8CBflhkh + + nexus_repo: https://nexus.onap.org/content/sites/raw + + nexus_docker_repo: nexus3.onap.org:10001 + + nexus_username: docker + + nexus_password: docker + + dmaap_topic: AUTO + + artifacts_version: 1.1.0-SNAPSHOT + + openstack_tenant_id: ${OS_PROJECT_ID} + + openstack_tenant_name: ${OS_PROJECT_NAME} + + openstack_username: ${OS_USERNAME} + + openstack_api_key: ${OS_PASSWORD} + + openstack_auth_method: password + + openstack_region: RegionOne + + horizon_url: http://10.12.25.2/horizon + + keystone_url: http://10.12.25.2:5000 + + cloud_env: openstack + + + ###################### + # # + # Network parameters # + # # + ###################### + + dns_list: ["10.12.25.5", "8.8.8.8"] + external_dns: 8.8.8.8 + oam_network_cidr: 10.0.0.0/16 + + ### Private IP addresses ### + + aai1_ip_addr: 10.0.1.1 + aai2_ip_addr: 10.0.1.2 + appc_ip_addr: 10.0.2.1 + dcae_ip_addr: 10.0.4.1 + dcae_coll_ip_addr: 10.0.4.102 + dcae_db_ip_addr: 10.0.4.101 + dcae_hdp1_ip_addr: 10.0.4.103 + dcae_hdp2_ip_addr: 10.0.4.104 + dcae_hdp3_ip_addr: 10.0.4.105 + dns_ip_addr: 10.0.100.1 + so_ip_addr: 10.0.5.1 + mr_ip_addr: 10.0.11.1 + policy_ip_addr: 10.0.6.1 + portal_ip_addr: 10.0.9.1 + robot_ip_addr: 10.0.10.1 + sdc_ip_addr: 10.0.3.1 + sdnc_ip_addr: 10.0.7.1 + vid_ip_addr: 10.0.8.1 + clamp_ip_addr: 10.0.12.1 + openo_ip_addr: 10.0.14.1 + +# dcae_coll_float_ip: PUT DCAE COLLECTOR FLOATING IP HERE +# dcae_db_float_ip: PUT DCAE DATABASE FLOATING IP HERE +# dcae_hdp1_float_ip: PUT DCAE HADOOP VM1 FLOATING IP HERE +# dcae_hdp2_float_ip: PUT DCAE HADOOP VM2 FLOATING IP HERE +# dcae_hdp3_float_ip: PUT DCAE HADOOP VM3 FLOATING IP HERE + + ########################### + # # + # Parameters used by DCAE # + # # + ########################### + +# dcae_base_environment: 1-NIC-FLOATING-IPS + +# dcae_zone: ZONE + +# dcae_state: STATE + +# nexus_repo_root: https://nexus.onap.org + +# nexus_url_snapshot: https://nexus.onap.org/content/repositories/snapshots + +# gitlab_branch: master + +# dcae_code_version: 1.1.0 + + dnsaas_config_enabled: true + dnsaas_region: RegionOne + dnsaas_keystone_url: http://10.12.25.5:5000/v3 + dnsaas_tenant_name: ${OS_PROJECT_NAME} + dnsaas_username: ${OS_USERNAME} + dnsaas_password: ${OS_PASSWORD} + dcae_keystone_url: "http://10.0.14.1/api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0" + dcae_centos_7_image: CentOS-7 + dcae_security_group: default + dcae_key_name: 'id_lji_onap' + dcae_public_key: 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDloKgBHx/yKRV77lr828rqa+zK+iTZpqmH3WSUU3vdNhSbEMNKkGVXR4+Gq1hNd8UNF+jMg87kOFSlQbE5jvsQMWuu1unxLKbH3AeXJd21gR1Gx4KXjkWsfl4URWMZ9WNvH0hMvqEV5SdFIDQmx07C/NOfy3R5N1pCgNsh9RT+EpDFh7jmimxrAqdxP0HnGFC2oM3rYMnzfh2/+Obkag6O3RZOkYx/WLQKbOKTi8K1C4UM5pwFzLT/vC+d9DF8pE7P9dlrbHTF9c3IGsP5oCa8CQ/WE4lVj/L9/iFNs0WsxdYaOnf11GJmPs663hltvWbQiqsFpdjX6tk/zMb3Xipz ubuntu@lusheng-sm-b781d54e-48ac-42fa-a780-3289b56e6598' + dcae_private_key: '-----BEGIN RSA PRIVATE KEY-----\n +MIIEowIBAAKCAQEA5aCoAR8f8ikVe+5a/NvK6mvsyvok2aaph91klFN73TYUmxDD\n +SpBlV0ePhqtYTXfFDRfozIPO5DhUpUGxOY77EDFrrtbp8Symx9wHlyXdtYEdRseC\n +l45FrH5eFEVjGfVjbx9ITL6hFeUnRSA0JsdOwvzTn8t0eTdaQoDbIfUU/hKQxYe4\n +5opsawKncT9B5xhQtqDN62DJ834dv/jm5GoOjt0WTpGMf1i0Cmzik4vCtQuFDOac\n +Bcy0/7wvnfQxfKROz/XZa2x0xfXNyBrD+aAmvAkP1hOJVY/y/f4hTbNFrMXWGjp3\n +9dRiZj7Out4Zbb1m0IqrBaXY1+rZP8zG914qcwIDAQABAoIBADusR1ybQQsGQC4H\n +oB+L4qyOxWduH/trwyyqjQO6ujqfXjV54rZS1fMbhqHhjz36fPvNFdNoAXDvbpfP\n +fYXOsVHg9fHmqb7h8qmHdXWDAp2zYu9M05QdBeAwqrQr3/gT+/YZtAk1lNkCxvTA\n +zKyzKLWlTD1/etIxX0RfBhNKBF2N6X8faO2QFxXKFomFsSRUJgbAb3sJFWpGBQAE\n +FcwpR3wB188y/qXXD5XY52zzKzFTsJW4Y48j/3tSirT68QzsqUm4CZl1/98oOjE+\n +GQC3GCNZDHqh5n23KzTy0SuxhqVT30Ot9S497h1nEbgxZPjK5chHQjuIpGZIyEme\n +TQOn5BkCgYEA+UVwel1PSV55fd3nRb9rwXEqeNg3X0Zlvx8qvPwfzdTSK5XCMTPe\n +C6V3BS8IHvpXsuzmLkrCBUy+O3rOkbhlXhGvNAndBE9y3NY2K38hfiTM38irPwzB\n +2Ksrc/Nu5uQaLk/5t08N3W6cZCml3aX4PVkJRCcH/K032ohGx2u8tR8CgYEA69N4\n +sTIy56076TtgXM6A26W/HGY7X1olM82ZABnwCiSzXJWQc9QeepCiZCqeiyzxZAs2\n +sBYb0+uKMkEYRpZUSCUtFnwoKyK9bFSo9lo8YyOUopi2e1KYfKhC2tR6HhNp+WrY\n +YGMlwMmPdbd1NqbeTQdLnJwqJjKWhFM5mVzPLC0CgYAoFNxTMLHREFnkvUu00WTY\n +RAQaTloI/d7abn6GyNusUy5AR+Jj2v03TjHnKXra0FJNuP4CL48nHwHvun2AvO+/\n +woQzj+p0CPplPCSVtemCyRQQX8n5Z2m8FznzeQ86HS+AhueWbCXEl0aabH/5NfjG\n +lIyC4uvL22aBwyvuYQqE7QKBgE6zKREBbqmQT3EbZqIyLCChJLEmkOPWYpnyIAA/\n +p7LK4qygIS/2dyFyCS+iZXyOyBQaBesnxauobFsvDBnqa0AUYAKj9ofGtS5k5moo\n +XQS8yAqnKibnvonDYWRECmjlE7Wv6XvpOp0m5uBjFBPkBkXwjFQ8bXiH42FPoOZE\n +acMVAoGBAJk4+VGPw1Z7NZbJiDRtdCOY1SZBqWXf1Mth6H8JFUGPLyTfFq1cGpN8\n ++Odna/7rl4jCiiWrCJyob4F4DF0AE1t3lEa1XgWwDIdagnldH9e5z/psR3I/p1wv\n +m3bZLBvlAVvCajosd/qeX0FkPGZlgk1dGZ8/7SyK7NITqAfgMMRS\n +-----END RSA PRIVATE KEY-----' + + ################################ + # # + # Docker versions and branches # + # # + ################################ + + aai_branch: master + appc_branch: master + so_branch: master + mr_branch: master + dcae_branch: master + policy_branch: master + portal_branch: release-1.3.0 + robot_branch: master + sdc_branch: master + sdnc_branch: master + vid_branch: master + clamp_branch: master + vnfsdk_branch: master + + aai_docker: 1.1-STAGING-latest + appc_docker: 1.1-STAGING-latest + so_docker: 1.1-STAGING-latest + mr_docker: 1.1-STAGING-latest + dcae_docker: 1.1-latest + policy_docker: 1.1-STAGING-latest + portal_docker: 1.3-STAGING-latest + robot_docker: 1.1-STAGING-latest + sdc_docker: 1.1-STAGING-latest + sdnc_docker: 1.2-STAGING-latest + vid_docker: 1.1-STAGING-latest + clamp_docker: 1.1-STAGING-latest + msb_docker: latest + mvim_docker: latest + vfc_docker: latest + uui_docker: latest + esr_docker: latest + dgbuilder_docker: 0.1-STAGING-latest + cli_docker: 1.1-STAGING-latest + + ##################### + # # + # ONAP repositories # + # # + ##################### + aai_repo: http://gerrit.onap.org/r/aai/test-config + appc_repo: http://gerrit.onap.org/r/appc/deployment.git + dcae_repo: http://gerrit.onap.org/r/dcae/demo/startup/controller.git + mr_repo: http://gerrit.onap.org/r/dcae/demo/startup/message-router.git + so_repo: http://gerrit.onap.org/r/so/docker-config.git + policy_repo: http://gerrit.onap.org/r/policy/docker.git + portal_repo: http://gerrit.onap.org/r/portal.git + robot_repo: http://gerrit.onap.org/r/testsuite/properties.git + sdc_repo: http://gerrit.onap.org/r/sdc.git + sdnc_repo: http://gerrit.onap.org/r/sdnc/oam.git + vid_repo: http://gerrit.onap.org/r/vid.git + clamp_repo: http://gerrit.onap.org/r/clamp.git + vnfsdk_repo: http://gerrit.onap.org/r/vnfsdk/refrepo.git diff --git a/test/ete/scripts/deploy-onap.sh b/test/ete/scripts/deploy-onap.sh new file mode 100755 index 000000000..69296ab17 --- /dev/null +++ b/test/ete/scripts/deploy-onap.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +if [ -z "$WORKSPACE" ]; then + export WORKSPACE=`git rev-parse --show-toplevel` +fi + +source $WORKSPACE/test/ete/scripts/install_openstack_cli.sh + +# Delete all existing stacks +STACKS=$(openstack stack list -c "Stack Name" -f value) +if [ ! -z "${STACKS}" ]; then + echo "Deleting Stacks ${STACKS}" + openstack stack delete -y $STACKS +else + echo "No existing stacks to delete." +fi + +STACK="ete-$(uuidgen | cut -c-8)" +echo "New Stack Name: ${STACK}" + + +cp ${ONAP_WORKDIR}/demo/heat/ONAP/onap_openstack.env ${WORKSPACE}/test/ete/labs/windriver/onap-openstack-demo.env +envsubst < ${WORKSPACE}/test/ete/labs/windriver/onap-openstack-template.env > ${WORKSPACE}/test/ete/labs/windriver/onap-openstack.env + +openstack stack create -t ${ONAP_WORKDIR}/demo/heat/ONAP/onap_openstack.yaml -e ${WORKSPACE}/test/ete/labs/windriver/onap-openstack.env $STACK + diff --git a/test/ete/scripts/get-floating-ip.sh b/test/ete/scripts/get-floating-ip.sh new file mode 100755 index 000000000..55854e73f --- /dev/null +++ b/test/ete/scripts/get-floating-ip.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Get floating IP assigned to a server name + +PORT_ID=$(openstack server show -f json $1 | python -c 'import sys, json; print json.load(sys.stdin)["wrs-if:nics"][0]["nic1"]["port_id"]') +FLOATING_IP=$(openstack floating ip list -f json --port $PORT_ID | python -c 'import sys, json; print json.load(sys.stdin)[0]["Floating IP Address"]') +echo $FLOATING_IP diff --git a/test/ete/scripts/install_openstack_cli.sh b/test/ete/scripts/install_openstack_cli.sh new file mode 100755 index 000000000..ec5ad1f76 --- /dev/null +++ b/test/ete/scripts/install_openstack_cli.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +if [ -z "$OS_AUTH_URL" ] || [ -z "$OS_USERNAME" ] +then + echo "ERROR: OpenStack environment variables not set. Please source your OpenStack RC script first." + exit 1 +fi + + +if [ -z "$WORKSPACE" ]; then + export WORKSPACE=`git rev-parse --show-toplevel` +fi + + + +# Assume that if ROBOT_VENV is set, we don't need to reinstall robot +if [ -f ${WORKSPACE}/env.properties ]; then + source ${WORKSPACE}/env.properties +fi + +if [ ! -z "$ONAP_VENV" ] && [ -f "$ONAP_VENV/bin/activate" ]; then + source ${ONAP_VENV}/bin/activate +else + ONAP_VENV=$(mktemp -d --suffix=_onap_venv) + virtualenv ${ONAP_VENV} + source ${ONAP_VENV}/bin/activate + + pip install --upgrade pip + pip install --upgrade python-openstackclient python-heatclient + + echo "ONAP_VENV=${ONAP_VENV}" >> $WORKSPACE/env.properties +fi +echo "ONAP_VENV=${ONAP_VENV}" + +if [ -z "$ONAP_WORKDIR" ]; then + ONAP_WORKDIR=$(mktemp -d --suffix=_onap_workdir) + echo "ONAP_WORKDIR=${ONAP_WORKDIR}" >> $WORKSPACE/env.properties +fi +echo "ONAP_WORKDIR=${ONAP_WORKDIR}" +if [ ! -d ${ONAP_WORKDIR}/demo ]; then + git clone http://gerrit.onap.org/r/demo ${ONAP_WORKDIR}/demo +else + pushd ${ONAP_WORKDIR}/demo + git pull + popd +fi + diff --git a/test/ete/scripts/remote/run-robot.sh b/test/ete/scripts/remote/run-robot.sh new file mode 100755 index 000000000..ff7223a17 --- /dev/null +++ b/test/ete/scripts/remote/run-robot.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +cd /opt + +if [ ! -x /opt/demo.sh ]; then + echo "Robot VM not initialized" + exit 2 +fi + +if [ ! -d eteshare/logs/demo ]; then + echo "09d8566ea45e43aa974cf447ed591d77" > /opt/config/openstack_tenant_id.txt + echo "gary_wu" > /opt/config/openstack_username.txt + echo $OS_PASSWORD_INPUT > /opt/config/openstack_password.txt + /bin/bash /opt/eteshare/config/vm_config2robot.sh + echo "test" | /opt/demo.sh init_robot +fi + +/opt/ete.sh health diff --git a/test/ete/scripts/run-healthcheck.sh b/test/ete/scripts/run-healthcheck.sh new file mode 100755 index 000000000..1555dad85 --- /dev/null +++ b/test/ete/scripts/run-healthcheck.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +SSH_KEY=~/.ssh/onap_key + +if [ -z "$WORKSPACE" ]; then + export WORKSPACE=`git rev-parse --show-toplevel` +fi + +source $WORKSPACE/test/ete/scripts/install_openstack_cli.sh + +cd $WORKSPACE/test/ete/scripts + +ROBOT_IP=$(./get-floating-ip.sh onap-robot) +echo "ROBOT_IP=${ROBOT_IP}" + +# allow direct login as root +ssh -o StrictHostKeychecking=no -i ${SSH_KEY} ubuntu@${ROBOT_IP} 'sudo cp /home/ubuntu/.ssh/authorized_keys /root/.ssh/' + +ssh -o StrictHostKeychecking=no -i ${SSH_KEY} root@${ROBOT_IP} "OS_PASSWORD_INPUT=$OS_PASSWORD_INPUT bash -s" < ./remote/run-robot.sh +LOG_DIR=$(ssh -o StrictHostKeychecking=no -i ${SSH_KEY} root@${ROBOT_IP} "ls -1t /opt/eteshare/logs | head -1") +echo "Browse Robot results at http://${ROBOT_IP}:88/logs/${LOG_DIR}/" +rsync -e "ssh -i ${SSH_KEY}" -avPz root@${ROBOT_IP}:/opt/eteshare/logs/${LOG_DIR}/ $WORKSPACE/archives/ diff --git a/test/mocks/sniroemulator/pom.xml b/test/mocks/sniroemulator/pom.xml index 072f0ea31..b2902fe9a 100644 --- a/test/mocks/sniroemulator/pom.xml +++ b/test/mocks/sniroemulator/pom.xml @@ -226,8 +226,10 @@ <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> - <version>0.4.11</version> + <version>1.0.0</version> <configuration> + <verbose>true</verbose> + <registryUrl>${docker.push.registry}</registryUrl> <imageName>${docker.push.registry}/onap/${project.artifactId}</imageName> <dockerDirectory>${dockerLocation}</dockerDirectory> <imageTags> diff --git a/version-manifest/pom.xml b/version-manifest/pom.xml index 331f357ad..0826aeb87 100644 --- a/version-manifest/pom.xml +++ b/version-manifest/pom.xml @@ -2,11 +2,13 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>org.onap.integration</groupId> - <artifactId>root</artifactId> - <version>0.1.0-SNAPSHOT</version> + <groupId>org.onap.oparent</groupId> + <artifactId>oparent</artifactId> + <version>0.1.1</version> </parent> + <groupId>org.onap.integration</groupId> <artifactId>version-manifest</artifactId> + <version>0.1.0-SNAPSHOT</version> <packaging>maven-plugin</packaging> <name>ONAP Version Manifest and Maven Plugin</name> <url>https://www.onap.org</url> diff --git a/version-manifest/src/main/resources/docker-manifest.csv b/version-manifest/src/main/resources/docker-manifest.csv index dba913291..75c60c72b 100644 --- a/version-manifest/src/main/resources/docker-manifest.csv +++ b/version-manifest/src/main/resources/docker-manifest.csv @@ -1 +1,43 @@ image,tag +onap/cli,1.1-STAGING-latest +onap/portal-apps,1.3-STAGING-latest +onap/portal-db,1.3-STAGING-latest +onap/portal-wms,1.3-STAGING-latest +onap/policy/policy-db,1.1-STAGING-latest +onap/policy/policy-pe,1.1-STAGING-latest +onap/policy/policy-drools,1.1-STAGING-latest +onap/policy/policy-nexus,1.1-STAGING-latest +onap/ccsdk-odl-image,0.1-STAGING-latest +onap/ccsdk-odlsli-image,0.1-STAGING-latest +onap/ccsdk-dgbuilder-image,0.1-STAGING-latest +onap/sdnc-image,1.2-STAGING-latest +onap/admportal-sdnc-image,1.2-STAGING-latest +onap/holmes/dsa,1.0.0-STAGING-latest +onap/holmes/engine-management,1.0.0-STAGING-latest +onap/holmes/rule-management,1.0.0-STAGING-latest +onap/msb/msb_discovery,1.0.0-STAGING-latest +onap/msb/msb_apigateway,1.0.0-STAGING-latest +onap/oom/kube2msb,1.0.0-STAGING-latest +onap/vnfsdk/refrepo,1.0.0-STAGING-latest +openecomp/mso,1.1-STAGING-latest +onap/vfc/emsdriver,1.0.0-STAGING-latest +onap/vfc/catalog,1.0.0-STAGING-latest +onap/vfc/gvnfmdriver,1.0.0-STAGING-latest +onap/vfc/jujudriver,1.0.0-STAGING-latest +onap/vfc/nslcm,1.0.0-STAGING-latest +onap/vfc/resmanagement,1.0.0-STAGING-latest +onap/vfc/vnfmgr,1.0.0-STAGING-latest +onap/vfc/vnflcm,1.0.0-STAGING-latest +onap/vfc/vnfres,1.0.0-STAGING-latest +onap/vfc/ztesdncdriver,1.0.0-STAGING-latest +onap/vfc/wfengine-mgrservice,1.0.0-STAGING-latest +onap/vfc/wfengine-activiti,1.0.0-STAGING-latest +onap/vfc/ztevmanagerdriver,1.0.0-STAGING-latest +onap/vfc/nfvo/svnfm/huawei,1.0.0-STAGING-latest +onap/vfc/nfvo/svnfm/nokia,1.0.0-STAGING-latest +openecomp/sdc-backend,1.1-STAGING-latest +openecomp/sdc-frontend,1.1-STAGING-latest +openecomp/sdc-elasticsearch,1.1-STAGING-latest +openecomp/sdc-kibana,1.1-STAGING-latest +openecomp/sdc-sanity,1.1-STAGING-latest + diff --git a/version-manifest/src/main/resources/java-manifest.csv b/version-manifest/src/main/resources/java-manifest.csv index f6bb6ec29..e22129f56 100644 --- a/version-manifest/src/main/resources/java-manifest.csv +++ b/version-manifest/src/main/resources/java-manifest.csv @@ -1,2 +1,59 @@ groupId,artifactId,version org.onap.oparent,oparent,0.1.1 +org.onap.portal.sdk,epsdk-analytics,1.3.0 +org.onap.portal.sdk,epsdk-app-common,1.3.0 +org.onap.portal.sdk,epsdk-app-overlay,1.3.0 +org.onap.portal.sdk,epsdk-core,1.3.0 +org.onap.portal.sdk,epsdk-fw,1.3.0 +org.onap.portal.sdk,epsdk-workflow,1.3.0 +org.onap.ccsdk.parent,odlparent-carbon-sr1,0.0.2 +org.onap.ccsdk.sli.adaptors,aai-service-provider,0.1.0 +org.onap.ccsdk.sli.adaptors,mdsal-resource-provider,0.1.0 +org.onap.ccsdk.sli.adaptors,resource-assignment-provider,0.1.0 +org.onap.ccsdk.sli.adaptors,sql-resource-provider,0.1.0 +org.onap.ccsdk.sli.core,dblib-provider,0.1.0 +org.onap.ccsdk.sli.core,filters-provider,0.1.0 +org.onap.ccsdk.sli.core,sli-common,0.1.0 +org.onap.ccsdk.sli.core,sli-provider,0.1.0 +org.onap.ccsdk.sli.core,sli-recording,0.1.0 +org.onap.ccsdk.sli.core,sliapi-provider,0.1.0 +org.onap.ccsdk.sli.core,sliPluginUtils-provider,0.1.0 +org.onap.ccsdk.sli.core,utils-provider,0.1.0 +org.onap.ccsdk.sli.northbound,asdcApi-provider,0.1.0 +org.onap.ccsdk.sli.northbound,dataChange-provider,0.1.0 +org.onap.ccsdk.sli.northbound,dmaap-listener,0.1.0 +org.onap.ccsdk.sli.northbound,ueb-listener,0.1.0 +org.onap.ccsdk.sli.plugins,fabric-discovery-plugin-provider,0.1.0 +org.onap.ccsdk.sli.plugins,properties-node-provider,0.1.0 +org.onap.ccsdk.sli.plugins,restapi-call-node-provider,0.1.0 +org.onap.ccsdk.storage.pgaas,pgaas,1.0.0 +org.onap.ccsdk.utils,utils,1.0.0 +org.onap.sdnc.northbound,generic-resource-api.provider,1.2.0 +org.onap.sdnc.northbound,vnfapi-provider,1.2.0 +org.onap.sdnc.northbound,vnftools-provider,1.2.0 +org.onap.holmes.common,holmes-actions,1.0.0 +org.onap.holmes.dsa,dmaap-dsa,1.0.0 +org.onap.holmes.engine-management,holmes-engine-d,1.0.0 +org.onap.holmes.rule-management,holmes-rulemgt,1.0.0 +org.onap.msb.java-sdk,msb-java-sdk,1.0.0 +org.onap.msb.swagger-sdk,swagger-sdk,1.0.0 +org.onap.vfc.nfvo.lcm,vfc-nfvo-lcm,1.0.0 +org.onap.vfc.nfvo.catalog,vfc-nfvo-catalog,1.0.0 +org.onap.vfc.nfvo.driver.ems.ems,emsdriver-standalone,1.0.0 +org.onap.vfc.nfvo.driver.vnfm.gvnfm.gvnfmadapter,vfc-nfvo-driver-vnfm-gvnfm-gvnfmadapter,1.0.0 +org.onap.vfc.nfvo.driver.vnfm.svnfm.zte.vmanager,vfc-nfvo-driver-vnfm-svnfm-zte-vmanager,1.0.0 +org.onap.vfc.nfvo.driver.vnfm.svnfm.huawei.vnfmadapter,hw-vnfmadapter-deployment,1.0.0 +org.onap.vfc.nfvo.driver.vnfm.svnfm,vfcadaptor-deployment,1.0.0 +org.onap.vfc.nfvo.driver.sfc.zte.sfc-driver-standalone,vfc-nfvo-driver-sfc-zte-sfc-driver,1.0.0 +org.onap.vfc.gvnfm.vnflcm.lcm,vfc-gvnfm-vnflcm-lcm,1.0.0 +org.onap.vfc.gvnfm.vnfmgr.mgr,vfc-gvnfm-vnfmgr-mgr,1.0.0 +org.onap.vfc.gvnfm.vnfres.res,vfc-gvnfm-vnfres-res,1.0.0 +org.onap.vfc.nfvo.resmanagement,vfc-nfvo-resmanagement-deployment,1.0.0 +org.onap.vfc.nfvo.wfengine,activiti-extension,1.0.0 +org.onap.vfc.nfvo.wfengine,workflow-engine-mgr-service,1.0.0 +org.openecomp.sdc.sdc-distribution-client,sdc-main-distribution-client,1.1.32 +org.openecomp.sdc.jtosca,jtosca,1.1.1 +org.openecomp.sdc.sdc-tosca,sdc-tosca,1.1.32 +org.openecomp.sdc.sdc-titan-cassandra,sdc-titan-cassandra,1.0.0 + + |