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