Fix stable/mitaka gate failures

This change is squashed from backports of
0b6a3fbdfa and
b68c0e27e3. These two bugfixes
form a circular depencency and can't be merged without each
other.

The other way to solve this deadlock is to revert
https://review.openstack.org/322811 and
https://review.openstack.org/320998, merge
https://review.openstack.org/321563 and then start
anew.

Here are the commit messages of both changes:

Neutron-LBaaS: Fix network_resources path

* upstream tempest changed the namespace for
  network_resources, this change updates that path
* fixed changed deprecated config parameters
* replaced network_cilent passed into DeletableSubnet
  with subnets_client and routers_client

Refactor gate hooks

The aim of this change is to make gate_hook and post_test_hook
more generic and prepare base for adding a new functional job
and tests. The patch also includes a number cosmetic changes
which should make the hooks' code easier to read.

- Moved all argument parsing to decode_args.sh.
- gate_hook: Extracted code related to configuring Octavia into a
  separate function.
- post_test_hook: Filling test_subset is not required if the aim
  is to run all set (api-* job).
- post_test_hook: Don't set OS_TEST_PATH and OS_TESTR_CONCURRENCY
  as it's also done in tox.ini.
- Style fixes.

Change-Id: I32eaa12fb27a4cfbd09bd20e9821ebd310c32e44
Closes-Bug: #1581660
Closes-Bug: #1592564
Related-Bug: #1585116
This commit is contained in:
Franklin Naval 2016-05-13 14:59:13 -05:00 committed by Elena Ezhova
parent 5bcc99dd69
commit c502db8400
5 changed files with 114 additions and 121 deletions

View File

@ -2,13 +2,15 @@
# This file is meant to be sourced by the other hooks
# Legacy values for $1 and $2:
# $1 - lbaasv2, lbaasv1 (lbaasversion)
# $2 - scenario, minimal, api, healthmonitor, listener, loadbalancer, member, pool (lbaastest)
# Legacy values for $1, $2 and $3:
# $1 - dsvm-functional, tempest (testtype)
# $2 - lbaasv2, lbaasv1 (lbaasversion)
# $3 - scenario, minimal, api, healthmonitor, listener, loadbalancer, member, pool (lbaastest)
# Args being phased in:
# $1 - same
# $2 - test-driver, with any missing -driver being "octavia"
# $2 - same
# $3 - test-driver, with any missing -driver being "octavia"
# scenario-octavia
# minimal-octavia
# api-namespace
@ -21,8 +23,10 @@
lbaasversion="$1"
lbaastest="$2"
testtype="$1"
lbaasversion="$2"
lbaastest="$3"
lbaasenv=$(echo "$lbaastest" | perl -ne '/^(.*)-([^-]+)$/ && print "$1";')
if [ -z "$lbaasenv" ]; then
lbaasenv=$lbaastest
@ -32,4 +36,23 @@ if [ -z "$lbaasdriver" ]; then
lbaasdriver='octavia'
fi
testenv=${lbaastest:-"apiv2"}
if [ "$lbaasversion" = "lbaasv1" ]; then
testenv="apiv1"
elif [ "$lbaasversion" = "lbaasv2" ]; then
case "$lbaasenv" in
"api"|"healthmonitor"|"listener"|"loadbalancer"|"member"|"minimal"|"pool")
testenv="apiv2"
;;
"scenario")
testenv="scenario"
;;
*)
echo "Unrecognized env $lbaasenv".
exit 1
;;
esac
fi

View File

