forked from seborama/govcr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvcr_transport_test.go
87 lines (75 loc) · 2.2 KB
/
vcr_transport_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package govcr
import (
"log"
"net/http"
"os"
"reflect"
"testing"
)
type mockRoundTripper struct{}
func (t *mockRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
return &http.Response{
Request: req,
StatusCode: http.StatusMovedPermanently,
}, nil
}
func Test_vcrTransport_RoundTrip_doesNotChangeLiveReqOrLiveResp(t *testing.T) {
logger := log.New(os.Stderr, "", log.LstdFlags)
out, err := os.OpenFile(os.DevNull, os.O_WRONLY|os.O_APPEND, 0600)
if err != nil {
t.Errorf("unable to initialise logger - error = %v", err)
return
}
defer func() { out.Close() }()
logger.SetOutput(out)
mutateReq := RequestFilter(func(req Request) Request {
req.Method = "INVALID"
req.URL.Host = "host.changed.internal"
return req
})
requestFilters := RequestFilters{}
requestFilters.Add(mutateReq)
mutateResp := ResponseFilter(func(resp Response) Response {
resp.StatusCode = -9999
return resp
})
responseFilters := ResponseFilters{}
responseFilters.Add(mutateResp)
mrt := &mockRoundTripper{}
transport := &vcrTransport{
PCB: &pcb{
DisableRecording: true,
Transport: mrt,
RequestFilter: requestFilters.combined(),
ResponseFilter: responseFilters.combined(),
Logger: logger,
CassettePath: "",
},
Cassette: newCassette("", ""),
}
req, err := http.NewRequest("GET", "https://example.com/path?query", toReadCloser([]byte("Lorem ipsum dolor sit amet")))
if err != nil {
t.Errorf("req http.NewRequest() error = %v", err)
return
}
wantReq, err := http.NewRequest("GET", "https://example.com/path?query", toReadCloser([]byte("Lorem ipsum dolor sit amet")))
if err != nil {
t.Errorf("wantReq http.NewRequest() error = %v", err)
return
}
gotResp, err := transport.RoundTrip(req)
if err != nil {
t.Errorf("vcrTransport.RoundTrip() error = %v", err)
return
}
wantResp := http.Response{
Request: wantReq,
StatusCode: http.StatusMovedPermanently,
}
if !reflect.DeepEqual(req, wantReq) {
t.Errorf("vcrTransport.RoundTrip() Request has been modified = %+v, want %+v", req, wantReq)
}
if !reflect.DeepEqual(gotResp, &wantResp) {
t.Errorf("vcrTransport.RoundTrip() Response has been modified = %+v, want %+v", gotResp, wantResp)
}
}