Update neutron to 9.0.0~b3
[openstack-build/neutron-build.git] / tests / runtests.sh
1 #!/bin/bash
2
3 set -ex
4 PACKAGE=$1
5 UBUNTU=false
6 FAILURE=false
7 FAILED_TESTS=""
8 SERVICE_STARTED=false
9 PLATFORM=$(python -mplatform)
10 TOKEN=$(openssl rand -hex 10)
11 MYSQL_PASS=mysql_pass
12 AUTH="--os-auth-url http://127.0.0.1:35357 --os-token $TOKEN --os-endpoint http://127.0.0.1:35357/v2.0/"
13 NEUTRON_AUTH="--os-username neutron --os-password neutron --os-tenant-name neutron --os-auth-url http://127.0.0.1:35357/v2.0"
14 CORE_PLUGIN="neutron.plugins.ml2.plugin.Ml2Plugin"
15
16 if [[ $PLATFORM =~ Ubuntu ]]
17 then
18    UBUNTU=true
19 else
20    setenforce 0
21 fi
22
23 if [ -z $PACKAGE ]; then echo "Package for testing is not specified"; exit 1; fi
24 echo "127.0.10.1 $(hostname)" >> /etc/hosts
25
26 install_packages() {
27     #Install packages
28     if $UBUNTU
29     then
30         echo "mysql-server mysql-server/root_password select $MYSQL_PASS" | debconf-set-selections
31         echo "mysql-server mysql-server/root_password_again select $MYSQL_PASS" | debconf-set-selections
32         DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes rabbitmq-server mysql-server mysql-client-core-5.5 python-mysqldb keystone
33     else
34         #yum install -y openstack-keystone rabbitmq-server mysql-server MySQL-client python-oslo-utils
35         yum install -y openstack-keystone rabbitmq-server python-oslo-utils
36         #CentOS 7 temporary workaround
37         yum install -y http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
38         yum install -y mysql-community-server mysql-community-client
39         #Install some plugins because they are required for db-migration scripts (bug #1371184)
40         #Ubuntu neutron-server package include them
41         #yum install -y openstack-neutron-bigswitch openstack-neutron-brocade openstack-neutron-cisco openstack-neutron-hyperv openstack-neutron-vmware openstack-neutron-openvswitch \
42         #               openstack-neutron-ryu openstack-neutron-linuxbridge openstack-neutron-metaplugin openstack-neutron-mellanox openstack-neutron-nec openstack-neutron-nuage
43     fi
44 }
45
46 install_neutron_server () {
47     if $UBUNTU
48     then
49         DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes neutron-server
50     else
51         yum install -y openstack-neutron openstack-neutron-ml2
52     fi
53 }
54
55 setup_rabbitmq () {
56     #Setup firewall on CentOS 7
57     if ! $UBUNTU ; then
58         firewall-cmd --permanent --add-port=5672/tcp
59         firewall-cmd --reload
60         setsebool -P nis_enabled 1
61     fi
62
63     restart_service rabbitmq-server
64     if [ $? -ne 0 ]; then
65         echo "RabbitMQ server failed to start"
66         cat /var/log/rabbitmq/startup_err
67         cat /var/log/rabbitmq/startup_log
68     fi
69 }
70
71 setup_database() {
72     #Setup databases
73     restart_service mysql
74     if ! $UBUNTU
75     then
76        mysqladmin -u root password $MYSQL_PASS
77     fi
78     mysql -uroot -p$MYSQL_PASS -Bse "drop database if exists keystone"
79     mysql -uroot -p$MYSQL_PASS -Bse "drop database if exists neutron"
80     mysql -uroot -p$MYSQL_PASS -Bse "create database keystone"
81     mysql -uroot -p$MYSQL_PASS -Bse "create database neutron"
82     mysql -uroot -p$MYSQL_PASS -Bse "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron'"
83     mysql -uroot -p$MYSQL_PASS -Bse "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone'"
84     mysql -uroot -p$MYSQL_PASS -Bse "flush privileges"
85 }
86
87 setup_keystone() {
88     #Setup Keystone
89     cat > /etc/keystone/keystone.conf << EOF
90 [DEFAULT]
91 admin_token=$TOKEN
92 [database]
93 connection=mysql://keystone:keystone@localhost/keystone
94 [token]
95 provider=keystone.token.providers.uuid.Provider
96 EOF
97     keystone-manage db_sync
98     keystone-manage bootstrap --bootstrap-password $TOKEN
99     chown -R keystone:keystone /var/log/keystone/
100     if $UBUNTU
101     then
102         service keystone restart
103     else
104         systemctl restart openstack-keystone
105     fi
106     sleep 10
107     #Setup Neutron credentials
108     keystone $AUTH user-create --name neutron --pass neutron
109     keystone $AUTH tenant-create --name neutron
110     keystone $AUTH user-role-add --user neutron --role admin --tenant neutron
111     NEUTRON_SERVICE=`keystone $AUTH service-create --name=neutron --type=network --description="Neutron Networking Service" | grep id | awk -F '|' '{print $3}' | tr -d ' '`
112     keystone $AUTH endpoint-create --region RegionOne --service-id=$NEUTRON_SERVICE --publicurl=http://localhost:9696 --internalurl=http://localhost:9696 --adminurl=http://localhost:9696
113 }
114
115 setup_neutron_services() {
116 #Setup Neutron
117 cat > /etc/neutron/neutron.conf << EOF
118 [DEFAULT]
119 auth_strategy = keystone
120 debug = True
121 verbose = True
122 service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin
123 core_plugin = $CORE_PLUGIN
124 rabbit_password = guest
125 rabbit_hosts = 127.0.0.1
126 rpc_backend = neutron.openstack.common.rpc.impl_kombu
127 state_path = /var/lib/neutron
128 lock_path = $state_path/lock
129 [keystone_authtoken]
130 auth_host = 127.0.0.1
131 auth_port = 35357
132 auth_protocol = http
133 admin_tenant_name = neutron
134 admin_user = neutron
135 admin_password = neutron
136 auth_url=http://127.0.0.1:35357/v2.0
137 [matchmaker_redis]
138 [matchmaker_ring]
139 [quotas]
140 [agent]
141 root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf
142 [database]
143 connection = mysql://neutron:neutron@127.0.0.1/neutron?charset=utf8
144 [service_providers]
145 EOF
146
147 cat > /etc/neutron/l3_agent.ini << EOF
148 [DEFAULT]
149 interface_driver =neutron.agent.linux.interface.OVSInterfaceDriver
150 root_helper=sudo neutron-rootwrap /etc/neutron/rootwrap.conf
151 EOF
152
153     if ! $UBUNTU
154     then
155         cp /usr/share/neutron/api-paste.ini /etc/neutron/
156         chown neutron:neutron /etc/neutron/api-paste.ini
157     fi
158
159     touch /etc/neutron/plugin.ini
160     setup_rabbitmq
161 }
162
163 upgrade_neutron_db () {
164     neutron-db-manage --config-file /etc/neutron/neutron.conf upgrade head || (echo "DB migration failed" && exit 1)
165 }
166
167 start_neutron_server () {
168     restart_service neutron-server
169     # Sleep is to let Neutron server successfully reconnect to AMQP
170     sleep 10
171 }
172
173 try () {
174     TEST_FUNCTION=$1
175     SERVICE_STARTED=false
176     for i in {1..5}
177     do
178        FAILURE=false
179        $TEST_FUNCTION
180        if ! $FAILURE
181        then break
182        elif [ $i -eq 5 ]
183        then
184            FAILED_TESTS+="$TEST_FUNCTION "
185        fi
186     done
187 }
188
189 restart_service () {
190     local SERVICE=$1
191     if $UBUNTU; then
192         service $SERVICE restart
193     else
194         systemctl restart $SERVICE
195     fi
196 }
197
198 check_neutron_server() {
199     #Execute tests
200     neutron $NEUTRON_AUTH net-create mynet1
201     CHECK=$(neutron $NEUTRON_AUTH net-list | grep id)
202     if [ -z "$CHECK" ]; then echo "Network listing failed" && FAILURE=true; fi
203 }
204
205 check_neutron_openvswitch () {
206     # Workaround for bug #1371184
207     if ! $UBUNTU
208     then
209         chown root:neutron /etc/neutron/plugins/ml2/openvswitch_agent.ini
210     fi
211
212     if ! $SERVICE_STARTED ; then
213         if $UBUNTU; then
214             restart_service openvswitch-switch
215             restart_service neutron-openvswitch-agent
216         else
217             restart_service openvswitch
218             restart_service neutron-openvswitch-agent
219         fi
220         SERVICE_STARTED=true
221     fi
222
223     sleep 10
224     STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "Open vSwitch agent" | awk -F "|" '{print $6}' | tr -d " ")
225     if [ "$STATUS" != ":-)" ]; then echo "OVS agent check failed"; FAILURE=true; fi
226 }
227
228 check_neutron_l3_agent () {
229     if ! $SERVICE_STARTED ; then
230         restart_service neutron-l3-agent
231         SERVICE_STARTED=true
232     fi
233     #This sleep here and in other functions is intended to let the agent add information to the queue
234     sleep 10
235     STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "L3 agent" | awk -F "|" '{print $6}' | tr -d " ")
236     if [ "$STATUS" != ":-)" ]; then echo "L3 agent check failed"; FAILURE=true; fi
237 }
238
239 check_neutron_dhcp_agent () {
240     if ! $SERVICE_STARTED ; then
241         restart_service neutron-dhcp-agent
242         SERVICE_STARTED=true
243     fi
244     sleep 10
245     STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "DHCP agent" | awk -F "|" '{print $6}' | tr -d " ")
246     if [ "$STATUS" != ":-)" ]; then echo "DHCP agent check failed"; FAILURE=true; fi
247 }
248
249 check_neutron_metadata_agent () {
250     if ! $SERVICE_STARTED ; then
251         restart_service neutron-metadata-agent
252         SERVICE_STARTED=true
253     fi
254     sleep 10
255     STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "Metadata agent" | awk -F "|" '{print $6}' | tr -d " ")
256     if [ "$STATUS" != ":-)" ]; then echo "Metadata agent check failed"; FAILURE=true; fi
257 }
258
259 check_neutron_metering_agent () {
260     if ! $SERVICE_STARTED ; then
261         restart_service neutron-metering-agent
262         SERVICE_STARTED=true
263     fi
264     sleep 10
265     STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "Metering agent" | awk -F "|" '{print $6}' | tr -d " ")
266     if [ "$STATUS" != ":-)" ]; then echo "Metering agent check failed"; FAILURE=true; fi
267 }
268
269 check_neutron_client () {
270     neutron --help > /dev/null
271     if [ $? -ne 0 ]; then echo "Neutron client check failed"; FAILURE=true; fi
272 }
273
274 check_error () {
275     if [ "$FAILED_TESTS" != "" ]
276     then
277         grep TRACE /var/log/neutron/*
278         grep ERROR /var/log/neutron/*
279         echo "Failed tests are: $FAILED_TESTS"
280         exit 1
281     fi
282 }
283
284 case $PACKAGE in
285   neutron-server)
286     install_neutron_server
287     install_packages
288     setup_database
289     setup_keystone
290     setup_neutron_services
291     upgrade_neutron_db
292     start_neutron_server
293     try check_neutron_server
294     check_error
295   ;;
296   openstack-neutron)
297     install_neutron_server
298     install_packages
299     setup_database
300     setup_keystone
301     setup_neutron_services
302     upgrade_neutron_db
303     start_neutron_server
304     try check_neutron_server
305     try check_neutron_l3_agent
306     try check_neutron_dhcp_agent
307     try check_neutron_metadata_agent
308     check_error
309   ;;
310   openstack-neutron-ml2)
311     install_neutron_server
312     install_packages
313     setup_database
314     setup_keystone
315     setup_neutron_services
316     upgrade_neutron_db
317     start_neutron_server
318     try check_neutron_server
319     check_error
320   ;;
321   openstack-neutron-openvswitch|neutron-openvswitch-agent)
322     install_packages
323     install_neutron_server
324     setup_database
325     setup_keystone
326     setup_neutron_services
327     upgrade_neutron_db
328     start_neutron_server
329     try check_neutron_openvswitch
330     check_error
331   ;;
332   python-neutronclient)
333     check_neutron_client
334     check_error
335   ;;
336   neutron-l3-agent)
337     install_neutron_server
338     install_packages
339     setup_database
340     setup_keystone
341     setup_neutron_services
342     upgrade_neutron_db
343     start_neutron_server
344     try check_neutron_l3_agent
345     check_error
346   ;;
347   neutron-dhcp-agent)
348     install_neutron_server
349     install_packages
350     setup_database
351     setup_keystone
352     setup_neutron_services
353     upgrade_neutron_db
354     start_neutron_server
355     try check_neutron_dhcp_agent
356     check_error
357   ;;
358   neutron-metadata-agent)
359     install_neutron_server
360     install_packages
361     setup_database
362     setup_keystone
363     setup_neutron_services
364     upgrade_neutron_db
365     start_neutron_server
366     try check_neutron_metadata_agent
367     check_error
368   ;;
369   openstack-neutron-metering-agent|neutron-metering-agent)
370     install_neutron_server
371     install_packages
372     setup_database
373     setup_keystone
374     setup_neutron_services
375     upgrade_neutron_db
376     start_neutron_server
377     try check_neutron_metering_agent
378     check_error
379   ;;
380 esac
381
382 exit 0