Revision control
Copy as Markdown
type: Group
instructions:
# Allows access from NFS export.
- type: ExecuteCommand
command: "chmod -R 777 {{.AgentWorkingDir}}"
maxTimeInSeconds: 60
maxTimeBetweenOutput: 60
userMessageOnFailure: "Failed to set dir permissions"
- type: EnvironmentVariable
variableName: VXWORKS_EMULATOR_TYPE
variableValue: "arm"
enable_if:
condition: property
property: target.arch
equals_value: ARMV7
- type: EnvironmentVariable
variableName: VXWORKS_EMULATOR_TYPE
variableValue: "intel"
enable_if:
condition: property
property: target.arch
equals_value: X86_64
- type: EnvironmentVariable
variableName: VXWORKS_QEMU_INSTANCES
variableValue: "2"
enable_if:
condition: property
property: target.arch
equals_value: ARMV7
- type: EnvironmentVariable
variableName: VXWORKS_QEMU_INSTANCES
variableValue: "3"
enable_if:
condition: property
property: target.arch
equals_value: X86_64
# Run ctest with one job per emulator instance so tests are distributed
# across the parallel emulators. --timeout is the last-resort safety net
- type: AppendToEnvironmentVariable
variableName: CTEST_ARGS
variableValue: " -j {{.Env.VXWORKS_QEMU_INSTANCES}} --timeout 1200"
# br0 address the docker test servers publish on (compose file + guest hosts);
# not 172.31.1.1, whose docker port-NAT churn blackholes the guests' NFS.
- type: EnvironmentVariable
variableName: QT_QEMU_SERVICE_IP
variableValue: "172.31.1.2"
- type: WriteFile
filename: "{{.AgentWorkingDir}}/coin_vxworks_vars.sh"
fileMode: 493
fileContents: |
#!/bin/bash
# Configure a single VxWorks emulator instance over its serial FIFO.
# Usage: coin_vxworks_vars.sh [instance-id]
INSTANCE=${1:-0}
VXSH="/tmp/guest${INSTANCE}.in"
sleep 10
# Exported by the instructions; abort rather than guess an address.
SERVICE_IP="${QT_QEMU_SERVICE_IP:?QT_QEMU_SERVICE_IP is not set}"
declare -A hosts
hosts["qt-test-server"]="${SERVICE_IP}"
hosts["qt-test-server.qt-test-net"]="${SERVICE_IP}"
hosts["qt-test-server.test-net.qt.local"]="${SERVICE_IP}"
hosts["vsftpd.test-net.qt.local"]="${SERVICE_IP}"
hosts["apache2.test-net.qt.local"]="${SERVICE_IP}"
hosts["squid.test-net.qt.local"]="${SERVICE_IP}"
hosts["danted.test-net.qt.local"]="${SERVICE_IP}"
hosts["ftp-proxy.test-net.qt.local"]="${SERVICE_IP}"
hosts["echo.test-net.qt.local"]="${SERVICE_IP}"
hosts["cyrus.test-net.qt.local"]="${SERVICE_IP}"
hosts["iptables.test-net.qt.local"]="${SERVICE_IP}"
declare -A env_vars
env_vars["LD_LIBRARY_PATH"]="$VXWORKS_TEST_LIBS_PATH"
env_vars["ICU_DATA"]="$WIND_CC_SYSROOT/3pp/ICU/icu/source/data/in/icudt73l.dat"
env_vars["QT_QPA_FONTDIR"]="$WIND_CC_SYSROOT/fonts"
env_vars["VXWORKS_CERTS_DIR"]="$WIND_CC_SYSROOT/certs"
env_vars["QML_LOADERTHREAD_STACK_SIZE"]="131072"
env_vars["QTEST_FUNCTION_TIMEOUT"]="1000000"
env_vars["QT_PLUGIN_PATH"]="/home/qt/work/install/target/plugins"
env_vars["QT_QPA_PLATFORM_PLUGIN_PATH"]="/home/qt/work/install/target/plugins/platforms"
env_vars["TZ"]="UTC"
for i in "${!hosts[@]}"
do
echo "hostAdd \"$i\", \"${hosts[$i]}\"" > "$VXSH"
sleep 1
done
for i in "${!env_vars[@]}"
do
echo "cmd setenv \"$i\" \"${env_vars[$i]}\"" > "$VXSH"
sleep 1
done
echo "cmd sysvar set -o ipdnsc.primaryns \"10.150.153.13\"" > "$VXSH"
sleep 1
date=($(date "+%Y-%m-%d %H:%M:%S"))
echo "cmd date ${date[0]}" > "$VXSH"
sleep 1
echo "cmd time ${date[1]}" > "$VXSH"
- type: WriteFile
filename: "{{.AgentWorkingDir}}/coin_vxworks_boot.sh"
fileMode: 493
fileContents: |
#!/bin/bash
# Boot VXWORKS_QEMU_INSTANCES emulator instances and configure each of them.
set -u
N=${VXWORKS_QEMU_INSTANCES:-1}
AGENT_WORK="{{.AgentWorkingDir}}"
for i in $(seq 0 $((N - 1))); do
mkdir -p "${AGENT_WORK}/vxworkshome${i}"
sudo chown 2001:100 "${AGENT_WORK}/vxworkshome${i}"
# Per-instance serial FIFO pair.
rm -f "/tmp/guest${i}.in" "/tmp/guest${i}.out"
mkfifo "/tmp/guest${i}.in" "/tmp/guest${i}.out"
"${HOME}/vxworks_qemu_launcher.sh" "${VXWORKS_EMULATOR_TYPE}" "${i}"
done
# Make sure the service address the docker fixture publishes on exists
# on the bridge (the launcher only configures 172.31.1.1).
SERVICE_IP="${QT_QEMU_SERVICE_IP:?QT_QEMU_SERVICE_IP is not set}"
if ! ip addr show br0 | grep -qF " ${SERVICE_IP}/"; then
sudo ip addr add "${SERVICE_IP}/24" dev br0
fi
# Configure every booted instance.
for i in $(seq 0 $((N - 1))); do
"${AGENT_WORK}/coin_vxworks_vars.sh" "${i}"
done
- type: ExecuteCommand
command: "{{.AgentWorkingDir}}/coin_vxworks_boot.sh"
maxTimeInSeconds: 600
maxTimeBetweenOutput: 600
userMessageOnFailure: "Failed to start and configure the VxWorks emulators"
enable_if:
condition: property
property: target.osVersion
equals_value: VxWorks