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