Я использую go1.10 darwin / amd64 и пытаюсь установить пользовательское время ожидания для моего тестирования во время выполнения, используя следующий фрагмент кода.
И я выполняю тест с помощью команды, установив тайм-аут Go на 11 м и установив таймер паники теста на 5 м, и заметил, что значение тайм-аута Go срабатывает, а не мое.
go test github.com/foo -run TestMod -v --race -timeout 11m
...
...
*** Test killed with quit: ran too long (12m0s).
Фрагмент кода:
// Returns time.Duration from given string
// Default return value: "2h0m0s"
func GetDuration(timeoutStr string) time.Duration {
// Default timeout to 2 hours
durationToReturn := (2 * time.Hour)
pattern, _ := regexp.Compile("^([0-9]+)([mhd])$")
// Calculates only if valid pattern exists
if pattern.MatchString(timeoutStr) {
match := pattern.FindStringSubmatch(timeoutStr)
timeoutVal, err := strconv.Atoi(match[1])
if err != nil {
return durationToReturn
}
timeoutDuration := time.Duration(timeoutVal)
switch match[2] {
case "m":
durationToReturn = timeoutDuration * time.Minute
case "h":
durationToReturn = timeoutDuration * time.Hour
case "d":
durationToReturn = timeoutDuration * (time.Hour * 24)
}
}
return durationToReturn
}
// Starts timeout trigger based on given value in suiteData.Timeout
func StartTimeoutTimer() {
timeoutStr := "5m"
go func() {
timeoutDuration := GetDuration(timeoutStr)
fmt.Printf("Setting timeout of %v from %v\n", timeoutDuration, time.Now())
<-time.After(timeoutDuration)
fmt.Printf("Timeout happened at %v\n", time.Now())
panic("Test timed out..")
}()
}
func TestMain(m *testing.M) {
StartTimeoutTimer()
for {
}
}