github.com/derat/nup@v0.0.0-20230418113745-15592ba7c620/test/web/util.go (about) 1 // Copyright 2021 Daniel Erat. 2 // All rights reserved. 3 4 package web 5 6 import ( 7 "fmt" 8 "time" 9 ) 10 11 const ( 12 waitTimeout = 10 * time.Second 13 waitSleep = 10 * time.Millisecond 14 ) 15 16 // wait calls waitFull with reasonable defaults. 17 func wait(f func() error) error { 18 return waitFull(f, waitTimeout, waitSleep) 19 } 20 21 // waitFull waits up to timeout for f to return nil, sleeping sleep between attempts. 22 func waitFull(f func() error, timeout time.Duration, sleep time.Duration) error { 23 start := time.Now() 24 for { 25 err := f() 26 if err == nil { 27 return nil 28 } 29 if time.Now().Sub(start) >= timeout { 30 return fmt.Errorf("timed out: %v", err) 31 } 32 time.Sleep(sleep) 33 } 34 }