From 178fe1bc096c1ff05e181a7ce6b9c2da2adc9512 Mon Sep 17 00:00:00 2001 From: Sergey Kolekonov Date: Fri, 29 Aug 2014 19:41:54 +0400 Subject: [PATCH] Add simple tests for Neutron packages Change-Id: If452ec57ab2542a3446591ab12f9503830991061 --- debian/control | 10 +- rpm/SPECS/openstack-neutron.spec | 40 ++-- tests/runtests.sh | 328 ++++++++++++++++++++++++++++++- 3 files changed, 359 insertions(+), 19 deletions(-) diff --git a/debian/control b/debian/control index 47672b284..1607af7ca 100644 --- a/debian/control +++ b/debian/control @@ -14,7 +14,7 @@ Build-Depends-Indep: python-configobj, python-coverage, python-hacking, - python-eventlet (>= 0.13.0), + python-eventlet (>= 0.15.1), python-fixtures (>= 0.3.12), python-greenlet (>= 0.3.2), python-httplib2 (>= 0.7.5), @@ -30,8 +30,8 @@ Build-Depends-Indep: python-netaddr, python-neutronclient (>= 1:2.3.6), python-novaclient (>= 2.17.0), - python-oslo.config (>= 1.4.0a3), - python-oslo.messaging (>= 1.4.0a3), + python-oslo.config (>= 1.4.0), + python-oslo.messaging (>= 1.4.0), python-oslo.db, python-paste, python-pastedeploy, @@ -44,7 +44,7 @@ Build-Depends-Indep: python-simplejson, python-six (>= 1.7.0), python-sqlalchemy (>= 0.8.4), python-sqlalchemy (<< 0.8.99) | python-sqlalchemy (>> 0.9.7), python-sqlalchemy (<= 0.9.99), - python-stevedore (>= 0.10), + python-stevedore (>= 0.14), python-testtools (>= 0.9.32), python-webob, python-webtest, @@ -442,7 +442,7 @@ Depends: python-kombu (>= 2.5.12), python-netaddr (>= 0.7.6 ), python-neutronclient (>= 1:2.3.6), - python-novaclient (>= 2.17.0), + python-novaclient (>= 1:2.17.0), python-oslo.config (>= 1:1.4.0), python-paste, python-pastedeploy(>= 1.5), diff --git a/rpm/SPECS/openstack-neutron.spec b/rpm/SPECS/openstack-neutron.spec index cc2368926..f6abfe415 100644 --- a/rpm/SPECS/openstack-neutron.spec +++ b/rpm/SPECS/openstack-neutron.spec @@ -69,6 +69,18 @@ Requires: dnsmasq-utils Requires: python-neutron = %{version}-%{release} Requires: python-oslo-rootwrap Requires: openstack-utils +Requires: openstack-neutron-bigswitch +Requires: openstack-neutron-brocade +Requires: openstack-neutron-cisco +Requires: openstack-neutron-hyperv +Requires: openstack-neutron-vmware +Requires: openstack-neutron-openvswitch +Requires: openstack-neutron-ryu +Requires: openstack-neutron-linuxbridge +Requires: openstack-neutron-metaplugin +Requires: openstack-neutron-mellanox +Requires: openstack-neutron-nec +Requires: openstack-neutron-nuage Requires(post): chkconfig Requires(postun): initscripts @@ -103,33 +115,32 @@ Requires: python-alembic >= 0.6.4 Requires: python-amqplib Requires: python-anyjson >= 0.3.3 Requires: python-babel >= 1.3 -Requires: python-eventlet >= 0.13.0 +Requires: python-eventlet >= 0.15.1 Requires: python-greenlet >= 0.3.2 Requires: python-httplib2 >= 0.7.5 Requires: python-iso8601 >= 0.1.9 Requires: python-jsonrpclib Requires: python-jinja2 -Requires: python-keystoneclient >= 0.10.0 +Requires: python-keystoneclient >= 1:0.10.0 Requires: python-keystonemiddleware >= 1.0.0 Requires: python-kombu >= 2.4.8 Requires: python-lxml -Requires: python-oslo-messaging >= 1.4.0.0a3 -Requires: python-oslo-rootwrap >= 1.3.0.0a1 -Requires: python-requests >= 1.1 -Requires: python-paste-deploy >= 1.5 +Requires: python-oslo-messaging >= 1.4.0 +Requires: python-oslo-rootwrap >= 1.3.0 +Requires: python-requests >= 1.2.1 +Requires: python-paste-deploy >= 1.5.0 Requires: python-routes >= 1.12.3 Requires: python-sqlalchemy >= 0.8.4 Requires: python-webob >= 1.2.3 Requires: python-netaddr >= 0.7.6 -Requires: python-oslo-config >= 1:1.2.0 -Requires: python-oslo-db >= 0.2.0 +Requires: python-oslo-config >= 1.4.0 +Requires: python-oslo-db >= 0.4.0 Requires: python-qpid -Requires: python-neutronclient >= 2.3.5 -Requires: python-novaclient >= 2.17.0 +Requires: python-neutronclient >= 2.3.6 Requires: python-stevedore >= 0.14 Requires: python-six >= 1.7.0 -Requires: python-novaclient >= 1:2.17.0 +Requires: python-novaclient >= 1:2.17.0 Requires: sudo @@ -866,6 +877,7 @@ fi %dir %{_datarootdir}/neutron/rootwrap %{_datarootdir}/neutron/rootwrap/debug.filters %{_datarootdir}/neutron/rootwrap/dhcp.filters +%{_datarootdir}/neutron/rootwrap/ipset-firewall.filters %{_datarootdir}/neutron/rootwrap/iptables-firewall.filters %{_datarootdir}/neutron/rootwrap/l3.filters %{_datarootdir}/neutron/rootwrap/lbaas-haproxy.filters @@ -898,12 +910,14 @@ fi %files bigswitch %doc LICENSE -%doc neutron/plugins/bigswitch/README %{_bindir}/neutron-restproxy-agent %{python_sitelib}/neutron/plugins/bigswitch %dir %{_sysconfdir}/neutron/plugins/bigswitch +%dir %{_sysconfdir}/neutron/plugins/bigswitch/ssl/ca_certs +%dir %{_sysconfdir}/neutron/plugins/bigswitch/ssl/host_certs +%doc %{_sysconfdir}/neutron/plugins/bigswitch/ssl/ca_certs/README +%doc %{_sysconfdir}/neutron/plugins/bigswitch/ssl/host_certs/README %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/bigswitch/*.ini -%doc %{_sysconfdir}/neutron/plugins/bigswitch/README %files brocade diff --git a/tests/runtests.sh b/tests/runtests.sh index 47c00260b..1dff79406 100755 --- a/tests/runtests.sh +++ b/tests/runtests.sh @@ -1,2 +1,328 @@ -#!/bin/bash -x +#!/bin/bash -ex + +PACKAGE=$1 +UBUNTU=false +FAILURE=false +PLATFORM=$(python -mplatform) +TOKEN=$(openssl rand -hex 10) +MYSQL_PASS=mysql_pass +AUTH="--os-auth-url http://127.0.0.1:35357 --os-token $TOKEN --os-endpoint http://127.0.0.1:35357/v2.0/" +NEUTRON_AUTH="--os-username neutron --os-password neutron --os-tenant-name neutron --os-auth-url http://127.0.0.1:35357/v2.0" +FORMAT=" --request-format xml" +CORE_PLUGIN="neutron.plugins.ml2.plugin.Ml2Plugin" + +if [[ $PLATFORM =~ Ubuntu ]]; then UBUNTU=true; fi +if [ -z $PACKAGE ]; then echo "Package for testing is not specified"; exit 1; fi +echo "127.0.10.1 $(hostname)" >> /etc/hosts + +install_packages() { + #Install packages + if $UBUNTU + then + echo "mysql-server mysql-server/root_password select $MYSQL_PASS" | debconf-set-selections + echo "mysql-server mysql-server/root_password_again select $MYSQL_PASS" | debconf-set-selections + apt-get install -y --force-yes rabbitmq-server mysql-server mysql-client-core-5.5 python-mysqldb keystone + else + yum install -y openstack-keystone rabbitmq-server mysql-server python-oslo-utils + #Install some plugins because they are required for db-migration scripts (bug #1371184) + #Ubuntu neutron-server package include them + #yum install -y openstack-neutron-bigswitch openstack-neutron-brocade openstack-neutron-cisco openstack-neutron-hyperv openstack-neutron-vmware openstack-neutron-openvswitch \ + # openstack-neutron-ryu openstack-neutron-linuxbridge openstack-neutron-metaplugin openstack-neutron-mellanox openstack-neutron-nec openstack-neutron-nuage + fi +} + +install_neutron_server () { + if $UBUNTU + then + apt-get install -y --force-yes neutron-server + else + yum install -y openstack-neutron openstack-neutron-ml2 + fi +} + +setup_database() { + #Setup databases + service mysql restart || service mysqld restart + if ! $UBUNTU + then + mysqladmin -u root password $MYSQL_PASS + fi + mysql -uroot -p$MYSQL_PASS -Bse "create database keystone" + mysql -uroot -p$MYSQL_PASS -Bse "create database neutron" + mysql -uroot -p$MYSQL_PASS -Bse "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron'" + mysql -uroot -p$MYSQL_PASS -Bse "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone'" + mysql -uroot -p$MYSQL_PASS -Bse "flush privileges" +} + +setup_keystone() { + #Setup Keystone + if ! $UBUNTU + then + cp /usr/share/keystone/keystone-dist-paste.ini /etc/keystone/keystone-paste.ini + fi + cat > /etc/keystone/keystone.conf << EOF +[DEFAULT] +admin_token=$TOKEN +[database] +connection=mysql://keystone:keystone@localhost/keystone +[token] +provider=keystone.token.providers.uuid.Provider +EOF + keystone-manage db_sync + chown -R keystone:keystone /var/log/keystone/ + if $UBUNTU + then + service keystone restart + else + service openstack-keystone start + fi + sleep 10 + #Setup Neutron credentials + keystone $AUTH user-create --name neutron --pass neutron + keystone $AUTH tenant-create --name neutron + keystone $AUTH role-create --name=admin + keystone $AUTH user-role-add --user neutron --role admin --tenant neutron + NEUTRON_SERVICE=`keystone $AUTH service-create --name=neutron --type=network --description="Neutron Networking Service" | grep id | awk -F '|' '{print $3}' | tr -d ' '` + keystone $AUTH endpoint-create --region RegionOne --service-id=$NEUTRON_SERVICE --publicurl=http://localhost:9696 --internalurl=http://localhost:9696 --adminurl=http://localhost:9696 +} + +setup_neutron_services() { +#Setup Neutron +cat > /etc/neutron/neutron.conf << EOF +[DEFAULT] +auth_strategy = keystone +debug = True +verbose = True +service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin +core_plugin = $CORE_PLUGIN +rabbit_password = guest +rabbit_hosts = 127.0.0.1 +rpc_backend = neutron.openstack.common.rpc.impl_kombu +state_path = /var/lib/neutron +lock_path = $state_path/lock +[keystone_authtoken] +auth_host = 127.0.0.1 +auth_port = 35357 +auth_protocol = http +admin_tenant_name = neutron +admin_user = neutron +admin_password = neutron +auth_url=http://127.0.0.1:35357/v2.0 +[matchmaker_redis] +[matchmaker_ring] +[quotas] +[agent] +root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf +[database] +connection = mysql://neutron:neutron@127.0.0.1/neutron?charset=utf8 +[service_providers] +service_provider=LOADBALANCER:Haproxy:neutron.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default +service_provider=VPN:openswan:neutron.services.vpn.service_drivers.ipsec.IPsecVPNDriver:default +EOF + +cat > /etc/neutron/l3_agent.ini << EOF +[DEFAULT] +interface_driver =neutron.agent.linux.interface.OVSInterfaceDriver +root_helper=sudo neutron-rootwrap /etc/neutron/rootwrap.conf +EOF + + if ! $UBUNTU + then + cp /usr/share/neutron/api-paste.ini /etc/neutron/ + chown neutron:neutron /etc/neutron/api-paste.ini + fi + + touch /etc/neutron/plugin.ini + for i in {1..5} + do + service rabbitmq-server restart + if [ $? -eq 0 ]; then break; fi + echo "RabbitMQ server failed to start" + cat /var/log/rabbitmq/startup_err + cat /var/log/rabbitmq/startup_log + done +} + +upgrade_neutron_db () { + neutron-db-manage --config-file /etc/neutron/neutron.conf upgrade head || (echo "DB migration failed" && exit 1) +} + +start_neutron_server () { + service neutron-server restart + # Sleep is to let Neutron server successfully reconnect to AMQP + sleep 10 +} + +check_neutron_server() { + #Execute tests + neutron $NEUTRON_AUTH net-create $FORMAT mynet1 + CHECK=$(neutron $NEUTRON_AUTH net-list | grep id) + if [ -z "$CHECK" ]; then echo "Network listing failed" && FAILURE=true; fi +} + +check_neutron_openvswitch () { + + # Workaround for bug #1371184 + if ! $UBUNTU + then + chown root:neutron /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini + fi + if ! $UBUNTU + then + service openvswitch start + service neutron-openvswitch-agent start + else + service openvswitch-switch restart + service neutron-plugin-openvswitch-agent restart + fi + sleep 10 + STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "Open vSwitch agent" | awk -F "|" '{print $5}' | tr -d " ") + if [ "$STATUS" != ":-)" ]; then echo "OVS agent check failed"; FAILURE=true; fi +} + +check_neutron_l3_agent () { + + service neutron-l3-agent restart + #This sleep here and in other functions is intended to let the agent add information to the queue + sleep 10 + STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "L3 agent" | awk -F "|" '{print $5}' | tr -d " ") + if [ "$STATUS" != ":-)" ]; then echo "L3 agent check failed"; FAILURE=true; fi +} + +check_neutron_dhcp_agent () { + + service neutron-dhcp-agent restart + sleep 10 + STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "DHCP agent" | awk -F "|" '{print $5}' | tr -d " ") + if [ "$STATUS" != ":-)" ]; then echo "DHCP agent check failed"; FAILURE=true; fi +} + +check_neutron_metadata_agent () { + + service neutron-metadata-agent restart + sleep 10 + STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "Metadata agent" | awk -F "|" '{print $5}' | tr -d " ") + if [ "$STATUS" != ":-)" ]; then echo "Metadata agent check failed"; FAILURE=true; fi +} + +check_neutron_metering_agent () { + + service neutron-metering-agent restart + sleep 10 + STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "Metering agent" | awk -F "|" '{print $5}' | tr -d " ") + if [ "$STATUS" != ":-)" ]; then echo "Metering agent check failed"; FAILURE=true; fi +} + +check_neutron_client () { + neutron --help > /dev/null + if [ $? -ne 0 ]; then echo "Neutron client check failed"; FAILURE=true; fi +} + +check_error () { + if $FAILURE + then + grep TRACE /var/log/neutron/* + grep ERROR /var/log/neutron/* + exit 1 + fi +} + +case $PACKAGE in + neutron-server) + install_neutron_server + install_packages + setup_database + setup_keystone + setup_neutron_services + upgrade_neutron_db + start_neutron_server + check_neutron_server + check_error + ;; + openstack-neutron) + install_neutron_server + install_packages + setup_database + setup_keystone + setup_neutron_services + upgrade_neutron_db + start_neutron_server + check_neutron_server + check_neutron_l3_agent + check_neutron_dhcp_agent + check_neutron_metadata_agent + check_error + ;; + openstack-neutron-ml2) + install_neutron_server + install_packages + setup_database + setup_keystone + setup_neutron_services + upgrade_neutron_db + start_neutron_server + check_neutron_server + check_error + ;; + openstack-neutron-openvswitch|neutron-plugin-openvswitch-agent) + install_packages + install_neutron_server + setup_database + setup_keystone + setup_neutron_services + upgrade_neutron_db + start_neutron_server + check_neutron_openvswitch + check_error + ;; + python-neutronclient) + check_neutron_client + check_error + ;; + neutron-l3-agent) + install_neutron_server + install_packages + setup_database + setup_keystone + setup_neutron_services + upgrade_neutron_db + start_neutron_server + check_neutron_l3_agent + check_error + ;; + neutron-dhcp-agent) + install_neutron_server + install_packages + setup_database + setup_keystone + setup_neutron_services + upgrade_neutron_db + start_neutron_server + check_neutron_dhcp_agent + check_error + ;; + neutron-metadata-agent) + install_neutron_server + install_packages + setup_database + setup_keystone + setup_neutron_services + upgrade_neutron_db + start_neutron_server + check_neutron_metadata_agent + check_error + ;; + openstack-neutron-metering-agent|neutron-plugin-metering-agent) + install_neutron_server + install_packages + setup_database + setup_keystone + setup_neutron_services + upgrade_neutron_db + start_neutron_server + check_neutron_metering_agent + check_error + ;; +esac + exit 0 -- 2.32.3