Implémentation de Duniter en Rust?


#81

@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.


#82

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


#83

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.

#84

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.


#85

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.


#86

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.


#87

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


#88

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:


#89

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.


#90

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.


#91

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);

#92

@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)


#93

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


#94

la version 6.11


#95

Je n’ai aucune sortie.

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


#96

On peut mettre directement “6” : Nouveau tutoriel de développement

Moul avait mis 6.11 mais c’est trop restrictif.


#97

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.


#98

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.


#99

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


#100

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.