aboutsummaryrefslogtreecommitdiffstats
path: root/docker
diff options
context:
space:
mode:
Diffstat (limited to 'docker')
-rw-r--r--docker/benchmarking-cntt/Dockerfile4
-rw-r--r--docker/benchmarking-cntt/testcases.yaml67
-rw-r--r--docker/benchmarking/Dockerfile11
-rw-r--r--docker/benchmarking/testcases.yaml7
-rw-r--r--docker/core/Dockerfile11
-rw-r--r--docker/features/Dockerfile2
-rw-r--r--docker/healthcheck/Dockerfile15
-rw-r--r--docker/healthcheck/testcases.yaml20
-rw-r--r--docker/smoke-cntt/Dockerfile5
-rw-r--r--docker/smoke-cntt/tempest_conf.yaml94
-rw-r--r--docker/smoke-cntt/testcases.yaml273
-rw-r--r--docker/smoke/Dockerfile35
-rw-r--r--docker/smoke/testcases.yaml93
-rw-r--r--docker/tempest/Accept-custom-registered-endpoints.patch99
-rw-r--r--docker/tempest/Create-new-server-in-test_create_backup.patch84
-rw-r--r--docker/tempest/Dockerfile36
-rw-r--r--docker/tempest/Fixes-race-condition-in-test_add_remove_fixed_ip.patch165
-rw-r--r--docker/tempest/Switch-to-threading.Thread-for-Rally-tasks.patch50
-rw-r--r--docker/tempest/object-storage-fix-and-cleanup-header-checks.patch171
-rw-r--r--docker/vnf/Dockerfile37
-rw-r--r--docker/vnf/clearwater-heat-singlenet-deps.patch122
-rw-r--r--docker/vnf/testcases.yaml9
22 files changed, 1292 insertions, 118 deletions
diff --git a/docker/benchmarking-cntt/Dockerfile b/docker/benchmarking-cntt/Dockerfile
new file mode 100644
index 000000000..f4a9642b2
--- /dev/null
+++ b/docker/benchmarking-cntt/Dockerfile
@@ -0,0 +1,4 @@
+FROM opnfv/functest-benchmarking:hunter
+
+COPY testcases.yaml /usr/lib/python2.7/site-packages/xtesting/ci/testcases.yaml
+CMD ["run_tests", "-t", "all"]
diff --git a/docker/benchmarking-cntt/testcases.yaml b/docker/benchmarking-cntt/testcases.yaml
new file mode 100644
index 000000000..30eb3e631
--- /dev/null
+++ b/docker/benchmarking-cntt/testcases.yaml
@@ -0,0 +1,67 @@
+---
+tiers:
+ -
+ name: benchmarking_cntt
+ description: >-
+ Run several OpenStack performance tools
+ https://docs.openstack.org/performance-docs/latest/methodologies/tools.html
+ testcases:
+ -
+ case_name: rally_full_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ This test case runs the full suite of scenarios of the
+ OpenStack Rally suite using several threads and iterations.
+ run:
+ name: rally_full
+ args:
+ tests:
+ - 'authenticate'
+ - 'glance'
+ - 'cinder'
+ - 'heat'
+ - 'keystone'
+ - 'neutron'
+ - 'nova'
+ - 'quotas'
+ - 'swift'
+
+ -
+ case_name: rally_jobs_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ This test case runs a group of Rally jobs used in
+ OpenStack gating
+ run:
+ name: rally_jobs
+ args:
+ tests:
+ - 'neutron'
+ -
+ case_name: vmtp
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ VMTP is a small python application that will automatically
+ perform ping connectivity, round trip time measurement
+ (latency) and TCP/UDP throughput
+ run:
+ name: vmtp
+
+ -
+ case_name: shaker
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ Shaker wraps around popular system network testing tools
+ like iperf, iperf3 and netperf (with help of flent). Shaker
+ is able to deploy OpenStack instances and networks in
+ different topologies.
+ run:
+ name: shaker
diff --git a/docker/benchmarking/Dockerfile b/docker/benchmarking/Dockerfile
index 43a8fb783..b2ff3e1e8 100644
--- a/docker/benchmarking/Dockerfile
+++ b/docker/benchmarking/Dockerfile
@@ -10,10 +10,14 @@ RUN apk --no-cache add --update libxml2 libxslt && \
python-dev build-base linux-headers libffi-dev \
openssl-dev libjpeg-turbo-dev libxml2-dev libxslt-dev && \
wget -q -O- https://opendev.org/openstack/requirements/raw/branch/$OPENSTACK_TAG/upper-constraints.txt > upper-constraints.txt && \
- sed -i -E s/^tempest==+.*$/-e\ git+https:\\/\\/opendev.org\\/openstack\\/tempest@$TEMPEST_TAG#egg=tempest/ upper-constraints.txt && \
+ sed -i -E /#egg=tempest/d upper-constraints.txt && \
+ sed -i -E /^ujson==+.*$/d upper-constraints.txt && \
+ sed -i -E /^kubernetes==+.*$/d upper-constraints.txt && \
case $(uname -m) in aarch*|arm*) sed -i -E /^PyNaCl=/d upper-constraints.txt ;; esac && \
wget -q -O- https://git.opnfv.org/functest/plain/upper-constraints.txt?h=$BRANCH > upper-constraints.opnfv.txt && \
sed -i -E /#egg=functest/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=rally/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=xrally-kubernetes/d upper-constraints.opnfv.txt && \
case $(uname -m) in aarch*|arm*) CFLAGS="-O0" pip install --no-cache-dir -cupper-constraints.txt -cupper-constraints.opnfv.txt lxml ;; esac && \
git init /src/vmtp && \
(cd /src/vmtp && \
@@ -22,12 +26,13 @@ RUN apk --no-cache add --update libxml2 libxslt && \
update-requirements -s --source /src/openstack-requirements /src/vmtp/ && \
pip install --no-cache-dir --src /src -cupper-constraints.txt -cupper-constraints.opnfv.txt \
/src/vmtp && \
- mkdir -p /home/opnfv/functest/data/rally/neutron && \
+ mkdir -p /home/opnfv/functest/data/rally/neutron/rally-jobs && \
git init /src/neutron && \
(cd /src/neutron && \
git fetch --tags https://opendev.org/openstack/neutron.git $OPENSTACK_TAG && \
git checkout FETCH_HEAD) && \
- cp -r /src/neutron/rally-jobs /home/opnfv/functest/data/rally/neutron/rally-jobs && \
+ sed "s/NeutronTrunks.create_and_list_trunk_subports/NeutronTrunks.create_and_list_trunks/g" \
+ /src/neutron/rally-jobs/task-neutron.yaml > /home/opnfv/functest/data/rally/neutron/rally-jobs/task-neutron.yaml && \
rm -r upper-constraints.txt upper-constraints.opnfv.txt /src/vmtp /src/neutron && \
apk del .build-deps
COPY testcases.yaml /usr/lib/python2.7/site-packages/xtesting/ci/testcases.yaml
diff --git a/docker/benchmarking/testcases.yaml b/docker/benchmarking/testcases.yaml
index eeb209113..12b3ec57a 100644
--- a/docker/benchmarking/testcases.yaml
+++ b/docker/benchmarking/testcases.yaml
@@ -2,7 +2,6 @@
tiers:
-
name: benchmarking
- order: 2
description: >-
Run several OpenStack performance tools
https://docs.openstack.org/performance-docs/latest/methodologies/tools.html
@@ -29,6 +28,8 @@ tiers:
description: >-
This test case runs a group of Rally jobs used in
OpenStack gating
+ dependencies:
+ - NO_TENANT_NETWORK: '^(?![tT]rue$)'
run:
name: rally_jobs
args:
@@ -45,7 +46,7 @@ tiers:
perform ping connectivity, round trip time measurement
(latency) and TCP/UDP throughput
dependencies:
- - POD_ARCH: '^(?!aarch64$)'
+ - NO_TENANT_NETWORK: '^(?![tT]rue$)'
run:
name: vmtp
@@ -59,5 +60,7 @@ tiers:
like iperf, iperf3 and netperf (with help of flent). Shaker
is able to deploy OpenStack instances and networks in
different topologies.
+ dependencies:
+ - NO_TENANT_NETWORK: '^(?![tT]rue$)'
run:
name: shaker
diff --git a/docker/core/Dockerfile b/docker/core/Dockerfile
index 26ffdccf7..f2fd8555f 100644
--- a/docker/core/Dockerfile
+++ b/docker/core/Dockerfile
@@ -3,16 +3,23 @@ FROM alpine:3.9
ARG BRANCH=stable/hunter
ARG OPENSTACK_TAG=stable/rocky
-RUN apk --no-cache add --update \
+RUN apk -U upgrade && \
+ apk --no-cache add --update libcurl --repository=http://dl-cdn.alpinelinux.org/alpine/v3.11/main && \
+ apk --no-cache add --update \
python libffi openssl libjpeg-turbo py-pip bash \
- grep sed wget ca-certificates git openssh-client qemu-img iputils && \
+ grep sed wget ca-certificates git openssh-client qemu-img iputils coreutils mailcap \
+ libstdc++ && \
apk --no-cache add --virtual .build-deps --update \
python-dev build-base linux-headers libffi-dev \
openssl-dev libjpeg-turbo-dev && \
wget -q -O- https://opendev.org/openstack/requirements/raw/branch/$OPENSTACK_TAG/upper-constraints.txt > upper-constraints.txt && \
+ sed -i -E /^ujson==+.*$/d upper-constraints.txt && \
+ sed -i -E /^kubernetes==+.*$/d upper-constraints.txt && \
case $(uname -m) in aarch*|arm*) sed -i -E /^PyNaCl=/d upper-constraints.txt && apk add --no-cache py-pynacl ;; esac && \
wget -q -O- https://git.opnfv.org/functest/plain/upper-constraints.txt?h=$BRANCH > upper-constraints.opnfv.txt && \
sed -i -E /#egg=functest/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=rally/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=xrally-kubernetes/d upper-constraints.opnfv.txt && \
pip install --no-cache-dir --src /src -cupper-constraints.opnfv.txt -cupper-constraints.txt \
-e git+https://opendev.org/openstack/requirements@$OPENSTACK_TAG#egg=openstack_requirements && \
git init /src/functest && \
diff --git a/docker/features/Dockerfile b/docker/features/Dockerfile
index b0123d0ce..6e8c0881f 100644
--- a/docker/features/Dockerfile
+++ b/docker/features/Dockerfile
@@ -14,6 +14,8 @@ RUN apk --no-cache add --update python3 sshpass && \
case $(uname -m) in aarch*|arm*) sed -i -E /^PyNaCl=/d upper-constraints.txt ;; esac && \
wget -q -O- https://git.opnfv.org/functest/plain/upper-constraints.txt?h=$BRANCH > upper-constraints.opnfv.txt && \
sed -i -E /#egg=functest/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=rally/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=xrally-kubernetes/d upper-constraints.opnfv.txt && \
pip install --no-cache-dir --src /src -cupper-constraints.txt \
-cupper-constraints.opnfv.txt \
-rthirdparty-requirements.txt && \
diff --git a/docker/healthcheck/Dockerfile b/docker/healthcheck/Dockerfile
index 5611da4df..d1154ea79 100644
--- a/docker/healthcheck/Dockerfile
+++ b/docker/healthcheck/Dockerfile
@@ -4,20 +4,29 @@ ARG BRANCH=stable/hunter
ARG OPENSTACK_TAG=stable/rocky
ARG TEMPEST_TAG=21.0.0
ARG ODL_TAG=85448c9d97b89989488e675b29b38ac42d8674e4
+ARG TEMPEST_HORIZON_TAG=0.1.0
COPY thirdparty-requirements.txt thirdparty-requirements.txt
RUN wget -q -O- https://opendev.org/openstack/requirements/raw/branch/$OPENSTACK_TAG/upper-constraints.txt > upper-constraints.txt && \
- sed -i -E s/^tempest==+.*$/-e\ git+https:\\/\\/opendev.org\\/openstack\\/tempest@$TEMPEST_TAG#egg=tempest/ upper-constraints.txt && \
+ sed -i -E /#egg=tempest/d upper-constraints.txt && \
+ sed -i -E /^kubernetes==+.*$/d upper-constraints.txt && \
case $(uname -m) in aarch*|arm*) sed -i -E /^PyNaCl=/d upper-constraints.txt ;; esac && \
wget -q -O- https://git.opnfv.org/functest/plain/upper-constraints.txt?h=$BRANCH > upper-constraints.opnfv.txt && \
sed -i -E /#egg=functest/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=rally/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=xrally-kubernetes/d upper-constraints.opnfv.txt && \
+ git init /src/tempest-horizon && \
+ (cd /src/tempest-horizon && \
+ git fetch --tags https://opendev.org/openstack/tempest-horizon.git $TEMPEST_HORIZON_TAG && \
+ git checkout FETCH_HEAD) && \
+ update-requirements -s --source /src/openstack-requirements /src/tempest-horizon/ && \
pip install --no-cache-dir --src /src -cupper-constraints.txt -cupper-constraints.opnfv.txt \
- -rthirdparty-requirements.txt && \
+ /src/tempest-horizon/ -rthirdparty-requirements.txt && \
git init /src/odl_test && \
(cd /src/odl_test && \
git fetch --tags https://git.opendaylight.org/gerrit/integration/test $ODL_TAG && \
git checkout FETCH_HEAD) && \
- rm -r /src/odl_test/.git thirdparty-requirements.txt upper-constraints.txt \
+ rm -r /src/odl_test/.git /src/tempest-horizon/ thirdparty-requirements.txt upper-constraints.txt \
upper-constraints.opnfv.txt
COPY testcases.yaml /usr/lib/python2.7/site-packages/xtesting/ci/testcases.yaml
CMD ["run_tests", "-t", "all"]
diff --git a/docker/healthcheck/testcases.yaml b/docker/healthcheck/testcases.yaml
index 5aac7010e..3ebe8cb67 100644
--- a/docker/healthcheck/testcases.yaml
+++ b/docker/healthcheck/testcases.yaml
@@ -2,7 +2,6 @@
tiers:
-
name: healthcheck
- order: 0
description: >-
First tier to be executed to verify the basic
operations in the VIM.
@@ -28,6 +27,8 @@ tiers:
It creates and configures all tenant network ressources
required by advanced testcases (subnet, network and
router).
+ dependencies:
+ - NO_TENANT_NETWORK: '^(?![tT]rue$)'
run:
name: tenantnetwork1
@@ -40,6 +41,8 @@ tiers:
It creates new user/project before creating and configuring
all tenant network ressources required by a testcase
(subnet, network and router).
+ dependencies:
+ - NO_TENANT_NETWORK: '^(?![tT]rue$)'
run:
name: tenantnetwork2
@@ -162,3 +165,18 @@ tiers:
mode: '(?=.*\[.*\bsmoke\b.*\])(^tempest\.api)'
option:
- '--concurrency=4'
+
+ -
+ case_name: tempest_horizon
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ This test case runs the Tempest suite proposed by the
+ Horizon project.
+ dependencies:
+ - DASHBOARD_URL: '^(?!\s*$).+'
+ run:
+ name: tempest_horizon
+ args:
+ mode: '^tempest_horizon.'
diff --git a/docker/smoke-cntt/Dockerfile b/docker/smoke-cntt/Dockerfile
new file mode 100644
index 000000000..20d7717ca
--- /dev/null
+++ b/docker/smoke-cntt/Dockerfile
@@ -0,0 +1,5 @@
+FROM opnfv/functest-smoke:hunter
+
+COPY testcases.yaml /usr/lib/python2.7/site-packages/xtesting/ci/testcases.yaml
+COPY tempest_conf.yaml /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml
+CMD ["run_tests", "-t", "all"]
diff --git a/docker/smoke-cntt/tempest_conf.yaml b/docker/smoke-cntt/tempest_conf.yaml
new file mode 100644
index 000000000..20ca43ed9
--- /dev/null
+++ b/docker/smoke-cntt/tempest_conf.yaml
@@ -0,0 +1,94 @@
+---
+compute:
+ max_microversion: 2.53
+compute-feature-enabled:
+ attach_encrypted_volume: false
+ block_migration_for_live_migration: false
+ block_migrate_cinder_iscsi: false
+ change_password: false
+ cold_migration: true
+ config_drive: true
+ console_output: true
+ disk_config: true
+ enable_instance_password: true
+ interface_attach: true
+ live_migration: true
+ live_migrate_back_and_forth: false
+ metadata_service: true
+ pause: true
+ personality: false
+ rdp_console: false
+ rescue: true
+ resize: true
+ scheduler_available_filters: "RetryFilter,AvailabilityZoneFilter,\
+ ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,\
+ ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,SameHostFilter,\
+ DifferentHostFilter"
+ serial_console: false
+ shelve: true
+ snapshot: true
+ spice_console: false
+ suspend: true
+ swap_volume: false
+ vnc_console: true
+ volume_backed_live_migration: false
+ volume_multiattach: false
+identity:
+ auth_version: v3
+ user_unique_last_password_count: 2
+ user_lockout_duration: 10
+ user_lockout_failure_attempts: 2
+identity-feature-enabled:
+ trust: true
+ api_v2: false
+ api_v2_admin: false
+ security_compliance: true
+ federation: false
+ external_idp: false
+ project_tags: true
+ application_credentials: true
+image-feature-enabled:
+ api_v2: true
+ api_v1: false
+network-feature-enabled:
+ port_admin_state_change: true
+ port_security: true
+placement:
+ max_microversion: "1.10"
+validation:
+ image_ssh_user: cirros
+ ssh_timeout: 196
+ ip_version_for_ssh: 4
+ run_validation: true
+volume:
+ max_microversion: 3.43
+ storage_protocol: ceph
+ manage_volume_ref: source-name,volume-%s
+ manage_snapshot_ref: source-name,snapshot-%s
+volume-feature-enabled:
+ multi_backend: false
+ backup: true
+ snapshot: true
+ clone: true
+ manage_snapshot: false
+ manage_volume: true
+ extend_attached_volume: false
+ consistency_group: false
+ volume_revert: true
+neutron_plugin_options:
+ agent_availability_zone: nova
+ available_type_drivers: flat,geneve,vlan,gre,local,vxlan
+ provider_vlans: foo,
+object-storage-feature-enabled:
+ discoverable_apis: "account_quotas,formpost,bulk_upload,bulk_delete,\
+ tempurl,crossdomain,container_quotas,staticweb,account_quotas,slo"
+ object_versioning: true
+ discoverability: true
+heat_plugin:
+ skip_functional_test_list: RemoteStackTest,EncryptionVolTypeTest
+ skip_scenario_test_list: "AodhAlarmTest,SoftwareConfigIntegrationTest,\
+ VolumeBackupRestoreIntegrationTest,CfnInitIntegrationTest,\
+ LoadBalancerTest,RemoteDeeplyNestedStackTest"
+ auth_version: 3
+heat_features_enabled:
+ multi_cloud: false
diff --git a/docker/smoke-cntt/testcases.yaml b/docker/smoke-cntt/testcases.yaml
new file mode 100644
index 000000000..50608fc90
--- /dev/null
+++ b/docker/smoke-cntt/testcases.yaml
@@ -0,0 +1,273 @@
+---
+tiers:
+ -
+ name: smoke_cntt
+ description: >-
+ Set of basic Functional tests to validate the OPNFV scenarios.
+ testcases:
+ -
+ case_name: tempest_neutron_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ deny_skipping: true
+ tests_count: 478
+ description: >-
+ This test case runs the Tempest suite proposed by the
+ Neutron project. The list of test cases is generated by
+ Tempest automatically and depends on the parameters of
+ the OpenStack deployment.
+ run:
+ name: tempest_common
+ args:
+ mode: "(?!.*admin.test_agent_availability_zone)\
+ (?!.*admin.test_dhcp_agent_scheduler)\
+ (?!.*admin.test_l3_agent_scheduler)\
+ (?!.*admin.test_logging)\
+ (?!.*admin.test_logging_negative)\
+ (?!.*admin.test_network_segment_range)\
+ (?!.*admin.test_ports.PortTestCasesAdmin.test_regenerate_mac_address)\
+ (?!.*admin.test_ports.PortTestCasesResourceRequest)\
+ (?!.*admin.test_routers_dvr)\
+ (?!.*admin.test_routers_flavors)\
+ (?!.*admin.test_routers_ha)\
+ (?!.*test_conntrack_helper)\
+ (?!.*test_floating_ips.FloatingIPPoolTestJSON)\
+ (?!.*test_floating_ips.FloatingIPTestJSON.test_create_update_floatingip_port_details)\
+ (?!.*test_metering_extensions)\
+ (?!.*test_metering_negative)\
+ (?!.*test_networks.NetworksSearchCriteriaTest.test_list_validation_filters)\
+ (?!.*test_networks.NetworksTestAdmin.test_create_tenant_network_vxlan)\
+ (?!.*test_networks.NetworksTestJSON.test_create_update_network_dns_domain)\
+ (?!.*test_ports.PortsTestJSON.test_create_port_with_propagate_uplink_status)\
+ (?!.*test_ports.PortsTestJSON.test_create_port_without_propagate_uplink_status)\
+ (?!.*test_ports.PortsTestJSON.test_create_update_port_with_dns_domain)\
+ (?!.*test_ports.PortsTestJSON.test_create_update_port_with_dns_name)\
+ (?!.*test_ports.PortsTestJSON.test_create_update_port_with_no_dns_name)\
+ (?!.*test_qos.QosMinimumBandwidthRuleTestJSON)\
+ (?!.*test_revisions.TestRevisions.test_update_dns_domain_bumps_revision)\
+ (?!.*test_revisions.TestRevisions.test_update_router_extra_attributes_bumps_revision)\
+ (?!.*test_router_interface_fip)\
+ (?!.*test_routers.DvrRoutersTest)\
+ (?!.*test_routers.HaRoutersTest)\
+ (?!.*test_routers.RoutersIpV6Test.test_extra_routes_atomic)\
+ (?!.*test_routers.RoutersTest.test_extra_routes_atomic)\
+ (?!.*test_routers_negative.DvrRoutersNegativeTest)\
+ (?!.*test_routers_negative.DvrRoutersNegativeTestExtended)\
+ (?!.*test_routers_negative.HaRoutersNegativeTest)\
+ (?!.*test_security_groups.RbacSharedSecurityGroupTest)\
+ (?!.*test_subnetpools.SubnetPoolsSearchCriteriaTest.test_list_validation_filters)\
+ (?!.*test_subnets.SubnetsSearchCriteriaTest.test_list_validation_filters)\
+ (?!.*test_timestamp.TestTimeStamp.test_segment_with_timestamp)\
+ (?!.*test_trunk.TrunkTestInheritJSONBase.test_add_subport)\
+ (?!.*test_trunk.TrunkTestMtusJSON)\
+ (?!.*test_trunk_negative.TrunkTestJSON.test_create_subport_invalid_inherit_network_segmentation_type)\
+ (?!.*test_trunk_negative.TrunkTestMtusJSON)\
+ (^neutron_tempest_plugin.api)"
+ option:
+ - '--concurrency=4'
+
+ -
+ case_name: tempest_cinder_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ deny_skipping: true
+ tests_count: 7
+ description: >-
+ This test case runs the Tempest suite proposed by the
+ Cinder project.
+ run:
+ name: tempest_common
+ args:
+ mode: "(?!.*test_incremental_backup)\
+ (?!.*test_consistencygroups)\
+ (^cinder_tempest_plugin.)"
+ option:
+ - '--concurrency=4'
+
+ -
+ case_name: tempest_keystone_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ deny_skipping: true
+ tests_count: 27
+ description: >-
+ This test case runs the Tempest suite proposed by the
+ Keystone project.
+ run:
+ name: tempest_common
+ args:
+ mode: "(?!.*api.identity.v3.test_oauth1_tokens)\
+ (?!.*scenario.test_federated_authentication)\
+ keystone_tempest_plugin."
+ option:
+ - '--concurrency=4'
+
+ -
+ case_name: tempest_heat_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ deny_skipping: true
+ tests_count: 112
+ description: >-
+ This test case runs the Tempest suite proposed by the
+ Heat project.
+ run:
+ name: tempest_heat
+ args:
+ mode: "(?!.*functional.test_lbaasv2)\
+ (?!.*functional.test_encryption_vol_type)\
+ (?!.*functional.test_remote_stack.RemoteStackTest)\
+ (?!.*RemoteStackTest.test_stack_create_with_cloud_credential)\
+ (?!.*scenario.test_aodh_alarm)\
+ (?!.*tests.scenario.test_autoscaling_lb)\
+ (?!.*scenario.test_autoscaling_lbv2)\
+ (?!.*scenario.test_remote_deeply_nested.RemoteDeeplyNestedStackTest)\
+ (?!.*scenario.test_server_software_config)\
+ (?!.*test_volumes.VolumeBackupRestoreIntegrationTest)\
+ (?!.*scenario.test_octavia_lbaas)\
+ (?!.*scenario.test_server_cfn_init)\
+ ^heat_tempest_plugin.tests"
+ option:
+ - '--concurrency=1'
+
+ -
+ case_name: rally_sanity_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ This test case runs a sub group of tests of the OpenStack
+ Rally suite in smoke mode.
+ run:
+ name: rally_sanity
+ args:
+ tests:
+ - 'authenticate'
+ - 'glance'
+ - 'cinder'
+ - 'heat'
+ - 'keystone'
+ - 'neutron'
+ - 'nova'
+ - 'quotas'
+ - 'swift'
+
+ -
+ case_name: tempest_full_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ deny_skipping: true
+ tests_count: 1280
+ description: >-
+ The list of test cases is generated by
+ Tempest automatically and depends on the parameters of
+ the OpenStack deployment.
+ https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L83
+ run:
+ name: tempest_common
+ args:
+ mode: "(?!.*test_fixed_ips)\
+ (?!.*test_fixed_ips_negative)\
+ (?!.*test_auto_allocate_network)(?!.*test_floating_ips_bulk)\
+ (?!.*test_flavors_microversions.FlavorsV255TestJSON)\
+ (?!.*test_flavors_microversions.FlavorsV261TestJSON)\
+ (?!.*test_live_migration.LiveAutoBlockMigrationV225Test.test_iscsi_volume)\
+ (?!.*test_live_migration.LiveAutoBlockMigrationV225Test.test_volume_backed_live_migration)\
+ (?!.*test_live_migration.LiveMigrationTest.test_iscsi_volume)\
+ (?!.*test_live_migration.LiveMigrationTest.test_volume_backed_live_migration)\
+ (?!.*test_live_migration.LiveMigrationRemoteConsolesV26Test)\
+ (?!.*test_quotas.QuotasAdminTestV257)\
+ (?!.*certificates.test_certificates)\
+ (?!.*test_quotas_negative.QuotasSecurityGroupAdminNegativeTest)\
+ (?!.*test_novnc)(?!.*test_server_personality)\
+ (?!.*test_servers.ServerShowV263Test.test_show_update_rebuild_list_server)\
+ (?!.*test_servers_microversions.ServerShowV254Test)\
+ (?!.*test_servers_microversions.ServerShowV257Test)\
+ (?!.*test_servers_negative.ServersNegativeTestJSON.test_personality_file_contents_not_encoded)\
+ (?!.*servers.test_virtual_interfaces)\
+ (?!.*test_server_actions.ServerActionsTestJSON.test_change_server_password)\
+ (?!.*test_server_actions.ServerActionsTestJSON.test_get_vnc_console)\
+ (?!.*test_server_actions.ServerActionsTestJSON.test_reboot_server_soft)\
+ (?!.*test_security_group_default_rules)\
+ (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_security_group_create_with_duplicate_name)\
+ (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_security_group_create_with_invalid_group_description)\
+ (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_security_group_create_with_invalid_group_name)\
+ (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_update_security_group_with_invalid_sg_des)\
+ (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_update_security_group_with_invalid_sg_id)\
+ (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_update_security_group_with_invalid_sg_name)\
+ (?!.*test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filtered_by_ip_regex)\
+ (?!.*compute.test_virtual_interfaces)(?!.*compute.test_virtual_interfaces_negative)\
+ (?!.*compute.test_networks)\
+ (?!.*test_attach_volume.AttachVolumeMultiAttach)\
+ (?!.*identity.admin.v2)(?!.*identity.v2)\
+ (?!.*image.v1)\
+ (?!.*admin.test_dhcp_agent_scheduler)\
+ (?!.*admin.test_routers_dvr)\
+ (?!.*test_metering_extensions)(?!.*network.test_tags)\
+ (?!.*test_routers_negative.DvrRoutersNegativeTest)\
+ (?!.*test_routers.RoutersIpV6Test.test_create_router_set_gateway_with_fixed_ip)\
+ (?!.*test_routers.RoutersTest.test_create_router_set_gateway_with_fixed_ip)\
+ (?!.*test_group_snapshots.GroupSnapshotsV319Test.test_reset_group_snapshot_status)\
+ (?!.*test_multi_backend)\
+ (?!.*test_snapshot_manage)\
+ (?!.*test_volume_retype.VolumeRetypeWithMigrationTest)\
+ (?!.*test_volume_delete_cascade.VolumesDeleteCascade.test_volume_from_snapshot_cascade_delete)\
+ (?!.*test_volumes_backup.VolumesBackupsTest.test_volume_backup_create_get_detailed_list_restore_delete)\
+ (?!.*test_volumes_extend.VolumesExtendAttachedTest.test_extend_attached_volume)\
+ (?!.*\\[.*\\bslow\\b.*\\])(^tempest.api)"
+ option:
+ - '--concurrency=4'
+
+ -
+ case_name: tempest_scenario_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ deny_skipping: true
+ tests_count: 9
+ description: >-
+ The list of test cases is generated by
+ Tempest automatically and depends on the parameters of
+ the OpenStack deployment.
+ https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L84
+ run:
+ name: tempest_common
+ args:
+ mode: "\
+ (?!.*test_volume_boot_pattern.TestVolumeBootPattern.test_boot_server_from_encrypted_volume_luks)\
+ (?!.*\\[.*\\bslow\\b.*\\])(^tempest.scenario)"
+ option:
+ - '--concurrency=1'
+
+ -
+ case_name: tempest_slow_cntt
+ project_name: functest
+ criteria: 100
+ blocking: false
+ deny_skipping: true
+ tests_count: 43
+ description: >-
+ The list of test cases is generated by
+ Tempest automatically and depends on the parameters of
+ the OpenStack deployment.
+ https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L84
+ run:
+ name: tempest_common
+ args:
+ mode: "(?!.*test_volume_swap)\
+ (?!.*test_server_personality)\
+ (?!.*test_container_sync.ContainerSyncTest.test_container_synchronization)\
+ (?!.*test_container_sync_middleware.ContainerSyncMiddlewareTest.test_container_synchronization)\
+ (?!.*test_encrypted_cinder_volumes)\
+ (?!.*test_minbw_allocation_placement)\
+ (?!.*test_network_basic_ops.TestNetworkBasicOps.test_router_rescheduling)\
+ (?!.*test_stamp_pattern.TestStampPattern.test_stamp_pattern)\
+ (?!.*test_volume_migrate_attached)\
+ (?=.*\\[.*\\bslow\\b.*\\])(^tempest.)"
+ option:
+ - '--concurrency=1'
diff --git a/docker/smoke/Dockerfile b/docker/smoke/Dockerfile
index 22e3f85f2..75413f1d7 100644
--- a/docker/smoke/Dockerfile
+++ b/docker/smoke/Dockerfile
@@ -6,16 +6,24 @@ ARG TEMPEST_TAG=21.0.0
ARG REFSTACK_TARGET=2018.11
ARG PATROLE_TAG=0.4.0
ARG NEUTRON_TEMPEST_TAG=0.3.0
+ARG CINDER_TEMPEST_TAG=0.2.0
+ARG KEYSTONE_TEMPEST_TAG=0.2.0
ARG BARBICAN_TAG=0.1.0
+ARG HEAT_TEMPEST_TAG=1.0.0
-RUN apk --no-cache add --virtual .build-deps --update \
+RUN apk --no-cache add --update libxml2 libxslt libpcre16 libpcre32 && \
+ apk --no-cache add --virtual .build-deps --update \
python-dev build-base linux-headers libffi-dev \
- openssl-dev libjpeg-turbo-dev && \
+ openssl-dev libjpeg-turbo-dev libxml2-dev libxslt-dev pcre-dev && \
wget -q -O- https://opendev.org/openstack/requirements/raw/branch/$OPENSTACK_TAG/upper-constraints.txt > upper-constraints.txt && \
- sed -i -E s/^tempest==+.*$/-e\ git+https:\\/\\/opendev.org\\/openstack\\/tempest@$TEMPEST_TAG#egg=tempest/ upper-constraints.txt && \
+ sed -i -E /^tempest==+.*$/d upper-constraints.txt && \
+ sed -i -E /^ujson==+.*$/d upper-constraints.txt && \
case $(uname -m) in aarch*|arm*) sed -i -E /^PyNaCl=/d upper-constraints.txt ;; esac && \
wget -q -O- https://git.opnfv.org/functest/plain/upper-constraints.txt?h=$BRANCH > upper-constraints.opnfv.txt && \
sed -i -E /#egg=functest/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=rally/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=xrally-kubernetes/d upper-constraints.opnfv.txt && \
+ case $(uname -m) in aarch*|arm*) CFLAGS="-O0" pip install --no-cache-dir -cupper-constraints.txt -cupper-constraints.opnfv.txt lxml ;; esac && \
git init /src/patrole && \
(cd /src/patrole && \
git fetch --tags https://opendev.org/openstack/patrole.git $PATROLE_TAG && \
@@ -26,16 +34,33 @@ RUN apk --no-cache add --virtual .build-deps --update \
git fetch --tags https://opendev.org/openstack/neutron-tempest-plugin.git $NEUTRON_TEMPEST_TAG && \
git checkout FETCH_HEAD) && \
update-requirements -s --source /src/openstack-requirements /src/neutron-tempest-plugin && \
+ git init /src/cinder-tempest-plugin && \
+ (cd /src/cinder-tempest-plugin && \
+ git fetch --tags https://opendev.org/openstack/cinder-tempest-plugin.git $CINDER_TEMPEST_TAG && \
+ git checkout FETCH_HEAD) && \
+ update-requirements -s --source /src/openstack-requirements /src/cinder-tempest-plugin && \
+ git init /src/keystone-tempest-plugin && \
+ (cd /src/keystone-tempest-plugin && \
+ git fetch --tags https://opendev.org/openstack/keystone-tempest-plugin.git $KEYSTONE_TEMPEST_TAG && \
+ git checkout FETCH_HEAD) && \
+ update-requirements -s --source /src/openstack-requirements /src/keystone-tempest-plugin && \
git init /src/barbican-tempest-plugin && \
(cd /src/barbican-tempest-plugin && \
git fetch --tags https://opendev.org/openstack/barbican-tempest-plugin.git $BARBICAN_TAG && \
git checkout FETCH_HEAD) && \
update-requirements -s --source /src/openstack-requirements /src/barbican-tempest-plugin/ && \
+ git init /src/heat-tempest-plugin && \
+ (cd /src/heat-tempest-plugin && \
+ git fetch --tags https://opendev.org/openstack/heat-tempest-plugin.git $HEAT_TEMPEST_TAG && \
+ git checkout FETCH_HEAD) && \
pip install --no-cache-dir --src /src -cupper-constraints.txt -cupper-constraints.opnfv.txt \
/src/patrole /src/barbican-tempest-plugin /src/neutron-tempest-plugin \
- networking-bgpvpn networking-sfc && \
+ networking-bgpvpn networking-sfc /src/cinder-tempest-plugin /src/keystone-tempest-plugin \
+ /src/heat-tempest-plugin && \
rm -r upper-constraints.txt upper-constraints.opnfv.txt \
- /src/patrole /src/barbican-tempest-plugin /src/neutron-tempest-plugin && \
+ /src/patrole /src/barbican-tempest-plugin /src/neutron-tempest-plugin \
+ /src/cinder-tempest-plugin /src/keystone-tempest-plugin \
+ /src/heat-tempest-plugin && \
mkdir -p /home/opnfv/functest/data/refstack && \
mkdir -p /etc/neutron /etc/glance && \
wget -q -O /etc/neutron/policy.json https://opendev.org/openstack/neutron/raw/branch/$OPENSTACK_TAG/etc/policy.json && \
diff --git a/docker/smoke/testcases.yaml b/docker/smoke/testcases.yaml
index 4fa5aaeae..f7707d66d 100644
--- a/docker/smoke/testcases.yaml
+++ b/docker/smoke/testcases.yaml
@@ -2,12 +2,11 @@
tiers:
-
name: smoke
- order: 1
description: >-
Set of basic Functional tests to validate the OPNFV scenarios.
testcases:
-
- case_name: neutron-tempest-plugin-api
+ case_name: tempest_neutron
project_name: functest
criteria: 100
blocking: false
@@ -24,6 +23,52 @@ tiers:
- '--concurrency=4'
-
+ case_name: tempest_cinder
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ This test case runs the Tempest suite proposed by the
+ Cinder project.
+ run:
+ name: tempest_common
+ args:
+ mode:
+ '(?!.*test_incremental_backup)(^cinder_tempest_plugin.)'
+ option:
+ - '--concurrency=4'
+
+ -
+ case_name: tempest_keystone
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ This test case runs the Tempest suite proposed by the
+ Keystone project.
+ run:
+ name: tempest_common
+ args:
+ mode: 'keystone_tempest_plugin.'
+ option:
+ - '--concurrency=4'
+
+ -
+ case_name: tempest_heat
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ This test case runs the Tempest suite proposed by the
+ Heat project.
+ run:
+ name: tempest_heat
+ args:
+ mode: '^heat_tempest_plugin.tests'
+ option:
+ - '--concurrency=1'
+
+ -
case_name: rally_sanity
project_name: functest
criteria: 100
@@ -43,6 +88,7 @@ tiers:
criteria: 100
blocking: false
deny_skipping: true
+ tests_count: 219
description: >-
This test case runs a sub group of tests of the OpenStack
Defcore testcases.
@@ -80,13 +126,30 @@ tiers:
the OpenStack deployment.
https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L84
run:
- name: tempest_scenario
+ name: tempest_common
args:
mode: '(?!.*\[.*\bslow\b.*\])(^tempest\.scenario)'
option:
- '--concurrency=1'
-
+ case_name: tempest_slow
+ project_name: functest
+ criteria: 100
+ blocking: false
+ description: >-
+ The list of test cases is generated by
+ Tempest automatically and depends on the parameters of
+ the OpenStack deployment.
+ https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L84
+ run:
+ name: tempest_common
+ args:
+ mode: '(?=.*\[.*\bslow\b.*\])(^tempest\.)'
+ option:
+ - '--concurrency=1'
+
+ -
case_name: patrole
project_name: functest
criteria: 100
@@ -107,24 +170,6 @@ tiers:
- 'test_list_metadef_namespaces'
-
- case_name: neutron_trunk
- project_name: functest
- criteria: 100
- blocking: false
- description: >-
- This test case runs the neutron trunk subtest of the
- OpenStack Tempest suite. The list of test cases is
- generated by Tempest having as input the relevant
- testcase list file.
- run:
- name: tempest_common
- args:
- mode: 'neutron_tempest_plugin.(api|scenario).test_trunk'
- neutron_extensions:
- - trunk
- - trunk-details
-
- -
case_name: networking-bgpvpn
project_name: functest
criteria: 100
@@ -140,7 +185,7 @@ tiers:
neutron_extensions:
- bgpvpn
option:
- - '--concurrency=4'
+ - '--concurrency=3'
-
case_name: networking-sfc
@@ -162,7 +207,7 @@ tiers:
- '--concurrency=0'
-
- case_name: barbican
+ case_name: tempest_barbican
project_name: functest
criteria: 100
blocking: false
@@ -176,3 +221,5 @@ tiers:
'^barbican_tempest_plugin.((?!test_signed_image_upload_boot_failure).)*$'
services:
- barbican
+ option:
+ - '--concurrency=4'
diff --git a/docker/tempest/Accept-custom-registered-endpoints.patch b/docker/tempest/Accept-custom-registered-endpoints.patch
new file mode 100644
index 000000000..eba6ff436
--- /dev/null
+++ b/docker/tempest/Accept-custom-registered-endpoints.patch
@@ -0,0 +1,99 @@
+From 1d500e79156ada6bc6fdb628ed1da0efd4121f6a Mon Sep 17 00:00:00 2001
+From: Martin Kopec <mkopec@redhat.com>
+Date: Thu, 31 Oct 2019 13:56:42 +0000
+Subject: [PATCH 13/46] Accept custom registered endpoints
+
+The review drops usage of skip_path() filter in the related tests
+and uses raw_request() instead.
+
+Normally a swift url is organised as host:port/info and
+host:port/v1/AUTH_<tenant-id>, see
+https://docs.openstack.org/api-ref/object-store/
+But RadosGW API is organised as host:port/swift/info and
+host:port/swift/v1/AUTH_<tenant-id>, see
+https://docs.ceph.com/docs/master/radosgw/config-ref/#swift-settings
+
+Close-bug: 1799981
+Change-Id: I6a932639a05defe0f04c600afcc35a19662937af
+---
+ tempest/api/object_storage/test_crossdomain.py | 7 +++----
+ tempest/api/object_storage/test_healthcheck.py | 7 +++----
+ tempest/lib/services/object_storage/capabilities_client.py | 5 +++--
+ .../services/object_storage/test_capabilities_client.py | 2 +-
+ 4 files changed, 10 insertions(+), 11 deletions(-)
+
+diff --git a/tempest/api/object_storage/test_crossdomain.py b/tempest/api/object_storage/test_crossdomain.py
+index f61d9f891..1567e0640 100644
+--- a/tempest/api/object_storage/test_crossdomain.py
++++ b/tempest/api/object_storage/test_crossdomain.py
+@@ -34,13 +34,12 @@ class CrossdomainTest(base.BaseObjectTest):
+ def setUp(self):
+ super(CrossdomainTest, self).setUp()
+
+- # Turning http://.../v1/foobar into http://.../
+- self.account_client.skip_path()
+-
+ @decorators.idempotent_id('d1b8b031-b622-4010-82f9-ff78a9e915c7')
+ @utils.requires_ext(extension='crossdomain', service='object')
+ def test_get_crossdomain_policy(self):
+- resp, body = self.account_client.get("crossdomain.xml", {})
++ url = self.account_client._get_base_version_url() + "crossdomain.xml"
++ resp, body = self.account_client.raw_request(url, "GET")
++ self.account_client._error_checker(resp, body)
+ body = body.decode()
+
+ self.assertTrue(body.startswith(self.xml_start) and
+diff --git a/tempest/api/object_storage/test_healthcheck.py b/tempest/api/object_storage/test_healthcheck.py
+index a186f9ee6..8e9e4061d 100644
+--- a/tempest/api/object_storage/test_healthcheck.py
++++ b/tempest/api/object_storage/test_healthcheck.py
+@@ -22,13 +22,12 @@ class HealthcheckTest(base.BaseObjectTest):
+
+ def setUp(self):
+ super(HealthcheckTest, self).setUp()
+- # Turning http://.../v1/foobar into http://.../
+- self.account_client.skip_path()
+
+ @decorators.idempotent_id('db5723b1-f25c-49a9-bfeb-7b5640caf337')
+ def test_get_healthcheck(self):
+-
+- resp, _ = self.account_client.get("healthcheck", {})
++ url = self.account_client._get_base_version_url() + "healthcheck"
++ resp, body = self.account_client.raw_request(url, "GET")
++ self.account_client._error_checker(resp, body)
+
+ # The target of the request is not any Swift resource. Therefore, the
+ # existence of response header is checked without a custom matcher.
+diff --git a/tempest/lib/services/object_storage/capabilities_client.py b/tempest/lib/services/object_storage/capabilities_client.py
+index d31bbc299..f08bd9aea 100644
+--- a/tempest/lib/services/object_storage/capabilities_client.py
++++ b/tempest/lib/services/object_storage/capabilities_client.py
+@@ -21,9 +21,10 @@ from tempest.lib.common import rest_client
+ class CapabilitiesClient(rest_client.RestClient):
+
+ def list_capabilities(self):
+- self.skip_path()
+ try:
+- resp, body = self.get('info')
++ url = self._get_base_version_url() + 'info'
++ resp, body = self.raw_request(url, 'GET')
++ self._error_checker(resp, body)
+ finally:
+ self.reset_path()
+ body = json.loads(body)
+diff --git a/tempest/tests/lib/services/object_storage/test_capabilities_client.py b/tempest/tests/lib/services/object_storage/test_capabilities_client.py
+index b7f972a85..9df7c7c18 100644
+--- a/tempest/tests/lib/services/object_storage/test_capabilities_client.py
++++ b/tempest/tests/lib/services/object_storage/test_capabilities_client.py
+@@ -43,7 +43,7 @@ class TestCapabilitiesClient(base.BaseServiceTest):
+ }
+ self.check_service_client_function(
+ self.client.list_capabilities,
+- 'tempest.lib.common.rest_client.RestClient.get',
++ 'tempest.lib.common.rest_client.RestClient.raw_request',
+ resp,
+ bytes_body)
+
+--
+2.26.0.rc2
+
diff --git a/docker/tempest/Create-new-server-in-test_create_backup.patch b/docker/tempest/Create-new-server-in-test_create_backup.patch
new file mode 100644
index 000000000..1b86b0fc5
--- /dev/null
+++ b/docker/tempest/Create-new-server-in-test_create_backup.patch
@@ -0,0 +1,84 @@
+From 03eb38ce54aeec4bc4c1cb3475c6fb84661f8993 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?C=C3=A9dric=20Ollivier?= <cedric.ollivier@orange.com>
+Date: Tue, 21 Jul 2020 13:28:50 +0200
+Subject: [PATCH] Create new server in test_create_backup
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+test_reboot_server_hard sometimes fail in all gates [1].
+This hack could highlight if they are side effects between
+test_create_backup and test_reboot_server_hard.
+
+[1] http://artifacts.opnfv.org/functest/E5AZMH89OOK6/functest-opnfv-functest-smoke-cntt-hunter-tempest_full_cntt-run-142/tempest_full_cntt/tempest-report.html
+
+Change-Id: I203562f686b004094e5e18858004b7a2d26567a6
+Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
+---
+ .../api/compute/servers/test_server_actions.py | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/tempest/api/compute/servers/test_server_actions.py b/tempest/api/compute/servers/test_server_actions.py
+index d477be0eb..c369311d3 100644
+--- a/tempest/api/compute/servers/test_server_actions.py
++++ b/tempest/api/compute/servers/test_server_actions.py
+@@ -443,6 +443,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
+ # Check if glance v1 is available to determine which client to use. We
+ # prefer glance v1 for the compute API tests since the compute image
+ # API proxy was written for glance v1.
++ newserver = self.create_test_server(wait_until='ACTIVE')
+ if CONF.image_feature_enabled.api_v1:
+ glance_client = self.os_primary.image_client
+ elif CONF.image_feature_enabled.api_v2:
+@@ -453,7 +454,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
+ '[image-feature-enabled].')
+
+ backup1 = data_utils.rand_name('backup-1')
+- resp = self.client.create_backup(self.server_id,
++ resp = self.client.create_backup(newserver['id'],
+ backup_type='daily',
+ rotation=2,
+ name=backup1)
+@@ -481,8 +482,8 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
+ image1_id, 'active')
+
+ backup2 = data_utils.rand_name('backup-2')
+- waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
+- resp = self.client.create_backup(self.server_id,
++ waiters.wait_for_server_status(self.client, newserver['id'], 'ACTIVE')
++ resp = self.client.create_backup(newserver['id'],
+ backup_type='daily',
+ rotation=2,
+ name=backup2)
+@@ -499,7 +500,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
+ properties = {
+ 'image_type': 'backup',
+ 'backup_type': "daily",
+- 'instance_uuid': self.server_id,
++ 'instance_uuid': newserver['id'],
+ }
+ params = {
+ 'status': 'active',
+@@ -524,8 +525,8 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
+ # create the third one, due to the rotation is 2,
+ # the first one will be deleted
+ backup3 = data_utils.rand_name('backup-3')
+- waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
+- resp = self.client.create_backup(self.server_id,
++ waiters.wait_for_server_status(self.client, newserver['id'], 'ACTIVE')
++ resp = self.client.create_backup(newserver['id'],
+ backup_type='daily',
+ rotation=2,
+ name=backup3)
+@@ -536,7 +537,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
+ image3_id = data_utils.parse_image_id(resp.response['location'])
+ self.addCleanup(glance_client.delete_image, image3_id)
+ # the first back up should be deleted
+- waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
++ waiters.wait_for_server_status(self.client, newserver['id'], 'ACTIVE')
+ glance_client.wait_for_resource_deletion(image1_id)
+ oldest_backup_exist = False
+ if CONF.image_feature_enabled.api_v1:
+--
+2.27.0
+
diff --git a/docker/tempest/Dockerfile b/docker/tempest/Dockerfile
index ffb9bd7e8..2298c4d0b 100644
--- a/docker/tempest/Dockerfile
+++ b/docker/tempest/Dockerfile
@@ -3,24 +3,34 @@ FROM opnfv/functest-core:hunter
ARG BRANCH=stable/hunter
ARG OPENSTACK_TAG=stable/rocky
ARG TEMPEST_TAG=21.0.0
-ARG RALLY_TAG=1.3.0
-ARG RALLY_OPENSTACK_TAG=1.3.0
-ARG UJSON_TAG=d25e024f481c5571d15f3c0c406a498ca0467cfd
+ARG RALLY_TAG=1.5.1
+ARG RALLY_OPENSTACK_TAG=1.5.0
+COPY Accept-custom-registered-endpoints.patch /tmp/Accept-custom-registered-endpoints.patch
+COPY Fixes-race-condition-in-test_add_remove_fixed_ip.patch /tmp/Fixes-race-condition-in-test_add_remove_fixed_ip.patch
+COPY object-storage-fix-and-cleanup-header-checks.patch /tmp/object-storage-fix-and-cleanup-header-checks.patch
+COPY Create-new-server-in-test_create_backup.patch /tmp/Create-new-server-in-test_create_backup.patch
+COPY Switch-to-threading.Thread-for-Rally-tasks.patch /tmp/Switch-to-threading.Thread-for-Rally-tasks.patch
RUN apk --no-cache add --virtual .build-deps --update \
python-dev build-base linux-headers libffi-dev \
openssl-dev libjpeg-turbo-dev && \
wget -q -O- https://opendev.org/openstack/requirements/raw/branch/$OPENSTACK_TAG/upper-constraints.txt > upper-constraints.txt && \
sed -i -E s/^tempest==+.*$/-e\ git+https:\\/\\/opendev.org\\/openstack\\/tempest@$TEMPEST_TAG#egg=tempest/ upper-constraints.txt && \
- sed -i -E s/^ujson==+.*$/-e\ git+https:\\/\\/github.com\\/esnme\\/ultrajson@$UJSON_TAG#egg=ujson/ upper-constraints.txt && \
+ sed -i -E /^ujson==+.*$/d upper-constraints.txt && \
+ sed -i -E /^kubernetes==+.*$/d upper-constraints.txt && \
case $(uname -m) in aarch*|arm*) sed -i -E /^PyNaCl=/d upper-constraints.txt ;; esac && \
wget -q -O- https://git.opnfv.org/functest/plain/upper-constraints.txt?h=$BRANCH > upper-constraints.opnfv.txt && \
sed -i -E /#egg=functest/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=rally/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=xrally-kubernetes/d upper-constraints.opnfv.txt && \
git init /src/rally && \
(cd /src/rally && \
git fetch --tags https://opendev.org/openstack/rally.git $RALLY_TAG && \
git checkout FETCH_HEAD) && \
update-requirements -s --source /src/openstack-requirements /src/rally/ && \
+ (cd /src/rally && patch -p1 < /tmp/Switch-to-threading.Thread-for-Rally-tasks.patch) && \
+ pip install --no-cache-dir --src /src -cupper-constraints.txt -cupper-constraints.opnfv.txt \
+ /src/rally && \
git init /src/rally-openstack && \
(cd /src/rally-openstack && \
git fetch --tags https://opendev.org/openstack/rally-openstack.git $RALLY_OPENSTACK_TAG && \
@@ -28,10 +38,22 @@ RUN apk --no-cache add --virtual .build-deps --update \
update-requirements -s --source /src/openstack-requirements /src/rally-openstack && \
pip install --no-cache-dir --src /src -cupper-constraints.txt -cupper-constraints.opnfv.txt \
tempest /src/rally-openstack && \
- pip install --no-cache-dir --src /src -cupper-constraints.txt -cupper-constraints.opnfv.txt \
- /src/rally && \
- rm -r upper-constraints.txt upper-constraints.opnfv.txt /src/rally /src/rally-openstack && \
+ rm -r upper-constraints.txt upper-constraints.opnfv.txt /src/rally /src/rally-openstack \
+ /tmp/Switch-to-threading.Thread-for-Rally-tasks.patch && \
mkdir -p /etc/rally && \
printf "[database]\nconnection = 'sqlite:////var/lib/rally/database/rally.sqlite'" > /etc/rally/rally.conf && \
mkdir -p /var/lib/rally/database && rally db create && \
+ (cd /src/tempest && \
+ git config --global user.email "opnfv-tech-discuss@lists.opnfv.org" && \
+ git config --global user.name "Functest" && \
+ patch -p1 < /tmp/Accept-custom-registered-endpoints.patch && \
+ patch -p1 < /tmp/object-storage-fix-and-cleanup-header-checks.patch && \
+ patch -p1 < /tmp/Fixes-race-condition-in-test_add_remove_fixed_ip.patch && \
+ patch -p1 < /tmp/Create-new-server-in-test_create_backup.patch && \
+ git commit -a -m "Backport critical bugfixes" && \
+ rm ~/.gitconfig) && \
+ rm /tmp/Accept-custom-registered-endpoints.patch \
+ /tmp/object-storage-fix-and-cleanup-header-checks.patch \
+ /tmp/Fixes-race-condition-in-test_add_remove_fixed_ip.patch \
+ /tmp/Create-new-server-in-test_create_backup.patch && \
apk del .build-deps
diff --git a/docker/tempest/Fixes-race-condition-in-test_add_remove_fixed_ip.patch b/docker/tempest/Fixes-race-condition-in-test_add_remove_fixed_ip.patch
new file mode 100644
index 000000000..a9f3c7e6d
--- /dev/null
+++ b/docker/tempest/Fixes-race-condition-in-test_add_remove_fixed_ip.patch
@@ -0,0 +1,165 @@
+From 61a3c8efa4a5e41dc6b5fd2d7a28a25555ebb54b Mon Sep 17 00:00:00 2001
+From: David Sedlák <dsedlak@redhat.com>
+Date: Wed, 30 Oct 2019 15:38:21 +0100
+Subject: [PATCH] Fixes race condition in test_add_remove_fixed_ip
+
+Currently race condition can occure in
+tempest.api.compute.servers.test_attach_interfaces.
+AttachInterfacesUnderV243Test.test_add_remove_fixed_ip
+when floating IP added during resource preparation doesn't appear in
+the list of original IPs that is created at the beggining of the test,
+which then confuses the test
+and floating ip is later recognized as fixed IP added in the test.
+more details including log:
+https://bugzilla.redhat.com/show_bug.cgi?id=1752416
+
+This change ensures possible floating IP added during server
+creation is always present in the set of original IPs and also
+during every comparasion of IPs.
+
+Closes-Bug: #1866179
+
+Change-Id: Ic3a3e0708714b6d6c9c226e641e1c520e5ebde9d
+Signed-off-by: David Sedlák <dsedlak@redhat.com>
+---
+
+diff --git a/tempest/api/compute/servers/test_attach_interfaces.py b/tempest/api/compute/servers/test_attach_interfaces.py
+index df8da07..c1af6c7 100644
+--- a/tempest/api/compute/servers/test_attach_interfaces.py
++++ b/tempest/api/compute/servers/test_attach_interfaces.py
+@@ -86,12 +86,16 @@
+ # apparently not enough? Add cleanup here.
+ self.addCleanup(self.delete_server, server['id'])
+ self._wait_for_validation(server, validation_resources)
++ try:
++ fip = set([validation_resources['floating_ip']['ip']])
++ except KeyError:
++ fip = ()
+ ifs = (self.interfaces_client.list_interfaces(server['id'])
+ ['interfaceAttachments'])
+ body = waiters.wait_for_interface_status(
+ self.interfaces_client, server['id'], ifs[0]['port_id'], 'ACTIVE')
+ ifs[0]['port_state'] = body['port_state']
+- return server, ifs
++ return server, ifs, fip
+
+
+ class AttachInterfacesTestJSON(AttachInterfacesTestBase):
+@@ -226,7 +230,7 @@
+ @decorators.idempotent_id('73fe8f02-590d-4bf1-b184-e9ca81065051')
+ @utils.services('network')
+ def test_create_list_show_delete_interfaces_by_network_port(self):
+- server, ifs = self._create_server_get_interfaces()
++ server, ifs, _ = self._create_server_get_interfaces()
+ interface_count = len(ifs)
+ self.assertGreater(interface_count, 0)
+
+@@ -268,7 +272,7 @@
+ raise self.skipException("Only owner network supports "
+ "creating interface by fixed ip.")
+
+- server, ifs = self._create_server_get_interfaces()
++ server, ifs, _ = self._create_server_get_interfaces()
+ interface_count = len(ifs)
+ self.assertGreater(interface_count, 0)
+
+@@ -354,9 +358,8 @@
+ not CONF.network.shared_physical_network):
+ raise self.skipException("Only owner network supports "
+ "creating interface by fixed ip.")
+-
+ # Add and Remove the fixed IP to server.
+- server, ifs = self._create_server_get_interfaces()
++ server, ifs, fip = self._create_server_get_interfaces()
+ original_interface_count = len(ifs) # This is the number of ports.
+ self.assertGreater(original_interface_count, 0)
+ # Get the starting list of IPs on the server.
+@@ -369,6 +372,9 @@
+ self.assertEqual(1, len(addresses), addresses) # number of networks
+ # Keep track of the original addresses so we can know which IP is new.
+ original_ips = [addr['addr'] for addr in list(addresses.values())[0]]
++ # Make sure the floating IP possibly assigned during
++ # server creation is always present in the set of original ips.
++ original_ips = set(original_ips).union(fip)
+ original_ip_count = len(original_ips)
+ self.assertGreater(original_ip_count, 0, addresses) # at least 1
+ network_id = ifs[0]['net_id']
+@@ -376,40 +382,22 @@
+ # fixed IP on the same network (and same port since we only have one
+ # port).
+ self.servers_client.add_fixed_ip(server['id'], networkId=network_id)
+- # Wait for the ips count to increase by one.
+
+- def _get_server_floating_ips():
+- _floating_ips = []
+- _server = self.os_primary.servers_client.show_server(
+- server['id'])['server']
+- for _ip_set in _server['addresses']:
+- for _ip in _server['addresses'][_ip_set]:
+- if _ip['OS-EXT-IPS:type'] == 'floating':
+- _floating_ips.append(_ip['addr'])
+- return _floating_ips
+-
+- def _wait_for_ip_increase():
++ def _wait_for_ip_change(expected_count):
+ _addresses = self.os_primary.servers_client.list_addresses(
+ server['id'])['addresses']
+- _ips = [addr['addr'] for addr in list(_addresses.values())[0]]
+- LOG.debug("Wait for IP increase. All IPs still associated to "
++ _ips = set([addr['addr'] for addr in list(_addresses.values())[0]])
++ # Make sure possible floating ip is always present in the set.
++ _ips = _ips.union(fip)
++ LOG.debug("Wait for change of IPs. All IPs still associated to "
+ "the server %(id)s: %(ips)s",
+ {'id': server['id'], 'ips': _ips})
+- if len(_ips) == original_ip_count + 1:
+- return True
+- elif len(_ips) == original_ip_count:
+- return False
+- # If not, lets remove any floating IP from the list and check again
+- _fips = _get_server_floating_ips()
+- _ips = [_ip for _ip in _ips if _ip not in _fips]
+- LOG.debug("Wait for IP increase. Fixed IPs still associated to "
+- "the server %(id)s: %(ips)s",
+- {'id': server['id'], 'ips': _ips})
+- return len(_ips) == original_ip_count + 1
++ return len(_ips) == expected_count
+
++ # Wait for the ips count to increase by one.
+ if not test_utils.call_until_true(
+- _wait_for_ip_increase, CONF.compute.build_timeout,
+- CONF.compute.build_interval):
++ _wait_for_ip_change, CONF.compute.build_timeout,
++ CONF.compute.build_interval, original_ip_count + 1):
+ raise lib_exc.TimeoutException(
+ 'Timed out while waiting for IP count to increase.')
+
+@@ -428,26 +416,8 @@
+ break
+ self.servers_client.remove_fixed_ip(server['id'], address=fixed_ip)
+ # Wait for the interface count to decrease by one.
+-
+- def _wait_for_ip_decrease():
+- _addresses = self.os_primary.servers_client.list_addresses(
+- server['id'])['addresses']
+- _ips = [addr['addr'] for addr in list(_addresses.values())[0]]
+- LOG.debug("Wait for IP decrease. All IPs still associated to "
+- "the server %(id)s: %(ips)s",
+- {'id': server['id'], 'ips': _ips})
+- if len(_ips) == original_ip_count:
+- return True
+- # If not, lets remove any floating IP from the list and check again
+- _fips = _get_server_floating_ips()
+- _ips = [_ip for _ip in _ips if _ip not in _fips]
+- LOG.debug("Wait for IP decrease. Fixed IPs still associated to "
+- "the server %(id)s: %(ips)s",
+- {'id': server['id'], 'ips': _ips})
+- return len(_ips) == original_ip_count
+-
+ if not test_utils.call_until_true(
+- _wait_for_ip_decrease, CONF.compute.build_timeout,
+- CONF.compute.build_interval):
++ _wait_for_ip_change, CONF.compute.build_timeout,
++ CONF.compute.build_interval, original_ip_count):
+ raise lib_exc.TimeoutException(
+ 'Timed out while waiting for IP count to decrease.')
diff --git a/docker/tempest/Switch-to-threading.Thread-for-Rally-tasks.patch b/docker/tempest/Switch-to-threading.Thread-for-Rally-tasks.patch
new file mode 100644
index 000000000..7c146c9ed
--- /dev/null
+++ b/docker/tempest/Switch-to-threading.Thread-for-Rally-tasks.patch
@@ -0,0 +1,50 @@
+From 7223c6c766d2cbd47c54048426c904a27b52e069 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?C=C3=A9dric=20Ollivier?= <cedric.ollivier@orange.com>
+Date: Wed, 3 Jun 2020 15:23:59 +0200
+Subject: [PATCH] Switch to threading.Thread() for Rally tasks
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+multiprocessing.Process() often fails due to thread crashes [1].
+It looks similar to gsutil release notes [2].
+
+[1] https://build.opnfv.org/ci/job/functest-opnfv-functest-benchmarking-cntt-latest-rally_full_cntt-run/35/console
+[2] https://github.com/GoogleCloudPlatform/gsutil/issues/548
+[3] https://github.com/GoogleCloudPlatform/gsutil/blob/master/CHANGES.md
+
+Change-Id: I582933832e23d188c7fa5999e713dd5d7e82d2da
+Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
+(cherry picked from commit 9b07423c246e7e4ab9fa25851d79ce6986c10c2e)
+---
+ rally/task/runner.py | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/rally/task/runner.py b/rally/task/runner.py
+index 55372e509..0f0245588 100644
+--- a/rally/task/runner.py
++++ b/rally/task/runner.py
+@@ -17,6 +17,7 @@ import abc
+ import collections
+ import copy
+ import multiprocessing
++import threading
+ import time
+
+ import six
+@@ -188,9 +189,9 @@ class ScenarioRunner(plugin.Plugin, validation.ValidatablePluginMixin):
+ for i in range(processes_to_start):
+ kwrgs = {"processes_to_start": processes_to_start,
+ "processes_counter": i}
+- process = multiprocessing.Process(target=worker_process,
+- args=next(worker_args_gen),
+- kwargs={"info": kwrgs})
++ process = threading.Thread(target=worker_process,
++ args=next(worker_args_gen),
++ kwargs={"info": kwrgs})
+ process.start()
+ process_pool.append(process)
+
+--
+2.26.2
+
diff --git a/docker/tempest/object-storage-fix-and-cleanup-header-checks.patch b/docker/tempest/object-storage-fix-and-cleanup-header-checks.patch
new file mode 100644
index 000000000..629a98174
--- /dev/null
+++ b/docker/tempest/object-storage-fix-and-cleanup-header-checks.patch
@@ -0,0 +1,171 @@
+From 42e111c7d8f1cdb5d51a1c4f2ce5c64c3d3471f1 Mon Sep 17 00:00:00 2001
+From: Thomas Morin <thomas.morin@orange.com>
+Date: Wed, 17 Jun 2020 18:08:49 +0200
+Subject: [PATCH] object storage: fix and cleanup header checks
+
+As explained in [1] it is not legitimate to require a Transfer-Encoding
+header in Swift responses. That prevents running some tests
+successfully in the case where Swift is behind a proxy/load-balancer
+that does not use any Transfer-Encoding in its responses.
+
+This change hence removes the checks for the presence of a
+"Transfer-Encoding" header, and replaces them by the use
+of the existing check methods, after modifying the
+custom_matcher checks on which these methods rely on to accept
+either a Content-Length or a Transfer-Encoding header.
+
+Some adaptation was also required to avoid trying to process 'etag'
+for DELETE requests.
+
+A side-effect of this change is a code simplification and
+cleanup since the specific header checks in the corresponding
+tests are replaced by the generic check methods.
+
+[1] https://bugs.launchpad.net/tempest/+bug/1819851/comments/3
+
+Closes-Bug: 1819851
+Change-Id: Iaccea41640a53b564f72cee73981e2e61d3e80ae
+---
+ .../api/object_storage/test_account_bulk.py | 37 ++-----------------
+ tempest/api/object_storage/test_object_slo.py | 13 +------
+ tempest/common/custom_matchers.py | 16 +++++++-
+ 3 files changed, 19 insertions(+), 47 deletions(-)
+
+diff --git a/tempest/api/object_storage/test_account_bulk.py b/tempest/api/object_storage/test_account_bulk.py
+index 6599e432f..80f790f51 100644
+--- a/tempest/api/object_storage/test_account_bulk.py
++++ b/tempest/api/object_storage/test_account_bulk.py
+@@ -16,7 +16,6 @@ import tarfile
+ import tempfile
+
+ from tempest.api.object_storage import base
+-from tempest.common import custom_matchers
+ from tempest.common import utils
+ from tempest.lib import decorators
+
+@@ -76,17 +75,7 @@ class BulkTest(base.BaseObjectTest):
+ resp = self._upload_archive(filepath)
+ self.containers.append(container_name)
+
+- # When uploading an archived file with the bulk operation, the response
+- # does not contain 'content-length' header. This is the special case,
+- # therefore the existence of response headers is checked without
+- # custom matcher.
+- self.assertIn('transfer-encoding', resp.response)
+- self.assertIn('content-type', resp.response)
+- self.assertIn('x-trans-id', resp.response)
+- self.assertIn('date', resp.response)
+-
+- # Check only the format of common headers with custom matcher
+- self.assertThat(resp.response, custom_matchers.AreAllWellFormatted())
++ self.assertHeaders(resp.response, 'Account', 'PUT')
+
+ param = {'format': 'json'}
+ resp, body = self.account_client.list_account_containers(param)
+@@ -113,17 +102,7 @@ class BulkTest(base.BaseObjectTest):
+ data = '%s/%s\n%s' % (container_name, object_name, container_name)
+ resp = self.bulk_client.delete_bulk_data(data=data)
+
+- # When deleting multiple files using the bulk operation, the response
+- # does not contain 'content-length' header. This is the special case,
+- # therefore the existence of response headers is checked without
+- # custom matcher.
+- self.assertIn('transfer-encoding', resp.response)
+- self.assertIn('content-type', resp.response)
+- self.assertIn('x-trans-id', resp.response)
+- self.assertIn('date', resp.response)
+-
+- # Check only the format of common headers with custom matcher
+- self.assertThat(resp.response, custom_matchers.AreAllWellFormatted())
++ self.assertHeaders(resp.response, 'Account', 'DELETE')
+
+ # Check if uploaded contents are completely deleted
+ self._check_contents_deleted(container_name)
+@@ -139,17 +118,7 @@ class BulkTest(base.BaseObjectTest):
+
+ resp = self.bulk_client.delete_bulk_data_with_post(data=data)
+
+- # When deleting multiple files using the bulk operation, the response
+- # does not contain 'content-length' header. This is the special case,
+- # therefore the existence of response headers is checked without
+- # custom matcher.
+- self.assertIn('transfer-encoding', resp.response)
+- self.assertIn('content-type', resp.response)
+- self.assertIn('x-trans-id', resp.response)
+- self.assertIn('date', resp.response)
+-
+- # Check only the format of common headers with custom matcher
+- self.assertThat(resp.response, custom_matchers.AreAllWellFormatted())
++ self.assertHeaders(resp.response, 'Account', 'POST')
+
+ # Check if uploaded contents are completely deleted
+ self._check_contents_deleted(container_name)
+diff --git a/tempest/api/object_storage/test_object_slo.py b/tempest/api/object_storage/test_object_slo.py
+index c66776e4e..8bb2e6e4b 100644
+--- a/tempest/api/object_storage/test_object_slo.py
++++ b/tempest/api/object_storage/test_object_slo.py
+@@ -17,7 +17,6 @@ import hashlib
+ from oslo_serialization import jsonutils as json
+
+ from tempest.api.object_storage import base
+-from tempest.common import custom_matchers
+ from tempest.common import utils
+ from tempest.lib.common.utils import data_utils
+ from tempest.lib.common.utils import test_utils
+@@ -160,17 +159,7 @@ class ObjectSloTest(base.BaseObjectTest):
+ object_name,
+ params=params_del)
+
+- # When deleting SLO using multipart manifest, the response contains
+- # not 'content-length' but 'transfer-encoding' header. This is the
+- # special case, therefore the existence of response headers is checked
+- # outside of custom matcher.
+- self.assertIn('transfer-encoding', resp)
+- self.assertIn('content-type', resp)
+- self.assertIn('x-trans-id', resp)
+- self.assertIn('date', resp)
+-
+- # Check only the format of common headers with custom matcher
+- self.assertThat(resp, custom_matchers.AreAllWellFormatted())
++ self.assertHeaders(resp, 'Object', 'DELETE')
+
+ resp, body = self.container_client.list_container_objects(
+ self.container_name)
+diff --git a/tempest/common/custom_matchers.py b/tempest/common/custom_matchers.py
+index c702d8896..f1adeab64 100644
+--- a/tempest/common/custom_matchers.py
++++ b/tempest/common/custom_matchers.py
+@@ -62,8 +62,9 @@ class ExistsAllResponseHeaders(object):
+ # [1] https://bugs.launchpad.net/swift/+bug/1537811
+ # [2] http://tracker.ceph.com/issues/13582
+ if ('content-length' not in actual and
++ 'transfer-encoding' not in actual and
+ self._content_length_required(actual)):
+- return NonExistentHeader('content-length')
++ return NonExistentHeaders(['content-length', 'transfer-encoding'])
+ if 'content-type' not in actual:
+ return NonExistentHeader('content-type')
+ if 'x-trans-id' not in actual:
+@@ -192,6 +193,19 @@ class NonExistentHeader(object):
+ return {}
+
+
++class NonExistentHeaders(object):
++ """Informs an error message in the case of missing certain headers"""
++
++ def __init__(self, headers):
++ self.headers = headers
++
++ def describe(self):
++ return "none of these headers exist: %s" % self.headers
++
++ def get_details(self):
++ return {}
++
++
+ class InvalidHeaderValue(object):
+ """Informs an error message when a header contains a bad value"""
+
+--
+2.27.0
+
diff --git a/docker/vnf/Dockerfile b/docker/vnf/Dockerfile
index 0fb83ff6e..b28486814 100644
--- a/docker/vnf/Dockerfile
+++ b/docker/vnf/Dockerfile
@@ -9,26 +9,23 @@ ARG CLOUDIFY_VIMS_TAG=gambia
ARG HEAT_VIMS_TAG=release-130
ARG VROUTER_TAG=fraser
ARG VROUTER_BP_TAG=9b76d46a388d32d4985797620e67c2ed3315b3e4
-ARG JUJU_TAG=tags/juju-2.3.9
-ARG JUJU_WAIT_TAG=2.6.4
ARG ABOT_CHARM=opnfv-fraser
-ARG GODEPS_TAG=404a7e748cd352bb0d7449dedc645546eebbfc6e
-
-ENV GOPATH /src/epc-requirements/go
-ENV GOBIN /src/epc-requirements/go/bin
-ENV PATH $GOBIN:$PATH
COPY clearwater-heat-singlenet-deps.patch /tmp/clearwater-heat-singlenet-deps.patch
RUN apk --no-cache add --update \
ruby ruby-bundler ruby-irb ruby-rdoc \
- procps libxslt libxml2 zlib libffi python3 go musl-dev && \
+ procps libxslt libxml2 zlib libffi python3 musl-dev && \
apk --no-cache add --virtual .build-deps --update \
- ruby-dev g++ make libxslt-dev libxml2-dev zlib-dev libffi-dev g++ make && \
+ ruby-dev g++ make libxslt-dev libxml2-dev zlib-dev libffi-dev && \
wget -q -O- https://opendev.org/openstack/requirements/raw/branch/$OPENSTACK_TAG/upper-constraints.txt > upper-constraints.txt && \
- sed -i -E s/^tempest==+.*$/-e\ git+https:\\/\\/opendev.org\\/openstack\\/tempest@$TEMPEST_TAG#egg=tempest/ upper-constraints.txt && \
+ sed -i -E /#egg=tempest/d upper-constraints.txt && \
+ sed -i -E /^ujson==+.*$/d upper-constraints.txt && \
+ sed -i -E /^kubernetes==+.*$/d upper-constraints.txt && \
case $(uname -m) in aarch*|arm*) sed -i -E /^PyNaCl=/d upper-constraints.txt ;; esac && \
wget -q -O- https://git.opnfv.org/functest/plain/upper-constraints.txt?h=$BRANCH > upper-constraints.opnfv.txt && \
sed -i -E /#egg=functest/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=rally/d upper-constraints.opnfv.txt && \
+ sed -i -E /#egg=xrally-kubernetes/d upper-constraints.opnfv.txt && \
git clone --depth 1 -b $VIMS_TEST_TAG https://github.com/Metaswitch/clearwater-live-test /src/vims-test && \
sed -i s/unf_ext\ \(.*\)/unf_ext\ \(0.0.7.4\)/g /src/vims-test/Gemfile.lock && \
git init /src/vims-test/quaff && \
@@ -57,22 +54,10 @@ RUN apk --no-cache add --update \
(cd /home/opnfv/functest/data/router/opnfv-vnf-data && \
git fetch --tags https://github.com/oolorg/opnfv-vnf-data.git $VROUTER_TAG && \
git checkout FETCH_HEAD) && \
- case "$(uname -m)" in \
- "armv7l" | "aarch64") ;; \
- *) \
- git init /src/epc-requirements/abot_charm && \
- (cd /src/epc-requirements/abot_charm && \
- git fetch --tags https://github.com/RebacaInc/abot_charm.git $ABOT_CHARM && \
- git checkout FETCH_HEAD) && \
- python3 -m pip install --no-cache-dir --src /src -cupper-constraints.txt -cupper-constraints.opnfv.txt \
- juju-wait==$JUJU_WAIT_TAG && \
- go get -d github.com/rogpeppe/godeps && \
- (cd $GOPATH/src/github.com/rogpeppe/godeps && git checkout $GODEPS_TAG && go install -v github.com/rogpeppe/godeps) && \
- go get -d -v github.com/juju/juju/... || true && \
- (cd $GOPATH/src/github.com/juju/juju && git checkout $JUJU_TAG && godeps -u dependencies.tsv) && \
- go install -v github.com/juju/juju/... && \
- rm -r $GOPATH/src/ $GOPATH/pkg /src/epc-requirements/abot_charm/.git /root/.cache/go-build;; \
- esac && \
+ git init /src/epc-requirements/abot_charm && \
+ (cd /src/epc-requirements/abot_charm && \
+ git fetch --tags https://github.com/collivier/abot_charm.git $ABOT_CHARM && \
+ git checkout FETCH_HEAD) && \
(cd /src/vims-test && bundle config build.nokogiri --use-system-libraries && bundle install --system && bundle update rest-client) && \
rm -r upper-constraints.txt upper-constraints.opnfv.txt /src/vims-test/.git /src/cloudify_vims/.git /src/heat_vims/.git /src/vims-test/quaff/.git \
/src/vims-test/build-infra/.git /src/opnfv-vnf-vyos-blueprint/.git \
diff --git a/docker/vnf/clearwater-heat-singlenet-deps.patch b/docker/vnf/clearwater-heat-singlenet-deps.patch
index a1bc3db7b..0e075f9f8 100644
--- a/docker/vnf/clearwater-heat-singlenet-deps.patch
+++ b/docker/vnf/clearwater-heat-singlenet-deps.patch
@@ -1,5 +1,5 @@
diff --git a/bono.yaml b/bono.yaml
-index f0189cd..7566338 100644
+index f0189cd..cc03838 100644
--- a/bono.yaml
+++ b/bono.yaml
@@ -23,26 +23,6 @@ parameters:
@@ -101,7 +101,7 @@ index f0189cd..7566338 100644
template: |
#!/bin/bash
-@@ -159,33 +124,6 @@ resources:
+@@ -159,36 +124,8 @@ resources:
exec > >(tee -a /var/log/clearwater-heat-bono.log) 2>&1
set -x
@@ -133,9 +133,13 @@ index f0189cd..7566338 100644
- /etc/init.d/signaling_namespace
-
# Configure the APT software source.
- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
-@@ -196,11 +134,8 @@ resources:
+- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
+- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
++ echo 'deb http://artifacts.opnfv.org/functest/clearwater/debian ./' > /etc/apt/sources.list.d/clearwater.list
+ apt-get update
+
+ # Configure /etc/clearwater/local_config.
+@@ -196,11 +133,8 @@ resources:
etcd_ip=__etcd_ip__
[ -n "$etcd_ip" ] || etcd_ip=__private_mgmt_ip__
cat > /etc/clearwater/local_config << EOF
@@ -149,7 +153,7 @@ index f0189cd..7566338 100644
public_hostname=__index__.bono.__zone__
etcd_cluster=$etcd_ip
EOF
-@@ -223,8 +158,8 @@ resources:
+@@ -223,8 +157,8 @@ resources:
while ! { nsupdate -y "__zone__:__dnssec_key__" -v << EOF
server __dns_mgmt_ip__
update add bono-__index__.__zone__. 30 $(ip2rr __public_mgmt_ip__)
@@ -160,7 +164,7 @@ index f0189cd..7566338 100644
update add __zone__. 30 NAPTR 0 0 "s" "SIP+D2T" "" _sip._tcp.__zone__.
update add __zone__. 30 NAPTR 0 0 "s" "SIP+D2U" "" _sip._udp.__zone__.
update add _sip._tcp.__zone__. 30 SRV 0 0 5060 __index__.bono.__zone__.
-@@ -241,10 +176,19 @@ resources:
+@@ -241,10 +175,19 @@ resources:
# Use the DNS server.
echo 'nameserver __dns_mgmt_ip__' > /etc/dnsmasq.resolv.conf
echo 'RESOLV_CONF=/etc/dnsmasq.resolv.conf' >> /etc/default/dnsmasq
@@ -182,7 +186,7 @@ index f0189cd..7566338 100644
outputs:
public_mgmt_ip:
description: IP address in public management network
-@@ -252,9 +196,3 @@ outputs:
+@@ -252,9 +195,3 @@ outputs:
private_mgmt_ip:
description: IP address in private management network
value: { get_attr: [ mgmt_port, fixed_ips, 0, ip_address ] }
@@ -428,7 +432,7 @@ index a155c60..dd90cb7 100644
etcd_ip: { get_attr: [ ellis, private_mgmt_ip ] }
index: __index__
diff --git a/dime.yaml b/dime.yaml
-index 642f19d..6ae2676 100644
+index 642f19d..d2b8b92 100644
--- a/dime.yaml
+++ b/dime.yaml
@@ -23,26 +23,6 @@ parameters:
@@ -535,7 +539,7 @@ index 642f19d..6ae2676 100644
template: |
#!/bin/bash
-@@ -156,33 +124,6 @@ resources:
+@@ -156,36 +124,8 @@ resources:
exec > >(tee -a /var/log/clearwater-heat-dime.log) 2>&1
set -x
@@ -567,9 +571,13 @@ index 642f19d..6ae2676 100644
- /etc/init.d/signaling_namespace
-
# Configure the APT software source.
- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
-@@ -193,11 +134,8 @@ resources:
+- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
+- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
++ echo 'deb http://artifacts.opnfv.org/functest/clearwater/debian ./' > /etc/apt/sources.list.d/clearwater.list
+ apt-get update
+
+ # Configure /etc/clearwater/local_config.
+@@ -193,11 +133,8 @@ resources:
etcd_ip=__etcd_ip__
[ -n "$etcd_ip" ] || etcd_ip=__private_mgmt_ip__
cat > /etc/clearwater/local_config << EOF
@@ -583,7 +591,7 @@ index 642f19d..6ae2676 100644
public_hostname=dime-__index__.__zone__
etcd_cluster=$etcd_ip
EOF
-@@ -220,9 +158,9 @@ resources:
+@@ -220,9 +157,9 @@ resources:
while ! { nsupdate -y "__zone__:__dnssec_key__" -v << EOF
server __dns_mgmt_ip__
update add dime-__index__.__zone__. 30 $(ip2rr __public_mgmt_ip__)
@@ -596,7 +604,7 @@ index 642f19d..6ae2676 100644
send
EOF
} && [ $retries -lt 10 ]
-@@ -235,17 +173,22 @@ resources:
+@@ -235,17 +172,22 @@ resources:
# Use the DNS server.
echo 'nameserver __dns_mgmt_ip__' > /etc/dnsmasq.resolv.conf
echo 'RESOLV_CONF=/etc/dnsmasq.resolv.conf' >> /etc/default/dnsmasq
@@ -769,7 +777,7 @@ index 825ede1..f98ffa3 100644
description: DNS zone
value: { get_param: zone }
diff --git a/ellis.yaml b/ellis.yaml
-index 963352d..ff59895 100644
+index 963352d..2bd0730 100644
--- a/ellis.yaml
+++ b/ellis.yaml
@@ -44,9 +44,6 @@ parameters:
@@ -815,7 +823,17 @@ index 963352d..ff59895 100644
template: |
#!/bin/bash
-@@ -176,7 +183,7 @@ resources:
+@@ -134,8 +141,7 @@ resources:
+ set -x
+
+ # Configure the APT software source.
+- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
+- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
++ echo 'deb http://artifacts.opnfv.org/functest/clearwater/debian ./' > /etc/apt/sources.list.d/clearwater.list
+ apt-get update
+
+ # Configure /etc/clearwater/local_config. Add xdms_hostname here to use Homer's management
+@@ -176,7 +182,7 @@ resources:
chronos_hostname=vellum.__zone__
ralf_session_store=vellum.__zone__
@@ -824,7 +842,7 @@ index 963352d..ff59895 100644
# Email server configuration
smtp_smarthost=localhost
-@@ -189,6 +196,8 @@ resources:
+@@ -189,6 +195,8 @@ resources:
turn_workaround=secret
ellis_api_key=secret
ellis_cookie_key=secret
@@ -833,7 +851,7 @@ index 963352d..ff59895 100644
EOF
/usr/share/clearwater/clearwater-config-manager/scripts/cw-config upload shared_config --autoconfirm --dir /tmp
-@@ -197,7 +206,6 @@ resources:
+@@ -197,7 +205,6 @@ resources:
# local_settings.py runs to pick up the configuration changes.
service clearwater-infrastructure restart
service ellis stop
@@ -841,7 +859,7 @@ index 963352d..ff59895 100644
# Function to give DNS record type and IP address for specified IP address
ip2rr() {
-@@ -228,6 +236,18 @@ resources:
+@@ -228,6 +235,18 @@ resources:
echo 'RESOLV_CONF=/etc/dnsmasq.resolv.conf' >> /etc/default/dnsmasq
service dnsmasq force-reload
@@ -861,7 +879,7 @@ index 963352d..ff59895 100644
public_mgmt_ip:
description: IP address in public management network
diff --git a/homer.yaml b/homer.yaml
-index 4337984..9a93cfb 100644
+index 4337984..d23adb5 100644
--- a/homer.yaml
+++ b/homer.yaml
@@ -23,26 +23,6 @@ parameters:
@@ -974,7 +992,7 @@ index 4337984..9a93cfb 100644
template: |
#!/bin/bash
-@@ -163,33 +124,6 @@ resources:
+@@ -163,36 +124,8 @@ resources:
exec > >(tee -a /var/log/clearwater-heat-homer.log) 2>&1
set -x
@@ -1006,9 +1024,13 @@ index 4337984..9a93cfb 100644
- /etc/init.d/signaling_namespace
-
# Configure the APT software source.
- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
-@@ -200,11 +134,8 @@ resources:
+- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
+- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
++ echo 'deb http://artifacts.opnfv.org/functest/clearwater/debian ./' > /etc/apt/sources.list.d/clearwater.list
+ apt-get update
+
+ # Configure /etc/clearwater/local_config.
+@@ -200,11 +133,8 @@ resources:
etcd_ip=__etcd_ip__
[ -n "$etcd_ip" ] || etcd_ip=__private_mgmt_ip__
cat > /etc/clearwater/local_config << EOF
@@ -1022,7 +1044,7 @@ index 4337984..9a93cfb 100644
public_hostname=homer-__index__.__zone__
etcd_cluster=$etcd_ip
EOF
-@@ -227,7 +158,7 @@ resources:
+@@ -227,7 +157,7 @@ resources:
while ! { nsupdate -y "__zone__:__dnssec_key__" -v << EOF
server __dns_mgmt_ip__
update add homer-__index__.__zone__. 30 $(ip2rr __public_mgmt_ip__)
@@ -1031,11 +1053,12 @@ index 4337984..9a93cfb 100644
send
EOF
} && [ $retries -lt 10 ]
-@@ -238,13 +169,21 @@ resources:
+@@ -237,14 +167,22 @@ resources:
+ sleep 5
done
- # Use the DNS server.
- # Use the DNS server.
+ # Use the DNS server.
echo 'nameserver __dns_mgmt_ip__' > /etc/dnsmasq.resolv.conf
echo 'RESOLV_CONF=/etc/dnsmasq.resolv.conf' >> /etc/default/dnsmasq
- mkdir -p /etc/netns/signaling
@@ -1056,7 +1079,7 @@ index 4337984..9a93cfb 100644
outputs:
public_mgmt_ip:
description: IP address in public management network
-@@ -252,9 +191,3 @@ outputs:
+@@ -252,9 +190,3 @@ outputs:
private_mgmt_ip:
description: IP address in private management network
value: { get_attr: [ mgmt_port, fixed_ips, 0, ip_address ] }
@@ -1416,7 +1439,7 @@ index 5921d32..c73fe2b 100644
- value: { get_resource: vellum_sig_inbound }
+ value: { get_resource: base_mgmt }
diff --git a/sprout.yaml b/sprout.yaml
-index 9c533b7..2649e11 100644
+index 9c533b7..b51750b 100644
--- a/sprout.yaml
+++ b/sprout.yaml
@@ -23,26 +23,6 @@ parameters:
@@ -1516,7 +1539,7 @@ index 9c533b7..2649e11 100644
template: |
#!/bin/bash
-@@ -156,33 +124,6 @@ resources:
+@@ -156,36 +124,8 @@ resources:
exec > >(tee -a /var/log/clearwater-heat-sprout.log) 2>&1
set -x
@@ -1548,9 +1571,13 @@ index 9c533b7..2649e11 100644
- /etc/init.d/signaling_namespace
-
# Configure the APT software source.
- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
-@@ -193,11 +134,8 @@ resources:
+- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
+- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
++ echo 'deb http://artifacts.opnfv.org/functest/clearwater/debian ./' > /etc/apt/sources.list.d/clearwater.list
+ apt-get update
+
+ # Configure /etc/clearwater/local_config.
+@@ -193,11 +133,8 @@ resources:
etcd_ip=__etcd_ip__
[ -n "$etcd_ip" ] || etcd_ip=__private_mgmt_ip__
cat > /etc/clearwater/local_config << EOF
@@ -1564,7 +1591,7 @@ index 9c533b7..2649e11 100644
public_hostname=__index__.sprout.__zone__
etcd_cluster=$etcd_ip
EOF
-@@ -220,10 +158,10 @@ resources:
+@@ -220,10 +157,10 @@ resources:
while ! { nsupdate -y "__zone__:__dnssec_key__" -v << EOF
server __dns_mgmt_ip__
update add sprout-__index__.__zone__. 30 $(ip2rr __public_mgmt_ip__)
@@ -1579,7 +1606,7 @@ index 9c533b7..2649e11 100644
update add sprout.__zone__. 30 NAPTR 0 0 "s" "SIP+D2T" "" _sip._tcp.sprout.__zone__.
update add _sip._tcp.sprout.__zone__. 30 SRV 0 0 5054 __index__.sprout.__zone__.
update add icscf.sprout.__zone__. 30 NAPTR 0 0 "s" "SIP+D2T" "" _sip._tcp.icscf.sprout.__zone__.
-@@ -242,17 +180,23 @@ resources:
+@@ -242,17 +179,23 @@ resources:
# Use the DNS server.
echo 'nameserver __dns_mgmt_ip__' > /etc/dnsmasq.resolv.conf
echo 'RESOLV_CONF=/etc/dnsmasq.resolv.conf' >> /etc/default/dnsmasq
@@ -1610,7 +1637,7 @@ index 9c533b7..2649e11 100644
- description: IP address in private signaling network
- value: { get_attr: [ sig_port, fixed_ips, 0, ip_address ] }
diff --git a/vellum.yaml b/vellum.yaml
-index aab71f9..375b3d8 100644
+index aab71f9..de15fcf 100644
--- a/vellum.yaml
+++ b/vellum.yaml
@@ -23,26 +23,6 @@ parameters:
@@ -1694,7 +1721,7 @@ index aab71f9..375b3d8 100644
user_data_format: RAW
user_data:
str_replace:
-@@ -141,47 +112,19 @@ resources:
+@@ -141,51 +112,22 @@ resources:
__zone__: { get_param: zone }
__public_mgmt_ip__: { get_attr: [ mgmt_floating_ip, floating_ip_address ] }
__private_mgmt_ip__: { get_attr: [ mgmt_port, fixed_ips, 0, ip_address ] }
@@ -1744,8 +1771,13 @@ index aab71f9..375b3d8 100644
+ sysctl -w net.ipv6.conf.lo.disable_ipv6=0
# Configure the APT software source.
- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
-@@ -193,11 +136,8 @@ resources:
+- echo 'deb __repo_url__ binary/' > /etc/apt/sources.list.d/clearwater.list
+- curl -L http://repo.cw-ngv.com/repo_key | apt-key add -
++ echo 'deb http://artifacts.opnfv.org/functest/clearwater/debian ./' > /etc/apt/sources.list.d/clearwater.list
+ apt-get update
+
+ # Configure /etc/clearwater/local_config.
+@@ -193,11 +135,8 @@ resources:
etcd_ip=__etcd_ip__
[ -n "$etcd_ip" ] || etcd_ip=__private_mgmt_ip__
cat > /etc/clearwater/local_config << EOF
@@ -1759,7 +1791,7 @@ index aab71f9..375b3d8 100644
public_hostname=__index__.vellum.__zone__
etcd_cluster=$etcd_ip
EOF
-@@ -206,7 +146,7 @@ resources:
+@@ -206,7 +145,7 @@ resources:
mkdir -p /etc/chronos
cat > /etc/chronos/chronos.conf << EOF
[http]
@@ -1768,7 +1800,7 @@ index aab71f9..375b3d8 100644
bind-port = 7253
threads = 50
-@@ -218,7 +158,7 @@ resources:
+@@ -218,7 +157,7 @@ resources:
enabled = true
[dns]
@@ -1777,7 +1809,7 @@ index aab71f9..375b3d8 100644
EOF
# Now install the software.
-@@ -239,7 +179,7 @@ resources:
+@@ -239,7 +178,7 @@ resources:
while ! { nsupdate -y "__zone__:__dnssec_key__" -v << EOF
server __dns_mgmt_ip__
update add vellum-__index__.__zone__. 30 $(ip2rr __public_mgmt_ip__)
@@ -1786,7 +1818,7 @@ index aab71f9..375b3d8 100644
send
EOF
} && [ $retries -lt 10 ]
-@@ -252,10 +192,19 @@ resources:
+@@ -252,10 +191,19 @@ resources:
# Use the DNS server.
echo 'nameserver __dns_mgmt_ip__' > /etc/dnsmasq.resolv.conf
echo 'RESOLV_CONF=/etc/dnsmasq.resolv.conf' >> /etc/default/dnsmasq
@@ -1808,7 +1840,7 @@ index aab71f9..375b3d8 100644
outputs:
public_mgmt_ip:
description: IP address in public management network
-@@ -263,6 +212,3 @@ outputs:
+@@ -263,6 +211,3 @@ outputs:
private_mgmt_ip:
description: IP address in private management network
value: { get_attr: [ mgmt_port, fixed_ips, 0, ip_address ] }
diff --git a/docker/vnf/testcases.yaml b/docker/vnf/testcases.yaml
index 7d5548b38..6b483af6a 100644
--- a/docker/vnf/testcases.yaml
+++ b/docker/vnf/testcases.yaml
@@ -2,7 +2,6 @@
tiers:
-
name: vnf
- order: 4
description: >-
Collection of VNF test cases.
testcases:
@@ -24,6 +23,8 @@ tiers:
This test case deploys an OpenSource vIMS solution from
Clearwater using the Cloudify orchestrator. It also runs
some signaling traffic.
+ dependencies:
+ - NO_TENANT_NETWORK: '^(?![tT]rue$)'
run:
name: cloudify_ims
@@ -36,6 +37,8 @@ tiers:
This test case deploys an OpenSource vIMS solution from
Clearwater using the OpenStack Heat orchestrator.
It also runs some signaling traffic.
+ dependencies:
+ - NO_TENANT_NETWORK: '^(?![tT]rue$)'
run:
name: heat_ims
@@ -46,6 +49,8 @@ tiers:
blocking: false
description: >-
This test case is vRouter testing.
+ dependencies:
+ - NO_TENANT_NETWORK: '^(?![tT]rue$)'
run:
name: vyos_vrouter
@@ -57,5 +62,7 @@ tiers:
description: >-
vEPC validation with Juju as VNF manager and ABoT as test
executor.
+ dependencies:
+ - NO_TENANT_NETWORK: '^(?![tT]rue$)'
run:
name: juju_epc