@@ -2,8 +2,12 @@ package protocol
2
2
3
3
import (
4
4
"bytes"
5
+ "io"
6
+ "mime/multipart"
5
7
"net/http"
6
8
"net/http/httptest"
9
+ "regexp"
10
+ "strings"
7
11
"testing"
8
12
)
9
13
@@ -36,6 +40,7 @@ func TestLogRequestOneRenderer(t *testing.T) {
36
40
method string
37
41
path string
38
42
body string
43
+ params map [string ]string
39
44
expectedParams string
40
45
headerKey string
41
46
headerValue string
@@ -44,6 +49,7 @@ func TestLogRequestOneRenderer(t *testing.T) {
44
49
http .MethodGet ,
45
50
"/foo" ,
46
51
"" ,
52
+ nil ,
47
53
"" ,
48
54
"Foo" ,
49
55
"Bar" ,
@@ -52,14 +58,25 @@ func TestLogRequestOneRenderer(t *testing.T) {
52
58
http .MethodPost ,
53
59
"/foo/bar" ,
54
60
"{\" foo\" : \" bar\" }" ,
61
+ nil ,
55
62
"{\" foo\" => \" bar\" }" ,
56
63
"Content-Type" ,
57
64
"application/json" ,
58
65
},
66
+ {
67
+ http .MethodPost ,
68
+ "/form/data" ,
69
+ "" ,
70
+ map [string ]string {"aloha" : "friday" },
71
+ "{\" aloha\" => \" friday\" }" ,
72
+ "Content-Type" ,
73
+ "multipart/form-data" ,
74
+ },
59
75
{
60
76
http .MethodDelete ,
61
77
"/foo/1" ,
62
78
"" ,
79
+ nil ,
63
80
"" ,
64
81
"Bearer" ,
65
82
"hello!" ,
@@ -68,6 +85,7 @@ func TestLogRequestOneRenderer(t *testing.T) {
68
85
http .MethodGet ,
69
86
"/foo/bar?hello=world" ,
70
87
"" ,
88
+ nil ,
71
89
"{\" hello\" => \" world\" }" ,
72
90
"Content-Type" ,
73
91
"application/json!" ,
@@ -80,23 +98,57 @@ func TestLogRequestOneRenderer(t *testing.T) {
80
98
defer srv .Close ()
81
99
82
100
for _ , test := range testTable {
83
- b := bytes .NewBuffer ([]byte (test .body ))
84
- req , err := http .NewRequest (test .method , srv .URL + test .path , b )
85
-
86
- if test .headerKey != "" {
87
- req .Header .Set (test .headerKey , test .headerValue )
101
+ r , _ := regexp .Compile (`multipart\/form-data` )
102
+ matched := r .MatchString (test .headerValue )
103
+ if test .headerKey == "Content-Type" && matched {
104
+ b := & bytes.Buffer {}
105
+ writer := multipart .NewWriter (b )
106
+ for k := range test .params {
107
+ fw , err := writer .CreateFormField (k )
108
+ if err != nil {
109
+ t .Errorf ("Error POST to httptest server" )
110
+ }
111
+
112
+ _ , err = io .Copy (fw , strings .NewReader (test .params [k ]))
113
+ if err != nil {
114
+ t .Errorf ("Error POST to httptest server" )
115
+ }
116
+ }
117
+ writer .Close ()
118
+ req , err := http .NewRequest (test .method , srv .URL + test .path , bytes .NewReader (b .Bytes ()))
119
+
120
+ if err != nil {
121
+ t .Error (err )
122
+ }
123
+
124
+ req .Header .Set ("Content-Type" , writer .FormDataContentType ())
125
+ resp , err := http .DefaultClient .Do (req )
126
+ if err != nil {
127
+ t .Error (err )
128
+ }
129
+ if resp .StatusCode != http .StatusOK {
130
+ t .Errorf ("Request failed with response code: %d" , resp .StatusCode )
131
+ }
132
+ resp .Body .Close ()
133
+ } else {
134
+ b := bytes .NewBuffer ([]byte (test .body ))
135
+ req , err := http .NewRequest (test .method , srv .URL + test .path , b )
136
+
137
+ if test .headerKey != "" {
138
+ req .Header .Set (test .headerKey , test .headerValue )
139
+ }
140
+
141
+ if err != nil {
142
+ t .Error (err )
143
+ }
144
+
145
+ resp , err := http .DefaultClient .Do (req )
146
+ if err != nil {
147
+ t .Error (err )
148
+ }
149
+ resp .Body .Close ()
88
150
}
89
151
90
- if err != nil {
91
- t .Error (err )
92
- }
93
-
94
- resp , err := http .DefaultClient .Do (req )
95
- if err != nil {
96
- t .Error (err )
97
- }
98
- resp .Body .Close ()
99
-
100
152
rp := <- rpChannel
101
153
102
154
if rp .Fields .Method != test .method {
@@ -111,9 +163,11 @@ func TestLogRequestOneRenderer(t *testing.T) {
111
163
t .Errorf ("Expected %s, got %s" , test .expectedParams , rp .Message )
112
164
}
113
165
114
- expectedHeaderValue := rp .Headers [test .headerKey ][0 ]
115
- if expectedHeaderValue != test .headerValue {
116
- t .Errorf ("Expected %s, got %s" , expectedHeaderValue , test .headerValue )
166
+ headerValue := rp .Headers [test .headerKey ][0 ]
167
+ r , _ = regexp .Compile (test .headerValue )
168
+ matched = r .MatchString (headerValue )
169
+ if ! matched {
170
+ t .Errorf ("Expected %s, got %s" , test .headerValue , headerValue )
117
171
}
118
172
}
119
173
}
0 commit comments