-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdelay_test.go
107 lines (89 loc) · 2.09 KB
/
delay_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package gdelay
import (
"log"
"math/rand"
"reflect"
"testing"
"time"
)
type Order struct {
}
func (o *Order) GetInfo(id string) string {
log.Printf("order.GetInfo id %s", id)
return "order info"
}
func (o *Order) GetList() string {
log.Println("order.GetList")
return "order GetList"
}
var globalDelay *Delay
func TestConcurrentDelay(t *testing.T) {
rand.Seed(time.Now().UnixMicro())
delay := NewDelay(3)
delay.Start()
for i := 0; i < 50; i++ {
r := rand.Intn(10) + 1
delay.DelayAdd(&DelayParam{
Duration: time.Now().Add(time.Second * time.Duration(r)).Unix(),
Fun: func() {
log.Println("hello world1", i)
},
})
}
for {
}
}
func TestDelay(t *testing.T) {
globalDelay = NewDelay(20)
globalDelay.Start()
globalDelay.DelayAdd(&DelayParam{
Duration: time.Now().Add(time.Second * 3).Unix(),
Fun: func() {
log.Println("hello world1")
},
})
globalDelay.DelayAdd(&DelayParam{
Duration: time.Now().Add(time.Second * 6).Unix(),
Fun: func() {
log.Println("hello world panic")
panic("inner panic")
},
})
globalDelay.DelayAdd(&DelayParam{
Duration: time.Now().Add(time.Second * 10).Unix(),
Fun: func(name string) {
println("name: ", name)
log.Println("hello world1")
},
FuncParam: []reflect.Value{reflect.ValueOf("Tom")},
})
globalDelay.DelayAdd(&DelayParam{
Duration: time.Now().Add(time.Second * 3).Unix(),
Fun: func() {
time.Sleep(time.Second * 3)
log.Println("hello world 2")
},
})
globalDelay.DelayAdd(&DelayParam{
Duration: time.Now().Add(time.Second * 3).Unix(),
Fun: func() {
log.Println("hello world3")
},
})
globalDelay.DelayAdd(&DelayParam{
Duration: time.Now().Add(time.Second * 5).Unix(),
Obj: &Order{},
MethodName: "GetList",
})
globalDelay.DelayAdd(&DelayParam{
Duration: time.Now().Add(time.Second * 5).Unix(),
Obj: &Order{},
MethodName: "GetInfo",
MethodParam: []reflect.Value{reflect.ValueOf("12")},
})
globalDelay.AddFunc(time.Now().Add(time.Second).Unix(), func(name string) {
log.Printf("get name %s", name)
}, []reflect.Value{reflect.ValueOf("jack")})
for {
}
}