@ -5,64 +5,24 @@ set -ex
GATE_DEST=$BASE/new
DEVSTACK_PATH=$GATE_DEST/devstack
# Sort out our gate args
. `dirname "$0"`/decode_args.sh
testenv=${lbaastest:-"apiv2"}
if [ "$lbaasversion" = "lbaasv1" ]; then
testenv="apiv1"
elif [ "$lbaasversion" = "lbaasv2" ]; then
if [ "$lbaasenv" = "healthmonitor" ] || [ "$lbaasenv" = "listener" ] || [ "$lbaasenv" = "loadbalancer" ] || [ "$lbaasenv" = "member" ] || [ "$lbaasenv" = "minimal" ] || [ "$lbaasenv" = "pool" ]; then
testenv="apiv2"
elif [ "$lbaasenv" = "scenario" ]; then
testenv="scenario"
fi
fi
export DEVSTACK_LOCAL_CONFIG+="
enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas
enable_plugin barbican https://git.openstack.org/openstack/barbican
"
if [ "$lbaasdriver" = "octavia" ]; then
# Sort out our gate args
. $(dirname "$0")/decode_args.sh
function _setup_octavia {
export DEVSTACK_LOCAL_CONFIG+="
enable_plugin octavia https://git.openstack.org/openstack/octavia
"
fi
if [ "$testenv" != "scenario" ]; then
export DEVSTACK_LOCAL_CONFIG+="
DISABLE_AMP_IMAGE_BUILD=True
"
# Not needed for API tests
ENABLED_SERVICES+="-horizon,-ceilometer-acentral,-ceilometer-acompute,"
ENABLED_SERVICES+="-ceilometer-alarm-evaluator,-ceilometer-alarm-notifier,"
ENABLED_SERVICES+="-ceilometer-anotification,-ceilometer-api,"
ENABLED_SERVICES+="-ceilometer-collector,"
fi
# These are not needed with either v1 or v2
ENABLED_SERVICES+="-c-api,-c-bak,-c-sch,-c-vol,-cinder"
ENABLED_SERVICES+=",-s-account,-s-container,-s-object,-s-proxy"
if [ "$testenv" != "apiv1" ]; then
# Override enabled services, so we can turn on lbaasv2.
# While we're at it, disable cinder and swift, since we don't need them.
ENABLED_SERVICES+=",q-lbaasv2,-q-lbaas"
if [ "$lbaasdriver" = "octavia" ]; then
ENABLED_SERVICES+=",octavia,o-cw,o-hk,o-hm,o-api"
fi
if [ "$lbaasdriver" = "namespace" ]; then
export DEVSTACK_LOCAL_CONFIG+="
NEUTRON_LBAAS_SERVICE_PROVIDERV2=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
"
fi
fi
export ENABLED_SERVICES
if [ "$lbaasdriver" = "octavia" -a "$testenv" = "apiv2" ]; then
cat > $DEVSTACK_PATH/local.conf <<EOF
enable_plugin octavia https://git.openstack.org/openstack/octavia
"
if [ "$testenv" != "apiv1" ]; then
ENABLED_SERVICES+="octavia,o-cw,o-hk,o-hm,o-api,"
fi
if [ "$testenv" = "apiv2" ]; then
cat > "$DEVSTACK_PATH/local.conf" <<EOF
[[post-config|/etc/octavia/octavia.conf]]
[DEFAULT]
debug = True
@ -74,16 +34,62 @@ network_driver = network_noop_driver
EOF
fi
fi
if [ "$lbaasdriver" = "octavia" -a "$testenv" = "scenario" ]; then
cat > $DEVSTACK_PATH/local.conf <<EOF
if [ "$testenv" = "scenario" ]; then
cat > "$DEVSTACK_PATH/local.conf" <<EOF
[[post-config|/etc/octavia/octavia.conf]]
[DEFAULT]
debug = True
EOF
fi
fi
}
$GATE_DEST/devstack-gate/devstack-vm-gate.sh
case "$testtype" in
"tempest")
# These are not needed with either v1 or v2
ENABLED_SERVICES+="-c-api,-c-bak,-c-sch,-c-vol,-cinder,"
ENABLED_SERVICES+="-s-account,-s-container,-s-object,-s-proxy,"
if [ "$testenv" != "scenario" ]; then
export DEVSTACK_LOCAL_CONFIG+="
DISABLE_AMP_IMAGE_BUILD=True
"
# Not needed for API tests
ENABLED_SERVICES+="-horizon,-ceilometer-acentral,-ceilometer-acompute,"
ENABLED_SERVICES+="-ceilometer-alarm-evaluator,-ceilometer-alarm-notifier,"
ENABLED_SERVICES+="-ceilometer-anotification,-ceilometer-api,"
ENABLED_SERVICES+="-ceilometer-collector,"
fi
if [ "$testenv" != "apiv1" ]; then
# Override enabled services, so we can turn on lbaasv2.
# While we're at it, disable cinder and swift, since we don't need them.
ENABLED_SERVICES+="q-lbaasv2,-q-lbaas,"
if [ "$lbaasdriver" = "namespace" ]; then
export DEVSTACK_LOCAL_CONFIG+="
NEUTRON_LBAAS_SERVICE_PROVIDERV2=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
"
fi
fi
if [ "$lbaasdriver" = "octavia" ]; then
_setup_octavia
fi
export ENABLED_SERVICES
;;
*)
echo "Unrecognized test type $testtype".
exit 1
;;
esac
"$GATE_DEST"/devstack-gate/devstack-vm-gate.sh

