Куча говна / Говнокод #27522 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
...

       fun([N1, _N2], Trace) ->
               ?assert(
                  ?strict_causality( #{?snk_kind := "Adding table to a shard", shard := _Shard, live_change := true}
                                   , #{?snk_kind := "Shard schema change"}
                                   , ?of_node(N1, Trace)
                                   )),
               ?assert(
                  ?strict_causality( #{?snk_kind := "Shard schema change", shard := _Shard}
                                   , #{?snk_kind := "Restarting shard server", shard := _Shard}
                                   , ?of_node(N1, Trace)
                                   )),
               %% Schema change must cause restart of the replica process and bootstrap:
               {_, Rest} = ?split_trace_at(#{?snk_kind := "Shard schema change"}, Trace),
               ?assert(
                  ?strict_causality( #{?snk_kind := "Restarting shard server", shard := _Shard}
                                   , #{?snk_kind := state_change, to := bootstrap}
                                   , Rest
                                   ))
       end).

Немного galaxy-brain тестов

Запостил: CHayT CHayT, (Updated )

Комментарии (19) RSS

  • В `Erlang' можно тестировать последовательность событий в распределённой системе, именно поэтому я за `Erlang'.
    Ответить
    • И в какой аксиоматике это описывается? Темпоральная логика какая-то?
      Ответить
      • Судя по всему обыкновенный юнит-тест, без всяких там аксиоматик.
        Ответить
        • Только не юнит, а системный тест, где весь кластер вертится в сборе.
          Ответить
      • Темпоральная логика она про состояния. Это тупиковый путь, т.к. состояние целого кластера с fault-tolerance и фейловерами ты не опишешь никогда.
        Тут чекаются не анскильные состояния, а видимые сайд-эффекты. Хуй знает, как это по науке называют. Я это называю trace-based testing.
        Ответить
        • А ещё эта питушня умеет в chaos monkey (чтобы шатать деревья супервизоров) и влиять на порядок событий, чтобы race conditions провоцировать.
          Ответить
        • > Хуй знает, как это по науке называют.

          В Erlang'е вообще нет никакой `науки', именно поэтому я... Был забавный тред в его мейлинг-листах, где кто-то начал писать что, мол, у вас неправильный π-calculus, потому что вот в статьях... На что ему Robert Virding ответил в духе ``хорошо, что мы не знали про π-calculus, иначе у нас получилась бы какая-то непрактичная питушня для ма-те-матиков из рашки''.
          Ответить
  • > strict_causality

    А как оно проверяет, что это строгая причинно-следственная связь? Просто что события в правильно порядке произошли? Или прям проверяет, что между ними есть какая-то цепочка из happens before, а не просто так вышло?
    Ответить
    • > Просто что события в правильно порядке произошли?

      Как-то так. "За каждым событием с паттерном A следует событие с паттерном B". Можно ещё эту питушню пускать под model-checker'ом, и тогда можно убедиться, что так происходит всегда.
      Ответить
    • ?xxx это вроде макросня. #{ .. } похоже на мапу, но почему там := я не знаю...
      Ответить
      • ?blah это макрос.
        #{key := Value} — заматчить мапу с key / Value.
        Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8