1
1
#! /bin/bash -eu
2
2
3
3
SCRIPTDIR=" $( readlink -f " $( dirname " $0 " ) " ) "
4
- TOPDIR=" $( readlink -f " ${SCRIPTDIR} /.." ) "
4
+ TOPDIR=" $( readlink -f " ${SCRIPTDIR} /../.." ) "
5
+ UTILSDIR=" ${SCRIPTDIR} "
5
6
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
+ }
12
36
13
37
usage () {
14
38
local prog=" ${0##*/ } "
15
39
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 .
18
42
19
43
EOF
20
44
}
@@ -31,13 +55,11 @@ optional arguments:
31
55
-a ANSIBLE Ansible version to use, e.g. "ansible-core==2.16.0"
32
56
(default: latest ansible-core for the python version)
33
57
-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.
37
60
-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)
41
63
-s TEST_SUITE run all playbooks for test suite, which is a directory
42
64
under ${WHITE} tests${RST}
43
65
-S SEED.GROUP Replicate Azure's test group and seed (seed is YYYYMMDD)
47
69
) "
48
70
}
49
71
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=" $( mktemp -d) "
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
+
50
99
51
100
# Defaults
52
101
verbose=" "
53
- engine=" ${engine:- " podman" } "
54
102
CONTINUE_ON_ERROR=" "
55
- STOP_CONTAINER=" Y"
56
103
STOP_VIRTUALENV=" N"
104
+ FORCE_ENV=" N"
57
105
declare -a ENABLED_MODULES
58
106
declare -a ENABLED_TESTS
59
107
read -r -a ENABLED_MODULES <<< " ${IPA_ENABLED_MODULES:-" " }"
60
108
read -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"
64
110
IPA_HOSTNAME=" ipaserver.test.local"
65
111
SEED=" $( date " +%Y%m%d" ) "
66
112
GROUP=1
67
113
SPLITS=0
68
- ANSIBLE_COLLECTIONS=${ANSIBLE_COLLECTIONS:- " ${engine_collection} " }
114
+ ANSIBLE_COLLECTIONS=${ANSIBLE_COLLECTIONS:- " containers.podman " }
69
115
SKIP_ANSIBLE=" "
70
- ansible_interpreter=" /usr/bin/python3"
71
116
EXTRA_OPTIONS=" "
117
+ unset LOCAL_IMAGES
72
118
unset ANSIBLE_VERSION
73
119
74
120
# Process command options
75
121
76
- while getopts " :ha:Ac:ei:Klm:p:s :S:vx" option
122
+ while getopts " :ha:Aei:lLs :S:vx" option
77
123
do
78
124
case " $option " in
79
125
h) help && exit 0 ;;
85
131
[ " ${SKIP_ANSIBLE:- " no" } " == " YES" ] && die " Can't use -A with '-a'"
86
132
ANSIBLE_VERSION=" ${OPTARG} "
87
133
;;
88
- c) scenario=" ${OPTARG} " ;;
89
134
e) FORCE_ENV=" Y" ;;
90
135
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" ;;
95
138
s)
96
139
[ ${SPLITS} -ne 0 ] && die -u " Can't use '-S' with '-s'"
97
140
if [ -d " ${TOPDIR} /tests/${OPTARG} " ]
@@ -131,16 +174,18 @@ done
131
174
132
175
[ ${SPLITS} -eq 0 ] && [ ${# ENABLED_MODULES[@]} -eq 0 ] && [ ${# ENABLED_TESTS[@]} -eq 0 ] && die -u " No test defined."
133
176
134
- export STOP_CONTAINER FORCE_ENV STOP_VIRTUALENV ansible_interpreter
177
+ export IPA_SERVER_HOST=" ansible-freeipa-tests"
178
+ export STOP_VIRTUALENV
135
179
136
- # Ensure $python is set
137
- [ -z " ${python} " ] && python=" python3"
180
+ python=" $( get_python_executable) "
138
181
139
- log info " Controller Python executable: ${python} "
182
+ log info " Python executable: ${python} "
140
183
${python} --version
141
184
142
185
# 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[@]} "
144
189
log info " Installing dependencies from 'requirements-tests.txt'"
145
190
pip install --upgrade -r " ${TOPDIR} /requirements-tests.txt"
146
191
@@ -151,17 +196,13 @@ export ANSIBLE_ROLES_PATH="${TOPDIR}/roles"
151
196
export ANSIBLE_LIBRARY=" ${TOPDIR} /plugins"
152
197
export ANSIBLE_MODULE_UTILS=" ${TOPDIR} /plugins/module_utils"
153
198
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} "
157
201
158
202
# run tests
159
203
RESULT=0
160
204
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
165
206
166
207
if [ ${SPLITS} -ne 0 ]
167
208
then
@@ -184,13 +225,17 @@ IPA_VERBOSITY="${verbose}"
184
225
[ -n " ${IPA_VERBOSITY} " ] && export IPA_VERBOSITY
185
226
186
227
# 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}
188
234
then
189
235
RESULT=2
190
- log error " Container not stopped for verification: ${scenario} "
191
- log info " Container: $( ${engine} ps -f " name=${scenario} " --format " {{.Names}} - {{.ID}}" ) "
192
236
fi
193
- [ -z " ${CONTINUE_ON_ERROR} " ] && [ $RESULT -ne 0 ] && die " Stopping on test failure."
194
237
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