View File

@ -8,28 +8,10 @@ SCRIPTS_DIR="/usr/os-testr-env/bin"
OCTAVIA_DIR="$BASE/new/octavia"
# Sort out our gate args
. `dirname "$0"`/decode_args.sh
. $(dirname "$0")/decode_args.sh
LBAAS_VERSION=$lbaasversion
LBAAS_TEST=$lbaasenv
LBAAS_DRIVER=$lbaasdriver
if [ "$LBAAS_VERSION" = "lbaasv1" ]; then
testenv="apiv1"
else
testenv="apiv2"
case "$LBAAS_TEST" in
api)
if [ "$LBAAS_DRIVER" = "namespace" ]; then
test_subset="load_balancers "
test_subset+="listeners "
test_subset+="pools "
test_subset+="members "
test_subset+="health_monitor"
else
testenv=${LBAAS_TEST:-"apiv2"}
fi
;;
if [ "$testenv" = "apiv2" ]; then
case "$lbaasenv" in
minimal)
# Temporarily just do the happy path
test_subset="neutron_lbaas.tests.tempest.v2.api.test_load_balancers_non_admin.LoadBalancersTestJSON.test_create_load_balancer(?!_) "
@ -58,16 +40,13 @@ else
scenario)
testenv="scenario"
;;
*)
testenv=${LBAAS_TEST:-"apiv2"}
;;
esac
fi
function generate_testr_results {
# Give job user rights to access tox logs
sudo -H -u $owner chmod o+rw .
sudo -H -u $owner chmod o+rw -R .testrepository
sudo -H -u "$owner" chmod o+rw .
sudo -H -u "$owner" chmod o+rw -R .testrepository
if [ -f ".testrepository/0" ] ; then
subunit-1to2 < .testrepository/0 > ./testrepository.subunit
$SCRIPTS_DIR/subunit2html ./testrepository.subunit testr_results.html
@ -78,28 +57,14 @@ function generate_testr_results {
}
owner=tempest
# Configure the api and scenario tests to use the tempest.conf set by devstack
sudo_env="TEMPEST_CONFIG_DIR=$TEMPEST_CONFIG_DIR"
# Set owner permissions according to job's requirements.
cd $NEUTRON_LBAAS_DIR
sudo chown -R $owner:stack $NEUTRON_LBAAS_DIR
cd "$NEUTRON_LBAAS_DIR"
sudo chown -R $owner:stack "$NEUTRON_LBAAS_DIR"
if [ "$lbaasdriver" = "octavia" ]; then
sudo chown -R $owner:stack $OCTAVIA_DIR
fi
sudo_env=" OS_TESTR_CONCURRENCY=1"
# Configure the api and scenario tests to use the tempest.conf set by devstack
sudo_env+=" TEMPEST_CONFIG_DIR=$TEMPEST_CONFIG_DIR"
if [ "$testenv" = "apiv2" ]; then
sudo_env+=" OS_TEST_PATH=$NEUTRON_LBAAS_DIR/neutron_lbaas/tests/tempest/v2/api"
elif [ "$testenv" = "apiv1" ]; then
sudo_env+=" OS_TEST_PATH=$NEUTRON_LBAAS_DIR/neutron_lbaas/tests/tempest/v1/api"
elif [ "$testenv" = "scenario" ]; then
sudo_env+=" OS_TEST_PATH=$NEUTRON_LBAAS_DIR/neutron_lbaas/tests/tempest/v2/scenario"
else
echo "ERROR: unsupported testenv: $testenv"
exit 1
sudo chown -R $owner:stack "$OCTAVIA_DIR"
fi
# Run tests
@ -107,8 +72,6 @@ echo "Running neutron lbaas $testenv test suite"
set +e
sudo -H -u $owner $sudo_env tox -e $testenv -- $test_subset
# sudo -H -u $owner $sudo_env testr init
# sudo -H -u $owner $sudo_env testr run
testr_exit_code=$?
set -e

View File

@ -236,12 +236,13 @@ class BaseNetworkTest(test.BaseTestCase):
ip_version = ip_version if ip_version is not None else cls._ip_version
gateway_not_set = gateway == ''
if ip_version == 4:
cidr = cidr or netaddr.IPNetwork(CONF.network.tenant_network_cidr)
mask_bits = mask_bits or CONF.network.tenant_network_mask_bits
cidr = cidr or netaddr.IPNetwork(CONF.network.project_network_cidr)
mask_bits = mask_bits or CONF.network.project_network_mask_bits
elif ip_version == 6:
cidr = (
cidr or netaddr.IPNetwork(CONF.network.tenant_network_v6_cidr))
mask_bits = mask_bits or CONF.network.tenant_network_v6_mask_bits
cidr or netaddr.IPNetwork(
CONF.network.project_network_v6_cidr))
mask_bits = mask_bits or CONF.network.project_network_v6_mask_bits
# Find a cidr that is not in use yet and create a subnet with it
for subnet_cidr in cidr.subnet(mask_bits):
if gateway_not_set:

