blob: b291fccd96aa6ca7a065b1856c1d5143b0675747 [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.
caoyuan349ba752019-04-23 19:40:06 +080049# barbican-tempest-plugin: https://review.opendev.org/#/c/634631/
Masayuki Igawa7f5dd852019-05-16 18:48:59 +090050# cyborg-tempest-plugin: https://review.opendev.org/659687
caoyuan349ba752019-04-23 19:40:06 +080051# intel-nfv-ci-tests: https://review.opendev.org/#/c/634640/
52# networking-ansible: https://review.opendev.org/#/c/634647/
53# networking-generic-switch: https://review.opendev.org/#/c/634846/
54# networking-l2gw-tempest-plugin: https://review.opendev.org/#/c/635093/
55# networking-midonet: https://review.opendev.org/#/c/635096/
56# networking-plumgrid: https://review.opendev.org/#/c/635096/
57# networking-spp: https://review.opendev.org/#/c/635098/
58# neutron-dynamic-routing: https://review.opendev.org/#/c/637718/
59# neutron-vpnaas: https://review.opendev.org/#/c/637719/
60# nova-lxd: https://review.opendev.org/#/c/638334/
61# valet: https://review.opendev.org/#/c/638339/
Masayuki Igawa32a4b112019-05-24 17:45:35 +020062
Chandan Kumar97b1ad72017-11-30 18:53:53 +053063BLACKLIST="
Chandan Kumar97b1ad72017-11-30 18:53:53 +053064barbican-tempest-plugin
Masayuki Igawa7f5dd852019-05-16 18:48:59 +090065cyborg-tempest-plugin
Chandan Kumar97b1ad72017-11-30 18:53:53 +053066intel-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
Chandan Kumar97b1ad72017-11-30 18:53:53 +053077"
Chandan Kumarb7affe42017-06-29 13:57:01 +053078
79# Function to clone project using zuul-cloner or from git
80function clone_project() {
81 if [ -e /usr/zuul-env/bin/zuul-cloner ]; then
82 /usr/zuul-env/bin/zuul-cloner --cache-dir /opt/git \
caoyuan349ba752019-04-23 19:40:06 +080083 https://opendev.org \
Chandan Kumarb7affe42017-06-29 13:57:01 +053084 openstack/"$1"
85
86 elif [ -e /usr/bin/git ]; then
caoyuan349ba752019-04-23 19:40:06 +080087 /usr/bin/git clone https://opendev.org/openstack/"$1" \
Chandan Kumarb7affe42017-06-29 13:57:01 +053088 openstack/"$1"
89
90 fi
91}
92
Chandan Kumar97b1ad72017-11-30 18:53:53 +053093# function to create virtualenv to perform sanity operation
94function prepare_workspace() {
95 SANITY_DIR=$(pwd)
Masayuki Igawa8460cb12019-05-16 12:03:23 +090096 virtualenv -p python3 --clear "$SANITY_DIR"/.venv
Chandan Kumar97b1ad72017-11-30 18:53:53 +053097 export TVENV="$SANITY_DIR/tools/with_venv.sh"
98 cd "$SANITY_DIR"
Chandan Kumarb7affe42017-06-29 13:57:01 +053099
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530100 # Install tempest with test dependencies in a venv
101 "$TVENV" pip install -e . -r test-requirements.txt
102}
Chandan Kumarb7affe42017-06-29 13:57:01 +0530103
104# Function to install project
105function install_project() {
106 "$TVENV" pip install "$SANITY_DIR"/openstack/"$1"
107 # Check for test-requirements.txt file in a project then install it.
108 if [ -e "$SANITY_DIR"/openstack/"$1"/test-requirements.txt ]; then
109 "$TVENV" pip install -r "$SANITY_DIR"/openstack/"$1"/test-requirements.txt
110 fi
111}
112
113# Function to perform sanity checking on Tempest plugin
114function tempest_sanity() {
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530115 "$TVENV" tempest init "$SANITY_DIR"/tempest_sanity && \
116 cd "$SANITY_DIR"/tempest_sanity && \
117 "$TVENV" tempest list-plugins && \
Chandan Kumarb7affe42017-06-29 13:57:01 +0530118 "$TVENV" tempest run -l
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530119 retval=$?
Chandan Kumarb7affe42017-06-29 13:57:01 +0530120 # Delete tempest workspace
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530121 # NOTE: Cleaning should be done even if an error occurs.
Chandan Kumarb7affe42017-06-29 13:57:01 +0530122 "$TVENV" tempest workspace remove --name tempest_sanity --rmdir
123 cd "$SANITY_DIR"
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530124 # Remove the sanity workspace in case of remaining
125 rm -fr "$SANITY_DIR"/tempest_sanity
Chandan Kumarb7affe42017-06-29 13:57:01 +0530126 # Remove the project directory after sanity run
127 rm -fr "$SANITY_DIR"/openstack/"$1"
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530128
129 return $retval
Chandan Kumarb7affe42017-06-29 13:57:01 +0530130}
131
132# Function to run sanity check on each project
133function plugin_sanity_check() {
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530134 prepare_workspace && \
135 clone_project "$1" && \
136 install_project "$1" && \
137 tempest_sanity "$1"
138
139 return $?
Chandan Kumarb7affe42017-06-29 13:57:01 +0530140}
141
142# Log status
143passed_plugin=''
144failed_plugin=''
145# Perform sanity on all tempest plugin projects
146for project in $PROJECT_LIST; do
147 # Remove blacklisted tempest plugins
148 if ! [[ `echo $BLACKLIST | grep -c $project ` -gt 0 ]]; then
149 plugin_sanity_check $project && passed_plugin+=", $project" || \
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530150 failed_plugin+="$project, " > $SANITY_DIR/$project.txt
Chandan Kumarb7affe42017-06-29 13:57:01 +0530151 fi
152done
Chandan Kumarcf576b22017-10-23 17:43:36 +0530153
154# Check for failed status
155if [[ -n $failed_plugin ]]; then
Chandan Kumar97b1ad72017-11-30 18:53:53 +0530156 echo "Failed Plugins: $failed_plugin"
Chandan Kumarcf576b22017-10-23 17:43:36 +0530157 exit 1
158fi