Merge "Add heat stack validation in integration with functest about vRNC"
[parser.git] / tests / functest_run.sh
1 #!/bin/bash -e
2 ##############################################################################
3 # Copyright (c) 2016 ZTE Corporation.
4 #
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
10
11 PARSER_CI_DEBUG=${CI_DEBUG:-true}
12 [[ "${PARSER_CI_DEBUG}" == "true" ]] && set -x
13
14 PARSER_IMAGE_URL_FILE=cirros-0.3.0-x86_64-disk.img
15 PARSER_IMAGE_URL=https://launchpad.net/cirros/trunk/0.3.0/+download/${PARSER_IMAGE_URL_FILE}
16 PARSER_IMAGE_NAME=rhel-6.5-test-image
17 PARSER_IMAGE_FILE="${PARSER_IMAGE_NAME}.img"
18 PARSER_IMAGE_FORMAT=qcow2
19
20 PARSER_VM_FLAVOR=m1.tiny
21
22 PARSER_USER=parser
23 PARSER_PASSWORD=parser
24 PARSER_PROJECT=parser
25 PARSER_TENANT=${PARSER_PROJECT}
26
27 PARSER_ROLE=admin
28
29 PARSER_STACK_NAME=vRNC_Stack
30
31 # VRNC_INPUT_TEMPLATE_FILE=../tosca2heat/tosca-parser/toscaparser/extensions/nfv/tests/data/vRNC/Definitions/vRNC.yaml
32 VRNC_INPUT_TEMPLATE_FILE=../tosca2heat/heat-translator/translator/tests/data/test_tosca_nfv_sample.yaml
33
34 VRNC_OUTPUT_TEMPLATE_FILE=./vRNC_Hot_Template.yaml
35
36 download_parser_image() {
37     [ -e "${PARSER_IMAGE_URL_FILE}" ] && {
38         echo "Image ${PARSER_IMAGE_URL_FILE} has bee cached, needn't download again."
39         cp ${PARSER_IMAGE_URL_FILE} ${PARSER_IMAGE_FILE}
40         return 0
41     }
42
43     echo "Download image ${PARSER_IMAGE_URL_FILE}..."
44     wget "${PARSER_IMAGE_URL}" -o "${PARSER_IMAGE_FILE}"
45 }
46
47 register_parser_image() {
48     openstack image list | grep -qwo "${PARSER_IMAGE_NAME}" && {
49         echo "Image ${PARSER_IMAGE_NAME} has bee registed, needn't registe again."
50         return 0
51     }
52
53     echo "Registe image ${PARSER_IMAGE_NAME}..."
54     openstack image create "${PARSER_IMAGE_NAME}" \
55                            --public \
56                            --disk-format "${PARSER_IMAGE_FORMAT}" \
57                            --container-format bare \
58                            --file "${PARSER_IMAGE_FILE}"
59 }
60
61 create_parser_user_and_project() {
62
63     # 1. create parser user.
64     openstack user list | grep -qwo "${PARSER_USER}" && {
65         echo "User ${PARSER_USER} exist, doesn't create again."
66     } || {
67         openstack user create "${PARSER_USER}" --password "${PARSER_PASSWORD}"
68         echo "Create user ${PARSER_USER} successful."
69     }
70
71     # 2. create parser project
72     openstack project list | grep -qwo "${PARSER_PROJECT}" && {
73         echo "Project ${PARSER_PROJECT} exist, doesn't create agian."
74     } || {
75         openstack project create "${PARSER_PROJECT}"
76         echo "Create project ${PARSER_PROJECT} successful."
77     }
78
79     # 3. grant role for parser user
80     openstack user role list "${PARSER_USER}" --project "${PARSER_PROJECT}" \
81     | grep -qow " ${PARSER_ROLE}" && {
82         echo "User ${PARSER_USER} has role ${PARSER_ROLE} in project ${PARSER_PROJECT}, doesn't create."
83     } || {
84         openstack role add "${PARSER_ROLE}" --user "${PARSER_USER}" \
85                            --project "${PARSER_PROJECT}"
86         echo "Grant user ${PARSER_USER} the role ${PARSER_ROLE} in project ${PARSER_PROJECT} successful."
87     }
88
89 }
90
91 change_env_to_parser_user_project() {
92
93     export OS_USERNAME="$PARSER_USER"
94     export OS_PASSWORD="$PARSER_PASSWORD"
95     export OS_PROJECT_NAME="$PARSER_PROJECT"
96     export OS_TENANT_NAME="$PARSER_TENANT"
97
98 }
99
100 translator_and_deploy_vRNC() {
101     (
102         # 1. Delete parser stack ${PARSER_STACK_NAME}, use admin user in admin project
103         openstack stack list | grep -qow ${PARSER_STACK_NAME} && {
104             echo "stack ${PARSER_STACK_NAME} exist, delete it first."
105             openstack stack delete --yes --wait ${PARSER_STACK_NAME}
106         }
107         # 2. Switch env to parser project temporally
108         echo "switch openstak env to parser project"
109         change_env_to_parser_user_project
110
111         # 3. Translator yaml
112         echo "Translator input file ${VRNC_INPUT_TEMPLATE_FILE} and output is ${VRNC_OUTPUT_TEMPLATE_FILE}"
113         heat-translator --template-type tosca --template-file ${VRNC_INPUT_TEMPLATE_FILE} \
114             --output-file ${VRNC_OUTPUT_TEMPLATE_FILE}
115
116         # 4. deploy vRNC
117         echo "Deploy stack..."
118         openstack stack create -t ${VRNC_OUTPUT_TEMPLATE_FILE} ${PARSER_STACK_NAME}
119
120         # 5. Wait for create vRNC
121         sleep 180
122
123         # 6. Validate the deploy result.
124         echo "Checking the result of deployment..."
125         # 1). check vdu
126         openstack server list | grep -qwo "${PARSER_STACK_NAME}" && {
127             echo "  Check VDU successful."
128         } || {
129             echo "  Check VDU unsuccessful."
130             exit 1
131         }
132         # 2). check VL-network
133         openstack network list | grep -qwo "${PARSER_STACK_NAME}" && {
134             echo "  Check VL-network successful."
135         } || {
136             echo "  Check VL-network unsuccessful."
137             exit 1
138         }
139         # 3). check VL-subnet
140         openstack subnet list | grep -qwo "${PARSER_STACK_NAME}" && {
141             echo "  Check VL-subnet successful."
142         } || {
143             echo "  Check VL-subnet unsuccessful."
144             exit 1
145         }
146         # 4). check port
147         neutron port-list | grep -qwo "${PARSER_STACK_NAME}" && {
148             echo "  Check CP successful."
149         } || {
150             echo "  Check CP unsuccessful."
151             exit 1
152         }
153         echo "Checkthe result of deployment successfully."
154     )
155
156 }
157
158 reset_parser_test() {
159     set +e
160
161     echo "cleanup..."
162     # 1. Delete resource created by parser user
163     (
164         # 1). Switch env to parser project temporally
165         change_env_to_parser_user_project
166
167         # 2). Delete the stack ${PARSER_STACK_NAME}
168         openstack stack list | grep -qow ${PARSER_STACK_NAME} && {
169             echo "stack ${PARSER_STACK_NAME} has been created, delete it after test."
170             openstack stack delete --yes --wait ${PARSER_STACK_NAME}
171         }
172
173         # 3). Delete hot tmp file ${VRNC_OUTPUT_TEMPLATE_FILE}
174         [ -e ${VRNC_OUTPUT_TEMPLATE_FILE} -a ${PARSER_CI_DEBUG} != "true" ] && {
175             echo "delete hot temp file ${VRNC_OUTPUT_TEMPLATE_FILE} after test."
176             rm -fr ${VRNC_OUTPUT_TEMPLATE_FILE}
177         }
178
179         # 4). Delete tmp image ${PARSER_IMAGE_FILE}
180         [[ -e ${PARSER_IMAGE_FILE} ]] && {
181             echo "delete local image file ${PARSER_IMAGE_FILE} after test."
182             rm -fr ${PARSER_IMAGE_FILE}
183         }
184
185         # 5). Delete tmp image ${PARSER_IMAGE_URL_FILE}
186         [ -e ${PARSER_IMAGE_URL_FILE} -a ${PARSER_CI_DEBUG} != "true" ] && {
187             echo "delete local URL image file ${PARSER_IMAGE_URL_FILE} after test."
188             rm -fr ${PARSER_IMAGE_URL_FILE}
189         }
190
191         # 6). Delete image from openstack
192         parser_image_id=$(openstack image list | grep -w "${PARSER_IMAGE_NAME}" | awk '{print $2}')
193         [[ -n "${parser_image_id}" ]] && openstack image delete "${parser_image_id}"
194
195         sleep 3
196     )
197
198     # 2. Delete role, user and project
199     openstack user role list "${PARSER_USER}" --project "${PARSER_PROJECT}" \
200     | grep -qow " ${PARSER_ROLE}" && {
201         openstack role remove "${PARSER_ROLE}" --user "${PARSER_USER}" \
202                               --project "${PARSER_PROJECT}"
203     }
204
205     openstack project list | grep -qwo "${PARSER_PROJECT}" && {
206         openstack project delete "${PARSER_PROJECT}"
207     }
208
209     openstack user list | grep -qow "${PARSER_USER}" && {
210         openstack user delete "${PARSER_USER}"
211     }
212
213 }
214
215
216 echo "======================= Parser functest begin =========================="
217
218 trap reset_parser_test EXIT
219
220 # start syslog for loghander
221 service rsyslog restart
222
223 echo " ========= 1/4. Preparing VM image for parser...     ========= "
224 download_parser_image
225 register_parser_image
226
227 echo " ========= 2/4. Creating test user for parser...     ========= "
228 create_parser_user_and_project
229
230 echo " ========= 3/4. Parse -> translate -> deploy vRNC... ========= "
231 translator_and_deploy_vRNC
232
233 echo " ========= 4/4. Test ok...                           ========= "
234
235 echo "======================= Parser functest end =========================="