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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

HackAtom RU 2021

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

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

Avatar for Anton Kaliaev

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 В другом окне (вкладке)