Неверно положительный при отправке SIGTERM в набор тестов Ginkgo - PullRequest
1 голос
/ 18 апреля 2019

При написании тестов с использованием фреймворка Ginkgo я заметил, что нажатие C-c для завершения работающего набора приводит к ложному срабатыванию.

обратите внимание на зеленый "1 пройдено"

Когда вы посмотрите на код, вы заметите, что этот тест не пройден через 5 секунд. Когда я завершаю его через 2 секунды, комплект завершается неудачно, но в результате получается 1 пройденный тест и 0 неудачный.

То же поведение для версий go 1.11.4 и 1.12.4 в Debian Stretch и Ubuntu 18.04.

Код сюиты (автоматически генерируется с использованием ginkgo bootstrap):

package hmmm_test

import (
    "testing"

    . "github.com/onsi/ginkgo"
    . "github.com/onsi/gomega"
)

func TestHmmm(t *testing.T) {
    RegisterFailHandler(Fail)
    RunSpecs(t, "Hmmm Suite")
}

Тестовый код:

package hmmm_test

import (
    "time"

    . "github.com/onsi/ginkgo"
    . "github.com/onsi/gomega"
)

var _ = Describe("Hmmm", func() {
    Context("Dummy test", func() {
        It("should fail after 5 seconds", func() {
            time.Sleep(5 * time.Second)
            Expect(1).NotTo(Equal(1))
        })
    })
})

Вывод, когда тест выполняется в течение 5 секунд (правильное значение):

$ ginkgo

Running Suite: Hmmm Suite
=========================
Random Seed: 1555580607
Will run 1 of 1 specs
• Failure [5.001 seconds]
Hmmm
/tmp/hmmm/hmmm_test.go:10
  Dummy test
  /tmp/hmmm/hmmm_test.go:11
    should fail after 5 seconds [It]
    /tmp/hmmm/hmmm_test.go:12
    Expected
        <int>: 1
    not to equal
        <int>: 1
    /tmp/hmmm/hmmm_test.go:14
------------------------------
Summarizing 1 Failure:
[Fail] Hmmm Dummy test [It] should fail after 5 seconds
/tmp/hmmm/hmmm_test.go:14
Ran 1 of 1 Specs in 5.002 seconds
FAIL! -- 0 Passed | 1 Failed | 0 Pending | 0 Skipped
--- FAIL: TestHmmm (5.00s)
FAIL
Ginkgo ran 1 suite in 5.665592703s
Test Suite Failed

Вывод, когда тест завершается до его завершения (ложное срабатывание):

$ ginkgo

Running Suite: Hmmm Suite
=========================
Random Seed: 1555580763
Will run 1 of 1 specs
^C
Ran 1 of 1 Specs in 1.187 seconds
FAIL! -- 1 Passed | 0 Failed | 0 Pending | 0 Skipped
Ginkgo ran 1 suite in 1.85541211s
Test Suite Failed

Я ожидаю, что результат будет примерно таким: FAIL! -- 0 Passed | 1 Failed | 0 Pending | 0 Skipped Или 1 пропущен или ожидает рассмотрения, но не Passed, особенно если тест записан как неудачный.

Фактический вывод предполагает сбой, но также и то, что все тесты ... пройдены: FAIL! -- 1 Passed | 0 Failed | 0 Pending | 0 Skipped

Я что-то упустил?

1 Ответ

0 голосов
/ 18 апреля 2019

Это ожидаемое поведение, но я не обязательно буду утверждать, что оно было преднамеренным, ясным или правильным.Это происходит потому, что тесты запускают свой жизненный цикл как passing 1 и изменяют состояния при других событиях (сбой / паника).

Когда Ginkgo получает SIGTERM, он не останавливает текущий запущенный тест (хотя и не позволит запускать другие тесты 2 ).Параллельно он будет собирать отчет о проведенных до сих пор тестах 3 .Эта коллекция будет перебирать все узлы, которые начали «обработку» 4 (слабо коррелируется с, но начинается немного раньше, чем работает).Поскольку тест начался в пройденном состоянии, и он не изменился, о нем сообщается как о пройденном.

Этот вопрос не место для обсуждения обоснованности этого подхода (и, возможно, он лучше).Пожалуйста, используйте проблему, которую вы открыли, если вы хотите запросить изменение этого поведения 5 .

...