/
post_test_hook.sh
executable file
·175 lines (139 loc) · 5.24 KB
/
post_test_hook.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#!/bin/bash -x
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# This script is executed inside post_test_hook function in devstack gate.
# Sleep some time until all services are starting
sleep 5
# Check if a function already exists
function function_exists {
declare -f -F $1 > /dev/null
}
# Set up all necessary test data
function create_test_data {
# First we test Magnum's command line to see if we can stand up
# a cluster_template, cluster and a pod
local image_name="fedora-coreos"
local container_format="bare"
# if we have the MAGNUM_IMAGE_NAME setting, use it instead
# of the default one. In combination with MAGNUM_GUEST_IMAGE_URL
# setting, it allows to perform testing on custom images.
image_name=${MAGNUM_IMAGE_NAME:-$image_name}
export NIC_ID=$(openstack network show public -f value -c id)
# We need to filter by container_format to get the appropriate
# image. Specifically, when we provide kernel and ramdisk images
# we need to select the 'ami' image. Otherwise, when we have
# qcow2 images, the format is 'bare'.
export IMAGE_ID=$(openstack image list --property container_format=$container_format | grep -i $image_name | awk '{print $2}')
#Get magnum_url
local magnum_api_ip=$(iniget /etc/magnum/magnum.conf api host)
local magnum_api_port=$(iniget /etc/magnum/magnum.conf api port)
local magnum_url="http://"$magnum_api_ip":"$magnum_api_port"/v1"
local keystone_auth_url=$(iniget /etc/magnum/magnum.conf keystone_authtoken www_authenticate_uri)
# pass the appropriate variables via a config file
CREDS_FILE=$MAGNUM_DIR/functional_creds.conf
cat <<EOF > $CREDS_FILE
# Credentials for functional testing
[auth]
auth_url = $keystone_auth_url
magnum_url = $magnum_url
username = $OS_USERNAME
project_name = $OS_PROJECT_NAME
project_domain_id = $OS_PROJECT_DOMAIN_ID
user_domain_id = $OS_USER_DOMAIN_ID
password = $OS_PASSWORD
auth_version = v3
insecure = False
[admin]
user = $OS_USERNAME
project_name = $OS_PROJECT_NAME
project_domain_id = $OS_PROJECT_DOMAIN_ID
user_domain_id = $OS_USER_DOMAIN_ID
pass = $OS_PASSWORD
region_name = $OS_REGION_NAME
[magnum]
image_id = $IMAGE_ID
nic_id = $NIC_ID
keypair_id = default
flavor_id = ${bm_flavor_id:-s1.magnum}
master_flavor_id = ${bm_flavor_id:-m1.magnum}
copy_logs = true
dns_nameserver = 8.8.8.8
EOF
# Note(eliqiao): Let's keep this only for debugging on gate.
echo_summary $CREDS_FILE
cat $CREDS_FILE
# Create a keypair for use in the functional tests.
echo_summary "Generate a key-pair"
# ~/.ssh/id_rsa already exists in multinode setup, so generate
# key with different name
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa_magnum
openstack keypair create --public-key ~/.ssh/id_rsa_magnum.pub default
}
function add_flavor {
# because of policy.yaml change in nova, flavor-create is now an admin-only feature
# moving this out to only be used by admins
# Get admin credentials
pushd ../devstack
source openrc admin admin
popd
# Create magnum specific flavor for use in functional tests.
echo_summary "Create a flavor"
if [[ "$DEVSTACK_GATE_TOPOLOGY" = "multinode" ]] ; then
local flavor_ram="3750"
local flavor_disk="20"
local flavor_vcpus="2"
fi
openstack flavor create m1.magnum --id 100 --ram ${flavor_ram:-1024} --disk ${flavor_disk:-10} --vcpus ${flavor_vcpus:-4}
openstack flavor create s1.magnum --id 200 --ram ${flavor_ram:-1024} --disk ${flavor_disk:-10} --vcpus ${flavor_vcpus:-4}
}
if ! function_exists echo_summary; then
function echo_summary {
echo $@
}
fi
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set -o xtrace
echo_summary "magnum's post_test_hook.sh was called..."
(set -o posix; set)
# source it to make sure to get REQUIREMENTS_DIR
source $BASE/new/devstack/stackrc
constraints="-c $REQUIREMENTS_DIR/upper-constraints.txt"
sudo -H pip install $constraints -U -r requirements.txt -r test-requirements.txt
export MAGNUM_DIR="$BASE/new/magnum"
sudo chown -R $USER:stack $MAGNUM_DIR
# Run functional tests
# Currently we support functional-api, functional-k8s.
echo "Running magnum functional test suite for $1"
# For api, we will run tempest tests
coe=$1
special=$2
# Get admin credentials
pushd ../devstack
source openrc admin admin
popd
create_test_data $coe $special
_magnum_tests=""
target="${coe}${special}"
sudo -E -H -u $USER tox -e functional-"$target" $_magnum_tests -- --concurrency=1
EXIT_CODE=$?
# Delete the keypair used in the functional test.
echo_summary "Running keypair-delete"
openstack keypair delete default
# Save functional testing log
sudo cp $MAGNUM_DIR/functional-tests.log /opt/stack/logs/
# Save functional_creds.conf
sudo cp $CREDS_FILE /opt/stack/logs/
# Restore xtrace
$XTRACE
exit $EXIT_CODE