6
6
"fmt"
7
7
"reflect"
8
8
"strconv"
9
+ "sync"
9
10
"testing"
10
11
"time"
11
12
@@ -86,6 +87,8 @@ type mockWatch struct {
86
87
87
88
nextErr bool
88
89
stopErr bool
90
+
91
+ lock sync.Mutex
89
92
}
90
93
91
94
func (m * mockWatch ) Next () ([]* registry.ServiceInstance , error ) {
@@ -94,6 +97,8 @@ func (m *mockWatch) Next() ([]*registry.ServiceInstance, error) {
94
97
return nil , m .ctx .Err ()
95
98
default :
96
99
}
100
+ m .lock .Lock ()
101
+ defer m .lock .Unlock ()
97
102
if m .nextErr {
98
103
return nil , errors .New ("mock test error" )
99
104
}
@@ -115,6 +120,8 @@ func (m *mockWatch) Next() ([]*registry.ServiceInstance, error) {
115
120
}
116
121
117
122
func (m * mockWatch ) Stop () error {
123
+ m .lock .Lock ()
124
+ defer m .lock .Unlock ()
118
125
if m .stopErr {
119
126
return errors .New ("mock test error" )
120
127
}
@@ -130,46 +137,67 @@ func TestResolver(t *testing.T) {
130
137
return
131
138
}
132
139
140
+ cancelCtx , cancel := context .WithCancel (context .Background ())
141
+ defer cancel ()
142
+
133
143
// 异步 无需报错
134
- _ , err = newResolver (context . Background () , & mockDiscoveries {true , false , false }, ta , & mockRebalancer {}, false , false , 25 )
144
+ r , err : = newResolver (cancelCtx , & mockDiscoveries {true , false , false }, ta , & mockRebalancer {}, false , false , 25 )
135
145
if err != nil {
136
146
t .Errorf ("expect %v, got %v" , nil , err )
137
147
}
148
+ if r != nil {
149
+ _ = r .Close ()
150
+ }
138
151
139
152
// 同步 一切正常运行
140
- _ , err = newResolver (context . Background () , & mockDiscoveries {false , false , false }, ta , & mockRebalancer {}, true , true , 25 )
153
+ r , err = newResolver (cancelCtx , & mockDiscoveries {false , false , false }, ta , & mockRebalancer {}, true , true , 25 )
141
154
if err != nil {
142
155
t .Errorf ("expect %v, got %v" , nil , err )
143
156
}
157
+ if r != nil {
158
+ _ = r .Close ()
159
+ }
144
160
145
161
// 同步 但是 next 出错 以及 stop 出错
146
- _ , err = newResolver (context . Background () , & mockDiscoveries {false , true , true }, ta , & mockRebalancer {}, true , true , 25 )
162
+ r , err = newResolver (cancelCtx , & mockDiscoveries {false , true , true }, ta , & mockRebalancer {}, true , true , 25 )
147
163
if err == nil {
148
164
t .Errorf ("expect err, got nil" )
149
165
}
166
+ if r != nil {
167
+ _ = r .Close ()
168
+ }
150
169
151
170
// 同步 service name watch 失败
152
- _ , err = newResolver (context . Background () , & mockDiscoveries {false , true , true }, & Target {
171
+ r , err = newResolver (cancelCtx , & mockDiscoveries {false , true , true }, & Target {
153
172
Scheme : "discovery" ,
154
173
Endpoint : errServiceName ,
155
174
}, & mockRebalancer {}, true , true , 25 )
156
175
if err == nil {
157
176
t .Errorf ("expect err, got nil" )
158
177
}
178
+ if r != nil {
179
+ _ = r .Close ()
180
+ }
159
181
160
- cancelCtx , cancel := context .WithCancel (context .Background ())
161
182
cancel ()
162
183
163
184
// 此处应该打印出来 context.Canceled
164
- r , err : = newResolver (cancelCtx , & mockDiscoveries {false , false , false }, ta , & mockRebalancer {}, false , false , 25 )
185
+ r , err = newResolver (cancelCtx , & mockDiscoveries {false , false , false }, ta , & mockRebalancer {}, false , false , 25 )
165
186
if err != nil {
166
187
t .Errorf ("expect %v, got %v" , nil , err )
167
188
}
168
- _ = r .Close ()
189
+ if r != nil {
190
+ _ = r .Close ()
191
+ }
169
192
170
193
// 同步 但是服务取消,此时需要报错
171
- _ , err = newResolver (cancelCtx , & mockDiscoveries {false , false , true }, ta , & mockRebalancer {}, true , true , 25 )
194
+ r , err = newResolver (cancelCtx , & mockDiscoveries {false , false , true }, ta , & mockRebalancer {}, true , true , 25 )
172
195
if err == nil {
173
196
t .Errorf ("expect ctx cancel err, got nil" )
174
197
}
198
+ if r != nil {
199
+ _ = r .Close ()
200
+ }
201
+
202
+ time .Sleep (100 * time .Millisecond )
175
203
}
0 commit comments