View File

@ -30,7 +30,7 @@ from tempest import config
from tempest import exceptions
from tempest.lib import exceptions as lib_exc
from tempest.scenario import manager
from tempest.services.network import resources as net_resources
from tempest.scenario import network_resources as net_resources
from tempest import test
from neutron_lbaas._i18n import _
@ -106,7 +106,7 @@ class BaseTestCase(manager.NetworkScenarioTest):
if not test.is_extension_enabled('lbaasv2', 'network'):
msg = 'LBaaS Extension is not enabled'
raise cls.skipException(msg)
if not (cfg.tenant_networks_reachable or cfg.public_network_id):
if not (cfg.project_networks_reachable or cfg.public_network_id):
msg = ('Either tenant_networks_reachable must be "true", or '
'public_network_id must be defined.')
raise cls.skipException(msg)
@ -126,7 +126,8 @@ class BaseTestCase(manager.NetworkScenarioTest):
if tenant_net:
tenant_subnet = self._list_subnets(tenant_id=self.tenant_id)[0]
self.subnet = net_resources.DeletableSubnet(
client=self.network_client,
subnets_client=self.subnets_client,
routers_client=self.routers_client,
**tenant_subnet)
self.network = tenant_net
else:
@ -187,7 +188,7 @@ class BaseTestCase(manager.NetworkScenarioTest):
server = server['server']
self.servers_keypairs[server['id']] = keypair
if (config.network.public_network_id and not
config.network.tenant_networks_reachable):
config.network.project_networks_reachable):
public_network_id = config.network.public_network_id
floating_ip = self.create_floating_ip(
server, public_network_id)
@ -408,7 +409,7 @@ class BaseTestCase(manager.NetworkScenarioTest):
# tempest.conf file
if ip_version == 4:
if (config.network.public_network_id and not
config.network.tenant_networks_reachable):
config.network.project_networks_reachable):
load_balancer = net_resources.AttributeDict(self.load_balancer)
self._assign_floating_ip_to_lb_vip(load_balancer)
self.vip_ip = self.floating_ips[
@ -418,7 +419,6 @@ class BaseTestCase(manager.NetworkScenarioTest):
# vip port - see https://bugs.launchpad.net/neutron/+bug/1163569
# However the linuxbridge-agent does, and it is necessary to add a
# security group with a rule that allows tcp port 80 to the vip port.
# self.network_client.update_port(
self.ports_client.update_port(
self.load_balancer.get('vip_port_id'),
security_groups=[self.security_group.id])