Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Тестируем Это

Тестируем Это

HackAtom RU 2021

Коротко расскажу что такое Tendermint. Потом мы вместе напишем несколько тестов для Tendermint используя такие инструменты как

- https://github.com/dvyukov/go-fuzz
- https://github.com/jepsen-io/jepsen

D83b63db79b42978fe35e120550ca180?s=128

Anton Kaliaev

March 18, 2021
Tweet

Transcript

  1. Антон Каляев / HackAtom 2021 Тестируем Это

  2. 1. Tendermint

  3. Tendermint NodeA NodeB NodeC Создатель блока в текущем раунде (NodeA)

    рассылает блок
  4. Tendermint Затем участники обмениваются предварительными голосами (prevotes) 2/3+ prevotes за

    один и тот же блок нужны чтобы проголосовать за него NodeA NodeB NodeC
  5. Tendermint NodeA NodeB NodeC Затем участники обмениваются голосами (precommits) 2/3+

    precommits за один и тот же блок нужны чтобы он был добавлен в цепочку
  6. None
  7. • https://arxiv.org/abs/1807.04938 • https://github.com/tendermint/tendermint • https://www.homeonrails.com/thesecretlivesofdata/tendermint/ Что почитать?

  8. 2. ABCI

  9. ABCI NodeA Application Tendermint ABCI

  10. ABCI InitChain BeginBlock DeliverTx EndBlock CheckTx Query

  11. ABCI NodeA Cosmos SDK Tendermint ABCI

  12. None
  13. • https://docs.tendermint.com/master/spec/abci/abci.html • https://docs.tendermint.com/master/tutorials/go-built-in.html Что почитать?

  14. 3. Тестирование

  15. https://medium.com/tendermint/hierarchy-of-tests-58eda202d5e9

  16. Убедитесь что • У вас установлен Go $ go version

    > go version go1.16 darwin/amd64 • У вас установлен Docker • $ docker -v • > Docker version 20.10.2, build 2291f61
  17. 3.1 End-to-end тестирование

  18. End-to-end тестирование • $ git clone https://github.com/tendermint/tendermint.git • $ cd

    tendermint/test/e2e • $ make https://github.com/tendermint/tendermint/tree/master/test/e2e
  19. ./networks/simple.toml

  20. ./networks/ci.toml

  21. End-to-end тестирование • (Write code) • $ make • $

    ./build/runner -f networks/simple.toml https://github.com/tendermint/tendermint/tree/master/test/e2e
  22. 3.2 Фаззинг

  23. Фаззинг https://github.com/dvyukov/go-fuzz Функция должна вернуть 1, если при последующей итерации

    функция должна увеличить приоритет данного входа (например, вход лексически корректен и был успешно разобран); -1, если вход не должен быть добавлен в корпус, даже если он дает новое покрытие; и 0 в противном случае
  24. None
  25. Фаззинг • $ cd test/fuzz • $ mkdir -p rpc/core/txsearch

    • (Write code) • $ go-fuzz-build • $ go-fuzz https://github.com/tendermint/tendermint/tree/master/test/fuzz
  26. 3.2 Jepsen

  27. github.com/aphyr Фреймворк для верификации распределенных систем, с возможностью внесения неисправностей

  28. • Проверка линеаризуемости (Knossos, Elle) • Внесение неисправностей (сетевые, смещение

    часов, убийство процесса) • Визуализация • Гибкое API • Написано на Clojure 😒
  29. https://jepsen.io/consistency Линеаризуемость

  30. Изоляция транзакций в Postgresql https://www.postgresql.org/docs/9.5/transaction-iso.html

  31. “Каждая операция вступает в силу атомарно в какой-то момент между

    ее вызовом и завершением.” https://aphyr.com/posts/313-strong-consistency-models
  32. Так .. как работает Jepsen?

  33. https://www.youtube.com/watch?v=OPJ_IcdSqig Black-box Isolation Checking with Elle (Kyle Kingsbury, Jepsen.io)

  34. https://www.youtube.com/watch?v=OPJ_IcdSqig Black-box Isolation Checking with Elle (Kyle Kingsbury, Jepsen.io)

  35. https://www.youtube.com/watch?v=OPJ_IcdSqig Black-box Isolation Checking with Elle (Kyle Kingsbury, Jepsen.io)

  36. “Болтать легко. Покажи мне код” Линус Торвальдс

  37. None
  38. None
  39. None
  40. Nemesis can be used to inject faults

  41. Jepsen • $ git clone https://github.com/tendermint/jepsen.git • $ cd jepsen

    • $ cd docker && bin/up • $ cd docker && bin/console • $ cd tendermint && lein run test https://github.com/tendermint/jepsen В другом окне (вкладке)
  42. https://jobs.cosmos.network/jobs/?company_id=1249

  43. Спасибо! Антон Каляев / HackAtom 2021