Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problème à la création d'un environnement de test et développement #446

Closed
guillett opened this issue Jan 27, 2017 · 14 comments
Closed

Comments

@guillett
Copy link
Contributor

Bonjour,

Je suis en train d'essayer de créer un environnement de test et développement. Je partage ici des remarques et difficultés pour réfléchir à de potentielles simplifications et pour faciliter la mise en place d'un système de CI.

DevDependencies dans package.json

npm test échoue après npm install et il fait référence à des paquets manquants.

Le problème vient peut-être de dépendance de mes-aides-uiplutôt que de mes-aides-ui lui-même.

L'équivalent du script suivant a échoué (j'ai du lancer les commandes en commentaire pour ne plus avoir d'erreurs 'statiques'). Une fois les paquets installés, je n'ai pas l'erreur même à partir d'un dossier vide.

#!/bin/bash
set -e
set -v
mkdir tests
cd tests
git clone
cd mes-aides-ui
npm install
# npm install requirejs
# npm install karma-requirejs
# npm install jasmine-core
npm test

PhantomJS ne se lance pas

En lançant npm test, il arrive que PhantomJS timeout cf. log ci-dessous.

Note : En me connectant au serveur (http://localhost:8002/) à partir de Firefox j'arrive à débloquer PhantomJS.

C'est assez bizarre mais encore une fois, je partage mon expérience ici et des informations complémentaires pourraient être ajoutées au README pour les prochains contributeurs.

# npm test

> sgmap-mes-aides-ui@1.0.0 test /Volumes/SSD-Home/thomas/repos/mes-aides-ui
> jshint . && grunt

Running "jscs:src" (jscs) task
>> 47 files without code style errors.

Running "clean:server" (clean) task
>> 1 path cleaned.

Running "karma:unit" (karma) task
INFO [karma]: Karma v0.12.37 server started at http://localhost:8002/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket a4JlPRGFxlnMTvcaNSnZ with id 16948878
WARN [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Disconnected (1 times), because no message in 10000 ms.

Warning: Task "karma:unit" failed. Use --force to continue.

Aborted due to warnings.


Execution Time (2017-01-27 13:54:56 UTC)
jscs:src     569ms  ▇▇▇▇▇▇▇ 4%
karma:unit   12.3s  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 95%
Total 12.9s

npm ERR! Test failed.  See above for more details.

paster: command not found

npm run openfisca échoue car paster n'existe pas.

J'ai l'impression d'avoir résolu le problème sans être convaincu qu'il s'agit de la bonne approche.

easy_install paste
easy_install pastescript

Et là j'arrive à lancer npm run dev qui fonctionne.

Tests d'intégration

Après quelques déboires avec l'installation de Selenium & co. et après résolution des problèmes ci-dessus j'arrive à lancer npm run test-integration.
Cependant, certains tests échouent (cf. log ci-dessous) (je n'ai pas encore pris le temps d'investiguer). J'ai vu npm run db-update (qui échoue sur ma machine étant donné que je n'ai pas les droits d'accès) ; les tests qui échouent ont-ils besoin de certaines données de la base de données 'officielle' ?

    8 ┍  Get results
      ┝  ✓  Visibility of ResultComponent.prestationYM2Warning
      ┝  ✓  Visibility of ResultComponent.greyedPrestation
      ┝  ✓  Match ResultComponent.title’s content against "/Résultats/"
      ┝  ✗  ResultComponent.prestationName was not found. (tried for 5 s)
      ┝  ✗  ResultComponent.prestationMontant was not found. (tried for 5.2 s)
      ┝  ✗  ResultComponent.prestationMontantDetail was not found. (tried for 5.5 s)
      ┝  ✗  element ResultComponent.declareYM2ResourcesLink was not visible on the page while it should have. (tried for 5.8 s)
      ┝  An element could not be located on the page using the given search parameters. (tried for 5.3 s)
      ┝  ✗  ResultComponent.prestationDescription was not found. (tried for 5.3 s)
      ┝  ✗  element ResultComponent.prestationMoreInfoLink was not visible on the page while it should have. (tried for 5.5 s)
      ┝  An element could not be located on the page using the given search parameters. (tried for 5.5 s)
✘   8 ┕  Get results
@MattiSG
Copy link
Member

MattiSG commented Jan 27, 2017

Bonjour @guillett et merci infiniment pour ce rapport clair et détaillé. Nous avons effectivement encore pas mal de travail à faire pour faciliter la contribution sur Mes Aides.

DevDependencies

Que te donne node --version && npm --version ? L'installation doit a minima fonctionner avec Node 0.10 et NPM 2.

il arrive que PhantomJS timeout

Quel sont les specs CPU et RAM de ta machine ? Il faut peut-être que nous augmentions le timeout pour certaines configurations.

npm run openfisca échoue car paster n'existe pas.

As-tu bien exécuté npm run install-openfisca auparavant ?
Je laisse @fpagnoux répondre sur la meilleure modalité d'installation de paster.

les tests qui échouent ont-ils besoin de certaines données de la base de données 'officielle' ?

Non, les suites qui ne concernent pas les tests devraient pouvoir être joués en isolation. Pour autant, en raison de la complexité historique de l'installation d'Openfisca (les choses s'arrangent), nous n'exécutons pas les tests d'intégration en CI. Il est donc possible que certains soient réellement cassés car pas à jour.
J'ai également remarqué une fragilité sur certaines résolutions d'écran avec Firefox, et une exécution incroyablement lente des animations sur Chrome drivé par Selenium, qui mène souvent aux erreurs que tu as pu voir… Sur quel navigateur exécutes-tu les tests ?

Dans tous les cas, tu devrais pouvoir avancer sans tests d'intégration dans un premier temps.

@guillett
Copy link
Contributor Author

@MattiSG Merci pour tes pistes et commentaires. En effet, je m'en suis sorti sans les tests d'intégration qui échouent.

Je commence par une question et plus bas tu trouveras mes réponses/commentaires.

Y-a-t-il un projet en cours qui a pour objectif d'avoir un setup automatisé pour travis par exemple ? (Première étape de que vous appelez un phœnix server j'ai l'impression).

DevDependencies

J'ai installé nvm et fait nvm install 0.10 du coup j'ai la configuration recommandée :

➜  mes-aides-ui git:(returning) ✗ node --version
v0.10.48
➜  mes-aides-ui git:(returning) ✗ npm --version
2.15.1

il arrive que PhantomJS timeout

Quel sont les specs CPU et RAM de ta machine ?

J'ai un MacBook Pro mi-2009 (2,53 GHz Intel Core 2 Duo) avec 8Go de RAM et seulement des disques SSD.

Je ne pense pas que ces specs soit à l'origine du problème rencontré. Je vais peut-être regarder du côté de karma si des gens ont le même problème.

npm run openfisca échoue car paster n'existe pas.

As-tu bien exécuté npm run install-openfisca auparavant ?

Il me semble que oui.

les tests qui échouent ont-ils besoin de certaines données de la base de données 'officielle' ?

Non

Les tests sont exécutés sur Chrome et je constate des animations lentes mais plutôt à l'étape 6 et non l'étape 8 de base-suite. Etant donné qu'il se peut que les tests soient cassés, je vais regarder ça un peu plus en détail.

@guillett
Copy link
Contributor Author

Je me suis perdu au cours de mes investigations (j'ai utilisé un openfisca-web-api sans réformes ce qui changeait les erreurs que je recevais).

L'erreur que j'ai à l'étape 8 est la suivante :

{
    apiVersion: 1,
    error: {
        code: 500,
        errors: [{
            scenarios: {
                '0': {
                    message: 'Legislation parameter "ppa.seuil_aah_activite" was not found at instant "2017-01-01" by variable "ppa_revenu_activite_individu"',
                    variable_name: 'ppa_revenu_activite_individu',
                    instant: '2017-01-01',
                    parameter_name: 'ppa.seuil_aah_activite'
                }
            }
        }],
        message: 'Internal Server Error'
    },
    ...
}

@MattiSG
Copy link
Member

MattiSG commented Jan 30, 2017

Y-a-t-il un projet en cours qui a pour objectif d'avoir un setup automatisé pour travis par exemple ?

Malheureusement, pas « en cours », pour des raisons de moyens disponibles. Il y en a très clairement l'intention, et c'est absolument l'un des objectifs du recrutement auquel j'ai l'impression que tu fais référence avec la mention du serveur phœnix : c'est très important, tant pour la CI que pour les contributeurs, car tu es une perle de patience, mais cette expérience n'est clairement pas celle que nous espérons donner sur la durée !

Je ne pense pas que ces specs soit à l'origine du problème rencontré.

Effectivement, ça n'est pas le cas vu les specs. Ça m'était déjà arrivé sur d'autres projets, mais ça n'est pas le cas ici.

Legislation parameter "ppa.seuil_aah_activite" was not found at instant "2017-01-01" by variable "ppa_revenu_activite_individu"

@fpagnoux est-ce le symptôme de openfisca/openfisca-core#437 ?
@guillett si oui, ce serait le cas parce que ton installation d'Openfisca daterait d'avant janvier 2017. Ce problème devrait être corrigé par un git checkout master && git pull origin master && npm run install-openfisca.

@guillett
Copy link
Contributor Author

guillett commented Jan 30, 2017

Pour le CI, j'ai commencé à faire quelques tests sur travis (https://travis-ci.org/guillett/test-mes-aides) pour lancer les tests d'intégration de façon systématique. J'ai réussi lancer les différentes commandes et à tester sur Chrome via Selenium mais les tests échouent, il faut que je regarde un peu plus.

J'ai pu constater que des warnings à l'installation npm install font bien référence à requirejs et à jasmine-core
(https://travis-ci.org/guillett/test-mes-aides/builds/196304415#L1663). Installés manuellement ça fonctionne mais il faudrait sûrement les ajouter à package.json.

Mon installation est très récente (mi-janvier).

J'ai profité de ce problème pour regarder les sources de openfisca-web-api, openfisca-france et openfisca-core. Et au cours de mes découvertes/avancées j'ai réussi à contourner le problème (j'ai fait trop de modifications pour avoir les idées claires [changements dans /openfisca/requirements.txt 10.0.0b0 à sa valeur précédente 9.0.1 ; lancement de l'api à partir du HEAD dans github ; etc.]). Raison de plus d'avoir travis fonctionnel afin de mettre les choses au clair plus facilement.

@fpagnoux
Copy link
Contributor

fpagnoux commented Jan 30, 2017

Bonjour @guillett, heureux de voir un nouveau contributeur arriver :)

Legislation parameter "ppa.seuil_aah_activite" was not found at instant "2017-01-01" by variable >>"ppa_revenu_activite_individu"

@fpagnoux est-ce le symptôme de openfisca/openfisca-core#437 ?

Oui, c'est ça. Les instructions de @MattiSG devraient résoudre le problème.

Normalement c'est un problème qui a été résolu à partir de la version 9.0.1, je suis étonné que tu aies pu avoir le problème avec la 10.0.0b0. Si tu es sûr que c'est bien cette version qui tournait quand tu as eu le bug (la version est dans les JSON de réponse de l'API openfisca), fais-moi signe !

@fpagnoux
Copy link
Contributor

fpagnoux commented Jan 30, 2017

npm run openfisca échoue car paster n'existe pas.

As-tu bien exécuté npm run install-openfisca auparavant ?
Je laisse @fpagnoux répondre sur la meilleure modalité d'installation de paster.

J'ai récemment remarqué un bug quand on installe un package python avec pip en mode --user (ce qui est le cas quand on lance npm run install-openfisca. Les commandes installées ne sont pas dans le $PATH, et donc pas accessible en ligne de commande. C'est une issue documentée.

C'est sans doute pour ça que tu ne trouve pas paster. Sous mon mac il est ici : ~/Library/Python/2.7/bin/paster.

Solutions rapides pour te débloquer :

  • Si tu trouves le bin, tu peux faire un alias paster="~/path/to/bin/paster", éventuellement dans ton .bashrc.
  • Tu peux pip uninstall pastescript puis sudo pip install pastescript pour avoir paster installé globalement et normalement accessible en CLI.
  • Tu peux tenter de rajouter dans ton $PATH le répertoire qui contient les bin, ça peux t'éviter de ré-avoir le problème avec un autre paquet plus tard.

@MattiSG de notre côté, je pense que la seule solution raisonnable à long terme est de se baser sur des environnements virtuels, qui sont le standard en python, et qui évitent ce genre de problèmes. Il faudra juste migrer la production, pour qui les scripts sont conçus, et qui aujourd'hui n'utilise pas de virtualenv.

@MattiSG
Copy link
Member

MattiSG commented Jan 31, 2017

la seule solution raisonnable à long terme est de se baser sur des environnements virtuels

Mmh… ça augmente encore la stack Python nécessaire. Ça viendra donc probablement de pair avec la délégation de l'installation d'Openfisca à un système de gestion de configuration. Les commandes npm actuelles facilitent les mises à jour incrémentales mais ne permettent effectivement pas une installation simple from scratch.

@guillett
Copy link
Contributor Author

@fpagnoux, après mes tests et investigations des dépendances, je n'ai plus les problèmes décrits dans mes commentaires initiaux.

Je vais essayer de me faire une configuration propre avec un environnement virtuel pour les modules python et peut-être reproduire les différents problèmes.

Je suis d'accord avec toi, l'utilisation d'environnements virtuels serait bien car ça permettrait de faire des installations complètement autonomes par défaut.

Pour le moment sur travis, j'ai réussi à faire passer base-suite avec seulement quelques petites modifications (https://travis-ci.org/guillett/test-mes-aides/builds/196306061#L2078) et j'ai l'impression que l'échec de family-suite (https://travis-ci.org/guillett/test-mes-aides/builds/196306061#L2188) provient d'un changement de l'interface (donc attendu d'une certaine façon).

@fpagnoux
Copy link
Contributor

Mmh… ça augmente encore la stack Python nécessaire.

Certes, mais parole de pythonistes, faire du python sans virtualenv, c'est comme faire du node sans npm. Ça vaut le coup pour moi d'essayer en temps limité de voir si on ne peut pas arriver à une solution transparente pour l'utilisateur.

@guillett
Copy link
Contributor Author

Je pensais qu'un résumé de la situation était intéressant pour clarifier les prochaines étapes.

En ce qui concerne les tests d'intégration, j'ai l'impression que les transitions longues dans Chrome proviennent d'un bug dans le Chrome driver. Le fichier mes-aides/mes-aides-ui/app/bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_component-animations.scss contient @include transition-duration(0.35s); et le fichier css généré est mal interprété par le Chrome driver qui transforme les 0.35s en 35s (j'ai modifié cette valeur à 0.3s et les transitions ne font plus que 3s (en tests car 'en pratique' elles font bien 0.3s) et les tests passent plus facilement). Cela va permettre de faire passer tous les tests d'intégration !

En ce qui concerne la simplification du setup : J'ai l'impression que les échanges clarifient les zones d'amélioration. Il faudrait :

  • Ajouter les dépendances de dépendances qui ne sont plus systématiquement installées
    • Requirejs et jasmine-core déjà mentionnées
  • Proposer une installation autonome via un virtualenv
    • Je vais regarder comment faire en imposant une certaine structure [1] et ça pourrait être une base réflexion.
  • Vérifier les étapes nécessaires au lancement de l'application en local
    • Sur une installation propre, j'ai lancé npm run dev et ça n'a pas fonctionné - Il a fallut que je lance npm test puis ensuite les npm run devfonctionnait bien.

[1] Proposition brute de décoffrage :

Sur ma machine j'ai crée la hiérarchie de dossiers suivante :

  • mes-aides
    • mes-aides-ui
    • venv

Via les commandes suivantes

#!/bin/bash
set -e
set -v

mkdir mes-aides
cd mes-aides
git clone https://github.com/sgmap/mes-aides-ui.git
virtualenv venv
source venv/bin/activate
cd mes-aides-ui
npm install # Correction nécessaire de la liste des devPackages
pip install --upgrade -r openfisca/requirements.txt # en substitut de npm install-openfisca

npm run db &
npm run openfisca &

npm test #

npm run dev

En partant sur cette configuration (qui pourrait être conseillée dans le README) on pourrait remplacer le script install-openfisca par l’exécution d'un fichier de ce format là :

#!/bin/bash

set -e
set -v
if [ -e ../venv/bin/activate ]
then
    source ../venv/bin/activate
fi
pip install --upgrade -r openfisca/requirements.txt

Et quelque chose de similaire pour openfisca

#!/bin/bash

set -e
set -v
if [ -e ../venv/bin/activate ]
then
    source ../venv/bin/activate
fi
paster serve openfisca/api_config.ini

N'hésitez pas à commenter car il y a peut-être des choses m'échappent.

@MattiSG
Copy link
Member

MattiSG commented Feb 1, 2017

Cela va permettre de faire passer tous les tests d'intégration !

😱 😍 😌
J'avais identifié ces 35 secondes, et je confirme que le problème est lié à chromedriver, mais je n'avais réussi à trouver aucune info sur le sujet… et j'ai probablement du bêtement abandonner avant d'essayer de changer la valeur (ou considérer que c'était trop étrange pour la propager).
Mais s'il suffit de changer la durée pour que les tests passent systématiquement sous Chrome, hallelujah !!

Ajouter les dépendances de dépendances qui ne sont plus systématiquement installées

S'agit-il de peerDependencies qui ne seraient plus installée par npm@3 ? 🤔

Il a fallut que je lance npm test puis ensuite npm run dev

Ça, c'est très étrange… il doit y avoir une étape de build, ou un fichier qui est initialisé, et qui devrait l'être également lors de run dev.

Pour ce qui est des virtualenv, je laisse @fpagnoux expertiser (je peux servir de cobaye d'utilisateur stressé et qui n'a pas envie d'apprendre tout l'environnement Python 😄), mais je suis très favorable à une solution de documentation claire dans Openfisca ensuite référencée dans Mes Aides.

@guillett
Copy link
Contributor Author

guillett commented Mar 3, 2017

@MattiSG Effectivement le problème vient du npm@3.

Etant donné que les tests d'intégrations passent sur travis, je me suis dit que mettre en place un environnement de test (from scratch) via Puppet était un objectif atteignable et une façon productive de se familiariser avec cet outil.

J'ai donc créé un module Puppet (via puppet module generate) pour :

  • connaitre et installer les dépendances (de développement)
  • lancer les tests de base via npm test

Tout est dans init.pp et les dépendances de modules Puppet sont dans le fichier metadata.json.

Sur une nouvelle instance toute neuve, une fois la configuration Puppet en place, j'ai aussi :

  • testé l'installation de OpenFisca via npm run install-openfisca
  • lancé OpenFisca (npm run openfisca) et l'application (npm dev)
  • lancé les tests d'intégration depuis une autre machine (npm run test-integration après avoir modifié config.json pour pointer sur l'instance nouvellement créée)

Pour une mise en place systématisée de la production, j'ai aussi testé la mise en place d'un nginx via Puppet mais le module Puppet pour passer en SSL avec let's encrypt doit être légèrement modifié.

@guillett
Copy link
Contributor Author

guillett commented Sep 5, 2017

Mainly mitigated by various PRs.

Additional issues should be make explicit in another issue.

@guillett guillett closed this as completed Sep 5, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants