1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package timeout_test
-
- import (
- "sync"
- "testing"
- "time"
-
- "git.links123.net/links123.com/pkg/timeout"
- )
-
- type ExcuteChan struct {
- c chan bool
- once sync.Once
- }
-
- func Run(limit time.Duration, f func()) bool {
- done := make(chan bool)
-
- go func() {
- f()
- done <- true
- close(done)
- }()
-
- select {
- case <-time.After(limit):
- return false
- case <-done:
- return true
- }
- }
-
- func Run1(limit time.Duration, f func()) bool {
- ec := &ExcuteChan{c: make(chan bool), once: sync.Once{}}
-
- go func() {
- f()
- ec.once.Do(func() {
- ec.c <- true
- close(ec.c)
- })
- }()
-
- select {
- case <-time.After(limit):
- return false
- case <-ec.c:
- return true
- }
- }
-
- func TestRun(t *testing.T) {
- // timeout: OK
- if !timeout.Run(1*time.Second, func() {
- time.Sleep(2 * time.Second)
- }) {
- t.Log("time out: OK")
- } else {
- t.Fatal("time out: FAILED")
- }
-
- // timeout: FAILED
- if !timeout.Run(3*time.Second, func() {
- time.Sleep(2 * time.Second)
- }) {
- t.Log("time out: OK")
- } else {
- t.Fatal("time out: FAILED")
- }
- }
|