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