Add simple tests for Neutron packages
authorSergey Kolekonov <skolekonov@mirantis.com>
Fri, 29 Aug 2014 15:41:54 +0000 (19:41 +0400)
committerSergey Kolekonov <skolekonov@mirantis.com>
Tue, 23 Sep 2014 14:51:04 +0000 (18:51 +0400)
Change-Id: If452ec57ab2542a3446591ab12f9503830991061

debian/control
rpm/SPECS/openstack-neutron.spec
tests/runtests.sh

index 47672b284968da06d862e1cc7f34a9dcffd0fb7d..1607af7caacf12e6bb4d94d69204cbed2fb81bb2 100644 (file)
@@ -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),
index cc2368926a0067bd6a0ad3019e3515a399e34380..f6abfe4155e08e81b0cd926a2afd4b39f97812be 100644 (file)
@@ -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
index 47c00260b78d3a36a8ba886c934ec2c54f381619..1dff794061cef6d5db2e550a8a20cc2fad96d7e7 100755 (executable)
@@ -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