@@ -1192,9 +1192,88 @@ action_run() {
1192
1192
record_junit " run" " scenario_run_tests" " OK"
1193
1193
}
1194
1194
1195
+ action_run_on_vm () {
1196
+ if [ $# -lt 2 ]; then
1197
+ echo " Usage: run_scenario_on_vm <vm_ip> <scenario_script> [args...]"
1198
+ record_junit " scenario-on-vm" " fail" " Missing VM IP or scenario script"
1199
+ return 1
1200
+ fi
1201
+
1202
+ local vm_ip=" $1 "
1203
+ SCENARIO_SCRIPT=" $( realpath " ${PWD} /../$2 " ) "
1204
+ shift 2
1205
+ SCENARIO=$( basename " ${SCENARIO_SCRIPT} " .sh)
1206
+
1207
+ # Source the scenario script to extract test suite
1208
+ if [ ! -f " ${SCENARIO_SCRIPT} " ]; then
1209
+ echo " [ERROR] Scenario script '${SCENARIO_SCRIPT} ' not found"
1210
+ return 1
1211
+ fi
1212
+
1213
+ # shellcheck source=/dev/null
1214
+ SUITE=$( grep -oE ' suites/[^ ]+(\.robot)?' " ${SCENARIO_SCRIPT} " | while read -r line; do
1215
+ realpath " ${SCRIPTDIR} /../${line} "
1216
+ done | xargs)
1217
+ echo " SUITE name is: ${SUITE} "
1218
+
1219
+ if [ -z " ${SUITE} " ]; then
1220
+ echo " [ERROR] SUITE variable not defined in ${SCENARIO_SCRIPT} "
1221
+ return 1
1222
+ fi
1223
+
1224
+
1225
+ echo " Running scenario ${SCENARIO_SCRIPT} on VM IP: ${vm_ip} "
1226
+
1227
+ if [ -z " ${RF_VENV:- } " ]; then
1228
+ echo " ERROR: RF_VENV is not set"
1229
+ exit 1
1230
+ fi
1231
+
1232
+ local rf_binary=" ${RF_VENV} /bin/robot"
1233
+ # Set variable file path
1234
+ local variable_file=" ${SCENARIO_INFO_DIR} /${SCENARIO} /variables.yaml"
1235
+ echo " Writing variables to ${variable_file} "
1236
+ mkdir -p " $( dirname " ${variable_file} " ) "
1237
+ cat - << EOF | tee "${variable_file} "
1238
+ VM_IP: ${vm_ip}
1239
+ API_PORT: "6443"
1240
+ LB_PORT: "5678"
1241
+ USHIFT_HOST: ${vm_ip}
1242
+ USHIFT_USER: redhat
1243
+ SSH_PRIV_KEY: "${SSH_PRIVATE_KEY:- <ssh_key_path>} "
1244
+ SSH_PORT: "22"
1245
+ EOF
1246
+
1247
+ local var_arg=${variable_file: +-V " ${variable_file} " }
1248
+ local timeout_robot=" timeout -v --kill-after=5m ${TEST_EXECUTION_TIMEOUT} ${rf_binary} "
1249
+ if [ -t 0 ]; then
1250
+ # Disable timeout for interactive mode when stdin is a terminal.# This is necessary for proper handling of test interruption by user.
1251
+ timeout_robot=" ${rf_binary} "
1252
+ fi
1253
+
1254
+ # Run tests directly
1255
+ read -r -a suite_paths <<< " ${SUITE}"
1256
+ echo " [INFO] Running Robot Framework test suite: ${SUITE} "
1257
+ echo " [DEBUG] rf_binary: ${rf_binary} "
1258
+ echo " [DEBUG] Extra args: $@ "
1259
+ if ! ${timeout_robot} \
1260
+ --name " ${SCENARIO} " \
1261
+ --randomize " ${TEST_RANDOMIZATION} " \
1262
+ --loglevel TRACE \
1263
+ --outputdir " ${SCENARIO_INFO_DIR} /${SCENARIO} " \
1264
+ --debugfile " ${SCENARIO_INFO_DIR} /${SCENARIO} /rf-debug.log" \
1265
+ -x junit.xml \
1266
+ ${var_arg} \
1267
+ " $@ " " ${suite_paths[*]} " ; then
1268
+ echo " Tests failed on VM ${vm_ip} "
1269
+ return 1
1270
+ fi
1271
+ }
1272
+
1273
+
1195
1274
usage () {
1196
1275
cat - << EOF
1197
- scenario.sh (create|boot|run|cleanup|rerun|recreate|login) scenario-script [args]
1276
+ scenario.sh (create|boot|run|cleanup|rerun|recreate|login|run_on_vm ) scenario-script [args]
1198
1277
1199
1278
create|boot -- Set up the infrastructure for the test, such as VMs.
1200
1279
@@ -1208,13 +1287,19 @@ scenario.sh (create|boot|run|cleanup|rerun|recreate|login) scenario-script [args
1208
1287
1209
1288
login -- Login to a host for a scenario.
1210
1289
1290
+ run_on_vm -- Run on a vm ip that is passed to scenario.sh script
1291
+
1211
1292
Settings
1212
1293
1213
1294
The script looks for ${TESTDIR} /scenario_settings.sh for some global settings.
1214
1295
1215
1296
Login
1216
1297
1217
1298
scenario.sh login <scenario-script> [<host>]
1299
+
1300
+ Run_on_vm
1301
+
1302
+ scenario.sh run_on_vm [<host>] <scenario-script>
1218
1303
EOF
1219
1304
}
1220
1305
@@ -1223,6 +1308,8 @@ if [ $# -lt 2 ]; then
1223
1308
exit 1
1224
1309
fi
1225
1310
1311
+ ALL_ARGS=(" $@ " )
1312
+
1226
1313
action=" $1 "
1227
1314
shift
1228
1315
SCENARIO_SCRIPT=" $( realpath " $1 " ) "
@@ -1253,6 +1340,10 @@ case "${action}" in
1253
1340
action_create " $@ "
1254
1341
action_run " $@ "
1255
1342
;;
1343
+ run-on-vm)
1344
+ action_run_on_vm " ${ALL_ARGS[@]: 1} "
1345
+ ;;
1346
+
1256
1347
* )
1257
1348
error " Unknown instruction ${action} "
1258
1349
usage
0 commit comments