OSDN Git Service

new repo
[bytom/vapor.git] / vendor / golang.org / x / crypto / acme / types_test.go
1 // Copyright 2017 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package acme
6
7 import (
8         "errors"
9         "net/http"
10         "testing"
11         "time"
12 )
13
14 func TestRateLimit(t *testing.T) {
15         now := time.Date(2017, 04, 27, 10, 0, 0, 0, time.UTC)
16         f := timeNow
17         defer func() { timeNow = f }()
18         timeNow = func() time.Time { return now }
19
20         h120, hTime := http.Header{}, http.Header{}
21         h120.Set("Retry-After", "120")
22         hTime.Set("Retry-After", "Tue Apr 27 11:00:00 2017")
23
24         err1 := &Error{
25                 ProblemType: "urn:ietf:params:acme:error:nolimit",
26                 Header:      h120,
27         }
28         err2 := &Error{
29                 ProblemType: "urn:ietf:params:acme:error:rateLimited",
30                 Header:      h120,
31         }
32         err3 := &Error{
33                 ProblemType: "urn:ietf:params:acme:error:rateLimited",
34                 Header:      nil,
35         }
36         err4 := &Error{
37                 ProblemType: "urn:ietf:params:acme:error:rateLimited",
38                 Header:      hTime,
39         }
40
41         tt := []struct {
42                 err error
43                 res time.Duration
44                 ok  bool
45         }{
46                 {nil, 0, false},
47                 {errors.New("dummy"), 0, false},
48                 {err1, 0, false},
49                 {err2, 2 * time.Minute, true},
50                 {err3, 0, true},
51                 {err4, time.Hour, true},
52         }
53         for i, test := range tt {
54                 res, ok := RateLimit(test.err)
55                 if ok != test.ok {
56                         t.Errorf("%d: RateLimit(%+v): ok = %v; want %v", i, test.err, ok, test.ok)
57                         continue
58                 }
59                 if res != test.res {
60                         t.Errorf("%d: RateLimit(%+v) = %v; want %v", i, test.err, res, test.res)
61                 }
62         }
63 }