11#! /bin/bash -eu
22
33SCRIPTDIR=" $( readlink -f " $( dirname " $0 " ) " ) "
4- TOPDIR=" $( readlink -f " ${SCRIPTDIR} /.." ) "
4+ TOPDIR=" $( readlink -f " ${SCRIPTDIR} /../.." ) "
5+ UTILSDIR=" ${SCRIPTDIR} "
56
6- # shellcheck source=utils/shfun
7- . " ${SCRIPTDIR} /shfun"
8- # shellcheck source=utils/shcontainer
9- . " ${SCRIPTDIR} /shcontainer"
10- # shellcheck source=utils/shansible
11- . " ${SCRIPTDIR} /shansible"
7+ # shellcheck source=infra/image/shfun
8+ . " ${UTILSDIR} /shfun"
9+ # shellcheck source=infra/image/shcontainer
10+ . " ${UTILSDIR} /shcontainer"
11+
12+ set -o errexit -o errtrace
13+
14+ trap interrupt_exception SIGINT
15+
16+ interrupt_exception () {
17+ trap - ERR SIGINT
18+ log warn " User interrupted test execution."
19+ # shellcheck disable=SC2119
20+ cleanup
21+ exit 1
22+ }
23+
24+ trap cleanup ERR EXIT SIGABRT SIGTERM SIGQUIT
25+
26+ # shellcheck disable=SC2120
27+ cleanup () {
28+ trap - ERR EXIT SIGABRT SIGTERM SIGQUIT
29+ log info " Cleaning up environment"
30+ if [ " ${STOP_VIRTUALENV:- " N" } " == " Y" ]
31+ then
32+ echo " Deactivating virtual environment"
33+ run_if_exists deactivate
34+ fi
35+ }
1236
1337usage () {
1438 local prog=" ${0##*/ } "
1539 cat << EOF
16- usage: ${prog} [-h] [-l ] [-e] [-K] [- A|-a ANSIBLE] [-p INTERPRETER] [-c CONTAINER] [- s TESTS_SUITE] [-x] [-S SEED.GRP] [-i IMAGE ] [-m MEMORY ] [-v...] [TEST...]
17- ${prog} runs playbook(s) TEST using an ansible-freeipa testing image .
40+ usage: ${prog} [-h] [-L ] [-e] [-A|-a ANSIBLE] [-s TESTS_SUITE] [-x] [-S SEED.GRP] [-l ] [-i IMAGE ] [-v...] [TEST...]
41+ ${prog} runs test playbooks using an ansible-freeipa testing images .
1842
1943EOF
2044}
@@ -31,13 +55,11 @@ optional arguments:
3155 -a ANSIBLE Ansible version to use, e.g. "ansible-core==2.16.0"
3256 (default: latest ansible-core for the python version)
3357 -A Do not install Ansible, use host's provided one.
34- -c CONTAINER use container CONTAINER to run tests
35- -K keep container, even if tests succeed
36- -l list available images
58+ -L list available images
59+ -l Try to use local image first, if not found download.
3760 -e force recreation of the virtual environment
38- -i IMAGE select image to run the tests (default: fedora-latest)
39- -m MEMORY container memory, in GiB (default: 3)
40- -p INTERPRETER Python interpreter to use on target container
61+ -i IMAGE select image to run the tests
62+ (default: fedora-latest-server)
4163 -s TEST_SUITE run all playbooks for test suite, which is a directory
4264 under ${WHITE} tests${RST}
4365 -S SEED.GROUP Replicate Azure's test group and seed (seed is YYYYMMDD)
4769) "
4870}
4971
72+ install_ansible () {
73+ ANSIBLE_VERSION=" ${1:- ${ANSIBLE_VERSION:- " ansible-core" } } "
74+ [ $# -gt 0 ] && shift
75+ log info " Installing Ansible: ${ANSIBLE_VERSION} "
76+ pip install --quiet " ${ANSIBLE_VERSION} "
77+ log debug " Ansible version: $( ansible --version | sed -n " 1p" ) ${RST} "
78+
79+ if [ -n " ${ANSIBLE_COLLECTIONS} " ]
80+ then
81+ collections_path=" /tmp/ansible-freeipa-tests-collections"
82+ for collection in ${ANSIBLE_COLLECTIONS}
83+ do
84+ if ! quiet ansible-galaxy collection verify --offline " ${collection} "
85+ then
86+ log info " Installing: Ansible Collection ${collection} "
87+ # shellcheck disable=SC2086
88+ quiet ansible-galaxy collection install \
89+ -p " ${collections_path} " \
90+ " ${collection} " || die " Failed to install Ansible collection: ${collection} "
91+ fi
92+ done
93+ default_collections_path=" $( ansible-config init | grep " collections_path=" | cut -d= -f2-) "
94+ export ANSIBLE_COLLECTIONS_PATH=" ${collections_path} :${ANSIBLE_COLLECTIONS_PATH:- ${default_collections_path} } "
95+ fi
96+ export ANSIBLE_VERSION
97+ }
98+
5099
51100# Defaults
52101verbose=" "
53- engine=" ${engine:- " podman" } "
54102CONTINUE_ON_ERROR=" "
55- STOP_CONTAINER=" Y"
56103STOP_VIRTUALENV=" N"
104+ FORCE_ENV=" N"
57105declare -a ENABLED_MODULES
58106declare -a ENABLED_TESTS
59107read -r -a ENABLED_MODULES <<< " ${IPA_ENABLED_MODULES:-" " }"
60108read -r -a ENABLED_TESTS <<< " ${IPA_ENABLED_MODULES:-" " }"
61- IMAGE_TAG=" fedora-latest"
62- scenario=" freeipa-tests"
63- MEMORY=3
109+ IMAGE_TAG=" fedora-latest-server"
64110IPA_HOSTNAME=" ipaserver.test.local"
65111SEED=" $( date " +%Y%m%d" ) "
66112GROUP=1
67113SPLITS=0
68- ANSIBLE_COLLECTIONS=${ANSIBLE_COLLECTIONS:- " ${engine_collection} " }
114+ ANSIBLE_COLLECTIONS=${ANSIBLE_COLLECTIONS:- " containers.podman " }
69115SKIP_ANSIBLE=" "
70- ansible_interpreter=" /usr/bin/python3"
71116EXTRA_OPTIONS=" "
117+ unset LOCAL_IMAGES
72118unset ANSIBLE_VERSION
73119
74120# Process command options
75121
76- while getopts " :ha:Ac:ei:Klm:p:s :S:vx" option
122+ while getopts " :ha:Aei:lLs :S:vx" option
77123do
78124 case " $option " in
79125 h) help && exit 0 ;;
80126 A)
81127 [ -n " ${ANSIBLE_VERSION:- " " } " ] && die " Can't use -A with '-a'"
82128 SKIP_ANSIBLE=" YES"
83129 ;;
84- a)
130+ a)
85131 [ " ${SKIP_ANSIBLE:- " no" } " == " YES" ] && die " Can't use -A with '-a'"
86132 ANSIBLE_VERSION=" ${OPTARG} "
87133 ;;
88- c) scenario=" ${OPTARG} " ;;
89134 e) FORCE_ENV=" Y" ;;
90135 i) IMAGE_TAG=" ${OPTARG} " ;;
91- K) STOP_CONTAINER=" N" ;;
92- l) " ${SCRIPTDIR} " /setup_test_container.sh -l && exit 0 || exit 1 ;;
93- m) MEMORY=" ${OPTARG} " ;;
94- p) ansible_interpreter=" ${OPTARG} " ;;
136+ L) list_images && exit 0 || exit 1 ;;
137+ l) LOCAL_IMAGES=" -l" ;;
95138 s)
96139 [ ${SPLITS} -ne 0 ] && die -u " Can't use '-S' with '-s'"
97140 if [ -d " ${TOPDIR} /tests/${OPTARG} " ]
@@ -131,16 +174,18 @@ done
131174
132175[ ${SPLITS} -eq 0 ] && [ ${# ENABLED_MODULES[@]} -eq 0 ] && [ ${# ENABLED_TESTS[@]} -eq 0 ] && die -u " No test defined."
133176
134- export STOP_CONTAINER FORCE_ENV STOP_VIRTUALENV ansible_interpreter
177+ export IPA_SERVER_HOST=" ansible-freeipa-tests"
178+ export STOP_VIRTUALENV
135179
136- # Ensure $python is set
137- [ -z " ${python} " ] && python=" python3"
180+ python=" $( get_python_executable) "
138181
139- log info " Controller Python executable: ${python} "
182+ log info " Python executable: ${python} "
140183${python} --version
141184
142185# Prepare virtual environment
143- start_virtual_environment
186+ declare -a venv_opts=()
187+ [ " ${FORCE_ENV} " == " Y" ] && venv_opts+=(" -f" )
188+ start_virtual_environment " ${venv_opts[@]} "
144189log info " Installing dependencies from 'requirements-tests.txt'"
145190pip install --upgrade -r " ${TOPDIR} /requirements-tests.txt"
146191
@@ -151,17 +196,13 @@ export ANSIBLE_ROLES_PATH="${TOPDIR}/roles"
151196export ANSIBLE_LIBRARY=" ${TOPDIR} /plugins"
152197export ANSIBLE_MODULE_UTILS=" ${TOPDIR} /plugins/module_utils"
153198
154- # Start container
155- " ${SCRIPTDIR} /setup_test_container.sh" -e " ${engine} " -m " ${MEMORY} " -p " ${ansible_interpreter} " -i " ${IMAGE_TAG} " -n " ${IPA_HOSTNAME} " -a " ${scenario} " || die " Failed to setup test container"
156-
199+ # Start test container
200+ " ${TOPDIR} /infra/image/start.sh" ${LOCAL_IMAGES:- } " ${IMAGE_TAG} " -n " ${IPA_HOSTNAME} "
157201
158202# run tests
159203RESULT=0
160204
161- export RUN_TESTS_IN_DOCKER=${engine}
162- export IPA_SERVER_HOST=" ${scenario} "
163- # Ensure proper ansible_python_interpreter is used by pytest.
164- export IPA_PYTHON_PATH=" ${ansible_interpreter} "
205+ export RUN_TESTS_IN_DOCKER=podman
165206
166207if [ ${SPLITS} -ne 0 ]
167208then
@@ -184,13 +225,17 @@ IPA_VERBOSITY="${verbose}"
184225[ -n " ${IPA_VERBOSITY} " ] && export IPA_VERBOSITY
185226
186227# shellcheck disable=SC2086
187- if ! pytest -m " playbook" --verbose --color=yes --suppress-no-test-exit-code --junit-xml=TEST-results-group-${GROUP:- 1} .xml ${EXTRA_OPTIONS}
228+ if ! pytest -m " playbook" \
229+ --verbose \
230+ --color=yes \
231+ --suppress-no-test-exit-code \
232+ --junit-xml=TEST-results-group-${GROUP:- 1} .xml \
233+ ${EXTRA_OPTIONS}
188234then
189235 RESULT=2
190- log error " Container not stopped for verification: ${scenario} "
191- log info " Container: $( ${engine} ps -f " name=${scenario} " --format " {{.Names}} - {{.ID}}" ) "
192236fi
193- [ -z " ${CONTINUE_ON_ERROR} " ] && [ $RESULT -ne 0 ] && die " Stopping on test failure."
194237
195- # cleanup environment
196- cleanup " ${scenario} " " ${engine} "
238+ if [ -z " ${CONTINUE_ON_ERROR} " ] && [ $RESULT -ne 0 ]
239+ then
240+ die " Stopping on test failure."
241+ fi
0 commit comments