-
Notifications
You must be signed in to change notification settings - Fork 706
/
curl_cmd_test.go
136 lines (120 loc) · 2.85 KB
/
curl_cmd_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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package resty
import (
"io"
"net/http"
"os"
"strings"
"testing"
)
// 1. Generate curl for unexecuted request(dry-run)
func TestGenerateUnexecutedCurl(t *testing.T) {
req := dclr().
SetBody(map[string]string{
"name": "Alex",
}).
SetCookies(
[]*http.Cookie{
{Name: "count", Value: "1"},
},
)
curlCmdUnexecuted := req.EnableGenerateCurlOnDebug().GenerateCurlCommand()
req.DisableGenerateCurlOnDebug()
if !strings.Contains(curlCmdUnexecuted, "Cookie: count=1") ||
!strings.Contains(curlCmdUnexecuted, "curl -X GET") ||
!strings.Contains(curlCmdUnexecuted, `-d '{"name":"Alex"}'`) {
t.Fatal("Incomplete curl:", curlCmdUnexecuted)
} else {
t.Log("curlCmdUnexecuted: \n", curlCmdUnexecuted)
}
}
// 2. Generate curl for executed request
func TestGenerateExecutedCurl(t *testing.T) {
ts := createPostServer(t)
defer ts.Close()
data := map[string]string{
"name": "Alex",
}
c := dcl()
req := c.R().
SetBody(data).
SetCookies(
[]*http.Cookie{
{Name: "count", Value: "1"},
},
)
url := ts.URL + "/curl-cmd-post"
resp, err := req.
EnableGenerateCurlOnDebug().
Post(url)
if err != nil {
t.Fatal(err)
}
curlCmdExecuted := resp.Request.GenerateCurlCommand()
c.DisableGenerateCurlOnDebug()
req.DisableGenerateCurlOnDebug()
if !strings.Contains(curlCmdExecuted, "Cookie: count=1") ||
!strings.Contains(curlCmdExecuted, "curl -X POST") ||
!strings.Contains(curlCmdExecuted, `-d '{"name":"Alex"}'`) ||
!strings.Contains(curlCmdExecuted, url) {
t.Fatal("Incomplete curl:", curlCmdExecuted)
} else {
t.Log("curlCmdExecuted: \n", curlCmdExecuted)
}
}
// 3. Generate curl in debug mode
func TestDebugModeCurl(t *testing.T) {
ts := createPostServer(t)
defer ts.Close()
// 1. Capture stderr
getOutput, restore := captureStderr()
defer restore()
// 2. Build request
c := New()
req := c.EnableGenerateCurlOnDebug().R().
SetBody(map[string]string{
"name": "Alex",
}).
SetCookies(
[]*http.Cookie{
{Name: "count", Value: "1"},
},
)
// 3. Execute request: set debug mode
url := ts.URL + "/curl-cmd-post"
_, err := req.SetDebug(true).Post(url)
if err != nil {
t.Fatal(err)
}
c.DisableGenerateCurlOnDebug()
req.DisableGenerateCurlOnDebug()
// 4. test output curl
output := getOutput()
if !strings.Contains(output, "Cookie: count=1") ||
!strings.Contains(output, `-d '{"name":"Alex"}'`) {
t.Fatal("Incomplete debug curl info:", output)
} else {
t.Log("Normal debug curl info: \n", output)
}
}
func captureStderr() (getOutput func() string, restore func()) {
old := os.Stderr
r, w, err := os.Pipe()
if err != nil {
panic(err)
}
os.Stderr = w
getOutput = func() string {
w.Close()
buf := make([]byte, 2048)
n, err := r.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
return string(buf[:n])
}
restore = func() {
os.Stderr = old
w.Close()
}
return getOutput, restore
}