Skip to content

Commit 60c7b8b

Browse files
committed
improve: Add external server checker
1 parent becdd74 commit 60c7b8b

File tree

3 files changed

+52
-1
lines changed

3 files changed

+52
-1
lines changed

checker.go

+27-1
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,16 @@ type Checker struct {
5252
request *http.Request
5353
response *http.Response
5454
pcookies map[string]bool
55+
56+
// Set external to true if testing an external server.
57+
// In this case, handler and server are undefined.
58+
external bool
59+
url string
5560
server *httptest.Server
5661
handler http.Handler
5762
}
5863

59-
// New creates an HTTP Checker.
64+
// New creates an HTTP Checker for testing with the given handler.
6065
func New(h http.Handler, options ...Option) *Checker {
6166
jar, _ := cookiejar.New(nil)
6267
ret := &Checker{
@@ -74,6 +79,24 @@ func New(h http.Handler, options ...Option) *Checker {
7479
return ret
7580
}
7681

82+
// NewExternal creates an HTTP Checker for testing an external server specified by url.
83+
func NewExternal(url string, options ...Option) *Checker {
84+
jar, _ := cookiejar.New(nil)
85+
ret := &Checker{
86+
client: &http.Client{
87+
Timeout: DefaultClientTimeout,
88+
Jar: jar,
89+
},
90+
pcookies: map[string]bool{},
91+
external: true,
92+
url: url,
93+
}
94+
for _, v := range options {
95+
v(ret)
96+
}
97+
return ret
98+
}
99+
77100
func createServer(handler http.Handler) *httptest.Server {
78101
return httptest.NewUnstartedServer(handler)
79102
}
@@ -119,5 +142,8 @@ func (c *Checker) Test(t TestingT, method, path string) *Tester {
119142

120143
// GetURL returns the server URL.
121144
func (c *Checker) GetURL() string {
145+
if c.external {
146+
return c.url
147+
}
122148
return "http://" + c.server.Listener.Addr().String()
123149
}

checker_test.go

+19
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/xml"
66
"io"
77
"net/http"
8+
"net/http/httptest"
89
"testing"
910
"time"
1011

@@ -86,6 +87,24 @@ func TestNew(t *testing.T) {
8687
assert.Equal(t, DefaultClientTimeout, checker.client.Timeout)
8788
}
8889

90+
func TestNewExternal(t *testing.T) {
91+
mux := http.NewServeMux()
92+
mux.HandleFunc("/some", func(w http.ResponseWriter, r *http.Request) {
93+
w.WriteHeader(http.StatusOK)
94+
w.Write([]byte("hello"))
95+
})
96+
ts := httptest.NewServer(mux)
97+
defer ts.Close()
98+
checker := NewExternal(ts.URL)
99+
require.NotNil(t, checker)
100+
assert.Equal(t, DefaultClientTimeout, checker.client.Timeout)
101+
assert.True(t, checker.external)
102+
checker.Test(t, http.MethodGet, "/some").
103+
Check().
104+
HasStatus(http.StatusOK).
105+
HasBody([]byte("hello"))
106+
}
107+
89108
func TestCheckerOption_ClientTimeout(t *testing.T) {
90109
t.Skip("skip this test because it expects failure.")
91110
timeout := 10 * time.Millisecond

tester.go

+6
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,18 @@ func (tt *Tester) Cb(callback func(*http.Response)) {
6666
// Will run HTTP server
6767
func (tt *Tester) run() {
6868
// log.Println("running server")
69+
if tt.external {
70+
return
71+
}
6972
tt.server.Start()
7073
}
7174

7275
// Will stop HTTP server
7376
func (tt *Tester) stop() {
7477
// log.Println("stopping server")
78+
if tt.external {
79+
return
80+
}
7581
tt.server.Close()
7682
tt.server = createServer(tt.handler)
7783
}

0 commit comments

Comments
 (0)