Implémentation de Duniter en Rust?

@cgeek Ca serait possible de tester a nouveau yarn run test ? Chez moi yarn plante avec le code 3221225477. Apparemment c’est un bug avec Windows, et là je vois pas trop comment faire.

J’essaierai de tester en fin d’après-midi, ce soir ou demain.

1 Like

J’ai seulement 2 tests qui échouent :

$ yarn run test
yarn run v1.3.2
$ node "node_modules/mocha/bin/mocha" tests/


  Testing getPaths()
    ✓ wotb.getPaths() should return arrays with the size of the paths

  MEMORY
    Basic operations
      ✓ should have a file path in FILE mode
      ✓ should have an initial size of 0
      ✓ should not throw if testing isEnabled() with out-of-bounds node
      ✓ should give number 0 if we add a node
      ✓ should add certs only in the boundaries of maxCert
      ✓ should not throw if testing existsLink() with inbounds link
      ✓ should not throw if testing existsLink() with out-of-bounds source
      ✓ should not throw if testing existsLink() with out-of-bounds target
      ✓ first 4 nodes should be enabled
      ✓ last node should be enabled
      ✓ should be able to disable some nodes
      ✓ nodes 0 and 2 should be disabled
      ✓ should not exist a link from 2 to 0
      ✓ should be able to add some links
      ✓ should exist new links
      ✓ should be able to remove some links
      ✓ should exist less links
      ✓ should successfully use distance rule
      ✓ should have 12 nodes
      ✓ delete top node
      ✓ should have 11 nodes
      ✓ should work with member 3 disabled
      ✓ should be able to make a mem copy
    Building a larger WoT
      ✓ should have an initial size of 0
      testing around 2 with d = 1
        ✓ should have 10 sentries
        ✓ distance k = 1
        ✓ distance k = 2
        1) distance k = 5
      testing around 2 with d = 2
        ✓ should have 2 sentries
        ✓ distance k = 1
        ✓ distance k = 2
        ✓ distance k = 3
        ✓ distance k = 4
        ✓ distance k = 5
      testing around 2 with d = 3
        ✓ distance k = 1
        ✓ distance k = 2
        ✓ distance k = 5

  MEMORY 2
    Basic operations
      ✓ should have a file path in FILE mode
      ✓ should have an initial size of 0
      ✓ should not throw if testing isEnabled() with out-of-bounds node
      ✓ should give number 0 if we add a node
      ✓ should add certs only in the boundaries of maxCert
      ✓ should not throw if testing existsLink() with inbounds link
      ✓ should not throw if testing existsLink() with out-of-bounds source
      ✓ should not throw if testing existsLink() with out-of-bounds target
      ✓ first 4 nodes should be enabled
      ✓ last node should be enabled
      ✓ should be able to disable some nodes
      ✓ nodes 0 and 2 should be disabled
      ✓ should not exist a link from 2 to 0
      ✓ should be able to add some links
      ✓ should exist new links
      ✓ should be able to remove some links
      ✓ should exist less links
      ✓ should successfully use distance rule
      ✓ should have 12 nodes
      ✓ delete top node
      ✓ should have 11 nodes
      ✓ should work with member 3 disabled
      ✓ should be able to make a mem copy
    Building a larger WoT
      ✓ should have an initial size of 0
      testing around 2 with d = 1
        ✓ should have 10 sentries
        ✓ distance k = 1
        ✓ distance k = 2
        2) distance k = 5
      testing around 2 with d = 2
        ✓ should have 2 sentries
        ✓ distance k = 1
        ✓ distance k = 2
        ✓ distance k = 3
        ✓ distance k = 4
        ✓ distance k = 5
      testing around 2 with d = 3
        ✓ distance k = 1
        ✓ distance k = 2
        ✓ distance k = 5

  FILE
    Basic operations
Segmentation fault (core dumped)
error Command failed with exit code 139.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
1 Like

C’est bizarre, il me semble qu’ils sont présent dans le code Rust et qu’ils passent. Je ne suis pas chez moi, je regarde quand je rentre.

En tous les cas à la fin je tombe sur un :

Segmentation fault (core dumped)

Donc tous les tests ne passent pas encore, la procédure s’arrête aux test mémoire.

J’ai le même log que toi, sauf que moi ça ne me donne pas le message d’erreur.
Hmm … D’où sort le wot.bin utilisé dans le test original ?
Je vais rajouter le fait que si le fichier n’existe pas alors il créé une WoT vide.

1 Like

Dès que newFileInstance(...) est appelé, le fichier est créé.

Hmm, ça plante encore. En mettant un console.log dans AtomicFileWebOfTrust::constructor avant et après mon appel natif, j’obtient 6 paires de log. Du coup ça ne plante pas au niveau de mon appel natif, mais plus tard. J’ai trouvé comment debug avec mocha, mais je n’arrive pas à catch le Segmentation fault. :confused:

Le segfault ne se catch pas, il se situe dans NodeJS lui-même (le “meta-monde” C++ qui interprète le JS). Il te faut le trouver en débogant Rust directement.

Je n’ai pas ce bug quand je lance le test en Rust. Là je suis en train de chercher où ça plante dans le code JS à coup debug, espions et point d’arrêt. Il faut que j’ai au moins une idée d’où ça peut se situer. Je ne pense pas que la segfault se trouve dans duniter-rs-wotb, mais peut-être dans le code Rust de duniter-rs-wotb-js car il interragis avec du code unsafe de neon.

1 Like

Il plante en dehors des tests. J’ai suivi en pas à pas et il plante dans du code de Mocha après avoir fini

testSuite("FILE3", FILE_MODE);

@cgeek Tu pourrais me dire si tu as une segfault en lançant :

yarn
node ./build/index.js

Je n’ai pas d’affichage du segfault dans mon terminal (surement l’OS qui ne l’affiche pas contrairement à Linux)

Quelle version de NodeJS je dois utiliser pour être compatible avec duniter-ts ?

la version 6.11

Je n’ai aucune sortie.

Peut-être devrais-tu avoir une VM à Linux à côté, pour faire ce genre de comparaisons tranquillement.

On peut mettre directement “6” : Nouveau tutoriel de développement - #14 by cgeek

Moul avait mis 6.11 mais c’est trop restrictif.

Je vais essayer avec le sous-système Linux de Win10. Je pourrais aussi essayer avec la bonne version de Node, je n’arrive pas à avoir nvm sous Win.

Je te conseille vraiment l’utilisation d’une VM Ubuntu, ça coûte vraiment pas cher à ça te donne l’assurance d’un système isolé.

Personnellement, je ne veux pas t’aider à déboguer les problèmes Windows.

D’acc, je vais installer une VM. Tu me conseille quoi ? VirtualBox ?

Oui, VirtualBox est sous licence GPLv2 et fait très bien le boulot.

Je te conseille aussi une Ubuntu pour aller au plus simple possible.

1 Like