...
1
2
3
4
5 package redirect
6
7 import (
8 "net/http"
9 "net/http/httptest"
10 "testing"
11 )
12
13 type redirectResult struct {
14 status int
15 path string
16 }
17
18 func errorResult(status int) redirectResult {
19 return redirectResult{status, ""}
20 }
21
22 func TestRedirects(t *testing.T) {
23 var tests = map[string]redirectResult{
24 "/foo": errorResult(404),
25 }
26
27 mux := http.NewServeMux()
28 Register(mux)
29 ts := httptest.NewServer(mux)
30 defer ts.Close()
31
32 for path, want := range tests {
33 if want.path != "" && want.path[0] == '/' {
34
35 want.path = ts.URL + want.path
36 }
37
38 req, err := http.NewRequest("GET", ts.URL+path, nil)
39 if err != nil {
40 t.Errorf("(path: %q) unexpected error: %v", path, err)
41 continue
42 }
43
44 resp, err := http.DefaultTransport.RoundTrip(req)
45 if err != nil {
46 t.Errorf("(path: %q) unexpected error: %v", path, err)
47 continue
48 }
49 resp.Body.Close()
50
51 if resp.StatusCode != want.status {
52 t.Errorf("(path: %q) got status %d, want %d", path, resp.StatusCode, want.status)
53 }
54
55 if want.status != 301 && want.status != 302 {
56
57 continue
58 }
59
60 out, _ := resp.Location()
61 if got := out.String(); got != want.path {
62 t.Errorf("(path: %q) got %s, want %s", path, got, want.path)
63 }
64 }
65 }
66
View as plain text