5
5
"testing"
6
6
7
7
"github.com/pkg/errors"
8
+ "github.com/stretchr/testify/assert"
9
+ "github.com/stretchr/testify/mock"
10
+
8
11
enginemocks "github.com/projecteru2/core/engine/mocks"
9
12
enginetypes "github.com/projecteru2/core/engine/types"
10
13
lockmocks "github.com/projecteru2/core/lock/mocks"
@@ -14,8 +17,8 @@ import (
14
17
storemocks "github.com/projecteru2/core/store/mocks"
15
18
"github.com/projecteru2/core/strategy"
16
19
"github.com/projecteru2/core/types"
17
- "github.com/stretchr/testify/assert "
18
- "github.com/stretchr/testify/mock "
20
+ "github.com/projecteru2/core/wal "
21
+ walmocks "github.com/projecteru2/core/wal/mocks "
19
22
)
20
23
21
24
func TestCreateWorkload (t * testing.T ) {
@@ -100,21 +103,18 @@ func TestCreateWorkloadTxn(t *testing.T) {
100
103
scheduler .InitSchedulerV1 (sche )
101
104
c .store = store
102
105
c .scheduler = sche
103
- engine := & enginemocks.API {}
104
106
105
- node1 := & types.Node {
106
- NodeMeta : types.NodeMeta {
107
- Name : "n1" ,
108
- },
109
- Engine : engine ,
110
- }
111
- node2 := & types.Node {
112
- NodeMeta : types.NodeMeta {
113
- Name : "n2" ,
114
- },
115
- Engine : engine ,
116
- }
117
- nodes = []* types.Node {node1 , node2 }
107
+ node1 , node2 := nodes [0 ], nodes [1 ]
108
+
109
+ c .wal = & WAL {WAL : & walmocks.WAL {}}
110
+ mwal := c .wal .WAL .(* walmocks.WAL )
111
+ defer mwal .AssertExpectations (t )
112
+ var walCommitted bool
113
+ commit := wal .Commit (func (context.Context ) error {
114
+ walCommitted = true
115
+ return nil
116
+ })
117
+ mwal .On ("Log" , mock .Anything , eventCreateWorkload , mock .Anything ).Return (commit , nil )
118
118
119
119
store .On ("SaveProcessing" , mock .Anything , mock .Anything , mock .Anything , mock .Anything ).Return (nil )
120
120
store .On ("UpdateProcessing" , mock .Anything , mock .Anything , mock .Anything , mock .Anything ).Return (nil )
@@ -166,6 +166,7 @@ func TestCreateWorkloadTxn(t *testing.T) {
166
166
assert .Error (t , m .Error , "MakeDeployStatus" )
167
167
}
168
168
assert .EqualValues (t , 1 , cnt )
169
+ assert .False (t , walCommitted )
169
170
170
171
// commit resource changes fails: UpdateNodes
171
172
store .On ("MakeDeployStatus" , mock .Anything , mock .Anything , mock .Anything ).Return (nil )
@@ -181,6 +182,7 @@ func TestCreateWorkloadTxn(t *testing.T) {
181
182
strategy .Plans [strategy .Auto ] = old
182
183
}()
183
184
store .On ("UpdateNodes" , mock .Anything , mock .Anything , mock .Anything ).Return (errors .Wrap (context .DeadlineExceeded , "UpdateNodes1" )).Once ()
185
+ walCommitted = false
184
186
ch , err = c .CreateWorkload (ctx , opts )
185
187
assert .Nil (t , err )
186
188
cnt = 0
@@ -195,6 +197,7 @@ func TestCreateWorkloadTxn(t *testing.T) {
195
197
assert .EqualValues (t , 1 , node2 .CPUUsed )
196
198
node1 .CPUUsed = 0
197
199
node2 .CPUUsed = 0
200
+ assert .False (t , walCommitted )
198
201
199
202
// doCreateWorkloadOnNode fails: doGetAndPrepareNode
200
203
store .On ("UpdateNodes" , mock .Anything , mock .Anything , mock .Anything ).Return (nil )
@@ -210,11 +213,12 @@ func TestCreateWorkloadTxn(t *testing.T) {
210
213
}
211
214
return
212
215
}, nil )
213
- engine = node1 .Engine .(* enginemocks.API )
216
+ engine : = node1 .Engine .(* enginemocks.API )
214
217
engine .On ("ImageLocalDigests" , mock .Anything , mock .Anything ).Return (nil , errors .Wrap (context .DeadlineExceeded , "ImageLocalDigest" )).Twice ()
215
218
engine .On ("ImagePull" , mock .Anything , mock .Anything , mock .Anything ).Return (nil , errors .Wrap (context .DeadlineExceeded , "ImagePull" )).Twice ()
216
219
store .On ("UpdateProcessing" , mock .Anything , mock .Anything , mock .Anything , mock .Anything ).Return (nil )
217
220
store .On ("DeleteProcessing" , mock .Anything , mock .Anything , mock .Anything ).Return (nil )
221
+ walCommitted = false
218
222
ch , err = c .CreateWorkload (ctx , opts )
219
223
assert .Nil (t , err )
220
224
cnt = 0
@@ -227,13 +231,15 @@ func TestCreateWorkloadTxn(t *testing.T) {
227
231
assert .EqualValues (t , 2 , cnt )
228
232
assert .EqualValues (t , 0 , node1 .CPUUsed )
229
233
assert .EqualValues (t , 0 , node2 .CPUUsed )
234
+ assert .False (t , walCommitted )
230
235
231
236
// doDeployOneWorkload fails: VirtualizationCreate
232
237
engine .On ("ImageLocalDigests" , mock .Anything , mock .Anything ).Return ([]string {"" }, nil )
233
238
engine .On ("ImageRemoteDigest" , mock .Anything , mock .Anything ).Return ("" , nil )
234
239
engine .On ("VirtualizationCreate" , mock .Anything , mock .Anything ).Return (nil , errors .Wrap (context .DeadlineExceeded , "VirtualizationCreate" )).Twice ()
235
240
engine .On ("VirtualizationRemove" , mock .Anything , mock .Anything , mock .Anything , mock .Anything ).Return (nil )
236
241
store .On ("RemoveWorkload" , mock .Anything , mock .Anything ).Return (nil )
242
+ walCommitted = false
237
243
ch , err = c .CreateWorkload (ctx , opts )
238
244
assert .Nil (t , err )
239
245
cnt = 0
@@ -246,12 +252,14 @@ func TestCreateWorkloadTxn(t *testing.T) {
246
252
assert .EqualValues (t , 2 , cnt )
247
253
assert .EqualValues (t , 0 , node1 .CPUUsed )
248
254
assert .EqualValues (t , 0 , node2 .CPUUsed )
255
+ assert .False (t , walCommitted )
249
256
250
257
// doCreateAndStartWorkload fails: AddWorkload
251
258
engine .On ("VirtualizationCreate" , mock .Anything , mock .Anything ).Return (& enginetypes.VirtualizationCreated {ID : "c1" }, nil )
252
259
engine .On ("VirtualizationStart" , mock .Anything , mock .Anything ).Return (nil )
253
260
engine .On ("VirtualizationInspect" , mock .Anything , mock .Anything ).Return (& enginetypes.VirtualizationInfo {}, nil )
254
261
store .On ("AddWorkload" , mock .Anything , mock .Anything ).Return (errors .Wrap (context .DeadlineExceeded , "AddWorkload" )).Twice ()
262
+ walCommitted = false
255
263
ch , err = c .CreateWorkload (ctx , opts )
256
264
assert .Nil (t , err )
257
265
cnt = 0
@@ -264,13 +272,15 @@ func TestCreateWorkloadTxn(t *testing.T) {
264
272
assert .EqualValues (t , 2 , cnt )
265
273
assert .EqualValues (t , 0 , node1 .CPUUsed )
266
274
assert .EqualValues (t , 0 , node2 .CPUUsed )
275
+ assert .True (t , walCommitted )
267
276
268
277
// doCreateAndStartWorkload fails: first time AddWorkload failed
269
278
engine .On ("VirtualizationCreate" , mock .Anything , mock .Anything ).Return (& enginetypes.VirtualizationCreated {ID : "c1" }, nil )
270
279
engine .On ("VirtualizationStart" , mock .Anything , mock .Anything ).Return (nil )
271
280
engine .On ("VirtualizationInspect" , mock .Anything , mock .Anything ).Return (& enginetypes.VirtualizationInfo {}, nil )
272
281
store .On ("AddWorkload" , mock .Anything , mock .Anything ).Return (errors .Wrap (context .DeadlineExceeded , "AddWorkload2" )).Once ()
273
282
store .On ("AddWorkload" , mock .Anything , mock .Anything ).Return (nil ).Once ()
283
+ walCommitted = false
274
284
ch , err = c .CreateWorkload (ctx , opts )
275
285
assert .Nil (t , err )
276
286
cnt = 0
@@ -287,12 +297,14 @@ func TestCreateWorkloadTxn(t *testing.T) {
287
297
assert .EqualValues (t , 2 , cnt )
288
298
assert .EqualValues (t , 1 , errCnt )
289
299
assert .EqualValues (t , 1 , node1 .CPUUsed + node2 .CPUUsed )
300
+ assert .True (t , walCommitted )
290
301
store .AssertExpectations (t )
291
302
engine .AssertExpectations (t )
292
303
}
293
304
294
305
func newCreateWorkloadCluster (t * testing.T ) (* Calcium , []* types.Node ) {
295
306
c := NewTestCluster ()
307
+ c .wal = & WAL {WAL : & walmocks.WAL {}}
296
308
c .store = & storemocks.Store {}
297
309
c .scheduler = & schedulermocks.Scheduler {}
298
310
scheduler .InitSchedulerV1 (c .scheduler )
@@ -337,6 +349,10 @@ func newCreateWorkloadCluster(t *testing.T) (*Calcium, []*types.Node) {
337
349
return
338
350
}, nil )
339
351
352
+ mwal := c .wal .WAL .(* walmocks.WAL )
353
+ commit := wal .Commit (func (context.Context ) error { return nil })
354
+ mwal .On ("Log" , mock .Anything , mock .Anything , mock .Anything ).Return (commit , nil )
355
+
340
356
sche := c .scheduler .(* schedulermocks.Scheduler )
341
357
sche .On ("SelectStorageNodes" , mock .AnythingOfType ("[]resourcetypes.ScheduleInfo" ), mock .AnythingOfType ("int64" )).Return (func (scheduleInfos []resourcetypes.ScheduleInfo , _ int64 ) []resourcetypes.ScheduleInfo {
342
358
return scheduleInfos
0 commit comments