/
counter_test.go
108 lines (87 loc) · 2.65 KB
/
counter_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
108
package sereno_test
import (
"runtime"
"sync"
"testing"
"time"
"github.com/lytics/sereno"
"github.com/lytics/sereno/embeddedetcd"
"golang.org/x/net/context"
)
const wipe_data_onterm = true
func TestCounterInc(t *testing.T) {
runtime.GOMAXPROCS(8)
cluster := embeddedetcd.TestClusterOf1()
cluster.Launch()
defer cluster.Terminate(wipe_data_onterm)
startbarrier := &sync.WaitGroup{}
startbarrier.Add(1)
const wrkers = 3
const wrkersInc = 100
alldone := &sync.WaitGroup{}
alldone.Add(wrkers)
for x := 0; x < wrkers; x++ {
go func() {
startbarrier.Wait()
kapi := KeyClientFromCluster(cluster)
ctx := context.Background()
cntr, err := sereno.NewCounter(ctx, "counter001", kapi)
AssertT(t, err == nil, "err should be nil, got:%v", err)
for i := 0; i < wrkersInc; i++ {
err := cntr.Inc(1)
AssertT(t, err == nil, "err should be nil, got:%v", err)
}
alldone.Done()
}()
}
kapi := KeyClientFromCluster(cluster)
ctx := context.Background()
mycntr, err := sereno.NewCounter(ctx, "counter001", kapi)
AssertT(t, err == nil, "err should be nil, got:%v", err)
testtimeout := NewTestCaseTimeout(t, 10*time.Second, time.Microsecond)
defer testtimeout.End()
startbarrier.Done()
alldone.Wait()
cnt, err := mycntr.Val()
AssertT(t, err == nil, "err should be nil, got:%v", err)
AssertT(t, cnt == wrkers*wrkersInc, "expected %v counts, got:%v", wrkers*wrkersInc, cnt)
}
func TestCounterDec(t *testing.T) {
runtime.GOMAXPROCS(8)
cluster := embeddedetcd.TestClusterOf1()
cluster.Launch()
defer cluster.Terminate(wipe_data_onterm)
const wrkers = 3
const wrkersInc = 100
startbarrier := &sync.WaitGroup{}
startbarrier.Add(1)
alldone := &sync.WaitGroup{}
alldone.Add(wrkers)
kapi := KeyClientFromCluster(cluster)
ctx := context.Background()
mycntr, err := sereno.NewCounter(ctx, "counter002", kapi)
AssertT(t, err == nil, "err should be nil, got:%v", err)
err = mycntr.Set(wrkers * wrkersInc)
AssertT(t, err == nil, "err should be nil, got:%v", err)
for x := 0; x < wrkers; x++ {
go func() {
startbarrier.Wait()
kapi := KeyClientFromCluster(cluster)
ctx := context.Background()
cntr, err := sereno.NewCounter(ctx, "counter002", kapi)
AssertT(t, err == nil, "err should be nil, got:%v", err)
for i := 0; i < wrkersInc; i++ {
err := cntr.Dec(1)
AssertT(t, err == nil, "err should be nil, got:%v", err)
}
alldone.Done()
}()
}
testtimeout := NewTestCaseTimeout(t, 10*time.Second, time.Microsecond)
defer testtimeout.End()
startbarrier.Done()
alldone.Wait()
cnt, err := mycntr.Val()
AssertT(t, err == nil, "err should be nil, got:%v", err)
AssertT(t, cnt == 0, "expected %v counts, got:%v", 0, cnt)
}