Chapitre 26. Tests de régression

Table des matières
26.1. Lancer les tests
26.2. Évaluation des tests
26.2.1. Différences dans les messages d'erreurs
26.2.2. Différences au niveau des locales
26.2.3. Différences au niveau des dates/heures
26.2.4. Différences sur les nombres à virgules flottantes
26.2.5. Différences dans le tri des lignes
26.2.6. Test << random >>
26.3. Fichiers de comparaison spécifiques à la plateforme

Les tests de régression composent un ensemble exhaustif de tests pour l'implémentation SQL dans PostgreSQL. Ils testent les opérations SQL standards ainsi que les fonctionnalités étendues de PostgreSQL.

26.1. Lancer les tests

Les tests de régression peuvent être lancés sur un serveur déjà installé et fonctionnel ou en utilisant une installation temporaire à l'intérieur du répertoire de construction. De plus, ils peuvent être lancés en mode << parallèle >> ou en mode << séquentiel >>. Le mode séquentiel lance les scripts de test en série, tandis que le mode parallèle lance plusieurs processus serveurs pour parallèliser l'exécution des groupes de tests. Les tests parallèles permettent de s'assurer du bon fonctionnement des communications interprocessus et du verrouillage. Pour des raisons historiques, les tests séquentiels sont habituellement lancés sur une installation existante et la méthode parallèle préférentiellement sur une installation temporaire, mais il n'y a aucune raison technique à cela.

Pour lancer les tests de régression après la construction mais avant l'installation, il suffit de saisir

gmake check

dans le répertoire de premier niveau (on peut aussi se placer dans le répertoire src/test/regress et y lancer la commande). En premier lieu seront construits différents fichiers auxiliaires, tels des exemples de fonctions de déclencheurs utilisateur, puis le script de pilotage des tests sera exécuté. Au final, la sortie devrait ressembler à quelque chose comme

======================
 All 96 tests passed.
======================

ou une note indiquant l'échec des tests. Voir la Section 26.2 avant de supposer qu'un << échec >> représente un problème sérieux.

Comme cette méthode de tests fonctionne sur un serveur temporaire, elle ne fonctionnera pas en tant qu'utilisateur root (car le serveur refusera de se lancer en tant qu'utilisateur root) Si vous avez lancé la construction en tant que root, vous n'avez pas besoin de tout recommencer. À la place, rendez le répertoire des tests de régression modifiable par un autre utilisateur, devenez cet utilisateur et relancez les tests. Par exemple

root# chmod -R a+w src/test/regress
root# chmod -R a+w contrib/spi
root# su - joeuser
joeuser$ cd répertoire
construction haut niveau
joeuser$ gmake check

(le seul << risque en terme de sécurité >> est que les autres utilisateurs pourraient modifier les résultats des tests de régression dans votre dos. Utilisez le bon sens pour gérer les droits des utilisateurs.)

Autrement, lancez les tests après l'installation.

Si vous avez configuré PostgreSQL pour qu'il s'installe dans un emplacement où existe déjà une ancienne installation de PostgreSQL et que vous lancez gmake check avant d'installer la nouvelle version, vous pourriez trouver que les tests échouent parce que les nouveaux programmes essaient d'utiliser les bibliothèques partagées déjà installées (les symptômes typiques sont des plaintes concernant des symboles non définis). Si vous souhaitez lancer les tests avant d'écraser l'ancienne installation, vous devrez construire avec configure --disable-rpath. Néanmoins, il n'est pas recommandé d'utiliser cette option pour l'installation finale.

Les tests de régression en parallèle lancent quelques processus avec votre utilisateur. Actuellement, le nombre maximum est de vingt scripts de tests en parallèle, ce qui signifie 60 processus : il existe un processus serveur, un psql et habituellement un processus parent pour le psql de chaque script de tests. Si votre système force une limite par utilisateur sur le nombre de processus, assurez-vous que cette limite est d'au moins 65, sinon vous pourriez obtenir des échecs hasardeux dans les tests en parallèle. Si vous ne pouvez pas augmenter cette limite, vous pouvez diminuer le degré de parallélisme en initialisant le paramètre MAX_CONNECTIONS. Par exemple,

gmake MAX_CONNECTIONS=10 check

ne lance pas plus de dix tests en même temps.

Sur certains systèmes, le shell par défaut compatible Bourne (/bin/sh) a du mal à gérer autant de processus fils en parallèle. Cela pourrait causer des blocages ou des échecs dans les tests en parallèle. Dans de tels cas, spécifiez un shell compatible Bourne différent sur la liste de commande, par exemple :

gmake SHELL=/bin/ksh check

Si aucun shell ne le permet, vous pouvez contourner le problème en diminuant le nombre de connexions comme indiqué ci-dessus.

Pour lancer les tests après l'installation (voir le Chapitre 14), initialisez un espace de données et lancez le serveur comme expliqué dans le Chapitre 16, puis lancez

gmake installcheck

ou pour un test parallèle

gmake installcheck-parallel

Les tests s'attendront à contacter le serveur sur l'hôte local et avec le numéro de port par défaut, sauf en cas d'indication contraire avec les variables d'environnement PGHOST et PGPORT.