| OLD | NEW |
| (Empty) |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 package retry | |
| 6 | |
| 7 import ( | |
| 8 "errors" | |
| 9 "testing" | |
| 10 "time" | |
| 11 | |
| 12 "github.com/maruel/ut" | |
| 13 ) | |
| 14 | |
| 15 func TestDoOnce(t *testing.T) { | |
| 16 c := &Config{1, 0, 0, 0} | |
| 17 r := &retriable{} | |
| 18 ut.AssertEqual(t, nil, c.Do(r)) | |
| 19 ut.AssertEqual(t, 1, r.closed) | |
| 20 ut.AssertEqual(t, 1, r.tries) | |
| 21 } | |
| 22 | |
| 23 func TestDoRetryExceeded(t *testing.T) { | |
| 24 c := &Config{1, 0, 0, 0} | |
| 25 r := &retriable{errs: []error{errRetry}} | |
| 26 ut.AssertEqual(t, errRetry, c.Do(r)) | |
| 27 ut.AssertEqual(t, 1, r.closed) | |
| 28 ut.AssertEqual(t, 1, r.tries) | |
| 29 } | |
| 30 | |
| 31 func TestDoRetry(t *testing.T) { | |
| 32 c := &Config{2, 0, time.Millisecond, 0} | |
| 33 r := &retriable{errs: []error{errRetry}} | |
| 34 ut.AssertEqual(t, nil, c.Do(r)) | |
| 35 ut.AssertEqual(t, 1, r.closed) | |
| 36 ut.AssertEqual(t, 2, r.tries) | |
| 37 } | |
| 38 | |
| 39 func TestError(t *testing.T) { | |
| 40 ut.AssertEqual(t, "please try again", errRetry.Error()) | |
| 41 } | |
| 42 | |
| 43 // Private details. | |
| 44 | |
| 45 var errYo = errors.New("yo") | |
| 46 var errRetry = Error{errors.New("please try again")} | |
| 47 | |
| 48 type retriable struct { | |
| 49 closed int | |
| 50 tries int | |
| 51 errs []error | |
| 52 } | |
| 53 | |
| 54 func (r *retriable) Close() error { | |
| 55 r.closed++ | |
| 56 if r.closed > 1 { | |
| 57 return errYo | |
| 58 } | |
| 59 return nil | |
| 60 } | |
| 61 | |
| 62 func (r *retriable) Do() error { | |
| 63 r.tries++ | |
| 64 if len(r.errs) != 0 { | |
| 65 err := r.errs[0] | |
| 66 r.errs = r.errs[1:] | |
| 67 return err | |
| 68 } | |
| 69 return nil | |
| 70 } | |
| OLD | NEW |