blob: 16e7b8cd79c4823c6275e7814bd8cff6b07d37c7 [file] [log] [blame]
Chandan Kumarb7affe42017-06-29 13:57:01 +05301#!/usr/bin/env bash
2
3# Copyright 2017 Red Hat, Inc.
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
18# This script is intended to check the sanity of tempest plugins against
19# tempest master.
20# What it does:
Momoka Toyotafe879ea2017-09-15 10:56:42 +090021# * Retrieve the project lists having tempest plugin if project name is
Chandan Kumarb7affe42017-06-29 13:57:01 +053022# given.
Chandan Kumar97b1ad72017-11-30 18:53:53 +053023# * For each project in a list, it does:
24# * Create virtualenv and install tempest in it
Chandan Kumarb7affe42017-06-29 13:57:01 +053025# * Clone the Project
26# * Install the Project and also installs dependencies from
27# test-requirements.txt.
28# * Create Tempest workspace
29# * List tempest plugins
30# * List tempest plugins tests
Chandan Kumar97b1ad72017-11-30 18:53:53 +053031# * Delete virtualenv and project repo
Chandan Kumarb7affe42017-06-29 13:57:01 +053032#
33# If one of the step fails, The script will exit with failure.
34
35if [ "$1" == "-h" ]; then
36 echo -e "This script performs the sanity of tempest plugins to find
37configuration and dependency issues with the tempest.\n
38Usage: sh ./tools/tempest-plugin-sanity.sh [Run sanity on tempest plugins]"
39 exit 0
40fi
41
42set -ex
43
44# retrieve a list of projects having tempest plugins
45PROJECT_LIST="$(python tools/generate-tempest-plugins-list.py)"
Chandan Kumar97b1ad72017-11-30 18:53:53 +053046# List of projects having tempest plugin stale or unmaintained for a long time
47# (6 months or more)
48# TODO(masayukig): Some of these can be removed from BLACKLIST in the future.
49# airship-tempest-plugin: https://review.openstack.org/#/c/634387/
50# barbican-tempest-plugin: https://review.openstack.org/#/c/634631/
51# intel-nfv-ci-tests: https://review.openstack.org/#/c/634640/
52# networking-ansible: https://review.openstack.org/#/c/634647/
53# networking-generic-switch: https://review.openstack.org/#/c/634846/
54# networking-l2gw-tempest-plugin: https://review.openstack.org/#/c/635093/
55# networking-midonet: https://review.openstack.org/#/c/635096/
56# networking-plumgrid: https://review.openstack.org/#/c/635096/
57# networking-spp: https://review.openstack.org/#/c/635098/
58# neutron-dynamic-routing: https://review.openstack.org/#/c/637718/
59# neutron-vpnaas: https://review.openstack.org/#/c/637719/
60# nova-lxd: https://review.openstack.org/#/c/638334/
61# valet: https://review.openstack.org/#/c/638339/
62# vitrage-tempest-plugin: https://review.openstack.org/#/c/639003/
63BLACKLIST="
64airship-tempest-plugin
65barbican-tempest-plugin
66intel-nfv-ci-tests
67networking-ansible
68networking-generic-switch
69networking-l2gw-tempest-plugin
70networking-midonet
71networking-plumgrid
72networking-spp
73neutron-dynamic-routing
74neutron-vpnaas
75nova-lxd
76valet
77vitrage-tempest-plugin
78"
Chandan Kumarb7affe42017-06-29 13:57:01 +053079
80# Function to clone project using zuul-cloner or from git
81function clone_project() {
82 if [ -e /usr/zuul-env/bin/zuul-cloner ]; then
83 /usr/zuul-env/bin/zuul-cloner --cache-dir /opt/git \
84 git://git.openstack.org \
85 openstack/"$1"
86
87 elif [ -e /usr/bin/git ]; then
88 /usr/bin/git clone git://git.openstack.org/openstack/"$1" \
89 openstack/"$1"
90
91 fi
92}
93
Chandan Kumar97b1ad72017-11-30 18:53:53 +053094# function to create virtualenv to perform sanity operation
95function prepare_workspace() {
96 SANITY_DIR=$(pwd)
97 virtualenv --clear "$SANITY_DIR"/.venv
98 export TVENV="$SANITY_DIR/tools/with_venv.sh"
99 cd "$SANITY_DIR"
Chandan Kumarb7affe42017-06-29 13:57:01 +0530100
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530101 # Install tempest with test dependencies in a venv
102 "$TVENV" pip install -e . -r test-requirements.txt
103}
Chandan Kumarb7affe42017-06-29 13:57:01 +0530104
105# Function to install project
106function install_project() {
107 "$TVENV" pip install "$SANITY_DIR"/openstack/"$1"
108 # Check for test-requirements.txt file in a project then install it.
109 if [ -e "$SANITY_DIR"/openstack/"$1"/test-requirements.txt ]; then
110 "$TVENV" pip install -r "$SANITY_DIR"/openstack/"$1"/test-requirements.txt
111 fi
112}
113
114# Function to perform sanity checking on Tempest plugin
115function tempest_sanity() {
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530116 "$TVENV" tempest init "$SANITY_DIR"/tempest_sanity && \
117 cd "$SANITY_DIR"/tempest_sanity && \
118 "$TVENV" tempest list-plugins && \
Chandan Kumarb7affe42017-06-29 13:57:01 +0530119 "$TVENV" tempest run -l
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530120 retval=$?
Chandan Kumarb7affe42017-06-29 13:57:01 +0530121 # Delete tempest workspace
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530122 # NOTE: Cleaning should be done even if an error occurs.
Chandan Kumarb7affe42017-06-29 13:57:01 +0530123 "$TVENV" tempest workspace remove --name tempest_sanity --rmdir
124 cd "$SANITY_DIR"
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530125 # Remove the sanity workspace in case of remaining
126 rm -fr "$SANITY_DIR"/tempest_sanity
Chandan Kumarb7affe42017-06-29 13:57:01 +0530127 # Remove the project directory after sanity run
128 rm -fr "$SANITY_DIR"/openstack/"$1"
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530129
130 return $retval
Chandan Kumarb7affe42017-06-29 13:57:01 +0530131}
132
133# Function to run sanity check on each project
134function plugin_sanity_check() {
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530135 prepare_workspace && \
136 clone_project "$1" && \
137 install_project "$1" && \
138 tempest_sanity "$1"
139
140 return $?
Chandan Kumarb7affe42017-06-29 13:57:01 +0530141}
142
143# Log status
144passed_plugin=''
145failed_plugin=''
146# Perform sanity on all tempest plugin projects
147for project in $PROJECT_LIST; do
148 # Remove blacklisted tempest plugins
149 if ! [[ `echo $BLACKLIST | grep -c $project ` -gt 0 ]]; then
150 plugin_sanity_check $project && passed_plugin+=", $project" || \
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530151 failed_plugin+="$project, " > $SANITY_DIR/$project.txt
Chandan Kumarb7affe42017-06-29 13:57:01 +0530152 fi
153done
Chandan Kumarcf576b22017-10-23 17:43:36 +0530154
155# Check for failed status
156if [[ -n $failed_plugin ]]; then
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530157 echo "Failed Plugins: $failed_plugin"
Chandan Kumarcf576b22017-10-23 17:43:36 +0530158 exit 1
159fi