Passed
Push — master ( 938cbd...107211 )
by Stefano
01:21
created

test.NewTSLServerWithAssertion   A

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
package test
2
3
import (
4
	"sync"
5
6
	"net/http"
7
	"net/http/httptest"
8
)
9
10
func NewServerWithAssertion(handler http.HandlerFunc) (*httptest.Server, *ServerAssertion) {
11
	serverAssertion := &ServerAssertion{}
12
13
	server := httptest.NewServer(serverAssertion.wrap(handler))
14
15
	return server, serverAssertion
16
}
17
18
func NewTSLServerWithAssertion(handler http.HandlerFunc) (*httptest.Server, *ServerAssertion) {
19
	serverAssertion := &ServerAssertion{}
20
21
	server := httptest.NewUnstartedServer(serverAssertion.wrap(handler))
22
	server.StartTLS()
23
24
	return server, serverAssertion
25
}
26
27
type ServerAssertion struct {
28
	requests   []http.Request
29
	requestsMx sync.RWMutex
30
}
31
32
func (s *ServerAssertion) wrap(handler http.HandlerFunc) http.HandlerFunc {
33
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
34
		handler(w, r)
35
36
		s.requestsMx.Lock()
37
		defer s.requestsMx.Unlock()
38
39
		s.requests = append(s.requests, *r)
40
	})
41
}
42
43
func (s *ServerAssertion) Range(fn func(index int, r http.Request)) {
44
	s.requestsMx.RLock()
45
	defer s.requestsMx.RUnlock()
46
47
	for i, r := range s.requests {
48
		fn(i, r)
49
	}
50
}
51
52
func (s *ServerAssertion) At(index int, fn func(r http.Request)) {
53
	s.requestsMx.RLock()
54
	defer s.requestsMx.RUnlock()
55
56
	fn(s.requests[index])
57
}
58
59
func (s *ServerAssertion) Len() int {
60
	s.requestsMx.RLock()
61
	defer s.requestsMx.RUnlock()
62
63
	return len(s.requests)
64
}
65