-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathbucket_test.go
112 lines (89 loc) · 3.51 KB
/
bucket_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
109
110
111
112
package bucket
import (
"errors"
"github.com/changsongl/delay-queue/job"
logmock "github.com/changsongl/delay-queue/test/mock/log"
lockmock "github.com/changsongl/delay-queue/test/mock/pkg/lock"
storemock "github.com/changsongl/delay-queue/test/mock/store"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"testing"
)
func TestBucketCreateJob(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
sm := storemock.NewMockStore(ctrl)
lockMk := lockmock.NewMockLocker(ctrl)
mLog := logmock.NewMockLogger(ctrl)
sm.EXPECT().GetLock(gomock.All()).Return(lockMk).AnyTimes()
b := New(sm, mLog, 10, "test_bucket")
// case1: no error
sm.EXPECT().CreateJobInBucket(gomock.Eq("test_bucket_1"), gomock.All(), gomock.All()).Return(nil)
sm.EXPECT().CollectInFlightJobNumberBucket(gomock.Any()).AnyTimes()
err := b.CreateJob(nil, true)
require.NoError(t, err, "first create should no error")
// case2: has error
expectErr := errors.New("expect error")
sm.EXPECT().CreateJobInBucket(gomock.Eq("test_bucket_2"), gomock.All(), gomock.All()).Return(expectErr)
sm.EXPECT().CollectInFlightJobNumberBucket(gomock.Any()).AnyTimes()
err = b.CreateJob(nil, true)
require.Equal(t, expectErr, err, "second create should be expect error")
}
func TestBucketGetBuckets(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
sm := storemock.NewMockStore(ctrl)
lockMk := lockmock.NewMockLocker(ctrl)
mLog := logmock.NewMockLogger(ctrl)
sm.EXPECT().GetLock(gomock.All()).Return(lockMk).AnyTimes()
sm.EXPECT().CollectInFlightJobNumberBucket(gomock.Any()).AnyTimes()
b := New(sm, mLog, 2, "test_bucket")
bucketNames := b.GetBuckets()
expectNames := []uint64{
0, 1,
}
for i, bucketName := range bucketNames {
if i > len(expectNames) {
t.Error("it is greater than expecting length")
t.FailNow()
}
require.Equal(t, expectNames[i], bucketName, "bucket names are not equal")
}
}
func TestBucketGetBucketJobs(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
sm := storemock.NewMockStore(ctrl)
lockMk := lockmock.NewMockLocker(ctrl)
mLog := logmock.NewMockLogger(ctrl)
sm.EXPECT().GetLock(gomock.All()).Return(lockMk).AnyTimes()
sm.EXPECT().CollectInFlightJobNumberBucket(gomock.Any()).AnyTimes()
b := New(sm, mLog, 2, "test_bucket")
expectErr := errors.New("error GetReadyJobsInBucket")
sm.EXPECT().GetReadyJobsInBucket(gomock.Eq("test_bucket_0"), gomock.All()).Return(nil, expectErr)
versions, err := b.GetBucketJobs(0)
require.Equal(t, expectErr, err, "it should be expecting")
require.Nil(t, versions, "version names should be nil")
expectNvs := []job.NameVersion{
"nv1", "nv2",
}
sm.EXPECT().GetReadyJobsInBucket(gomock.Eq("test_bucket_1"), gomock.All()).Return(expectNvs, nil)
versions, err = b.GetBucketJobs(1)
require.NoError(t, err, "it should have no error")
require.Equal(t, expectNvs, versions, "version names should be equal")
}
func TestBucketFetchNum(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
sm := storemock.NewMockStore(ctrl)
lockMk := lockmock.NewMockLocker(ctrl)
mLog := logmock.NewMockLogger(ctrl)
sm.EXPECT().GetLock(gomock.All()).Return(lockMk).AnyTimes()
sm.EXPECT().CollectInFlightJobNumberBucket(gomock.Any()).AnyTimes()
b := New(sm, mLog, 2, "test_bucket")
require.Equal(t, DefaultMaxFetchNum, b.GetMaxFetchNum(), "fetch number should be default")
var newNum uint64 = 30
b.SetMaxFetchNum(newNum)
require.Equal(t, newNum, b.GetMaxFetchNum(), "fetch number should be new number")
}
// TODO: test collect metric