@@ -266,83 +266,177 @@ func TestRepositoryPoolAddDir(t *testing.T) {
266
266
require .ElementsMatch (arrayExpected , arrayID )
267
267
}
268
268
269
+ func TestRepositoryPoolSiva (t * testing.T ) {
270
+ require := require .New (t )
271
+
272
+ expectedRepos := 3
273
+
274
+ pool := NewRepositoryPool ()
275
+ path := filepath .Join (
276
+ os .Getenv ("GOPATH" ),
277
+ "src" , "github.com" , "src-d" , "gitbase" ,
278
+ "_testdata" ,
279
+ )
280
+
281
+ require .NoError (pool .AddSivaDir (path ))
282
+ require .Equal (expectedRepos , len (pool .repositories ))
283
+
284
+ expected := []int {606 , 452 , 75 }
285
+ result := make ([]int , expectedRepos )
286
+
287
+ for i := 0 ; i < expectedRepos ; i ++ {
288
+ repo , err := pool .GetPos (i )
289
+ require .NoError (err )
290
+
291
+ iter , err := repo .Repo .CommitObjects ()
292
+ require .NoError (err )
293
+
294
+ require .NoError (iter .ForEach (func (c * object.Commit ) error {
295
+ result [i ]++
296
+ return nil
297
+ }))
298
+ }
299
+
300
+ require .Equal (expected , result )
301
+ }
302
+
269
303
var errIter = fmt .Errorf ("Error iter" )
270
304
271
- type testErrorIter struct {}
305
+ type newIteratorFunc func (* Repository ) (RowRepoIter , error )
306
+ type nextFunc func () (sql.Row , error )
307
+
308
+ type testErrorIter struct {
309
+ newIterator newIteratorFunc
310
+ next nextFunc
311
+ }
272
312
273
313
func (d * testErrorIter ) NewIterator (
274
314
repo * Repository ,
275
315
) (RowRepoIter , error ) {
316
+ if d .newIterator != nil {
317
+ return d .newIterator (repo )
318
+ }
319
+
276
320
return nil , errIter
277
- // return &testErrorIter{}, nil
278
321
}
279
322
280
323
func (d * testErrorIter ) Next () (sql.Row , error ) {
324
+ if d .next != nil {
325
+ return d .next ()
326
+ }
327
+
281
328
return nil , io .EOF
282
329
}
283
330
284
331
func (d * testErrorIter ) Close () error {
285
332
return nil
286
333
}
287
334
288
- func TestRepositoryErrorIter (t * testing.T ) {
335
+ func testCaseRepositoryErrorIter (
336
+ t * testing.T ,
337
+ pool * RepositoryPool ,
338
+ iter RowRepoIter ,
339
+ retError error ,
340
+ skipGitErrors bool ,
341
+ ) {
289
342
require := require .New (t )
290
343
291
- path := fixtures .Basic ().ByTag ("worktree" ).One ().Worktree ().Root ()
292
- pool := NewRepositoryPool ()
293
- pool .Add ("one" , path , gitRepo )
294
-
295
344
timeout , cancel := context .WithTimeout (context .Background (), 5 * time .Second )
345
+ ctx := sql .NewContext (timeout ,
346
+ sql .WithSession (NewSession (pool , WithSkipGitErrors (skipGitErrors ))),
347
+ )
296
348
297
- ctx := sql .NewContext (timeout , sql .WithSession (NewSession (pool )))
298
- eIter := & testErrorIter {}
299
-
300
- iter , err := NewRowRepoIter (ctx , eIter )
301
- repoIter := iter .(* rowRepoIter )
349
+ r , err := NewRowRepoIter (ctx , iter )
302
350
require .NoError (err )
303
351
352
+ repoIter , ok := r .(* rowRepoIter )
353
+ require .True (ok )
354
+
304
355
go func () {
305
- repoIter .Next ()
356
+ for {
357
+ _ , err := repoIter .Next ()
358
+ if err != nil {
359
+ break
360
+ }
361
+ }
306
362
}()
307
363
308
364
select {
309
365
case <- repoIter .done :
310
- require .Equal (errIter , repoIter .err )
366
+ require .Equal (retError , repoIter .err )
311
367
}
312
368
313
369
cancel ()
314
370
}
315
371
316
- func TestRepositoryPoolSiva (t * testing.T ) {
317
- require := require .New (t )
372
+ func TestRepositoryErrorIter (t * testing.T ) {
373
+ path := fixtures .Basic ().ByTag ("worktree" ).One ().Worktree ().Root ()
374
+ pool := NewRepositoryPool ()
375
+ pool .Add ("one" , path , gitRepo )
318
376
319
- expectedRepos := 3
377
+ iter := & testErrorIter {}
378
+ testCaseRepositoryErrorIter (t , pool , iter , errIter , false )
379
+ }
320
380
381
+ func TestRepositoryErrorBadRepository (t * testing.T ) {
321
382
pool := NewRepositoryPool ()
322
- path := filepath .Join (
323
- os .Getenv ("GOPATH" ),
324
- "src" , "github.com" , "src-d" , "gitbase" ,
325
- "_testdata" ,
326
- )
383
+ pool .Add ("one" , "badpath" , gitRepo )
327
384
328
- require .NoError (pool .AddSivaDir (path ))
329
- require .Equal (expectedRepos , len (pool .repositories ))
385
+ iter := & testErrorIter {}
330
386
331
- expected := []int {606 , 452 , 75 }
332
- result := make ([]int , expectedRepos )
387
+ newIterator := func (* Repository ) (RowRepoIter , error ) {
388
+ return iter , nil
389
+ }
333
390
334
- for i := 0 ; i < expectedRepos ; i ++ {
335
- repo , err := pool .GetPos (i )
336
- require .NoError (err )
391
+ count := 0
392
+ next := func () (sql.Row , error ) {
393
+ if count >= 10 {
394
+ return nil , io .EOF
395
+ }
337
396
338
- iter , err := repo .Repo .CommitObjects ()
339
- require .NoError (err )
397
+ count ++
340
398
341
- require .NoError (iter .ForEach (func (c * object.Commit ) error {
342
- result [i ]++
343
- return nil
344
- }))
399
+ return sql .NewRow ("test" ), nil
345
400
}
346
401
347
- require .Equal (expected , result )
402
+ iter .newIterator = newIterator
403
+ iter .next = next
404
+
405
+ testCaseRepositoryErrorIter (t , pool , iter , git .ErrRepositoryNotExists , false )
406
+ testCaseRepositoryErrorIter (t , pool , iter , io .EOF , true )
407
+ }
408
+
409
+ func TestRepositoryErrorBadRow (t * testing.T ) {
410
+ path := fixtures .Basic ().ByTag ("worktree" ).One ().Worktree ().Root ()
411
+ pool := NewRepositoryPool ()
412
+ pool .Add ("one" , path , gitRepo )
413
+
414
+ iter := & testErrorIter {}
415
+
416
+ newIterator := func (* Repository ) (RowRepoIter , error ) {
417
+ return iter , nil
418
+ }
419
+
420
+ errRow := fmt .Errorf ("bad row" )
421
+
422
+ count := 0
423
+ next := func () (sql.Row , error ) {
424
+ if count == 5 {
425
+ return nil , errRow
426
+ }
427
+
428
+ if count >= 10 {
429
+ return nil , io .EOF
430
+ }
431
+
432
+ count ++
433
+
434
+ return sql .NewRow ("test" ), nil
435
+ }
436
+
437
+ iter .newIterator = newIterator
438
+ iter .next = next
439
+
440
+ testCaseRepositoryErrorIter (t , pool , iter , errRow , false )
441
+ testCaseRepositoryErrorIter (t , pool , iter , io .EOF , true )
348
442
}
0 commit comments