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

Anton Kaliaev

March 18, 2021
Tweet

More Decks by Anton Kaliaev

Other Decks in Programming

Transcript

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

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

    precommits за один и тот же блок нужны чтобы он был добавлен в цепочку
  3. Убедитесь что • У вас установлен Go $ go version

    > go version go1.16 darwin/amd64 • У вас установлен Docker • $ docker -v • > Docker version 20.10.2, build 2291f61
  4. 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
  5. End-to-end тестирование • (Write code) • $ make • $

    ./build/runner -f networks/simple.toml https://github.com/tendermint/tendermint/tree/master/test/e2e
  6. Фаззинг https://github.com/dvyukov/go-fuzz Функция должна вернуть 1, если при последующей итерации

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

    • (Write code) • $ go-fuzz-build • $ go-fuzz https://github.com/tendermint/tendermint/tree/master/test/fuzz
  8. • Проверка линеаризуемости (Knossos, Elle) • Внесение неисправностей (сетевые, смещение

    часов, убийство процесса) • Визуализация • Гибкое API • Написано на Clojure 😒
  9. “Каждая операция вступает в силу атомарно в какой-то момент между

    ее вызовом и завершением.” https://aphyr.com/posts/313-strong-consistency-models
  10. 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 В другом окне (вкладке)