J'essaie d'exécuter des tests robot/Selenium sans tête via Elastic Bamboo en utilisant Xvfb, sur Ubuntu 15.04 dans AWS EC2. Cela fonctionne si je lance Xvfb manuellement et que j'exécute ensuite le test...
export display=:99
Xvfb :99 -screen 0 1024x768x24 -nolisten tcp -ac &
pybot --nostatusrc --variablefile variables/vars.py -e TBD -e broken -x xunit -d reports/ tests/
<test output appears>
Mais je veux utiliser le script xvfb-run script fourni afin de pouvoir exécuter un certain nombre de tests en parallèle et de leur faire utiliser différents affichages. Cependant, lorsque je l'exécute via xvfb-run, il se bloque, ne produit aucun résultat et ne se termine jamais.
xvfb-run -a -e /dev/stdout --nostatusrc --variablefile variables/vars.py -e TBD -e broken -x xunit -d reports/ tests/
<hangs>
Dans le script de /usr/bin/xvfb-run, c'est le cœur de la fonctionnalité :
# Start Xvfb.
MCOOKIE=$(mcookie)
tries=10
while [ $tries -gt 0 ]; do
tries=$(( $tries - 1 ))
XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1
add :$SERVERNUM $XAUTHPROTO $MCOOKIE
EOF
# handle SIGUSR1 so Xvfb knows to send a signal when it's ready to accept
# connections
trap : USR1
(trap '' USR1; exec Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP -auth $AUTHFILE >>"$ERRORFILE" 2>&1) &
XVFBPID=$!
wait || :
if kill -0 $XVFBPID 2>/dev/null; then
break
elif [ -n "$AUTONUM" ]; then
# The display is in use so try another one (if '-a' was specified).
SERVERNUM=$((SERVERNUM + 1))
SERVERNUM=$(find_free_servernum)
continue
fi
error "Xvfb failed to start" >&2
XVFBPID=
exit 1
done
Rien n'apparaît dans stdout (ou dans un journal si je le configure dans un fichier). J'ai donc modifié xvfb-run pour mettre -x, et ce qui se passe, c'est que le script arrive à l'exec puis se bloque :
...
16-Nov-2015 14:36:52 + xauth source -
16-Nov-2015 14:36:52 + trap : USR1
16-Nov-2015 14:36:52 + XVFBPID=6123
16-Nov-2015 14:36:52 + wait
16-Nov-2015 14:36:52 + trap '' USR1
16-Nov-2015 14:36:52 + exec Xvfb :99 -screen 0 640x480x8 -nolisten tcp -auth /tmp/xvfb-run.js9dgH/Xauthority
<hangs here>
En y regardant de plus près, il arrive à "wait", et s'attend à ce que l'enfant renvoie un SIGUSR1 pour continuer, mais soit il n'est jamais envoyé par Xvfb, soit il n'est pas reçu correctement par le Shell.
Quelqu'un a-t-il une idée de ce que pourrait être le problème ?
Il fonctionne sur le bureau Ubuntu 15.10 dans VirtualBox, sur le serveur Ubuntu 15.10 dans VirtualBox, et sur l'AMI Canonical Ubuntu (ami-3ad5af50) dans EC2. Il doit donc s'agir de quelque chose de spécifique à l'AMI Ubuntu configurée par Atlassian, mais je n'arrive pas à savoir ce que... J'ai manuellement mis à jour une instance de leur AMI vers 15.10 mais cela n'a pas résolu le problème.