Repository navigation
Expand file tree
/
Copy pathpool_test.go
More file actions
72 lines (63 loc) · 2 KB
/
Copy pathpool_test.go
File metadata and controls
72 lines (63 loc) · 2 KB
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
package workmanager
import (
"context"
"testing"
"time"
)
const (
poolStepA WorkStep = "pool_stepA"
poolStepB WorkStep = "pool_stepB"
poolStepC WorkStep = "pool_stepC"
)
func Test_poolController(t *testing.T) {
poolCtr := NewPoolController(context.Background(), poolStepA, poolStepB)
if steps := poolCtr.poolSteps(); len(steps) != 2 || !ContainsStep(poolStepA, steps...) || !ContainsStep(poolStepB, steps...) {
t.Errorf("pool manager init fail: expect steps: %+v, got: %+v", []WorkStep{poolStepA, poolStepB}, steps)
}
t.Log("init ok")
if poolCtr.getPool(poolStepA).Size() != defaultPoolSize || poolCtr.getPool(poolStepB).Size() != defaultPoolSize {
t.Errorf("pool size error: expect %d, got: %d", defaultPoolSize, poolCtr.getPool(poolStepA).Size())
}
t.Log("pool size ok")
newSize := 99
poolCtr.SetPool(newSize, poolStepA, poolStepC)
if poolCtr.getPool(poolStepA).Size() != newSize ||
poolCtr.getPool(poolStepB).Size() != defaultPoolSize ||
poolCtr.getPool(poolStepC).Size() != newSize {
t.Errorf("set pool size fail: expect %d, got %s:%d\t%s:%d\t%s:%d",
newSize,
poolStepA, poolCtr.getPool(poolStepA).Size(),
poolStepB, poolCtr.getPool(poolStepB).Size(),
poolStepC, poolCtr.getPool(poolStepC).Size(),
)
}
t.Log("set pool ok")
for _, step := range []WorkStep{poolStepA, poolStepB, poolStepC} {
dataCh := make(chan struct{}, 999)
pool := poolCtr.getPool(step)
var timeup bool
for tick := time.Tick(100 * time.Millisecond); !timeup; {
select {
case <-tick:
timeup = true
break
default:
pool.Wait()
go func() {
defer pool.Done()
dataCh <- struct{}{}
time.Sleep(120 * time.Millisecond)
}()
}
}
if len(dataCh) != pool.Size() {
t.Errorf("%s pool size error: expect %d, got %d", step, pool.Size(), len(dataCh))
}
}
t.Log("pool works ok")
poolCtr.RemovePool(poolStepA)
if poolCtr.getPool(poolStepA) != poolCtr.defaultPool {
t.Errorf("delete step fail: delete poolStepA, got: %+v", poolCtr.poolSteps())
}
t.Log("delete pool ok")
}