/
stress_test.go
98 lines (78 loc) · 1.65 KB
/
stress_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
package stress_test
import (
"log"
"testing"
"time"
"github.com/RossRothenstine/stress"
"golang.org/x/net/context"
"golang.org/x/time/rate"
)
type emptyWorker struct {
}
func (_ emptyWorker) Work(context.Context) {
}
func TestAllocatesWorkersFromPool(t *testing.T) {
called := false
stresser := &stress.Stresser{
New: func() stress.Worker {
called = true
return emptyWorker{}
},
Limit: rate.NewLimiter(10, 10),
}
go stresser.Start()
defer stresser.Stop()
timer := time.NewTimer(time.Second)
<-timer.C
if called == false {
t.Error("expected true, got false")
}
}
type workTracker struct {
numCalls int
}
func (w *workTracker) Work(context.Context) {
w.numCalls++
}
func TestLowerBound(t *testing.T) {
worker := &workTracker{}
stresser := &stress.Stresser{
New: func() stress.Worker {
return worker
},
Limit: rate.NewLimiter(20, 20),
}
go stresser.Start()
defer stresser.Stop()
timer := time.NewTimer(time.Second)
<-timer.C
if worker.numCalls < 10 {
t.Errorf("incorrect number of calls, expected at least %d, got %d", 10, worker.numCalls)
}
}
type slowWorker struct {
delay time.Duration
}
func (w *slowWorker) Work(context.Context) {
time.Sleep(w.delay)
}
func TestRampUp(t *testing.T) {
log.Println("Start Ramp Up")
calls := 0
stresser := &stress.Stresser{
New: func() stress.Worker {
calls++
return &slowWorker{
delay: time.Second / 2,
}
},
Limit: rate.NewLimiter(10, 10),
}
go stresser.Start()
defer stresser.Stop()
timer := time.NewTimer(5 * time.Second)
<-timer.C
if calls == 1 {
t.Errorf("incorrect number of workers created, expected at least more than %d, got %d", 1, calls)
}
}