GTest et nœud spécialisé

J’ai un gros souci avec mon noeud spécialisé expire-members.
je l’ai entièrement réinstaller avec npm :

git clone https://github.com/librelois/duniter-expire-members-specialize-node.git
nvm use 6
cd duniter
npm install
npm test

et les test unitaires ne fonctionnent pas :

duniter@ifee:~/duniter-expire-members-specialize-node$ npm test

> RML8@1.0.0 test /home/www/e/elois/duniter.elois.ifee.fr/duniter-expire-members-specialize-node
> mocha tests.js



  RML8
1) installation


0 passing (3s)
1 failing

1) RML8 installation:
 Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
  at process._tickCallback (internal/process/next_tick.js:103:7)



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

Et lorsque j’essaye de configurer mon nœud il refuse :

 duniter@ifee:~/duniter-expire-members-specialize-node$ node expire_members_specialized_node.js config --autoconf --cpu 10
/home/www/e/elois/duniter.elois.ifee.fr/duniter-expire-members-specialize-node/expire_members_specialized_node.js:23
duniter.statics.cli((duniterServer) => co(function*() {
            ^

TypeError: duniter.statics.cli is not a function
at Object.<anonymous> (/home/www/e/elois/duniter.elois.ifee.fr/duniter-expire-members-specialize-node/expire_members_specialized_node.js:23:17)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3

Du coup j’ai installer un nœud Duniter “classique” sur la même machine avec la même procédure :

git clone https://github.com/duniter/duniter.git
nvm use 6
cd duniter
npm install
npm test
node bin/duniter config --autoconf --cpu 10
node bin/duniter wizard network
node bin/duniter wizard key
node bin/duniter sync ADRESSE_NOEUD PORT_NOEUD
node bin/duniter config --cpu 10
node bin/duniter start

Et ça fonctionne parfaitement mais du coup impossible de lancer mon nœud spécialisé sur gtest…

Oui en effet, l’API interne a changé. On ne parlera plus tellement de “nœud spécialisé”, mais de module qu’on peut brancher à Duniter.

Mais bien sûr, ça nécessite que je décrive un peu cette API. Je vais faire un exemple demain avec Remuniter, qui sera un module comme les autres.

1 Like

ok c’est l’occasion de “modulariser” mon script, je m’inspirerai de remuniter alors :slight_smile:

Tu peux désormais t’inspirer du code de Remuniter : https://github.com/duniter/remuniter. Je l’ai migré vers la nouvelle API interne. Le point d’entrée est le fichier index.js, la commande pour lancer Remuniter est node index.js remuniter.

Je t’ai dit que désormais on parlerait plutôt de modules, mais avec le recul je me rends compte qu’on peut :

  • soit réaliser des modules optionnels à Duniter
  • soit réaliser des nœuds spécialisés

Remuniter reste donc dans cette dernière catégorie.

Tu pourras également voir que le code propre à Remuniter (serveur web + logique de paiement) a été scindé en plusieurs fichiers, pour y voir plus clair, tous dans le répertoire /lib.

Voilà, en espérant que tu t’y retrouveras ! Hésites pas à poser quelques questions au besoin.

1 Like

c’est drole, j’étais justement en train de cloner remuniter et de farfouiller le source :slight_smile:

j’avoue que je suis un peu perdu, d’autant que le JS c’est récent pour moi.
J’ai réussi à placer la requête qui récupère le paramètre msValidity juste avant la main loop dans lib/main.js et la requete s’execute correctement ^^

En revanche, je ne sais pas comment récupérer les paramètres get en mode websocket ?

Aussi je n’ai pas trouver à quel endroit tu écrit le rendu html de la page ?

En mode WebSocket, tu n’es plus vraiment en mode HTTP classique. Tu émets des messages et en reçois d’autres, mais sans le cadre d’un échange.

Donc c’est à toi, en JS côté client, de récupérer cette valeur (mettons A) et l’envoyer via WS au serveur, sans attente de réponse. Et éventuellement, côté serveur, tu auras programmé l’envoi d’un message à ton client sur réception de la valeur A.

Le HTML est figé à la compilation de Remuniter, après cd ui && yarn. Cela génère le HTML dans le dossier public/.

Mais attention Remuniter utilise des technos avancées (AngularJS, WebSocket, Jade, et Brunch pour compiler le tout). Cela risque de t’embrouiller dans un 1er temps, je te conseille de démarrer plus simplement que ça ! Tu pourras toujours modifier le rendu HTML plus tard.

ok c’est encore obscur pour moi les WebSocket je vais refaire en mode HTTP classique pour le moment !

Oui j’ai compris ça dans la soirée. Effectivement je ne vais pas faire aussi poussé pour l’instant. Je verrai çà quand les fonctionnalités de mon nœud seront un peu plus avancé ^^