aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bootstrap/vagrant-onap/Vagrantfile681
-rwxr-xr-xtest/csit/plans/appc/healthcheck/bundle_query.sh4
-rwxr-xr-xtest/csit/plans/appc/healthcheck/db_query.sh24
-rwxr-xr-xtest/csit/plans/appc/healthcheck/setup.sh30
-rw-r--r--test/csit/plans/appc/healthcheck/testplan.txt1
-rw-r--r--test/csit/plans/sdc/healthCheck/setup.sh33
-rw-r--r--test/csit/plans/sdc/healthCheck/teardown.sh22
-rw-r--r--test/csit/plans/sdc/healthCheck/testplan.txt3
-rw-r--r--test/csit/scripts/sdc/clone_and_setup_sdc_data.sh52
-rw-r--r--test/csit/scripts/sdc/kill_containers_and_remove_dataFolders.sh31
-rw-r--r--test/csit/scripts/sdc/start_sdc_containers.sh108
-rw-r--r--test/csit/tests/sdc/healthCheck/__init__.robot2
-rw-r--r--test/csit/tests/sdc/healthCheck/test1.robot16
-rw-r--r--test/csit/tests/so/sanity-check/sanity_test_so.robot18
-rw-r--r--test/csit/tests/vnfsdk-marketplace/provision/sanity_test_vnfsdktestfunction.robot15
-rw-r--r--test/mock/pom.xml142
-rw-r--r--test/mock/src/main/docker/Dockerfile19
-rw-r--r--test/mock/src/main/docker/docker-entrypoint.sh5
-rw-r--r--test/mock/src/main/java/org/onap/integration/test/mock/MockApplication.java122
-rw-r--r--test/mock/src/main/java/org/onap/integration/test/mock/extension/WebhookDefinition.java101
-rw-r--r--test/mock/src/main/java/org/onap/integration/test/mock/extension/Webhooks.java100
-rw-r--r--test/mock/src/main/resources/application.properties1
-rw-r--r--test/mock/src/test/java/org/onap/integration/test/mock/MockApplicationTests.java16
23 files changed, 1178 insertions, 368 deletions
diff --git a/bootstrap/vagrant-onap/Vagrantfile b/bootstrap/vagrant-onap/Vagrantfile
index 8417cc953..adc73ca0d 100644
--- a/bootstrap/vagrant-onap/Vagrantfile
+++ b/bootstrap/vagrant-onap/Vagrantfile
@@ -1,8 +1,9 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
-conf = {
-# Generic parameters used across all ONAP components
+
+configuration = {
+ # Generic parameters used across all ONAP components
'public_net_id' => '00000000-0000-0000-0000-000000000000',
'key_name' => 'ecomp_key',
'pub_key' => '',
@@ -32,379 +33,387 @@ conf = {
'enable_oparent' => 'True'
}
-Vagrant.require_version ">= 1.8.6"
-# Determine the OS for the host computer
-module OS
- def OS.windows?
- (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
- end
+box = {
+ :virtualbox => 'ubuntu/trusty64',
+ :libvirt => 'sputnik13/trusty64',
+ :openstack => nil
+}
- def OS.mac?
- (/darwin/ =~ RUBY_PLATFORM) != nil
- end
- def OS.unix?
- !OS.windows?
- end
+nodes = [
+ {
+ :name => "aai",
+ :ips => ['10.252.0.6', "192.168.50.6"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["aai"]
+ },
+ {
+ :name => "all-in-one",
+ :ips => ['10.252.0.3', "192.168.50.3"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 12 * 1024,
+ :groups => ["all-in-one"],
+ :flavor => 'm1.xlarge',
+ :args => ['mr', 'sdc', 'aai', 'mso', 'robot', 'vid', 'sdnc', 'portal', 'dcae', 'policy', 'appc', 'vfc', 'ccsdk'],
+ },
+ {
+ :name => "appc",
+ :ips => ['10.252.0.14', "192.168.50.14"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["appc"],
+ },
+ {
+ :name => "ccsdk",
+ :ips => ['10.252.0.14', "192.168.50.17"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["ccsdk"],
+ },
+ {
+ :name => "dcae",
+ :ips => ['10.252.0.12', "192.168.50.12"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["dcae"],
+ },
+ {
+ :name => "dns",
+ :ips => ['10.252.0.3', "192.168.50.3"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 1 * 1024,
+ :groups => ["individual"],
+ :flavor => 'm1.small',
+ :args => [" "]
+ },
+ {
+ :name => "message-router",
+ :ips => ['10.252.0.4', "192.168.50.4"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["mr"],
+ },
+ {
+ :name => "mso",
+ :ips => ['10.252.0.7', "192.168.50.7"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["mso"],
+ },
+ {
+ :name => "multicloud",
+ :ips => ['10.252.0.16', "192.168.50.16"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["multicloud"],
+ },
+ {
+ :name => "policy",
+ :ips => ['10.252.0.13', "192.168.50.13"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["policy"],
+ },
+ {
+ :name => "portal",
+ :ips => ['10.252.0.11', "192.168.50.11"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["portal"],
+ },
+ {
+ :name => "robot",
+ :ips => ['10.252.0.8', "192.168.50.8"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["robot"],
+ },
+ {
+ :name => "sdc",
+ :ips => ['10.252.0.5', "192.168.50.5"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 8 * 1024,
+ :groups => ["individual"],
+ :args => ["sdc"],
+ },
+ {
+ :name => "sdnc",
+ :ips => ['10.252.0.10', "192.168.50.10"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ["sdnc"],
+ },
+ {
+ :name => "testing",
+ :ips => ['10.252.0.3', "192.168.50.3"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["testing"],
+ :flavor => 'm1.small',
+ :args => [""],
+ },
+ {
+ :name => "vfc",
+ :ips => ['10.252.0.15', "192.168.50.15"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ['vfc'],
+ },
+
+ {
+ :name => "vid",
+ :ips => ['10.252.0.9', "192.168.50.9"],
+ :macs => [],
+ :cpus => 2,
+ :cpu => "50",
+ :ram => 4 * 1024,
+ :groups => ["individual"],
+ :args => ['vid'],
+ },
+]
- def OS.linux?
- OS.unix? and not OS.mac?
- end
-end
-if OS.windows?
- puts "Vagrant launched from windows. This configuration has not fully tested."
-end
+run_path = 'vagrant_utils/postinstall.sh'
+
+sdc_volume='vol1-sdc-data.vdi'
+
+Vagrant.require_version ">= 1.8.6"
# Determine the provider used
provider = (ENV['VAGRANT_DEFAULT_PROVIDER'] || :virtualbox).to_sym
-puts "Using #{provider} provider"
+puts "[INFO] Provider: #{provider} "
+
vd_conf = ENV.fetch('VD_CONF', 'etc/settings.yaml')
if File.exist?(vd_conf)
require 'yaml'
user_conf = YAML.load_file(vd_conf)
- conf.update(user_conf)
+ configuration.update(user_conf)
end
-deploy_mode = ENV.fetch('DEPLOY_MODE', 'individual')
-sdc_volume='vol1-sdc-data.vdi'
+#Set network interface
+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}"
-Vagrant.configure("2") do |config|
- if ENV['http_proxy'] != nil and ENV['https_proxy'] != nil and ENV['no_proxy'] != nil
- if not Vagrant.has_plugin?('vagrant-proxyconf')
- system 'vagrant plugin install vagrant-proxyconf'
- raise 'vagrant-proxyconf was installed but it requires to execute again'
- end
- config.proxy.http = ENV['http_proxy']
- config.proxy.https = ENV['https_proxy']
- config.proxy.no_proxy = ENV['no_proxy']
- end
-
- if Vagrant.has_plugin?('vagrant-vbguest')
- puts 'vagrant-vbguest auto_update feature will be disable to avoid sharing conflicts'
- config.vbguest.auto_update = false
- end
-
- config.vm.box = 'ubuntu/trusty64'
- if provider == :libvirt
- config.vm.box = 'sputnik13/trusty64'
- if not Vagrant.has_plugin?('vagrant-libvirt')
- system 'vagrant plugin install vagrant-libvirt'
- raise 'vagrant-libvirt was installed but it requires to execute again'
- end
- end
- if provider == :openstack
- config.vm.box = nil
- config.ssh.username = 'ubuntu'
- if not Vagrant.has_plugin?('vagrant-openstack-provider')
- system 'vagrant plugin install vagrant-openstack-provider'
- raise 'vagrant-openstack-provider was installed but it requires to execute again'
- end
- end
- #config.vm.provision "docker"
- config.vm.synced_folder './opt', '/opt/', create: true
- config.vm.synced_folder './lib', '/var/onap/', create: true
- config.vm.synced_folder '~/.m2', '/root/.m2/', create: true
-
- config.vm.provider :virtualbox do |v|
- v.customize ["modifyvm", :id, "--memory", 4 * 1024]
- end
- config.vm.provider :libvirt do |v|
- v.memory = 4 * 1024
- v.nested = true
- end
- config.vm.provider :openstack do |v|
-
- v.openstack_auth_url = ENV.fetch('OS_AUTH_URL', '')
- v.tenant_name = ENV.fetch('OS_TENANT_NAME', '')
- v.username = ENV.fetch('OS_USERNAME', '')
- v.password = ENV.fetch('OS_PASSWORD', '')
- v.region = ENV.fetch('OS_REGION_NAME', '')
- v.identity_api_version = ENV.fetch('OS_IDENTITY_API_VERSION', '')
- v.domain_name = ENV.fetch('OS_PROJECT_DOMAIN_ID', '')
- v.project_name = ENV.fetch('OS_PROJECT_NAME', '')
-
- v.floating_ip_pool = ENV.fetch('OS_FLOATING_IP_POOL', '')
- v.floating_ip_pool_always_allocate = (ENV['OS_FLOATING_IP_ALWAYS_ALLOCATE'] == 'true')
- v.image = ENV.fetch('OS_IMAGE', '')
- v.security_groups = [ENV.fetch('OS_SEC_GROUP', '')]
- v.flavor = 'm1.medium'
- v.networks = ENV.fetch('OS_NETWORK', '')
- end
-
- case deploy_mode
-
- when 'all-in-one'
-
- config.vm.define :all_in_one do |all_in_one|
- all_in_one.vm.hostname = 'all-in-one'
- all_in_one.vm.network :private_network, ip: '192.168.50.3'
- all_in_one.vm.provider "virtualbox" do |v|
- v.customize ["modifyvm", :id, "--memory", 12 * 1024]
- unless File.exist?(sdc_volume)
- v.customize ['createhd', '--filename', sdc_volume, '--size', 20 * 1024]
- end
- v.customize ['storageattach', :id, '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', sdc_volume]
- end
- all_in_one.vm.provider "libvirt" do |v|
- v.memory = 12 * 1024
- v.nested = true
- v.storage :file, path: sdc_volume, bus: 'sata', device: 'vdb', size: '2G'
- end
- all_in_one.vm.provider "openstack" do |v|
- v.server_name = 'all-in-one'
- v.flavor = 'm1.xlarge'
- end
- all_in_one.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['mr', 'sdc', 'aai', 'mso', 'robot', 'vid', 'sdnc', 'portal', 'dcae', 'policy', 'appc', 'vfc', 'ccsdk']
- s.env = conf
- end
- end
-
- when 'individual'
+#If argument is given use it. Otherwise use Env: DEPLOY_MODE else use default
+requested_machine = ARGV[1]
- config.vm.define :dns do |dns|
- dns.vm.hostname = 'dns'
- dns.vm.network :private_network, ip: '192.168.50.3'
- dns.vm.provider "virtualbox" do |v|
- v.customize ["modifyvm", :id, "--memory", 1 * 1024]
- end
- dns.vm.provider "libvirt" do |v|
- v.memory = 1 * 1024
- v.nested = true
- end
- dns.vm.provider "openstack" do |v|
- v.server_name = 'dns'
- v.flavor = 'm1.small'
- end
- dns.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.env = conf
- end
+deploy_mode = ENV.fetch('DEPLOY_MODE', 'individual')
+if requested_machine != nil
+ if requested_machine.include?("all-in-one") || requested_machine.include?("testing")
+ deploy_mode = requested_machine
end
+end
- config.vm.define :mr do |mr|
- mr.vm.hostname = 'message-router'
- mr.vm.network :private_network, ip: '192.168.50.4'
- mr.vm.provider "openstack" do |v|
- v.server_name = 'message-router'
- end
- mr.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['mr']
- s.env = conf
- end
- end
+#Catch the status of all machines
+if ARGV[0] == 'status' || ARGV[0] == 'destroy'
+ deploy_mode = 'NA'
+end
- config.vm.define :sdc do |sdc|
- sdc.vm.hostname = 'sdc'
- sdc.vm.network :private_network, ip: '192.168.50.5'
- sdc.vm.provider "virtualbox" do |v|
- unless File.exist?(sdc_volume)
- v.customize ['createhd', '--filename', sdc_volume, '--size', 20 * 1024]
- end
- v.customize ['storageattach', :id, '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', sdc_volume]
- end
- sdc.vm.provider "libvirt" do |v|
- v.storage :file, path: sdc_volume, bus: 'sata', device: 'vdb', size: '2G'
- end
- sdc.vm.provider "openstack" do |v|
- v.server_name = 'sdc'
- end
- sdc.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['sdc']
- s.env = conf
- end
- end
+puts "[INFO] Deploy Mode: #{deploy_mode}"
- config.vm.define :aai do |aai|
- aai.vm.hostname = 'aai'
- aai.vm.network :private_network, ip: '192.168.50.6'
- aai.vm.provider "openstack" do |v|
- v.server_name = 'aai'
- end
- aai.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['aai']
- s.env = conf
- end
- end
+#In case of all-in-one or testing clean the nodes list
+case deploy_mode
+ when 'all-in-one'
+ nodes.select! do |node|
+ if node[:name].include?("all-in-one")
+ true if node[:name]
+ end
+ end
- config.vm.define :mso do |mso|
- mso.vm.hostname = 'mso'
- mso.vm.network :private_network, ip: '192.168.50.7'
- mso.vm.provider "openstack" do |v|
- v.server_name = 'mso'
- end
- mso.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['mso']
- s.env = conf
- end
- end
-
- config.vm.define :robot do |robot|
- robot.vm.hostname = 'robot'
- robot.vm.network :private_network, ip: '192.168.50.8'
- robot.vm.provider "openstack" do |v|
- v.server_name = 'robot'
- end
- robot.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['robot']
- s.env = conf
- end
- end
+ when 'individual'
+ nodes.select! do |node|
+ if node[:groups][0].include?("individual")
+ true if node[:name]
+
+ end
+ end
- config.vm.define :vid do |vid|
- vid.vm.hostname = 'vid'
- vid.vm.network :private_network, ip: '192.168.50.9'
- vid.vm.provider "openstack" do |v|
- v.server_name = 'vid'
- end
- vid.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['vid']
- s.env = conf
- end
- end
+ when 'testing'
+ nodes.select! do |node|
+ if node[:name].include?("testing")
+ true if node[:name]
+ end
+ end
+end
- config.vm.define :sdnc do |sdnc|
- sdnc.vm.hostname = 'sdnc'
- sdnc.vm.network :private_network, ip: '192.168.50.10'
- sdnc.vm.provider "openstack" do |v|
- v.server_name = 'sdnc'
- end
- sdnc.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['sdnc']
- s.env = conf
- end
- end
+Vagrant.configure("2") do |config|
- config.vm.define :portal do |portal|
- portal.vm.hostname = 'portal'
- portal.vm.network :private_network, ip: '192.168.50.11'
- portal.vm.provider "openstack" do |v|
- v.server_name = 'portal'
- end
- portal.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['portal']
- s.env = conf
+ # PROXY definitions
+ if ENV['http_proxy'] != nil and ENV['https_proxy'] != nil and ENV['no_proxy'] != nil
+ if not Vagrant.has_plugin?('vagrant-proxyconf')
+ system 'vagrant plugin install vagrant-proxyconf'
+ raise 'vagrant-proxyconf was installed but it requires to execute again'
end
+ config.proxy.http = ENV['http_proxy']
+ config.proxy.https = ENV['https_proxy']
+ config.proxy.no_proxy = ENV['no_proxy']
end
- config.vm.define :dcae do |dcae|
- dcae.vm.hostname = 'dcae'
- dcae.vm.network :private_network, ip: '192.168.50.12'
- dcae.vm.provider "openstack" do |v|
- v.server_name = 'dcae'
- end
- dcae.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['dcae']
- s.env = conf
- end
+ if Vagrant.has_plugin?('vagrant-vbguest')
+ puts 'vagrant-vbguest auto_update feature will be disable to avoid sharing conflicts'
+ config.vbguest.auto_update = false
end
- config.vm.define :policy do |policy|
- policy.vm.hostname = 'policy'
- policy.vm.network :private_network, ip: '192.168.50.13'
- policy.vm.provider "openstack" do |v|
- v.server_name = 'policy'
- end
- policy.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['policy']
- s.env = conf
+ if provider == :libvirt
+ if not Vagrant.has_plugin?('vagrant-libvirt')
+ system 'vagrant plugin install vagrant-libvirt'
+ raise 'vagrant-libvirt was installed but it requires to execute again'
end
end
-
- config.vm.define :appc do |appc|
- appc.vm.hostname = 'appc'
- appc.vm.network :private_network, ip: '192.168.50.14'
- appc.vm.provider "openstack" do |v|
- v.server_name = 'appc'
- end
- appc.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['appc']
- s.env = conf
+ if provider == :openstack
+ config.ssh.username = 'ubuntu'
+ if not Vagrant.has_plugin?('vagrant-openstack-provider')
+ system 'vagrant plugin install vagrant-openstack-provider'
+ raise 'vagrant-openstack-provider was installed but it requires to execute again'
end
end
- config.vm.define :vfc do |vfc|
- vfc.vm.hostname = 'vfc'
- vfc.vm.network :private_network, ip: '192.168.50.15'
- vfc.vm.provider "openstack" do |v|
- v.server_name = 'vfc'
- end
- vfc.vm.provision 'docker'
- vfc.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['vfc']
- s.env = conf
- end
- end
+ nodes.each do |node|
+ config.vm.define node[:name] do |nodeconfig|
+
+ # Common Settings:
+
+ nodeconfig.vm.provider "virtualbox" do |vbox|
+ vbox.customize ['modifyvm', :id, '--nictype1', 'virtio']
+ vbox.customize ['modifyvm', :id, '--audio', 'none']
+ vbox.customize ['modifyvm', :id, '--vram', '1']
+ vbox.customize ['modifyvm', :id, "--cpuhotplug", "off"]
+ vbox.customize ['modifyvm', :id, "--cpuexecutioncap", node[:cpu]]
+ vbox.customize ['modifyvm', :id, "--cpus", node[:cpus]]
+ vbox.customize ["modifyvm", :id, "--memory", node[:ram]]
+ end
+
+ nodeconfig.vm.provider "libvirt" do |lbox|
+ lbox.memory = node[:ram]
+ lbox.nested = true
+ end
+
+ nodeconfig.vm.provider :openstack do |obox|
+ obox.openstack_auth_url = ENV.fetch('OS_AUTH_URL', '')
+ obox.tenant_name = ENV.fetch('OS_TENANT_NAME', '')
+ obox.username = ENV.fetch('OS_USERNAME', '')
+ obox.password = ENV.fetch('OS_PASSWORD', '')
+ obox.region = ENV.fetch('OS_REGION_NAME', '')
+ obox.identity_api_version = ENV.fetch('OS_IDENTITY_API_VERSION', '')
+ obox.domain_name = ENV.fetch('OS_PROJECT_DOMAIN_ID', '')
+ obox.project_name = ENV.fetch('OS_PROJECT_NAME', '')
+ obox.floating_ip_pool = ENV.fetch('OS_FLOATING_IP_POOL', '')
+ obox.floating_ip_pool_always_allocate = (ENV['OS_FLOATING_IP_ALWAYS_ALLOCATE'] == 'true')
+ obox.image = ENV.fetch('OS_IMAGE', '')
+ obox.security_groups = [ENV.fetch('OS_SEC_GROUP', '')]
+ obox.networks = ENV.fetch('OS_NETWORK', '')
+ obox.flavor = node[:flavor]
+ obox.server_name = node[:name]
- config.vm.define :multicloud do |multicloud|
- multicloud.vm.hostname = 'multicloud'
- multicloud.vm.network :private_network, ip: '192.168.50.16'
- multicloud.vm.provider "openstack" do |v|
- v.server_name = 'multicloud'
- end
- multicloud.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['multicloud']
- s.env = conf
- end
- end
+ end
- config.vm.define :ccsdk do |ccsdk|
- ccsdk.vm.hostname = 'ccsdk'
- ccsdk.vm.network :private_network, ip: '192.168.50.17'
- ccsdk.vm.provider "openstack" do |v|
- v.server_name = 'ccsdk'
- end
- ccsdk.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/postinstall.sh'
- s.args = ['ccsdk']
- s.env = conf
- end
- end
+ # Set Box type
+ nodeconfig.vm.box = box[provider]
+
+ # Set Node name
+ nodeconfig.vm.hostname = node[:name]
+
+ # Set Sync Folder
+ nodeconfig.vm.synced_folder ".", "/vagrant", disabled: true
+ nodeconfig.vm.synced_folder './opt', '/opt/', create: true
+ nodeconfig.vm.synced_folder './lib', '/var/onap/', create: true
+ if !is_windows
+ nodeconfig.vm.synced_folder '~/.m2', '/root/.m2/', create: true
+ end
+ # Set Network
+ nodeconfig.vm.network :private_network, ip: node[:ips][1]
+
+ # Specific settings:
+
+ #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)
+ v.customize ['createhd', '--filename', sdc_volume, '--size', 20 * 1024]
+ end
+ v.customize ['storageattach', :id, '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', sdc_volume]
+ end
+
+ nodeconfig.vm.provider "libvirt" do |v|
+ 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', '*')
+ test_case = ENV.fetch('TEST_CASE', '*')
+ # Override variables
+ run_path = 'vagrant_utils/unit_testing.sh'
+ node[:args] = [test_suite, test_case]
+ end
- when 'testing'
- config.vm.define :testing do |testing|
- test_suite = ENV.fetch('TEST_SUITE', '*')
- test_case = ENV.fetch('TEST_CASE', '*')
+ if node[:name].include? "vfc"
+ nodeconfig.vm.provision 'docker'
+ end
- testing.vm.hostname = 'testing'
- testing.vm.network :private_network, ip: '192.168.50.3'
- testing.vm.synced_folder './tests', '/var/onap_tests/', create: true
- testing.vm.provider "virtualbox" do |v|
- v.customize ["modifyvm", :id, "--memory", 4 * 1024]
- end
- testing.vm.provider "libvirt" do |v|
- v.memory = 4 * 1024
- v.nested = true
- end
- testing.vm.provider "openstack" do |v|
- v.server_name = 'testing'
- v.flavor = 'm1.small'
- end
- testing.vm.provision 'shell' do |s|
- s.path = 'vagrant_utils/unit_testing.sh'
- s.args = [test_suite, test_case]
- s.env = conf
- end
- end
+ nodeconfig.vm.provision 'shell' do |s|
+ s.path = run_path
+ s.args = node[:args]
+ s.env = configuration
+ end
- end
-end
+ end #nodeconfig
+ end #node
+end #config
+
diff --git a/test/csit/plans/appc/healthcheck/bundle_query.sh b/test/csit/plans/appc/healthcheck/bundle_query.sh
index 7224ae9c5..f163ce5c2 100755
--- a/test/csit/plans/appc/healthcheck/bundle_query.sh
+++ b/test/csit/plans/appc/healthcheck/bundle_query.sh
@@ -24,8 +24,8 @@ 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 393 ]; then
- echo "There are $num_bundles bundles out of 394 with $num_failed_bundles in a failed state. "
+if [ "$num_failed_bundles" -ge 1 ] || [ $num_bundles -le 400 ]; 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"
exit 1;
diff --git a/test/csit/plans/appc/healthcheck/db_query.sh b/test/csit/plans/appc/healthcheck/db_query.sh
index 87e0ac397..70829a13a 100755
--- a/test/csit/plans/appc/healthcheck/db_query.sh
+++ b/test/csit/plans/appc/healthcheck/db_query.sh
@@ -41,20 +41,20 @@ else
exit 1;
fi
-if [ "$NODE_TYPES" -eq "0" ]; then
- echo "There is no data in table NODE_TYPES. "
- exit 1;
-fi
+#if [ "$NODE_TYPES" -eq "0" ]; then
+# echo "There is no data in table NODE_TYPES. "
+# exit 1;
+#fi
-if [ "$SVC_LOGIC" -eq "0" ] ; then
- echo "There is no data in table SVC_LOGIC. "
- exit 1;
-fi
+#if [ "$SVC_LOGIC" -eq "0" ] ; then
+# echo "There is no data in table SVC_LOGIC. "
+# exit 1;
+#fi
-if [ "$VNF_DG_MAPPING" -eq "0" ]; then
- echo "There is no data in table VNF_DG_MAPPING. "
- exit 1;
-fi
+#if [ "$VNF_DG_MAPPING" -eq "0" ]; then
+# echo "There is no data in table VNF_DG_MAPPING. "
+# exit 1;
+#fi
echo "Expected table data is present."
exit 0 )
diff --git a/test/csit/plans/appc/healthcheck/setup.sh b/test/csit/plans/appc/healthcheck/setup.sh
index 3c57cefac..eaf488a65 100755
--- a/test/csit/plans/appc/healthcheck/setup.sh
+++ b/test/csit/plans/appc/healthcheck/setup.sh
@@ -20,6 +20,12 @@
SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source ${WORKSPACE}/test/csit/scripts/appc/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.1.0-SNAPSHOT-latest
+
export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1)
if [ "$MTU" == "" ]; then
@@ -36,14 +42,14 @@ git pull
unset http_proxy https_proxy
cd $WORKSPACE/archives/appc/docker-compose
-sed -i "s/DMAAP_TOPIC_ENV=.*/DMAAP_TOPIC_ENV="AUTO"/g" docker-compose.yml
-docker login -u docker -p docker nexus3.onap.org:10001
+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 nexus3.onap.org:10001/openecomp/appc-image:1.1-STAGING-latest
-docker tag nexus3.onap.org:10001/openecomp/appc-image:1.1-STAGING-latest openecomp/appc-image:latest
+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 nexus3.onap.org:10001/openecomp/dgbuilder-sdnc-image:1.1-STAGING-latest
-docker tag nexus3.onap.org:10001/openecomp/dgbuilder-sdnc-image:1.1-STAGING-latest openecomp/dgbuilder-sdnc-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
# start APPC containers with docker compose and configuration from docker-compose.yml
docker-compose up -d
@@ -71,7 +77,7 @@ fi
#sleep 800
-TIME_OUT=1500
+TIME_OUT=1000
INTERVAL=60
TIME=0
while [ "$TIME" -lt "$TIME_OUT" ]; do
@@ -79,7 +85,7 @@ 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)
- if [ "$response" == "Level 100" ] && [ "$num_bundles" -ge 394 ]; then
+ if [ "$response" == "Level 100" ] && [ "$num_bundles" -ge 400 ]; then
echo APPC karaf started in $TIME seconds
break;
fi
@@ -96,7 +102,7 @@ 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 394 ]; then
+ 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)
@@ -111,3 +117,9 @@ fi
# 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/appc/healthcheck/testplan.txt b/test/csit/plans/appc/healthcheck/testplan.txt
index 2a8c1ea84..fbf2319a7 100644
--- a/test/csit/plans/appc/healthcheck/testplan.txt
+++ b/test/csit/plans/appc/healthcheck/testplan.txt
@@ -1,4 +1,5 @@
# Test suites are relative paths under [integration.git]/test/csit/tests/.
# Place the suites in run order.
appc/healthcheck
+#appc/testsuite
diff --git a/test/csit/plans/sdc/healthCheck/setup.sh b/test/csit/plans/sdc/healthCheck/setup.sh
new file mode 100644
index 000000000..f247be656
--- /dev/null
+++ b/test/csit/plans/sdc/healthCheck/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.
+#
+# Modifications copyright (c) 2017 AT&T Intellectual Property
+#
+# Place the scripts in run order:
+
+
+source ${WORKSPACE}/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh
+
+source ${WORKSPACE}/test/csit/scripts/sdc/start_sdc_containers.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/healthCheck/teardown.sh
new file mode 100644
index 000000000..a5f69819e
--- /dev/null
+++ b/test/csit/plans/sdc/healthCheck/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/healthCheck/testplan.txt b/test/csit/plans/sdc/healthCheck/testplan.txt
new file mode 100644
index 000000000..2b2db1ede
--- /dev/null
+++ b/test/csit/plans/sdc/healthCheck/testplan.txt
@@ -0,0 +1,3 @@
+# Test suites are relative paths under [integration.git]/test/csit/tests/.
+# Place the suites in run order.
+sdc/healthCheck
diff --git a/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh b/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh
new file mode 100644
index 000000000..da421e4cf
--- /dev/null
+++ b/test/csit/scripts/sdc/clone_and_setup_sdc_data.sh
@@ -0,0 +1,52 @@
+#!/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.
+#
+
+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/
+
+cd ${WORKSPACE}/data/clone
+git clone --depth 1 http://gerrit.onap.org/r/sdc -b master
+
+
+# set enviroment variables
+
+ENV_NAME=CSIT
+MR_IP_ADDR=10.0.0.1
+
+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
+ sed -i "s/\"ueb_url_list\":.*/\"ueb_url_list\": \""$MR_IP_ADDR","$MR_IP_ADDR"\",/g" ${WORKSPACE}/data/environments/$ENV_NAME.json
+ sed -i "s/\"fqdn\":.*/\"fqdn\": [\""$MR_IP_ADDR"\", \""$MR_IP_ADDR"\"]/g" ${WORKSPACE}/data/environments/$ENV_NAME.json
+
+
diff --git a/test/csit/scripts/sdc/kill_containers_and_remove_dataFolders.sh b/test/csit/scripts/sdc/kill_containers_and_remove_dataFolders.sh
new file mode 100644
index 000000000..e03284248
--- /dev/null
+++ b/test/csit/scripts/sdc/kill_containers_and_remove_dataFolders.sh
@@ -0,0 +1,31 @@
+#!/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
+#
+
+echo "This is ${WORKSPACE}/test/csit/scripts/sdc/kill_and_remove_dataFolder.sh"
+
+#kill and remove all sdc dockers
+docker stop $(docker ps -a -q --filter="name=sdc")
+docker rm $(docker ps -a -q --filter="name=sdc")
+
+
+#delete data folder
+
+rm -rf ${WORKSPACE}/data/*
+
+
diff --git a/test/csit/scripts/sdc/start_sdc_containers.sh b/test/csit/scripts/sdc/start_sdc_containers.sh
new file mode 100644
index 000000000..31105acb0
--- /dev/null
+++ b/test/csit/scripts/sdc/start_sdc_containers.sh
@@ -0,0 +1,108 @@
+#!/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.
+#
+
+echo "This is ${WORKSPACE}/test/csit/scripts/sdc/start_sdc_containers.sh"
+
+
+RELEASE=latest
+LOCAL=false
+SKIPTESTS=false
+DEP_ENV=CSIT
+#[ -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 PREFIX=${NEXUS_DOCKER_REPO}'/openecomp'
+export PREFIX='nexus3.onap.org:10001/openecomp'
+
+#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}
+
+#start cassandra
+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 ""
+
+
+#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}
+
+#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 ""
+
+#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 ""
+
+
+
+
+#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 Clamp and its database well started in $TIME seconds
+# break;
+# fi
+
+# 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
diff --git a/test/csit/tests/sdc/healthCheck/__init__.robot b/test/csit/tests/sdc/healthCheck/__init__.robot
new file mode 100644
index 000000000..8ee10d5f6
--- /dev/null
+++ b/test/csit/tests/sdc/healthCheck/__init__.robot
@@ -0,0 +1,2 @@
+*** Settings ***
+Documentation Sdc - HealthCheck
diff --git a/test/csit/tests/sdc/healthCheck/test1.robot b/test/csit/tests/sdc/healthCheck/test1.robot
new file mode 100644
index 000000000..6d4dc242d
--- /dev/null
+++ b/test/csit/tests/sdc/healthCheck/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/so/sanity-check/sanity_test_so.robot b/test/csit/tests/so/sanity-check/sanity_test_so.robot
index 2e05c50f1..73a9f3f1f 100644
--- a/test/csit/tests/so/sanity-check/sanity_test_so.robot
+++ b/test/csit/tests/so/sanity-check/sanity_test_so.robot
@@ -13,59 +13,59 @@ Create ServiceInstance for invalid input
Create Session refrepo http://${REPO_IP}:8080
${data}= Get Binary File ${CURDIR}${/}data${/}createService.json
&{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json
- ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v2 data=${data} headers=${headers}
+ ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v3 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 ServiceInstance for invalid user
Create Session refrepo http://${REPO_IP}:8080
${data}= Get Binary File ${CURDIR}${/}data${/}createService.json
&{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQxOnBhc3N3b3JkMTI= Content-Type=application/json Accept=application/json
- ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v2 data=${data} headers=${headers}
+ ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v3 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 ServiceInstance for invalid input
Create Session refrepo http://${REPO_IP}:8080
${data}= Get Binary File ${CURDIR}${/}data${/}deleteService.json
&{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json
- ${resp}= Delete Request refrepo /ecomp/mso/infra/serviceInstances/v2/ff305d54-75b4-431b-adb2-eb6b9e5ff000 data=${data} headers=${headers}
+ ${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
Delete ServiceInstance for invalid user
Create Session refrepo http://${REPO_IP}:8080
${data}= Get Binary File ${CURDIR}${/}data${/}deleteService.json
&{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQxOnBhc3N3b3JkMTI== Content-Type=application/json Accept=application/json
- ${resp}= Delete Request refrepo /ecomp/mso/infra/serviceInstances/v2/ff305d54-75b4-431b-adb2-eb6b9e5ff000 data=${data} headers=${headers}
+ ${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
SO ServiceInstance health check
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/v2/rq1234d1-5a33-55df-13ab-12abad84e333 headers=${headers}
+ ${resp}= Get Request refrepo /ecomp/mso/infra/orchestrationRequests/v3/rq1234d1-5a33-55df-13ab-12abad84e333 headers=${headers}
Should Not Contain ${resp.content} null
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/v2/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs data=${data} headers=${headers}
+ ${resp}= Post 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
Create VnfInstance for invalid credential
Create Session refrepo http://${REPO_IP}:8080
${data}= Get Binary File ${CURDIR}${/}data${/}createVnf.json
&{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQxOnBhc3N3b3JkMTI= Content-Type=application/json Accept=application/json
- ${resp}= Post Request refrepo /ecomp/mso/infra/serviceInstances/v2/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs data=${data} headers=${headers}
+ ${resp}= Post 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
Delete VnfInstance for invalid input
Create Session refrepo http://${REPO_IP}:8080
${data}= Get Binary File ${CURDIR}${/}data${/}deleteVnf.json
&{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json
- ${resp}= Delete Request refrepo /ecomp/mso/infra/serviceInstances/v2/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/aca51b0a-710d-4155-bc7c-7cef19d9a94e data=${data} headers=${headers}
+ ${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
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/v2 headers=${headers}
+ ${resp}= Get Request refrepo /ecomp/mso/infra/orchestrationRequests/v3 headers=${headers}
Should Not Contain ${resp.content} null \ No newline at end of file
diff --git a/test/csit/tests/vnfsdk-marketplace/provision/sanity_test_vnfsdktestfunction.robot b/test/csit/tests/vnfsdk-marketplace/provision/sanity_test_vnfsdktestfunction.robot
index b06d5b544..c57642a2e 100644
--- a/test/csit/tests/vnfsdk-marketplace/provision/sanity_test_vnfsdktestfunction.robot
+++ b/test/csit/tests/vnfsdk-marketplace/provision/sanity_test_vnfsdktestfunction.robot
@@ -25,6 +25,15 @@ Get VNF Package Information from Repository
Create Session refrepo http://${REPO_IP}:8702
&{headers}= Create Dictionary Content-Type=application/json
${resp}= Get Request refrepo /openoapi/vnfsdk-marketplace/v1/PackageResource/csars/${csarId} headers=${headers}
+ ${response_json} json.loads ${resp.content}
+ ${downloadUri}= Convert To String ${response_json['downloadUri']}
+ Should Contain ${downloadUri} ${csarId}
+ Should Be Equal As Strings ${resp.status_code} 200
+
+Get List Of Requests
+ Create Session refrepo http://${REPO_IP}:8702
+ &{headers}= Create Dictionary Content-Type=application/json
+ ${resp}= Get Request refrepo /openoapi/vnfsdk-marketplace/v1/PackageResource/csars?name=enterprise2DC&version=1.0&type=SSAR&provider=huawei headers=${headers}
Should Be Equal As Strings ${resp.status_code} 200
Download VNF Package from Repository
@@ -32,9 +41,15 @@ Download VNF Package from Repository
&{headers}= Create Dictionary Content-Type=application/json
${resp}= Get Request refrepo /openoapi/vnfsdk-marketplace/v1/PackageResource/csars/${csarId}/files headers=${headers}
Should Be Equal As Strings ${resp.status_code} 200
+ ${downloadUri}= Convert To String ${resp.content}
+ ${downloadUri1}= Run curl http://${REPO_IP}:8702/openoapi/vnfsdk-marketplace/v1/PackageResource/csars/${csarId}/files
+ ${string}= Convert To String ${downloadUri1}
+ Should Contain ${downloadUri1} ' % Total % Received % Xferd Average
+ Should Contain ${string} ' % Total % Received % Xferd Average
Delete VNF Package from Repository
Create Session refrepo http://${REPO_IP}:8702
&{headers}= Create Dictionary Content-Type=application/json
${resp}= Delete Request refrepo /openoapi/vnfsdk-marketplace/v1/PackageResource/csars/${csarId} headers=${headers}
Should Be Equal As Strings ${resp.status_code} 200
+
diff --git a/test/mock/pom.xml b/test/mock/pom.xml
new file mode 100644
index 000000000..56aad78f2
--- /dev/null
+++ b/test/mock/pom.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+ <groupId>org.onap.integration</groupId>
+ <artifactId>mock</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>mock</name>
+ <description>onap emulator project based on Spring Boot</description>
+
+<parent>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-parent</artifactId>
+ <version>1.5.7.RELEASE</version>
+ <relativePath/> <!-- lookup parent from repository -->
+</parent>
+
+<properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <java.version>1.8</java.version>
+ <versions.jackson>2.8.9</versions.jackson>
+ <jetty.version>9.2.22.v20170606</jetty.version>
+</properties>
+
+<dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-contract-wiremock</artifactId>
+ <version>1.1.3.RELEASE</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.jopt-simple</groupId>
+ <artifactId>jopt-simple</artifactId>
+ <version>5.0.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>9.2.22.v20170606</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <version>9.2.22.v20170606</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlets</artifactId>
+ <version>9.2.22.v20170606</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-webapp</artifactId>
+ <version>9.2.22.v20170606</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>20.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ <version>${versions.jackson}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ <version>${versions.jackson}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>${versions.jackson}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.xmlunit</groupId>
+ <artifactId>xmlunit-core</artifactId>
+ <version>2.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.xmlunit</groupId>
+ <artifactId>xmlunit-legacy</artifactId>
+ <version>2.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.jayway.jsonpath</groupId>
+ <artifactId>json-path</artifactId>
+ <version>2.4.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.12</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.6</version>
+ </dependency>
+ <dependency>
+ <groupId>com.flipkart.zjsonpatch</groupId>
+ <artifactId>zjsonpatch</artifactId>
+ <version>0.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.github.jknack</groupId>
+ <artifactId>handlebars</artifactId>
+ <version>4.0.6</version>
+ </dependency>
+</dependencies>
+
+<build>
+ <finalName>${project.artifactId}</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ </plugin>
+ </plugins>
+</build>
+</project>
diff --git a/test/mock/src/main/docker/Dockerfile b/test/mock/src/main/docker/Dockerfile
new file mode 100644
index 000000000..b1bf4d93c
--- /dev/null
+++ b/test/mock/src/main/docker/Dockerfile
@@ -0,0 +1,19 @@
+FROM openjdk:8-jre
+
+MAINTAINER Geora Barsky <georab@amdocs.com>
+
+RUN mkdir -p /var/wiremock/lib/
+
+ADD mock.jar /var/wiremock/lib/app.jar
+
+WORKDIR /home/wiremock
+
+COPY docker-entrypoint.sh /
+RUN chmod 700 /docker-entrypoint.sh
+
+VOLUME /home/wiremock
+EXPOSE 8080 8081 9999
+
+ENTRYPOINT ["/docker-entrypoint.sh"]
+
+CMD ["java", "-jar","/var/wiremock/lib/app.jar"] \ No newline at end of file
diff --git a/test/mock/src/main/docker/docker-entrypoint.sh b/test/mock/src/main/docker/docker-entrypoint.sh
new file mode 100644
index 000000000..47364a270
--- /dev/null
+++ b/test/mock/src/main/docker/docker-entrypoint.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+touch /app.jar
+
+java -Xms1024m -Xmx1024m -jar /var/wiremock/lib/app.jar \ No newline at end of file
diff --git a/test/mock/src/main/java/org/onap/integration/test/mock/MockApplication.java b/test/mock/src/main/java/org/onap/integration/test/mock/MockApplication.java
new file mode 100644
index 000000000..115cb252a
--- /dev/null
+++ b/test/mock/src/main/java/org/onap/integration/test/mock/MockApplication.java
@@ -0,0 +1,122 @@
+package org.onap.integration.test.mock;
+
+import static com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder.responseDefinition;
+import static com.github.tomakehurst.wiremock.client.WireMock.anyUrl;
+import static com.github.tomakehurst.wiremock.core.WireMockApp.FILES_ROOT;
+import static com.github.tomakehurst.wiremock.core.WireMockApp.MAPPINGS_ROOT;
+import static com.github.tomakehurst.wiremock.http.RequestMethod.ANY;
+import static com.github.tomakehurst.wiremock.matching.RequestPatternBuilder.newRequestPattern;
+import static java.lang.System.out;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+import com.github.tomakehurst.wiremock.WireMockServer;
+import com.github.tomakehurst.wiremock.common.ConsoleNotifier;
+import com.github.tomakehurst.wiremock.common.FatalStartupException;
+import com.github.tomakehurst.wiremock.common.FileSource;
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import com.github.tomakehurst.wiremock.http.ResponseDefinition;
+import com.github.tomakehurst.wiremock.matching.RequestPattern;
+import com.github.tomakehurst.wiremock.standalone.MappingsLoader;
+import com.github.tomakehurst.wiremock.stubbing.StubMapping;
+import com.github.tomakehurst.wiremock.stubbing.StubMappings;
+
+@SpringBootApplication
+public class MockApplication {
+
+
+ private static final String BANNER= " \n" +
+" ******** **** **** ## \n" +
+" **######** ###* *### ## \n" +
+" *##******##* ##*** ***## ##\n" +
+" **#* *#** ##*#* *#*## ## \n" +
+" *#* *#* ##****** ******* ##****** ##*#* *#*## ******* ****** ## *** \n" +
+" *#* *#* ##*####* *######* ##*####** ##*#* *#*## **#####** **####** ## *#** \n" +
+" *#* *#* ##****#* *#****#* ##** **#* ## *** *** ## *#** **#* *#****#* ## **#** \n" +
+" *# #* ##* *#* #* ##* *#* ## *#* *#* ## *#* *#* *#* *#* ##**#** \n" +
+" *#* *#* ##* ## ****## ##* *#* ## *#* *#* ## *#* *#* *#* ##*##* \n" +
+" *#* *#* ## ## **###### ## #* ## *#* *#* ## *# #* *# ##**#** \n" +
+" *#* *#* ## ## *#****## ##* *#* ## *#*#* ## *#* *#* *#* ##**##* \n" +
+" **#* *#** ## ## *#* *## ##* *#* ## *#*#* ## *#* *#* *#* *#* ## *#** \n" +
+" *##******##* ## ## *#* **##* ##** **#* ## *#*#* ## *#** **#* *#****#* ## **#* \n" +
+" **######** ## ## *#######* ##*####* ## *###* ## **#####** **####** ## *#** \n" +
+" ******** ## ## *******#* ##****** ## *#* ## ******* ****** ## *#* \n" +
+" ## \n" +
+" ## \n" +
+" ## \n" +
+" ** \n" ;
+
+ static {
+ System.setProperty("org.mortbay.log.class", "com.github.tomakehurst.wiremock.jetty.LoggerAdapter");
+ }
+
+ private WireMockServer wireMockServer;
+
+ public static void main(String[] args) {
+ SpringApplication.run(MockApplication.class, args);
+ //new WireMockServerRunner().run("--port 9999");
+ new MockApplication().run(args);
+ }
+
+ public void run(String... args) {
+
+ WireMockConfiguration options = WireMockConfiguration.options();
+ options.port(9999);
+ FileSource fileSource = options.filesRoot();
+ fileSource.createIfNecessary();
+ FileSource filesFileSource = fileSource.child(FILES_ROOT);
+ filesFileSource.createIfNecessary();
+ FileSource mappingsFileSource = fileSource.child(MAPPINGS_ROOT);
+ mappingsFileSource.createIfNecessary();
+
+ // Register extension
+ options.extensions("org.onap.integration.test.mock.extension.Webhooks");
+ // Register notifier
+ options.notifier(new ConsoleNotifier(true));
+ wireMockServer = new WireMockServer(options);
+
+ wireMockServer.enableRecordMappings(mappingsFileSource, filesFileSource);
+
+ //if (options.specifiesProxyUrl()) {
+ // addProxyMapping(options.proxyUrl());
+ //}
+
+ try {
+ wireMockServer.start();
+ out.println(BANNER);
+ out.println();
+ out.println(options);
+ } catch (FatalStartupException e) {
+ System.err.println(e.getMessage());
+ System.exit(1);
+ }
+ }
+
+ private void addProxyMapping(final String baseUrl) {
+ wireMockServer.loadMappingsUsing(new MappingsLoader() {
+ @Override
+ public void loadMappingsInto(StubMappings stubMappings) {
+ RequestPattern requestPattern = newRequestPattern(ANY, anyUrl()).build();
+ ResponseDefinition responseDef = responseDefinition()
+ .proxiedFrom(baseUrl)
+ .build();
+
+ StubMapping proxyBasedMapping = new StubMapping(requestPattern, responseDef);
+ proxyBasedMapping.setPriority(10); // Make it low priority so that existing stubs will take precedence
+ stubMappings.addMapping(proxyBasedMapping);
+ }
+ });
+ }
+
+ public void stop() {
+ wireMockServer.stop();
+ }
+
+ public boolean isRunning() {
+ return wireMockServer.isRunning();
+ }
+
+ public int port() { return wireMockServer.port(); }
+
+}
diff --git a/test/mock/src/main/java/org/onap/integration/test/mock/extension/WebhookDefinition.java b/test/mock/src/main/java/org/onap/integration/test/mock/extension/WebhookDefinition.java
new file mode 100644
index 000000000..dff99fd41
--- /dev/null
+++ b/test/mock/src/main/java/org/onap/integration/test/mock/extension/WebhookDefinition.java
@@ -0,0 +1,101 @@
+package org.onap.integration.test.mock.extension;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.tomakehurst.wiremock.http.Body;
+import com.github.tomakehurst.wiremock.http.HttpHeader;
+import com.github.tomakehurst.wiremock.http.HttpHeaders;
+import com.github.tomakehurst.wiremock.http.RequestMethod;
+
+import java.net.URI;
+import java.util.List;
+
+import static com.google.common.collect.Lists.newArrayList;
+
+public class WebhookDefinition {
+
+ private RequestMethod method;
+ private URI url;
+ private List<HttpHeader> headers;
+ private Body body = Body.none();
+
+ @JsonCreator
+ public WebhookDefinition(@JsonProperty("method") RequestMethod method,
+ @JsonProperty("url") URI url,
+ @JsonProperty("headers") HttpHeaders headers,
+ @JsonProperty("body") String body,
+ @JsonProperty("base64Body") String base64Body) {
+ this.method = method;
+ this.url = url;
+ this.headers = newArrayList(headers.all());
+ this.body = Body.fromOneOf(null, body, null, base64Body);
+ }
+
+ public WebhookDefinition() {
+ }
+
+ public RequestMethod getMethod() {
+ return method;
+ }
+
+ public URI getUrl() {
+ return url;
+ }
+
+ public HttpHeaders getHeaders() {
+ return new HttpHeaders(headers);
+ }
+
+ public String getBase64Body() {
+ return body.isBinary() ? body.asBase64() : null;
+ }
+
+ public String getBody() {
+ return body.isBinary() ? null : body.asString();
+ }
+
+ @JsonIgnore
+ public byte[] getBinaryBody() {
+ return body.asBytes();
+ }
+
+ public WebhookDefinition withMethod(RequestMethod method) {
+ this.method = method;
+ return this;
+ }
+
+ public WebhookDefinition withUrl(URI url) {
+ this.url = url;
+ return this;
+ }
+
+ public WebhookDefinition withUrl(String url) {
+ withUrl(URI.create(url));
+ return this;
+ }
+
+ public WebhookDefinition withHeaders(List<HttpHeader> headers) {
+ this.headers = headers;
+ return this;
+ }
+
+ public WebhookDefinition withHeader(String key, String... values) {
+ if (headers == null) {
+ headers = newArrayList();
+ }
+
+ headers.add(new HttpHeader(key, values));
+ return this;
+ }
+
+ public WebhookDefinition withBody(String body) {
+ this.body = new Body(body);
+ return this;
+ }
+
+ public WebhookDefinition withBinaryBody(byte[] body) {
+ this.body = new Body(body);
+ return this;
+ }
+}
diff --git a/test/mock/src/main/java/org/onap/integration/test/mock/extension/Webhooks.java b/test/mock/src/main/java/org/onap/integration/test/mock/extension/Webhooks.java
new file mode 100644
index 000000000..cb17ba658
--- /dev/null
+++ b/test/mock/src/main/java/org/onap/integration/test/mock/extension/Webhooks.java
@@ -0,0 +1,100 @@
+package org.onap.integration.test.mock.extension;
+
+import com.github.tomakehurst.wiremock.common.Notifier;
+import com.github.tomakehurst.wiremock.core.Admin;
+import com.github.tomakehurst.wiremock.extension.Parameters;
+import com.github.tomakehurst.wiremock.extension.PostServeAction;
+import com.github.tomakehurst.wiremock.http.HttpClientFactory;
+import com.github.tomakehurst.wiremock.http.HttpHeader;
+import com.github.tomakehurst.wiremock.stubbing.ServeEvent;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+
+import static com.github.tomakehurst.wiremock.common.Exceptions.throwUnchecked;
+import static com.github.tomakehurst.wiremock.common.LocalNotifier.notifier;
+import static com.github.tomakehurst.wiremock.http.HttpClientFactory.getHttpRequestFor;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+public class Webhooks extends PostServeAction {
+
+ private final ScheduledExecutorService scheduler;
+ private final HttpClient httpClient;
+
+ public Webhooks() {
+ scheduler = Executors.newScheduledThreadPool(10);
+ httpClient = HttpClientFactory.createClient();
+ }
+
+ @Override
+ public String getName() {
+ return "webhook";
+ }
+
+ @Override
+ public void doAction(ServeEvent serveEvent, Admin admin, Parameters parameters) {
+ final WebhookDefinition definition = parameters.as(WebhookDefinition.class);
+ final Notifier notifier = notifier();
+
+ scheduler.schedule(
+ new Runnable() {
+ @Override
+ public void run() {
+ HttpUriRequest request = buildRequest(definition);
+
+ try {
+ HttpResponse response = httpClient.execute(request);
+ notifier.info(
+ String.format("Webhook %s request to %s returned status %s\n\n%s",
+ definition.getMethod(),
+ definition.getUrl(),
+ response.getStatusLine(),
+ EntityUtils.toString(response.getEntity())
+ )
+ );
+ System.out.println(String.format("Webhook %s request to %s returned status %s\n\n%s",
+ definition.getMethod(),
+ definition.getUrl(),
+ response.getStatusLine(),
+ EntityUtils.toString(response.getEntity())
+ )
+ );
+ } catch (IOException e) {
+ throwUnchecked(e);
+ }
+ }
+ },
+ 0L,
+ SECONDS
+ );
+ }
+
+ private static HttpUriRequest buildRequest(WebhookDefinition definition) {
+ HttpUriRequest request = getHttpRequestFor(
+ definition.getMethod(),
+ definition.getUrl().toString()
+ );
+
+ for (HttpHeader header: definition.getHeaders().all()) {
+ request.addHeader(header.key(), header.firstValue());
+ }
+
+ if (definition.getMethod().hasEntity()) {
+ HttpEntityEnclosingRequestBase entityRequest = (HttpEntityEnclosingRequestBase) request;
+ entityRequest.setEntity(new ByteArrayEntity(definition.getBinaryBody()));
+ }
+
+ return request;
+ }
+
+ public static WebhookDefinition webhook() {
+ return new WebhookDefinition();
+ }
+}
diff --git a/test/mock/src/main/resources/application.properties b/test/mock/src/main/resources/application.properties
new file mode 100644
index 000000000..51ad5ebf4
--- /dev/null
+++ b/test/mock/src/main/resources/application.properties
@@ -0,0 +1 @@
+server.port=9090
diff --git a/test/mock/src/test/java/org/onap/integration/test/mock/MockApplicationTests.java b/test/mock/src/test/java/org/onap/integration/test/mock/MockApplicationTests.java
new file mode 100644
index 000000000..8d2a04625
--- /dev/null
+++ b/test/mock/src/test/java/org/onap/integration/test/mock/MockApplicationTests.java
@@ -0,0 +1,16 @@
+package org.onap.integration.test.mock;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class MockApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}