Left: | ||
Right: |
OLD | NEW |
---|---|
1 // Copyright 2010 The Go Authors. All rights reserved. | 1 // Copyright 2010 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 // End-to-end serving tests | 5 // End-to-end serving tests |
6 | 6 |
7 package http | 7 package http |
8 | 8 |
9 import ( | 9 import ( |
10 "bytes" | 10 "bytes" |
rsc
2011/01/26 15:29:37
sort imports
| |
11 "os" | 11 "os" |
12 "net" | 12 "net" |
13 "testing" | 13 "testing" |
14 "fmt" | |
15 "io/ioutil" | |
14 ) | 16 ) |
15 | 17 |
16 type dummyAddr string | 18 type dummyAddr string |
17 type oneConnListener struct { | 19 type oneConnListener struct { |
18 conn net.Conn | 20 conn net.Conn |
19 } | 21 } |
20 | 22 |
21 func (l *oneConnListener) Accept() (c net.Conn, err os.Error) { | 23 func (l *oneConnListener) Accept() (c net.Conn, err os.Error) { |
22 c = l.conn | 24 c = l.conn |
23 if c == nil { | 25 if c == nil { |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
126 if req.Method != "POST" { | 128 if req.Method != "POST" { |
127 t.Errorf("For request #2's method, got %q; expected %q", | 129 t.Errorf("For request #2's method, got %q; expected %q", |
128 req.Method, "POST") | 130 req.Method, "POST") |
129 } | 131 } |
130 | 132 |
131 t.Log("Waiting for EOF.") | 133 t.Log("Waiting for EOF.") |
132 if serveerr := <-servech; serveerr != os.EOF { | 134 if serveerr := <-servech; serveerr != os.EOF { |
133 t.Errorf("Serve returned %q; expected EOF", serveerr) | 135 t.Errorf("Serve returned %q; expected EOF", serveerr) |
134 } | 136 } |
135 } | 137 } |
138 | |
139 func defaultHandler(rw ResponseWriter, r *Request) { | |
140 rw.Write(([]byte)("Default")) | |
rsc
2011/01/26 15:29:37
the () around []byte are unnecessary.
same in vari
| |
141 rw.Flush() | |
142 } | |
143 | |
144 func someDirHandler(rw ResponseWriter, r *Request) { | |
145 rw.Write(([]byte)("someDir")) | |
146 rw.Flush() | |
147 } | |
148 | |
149 func someHostHandler(rw ResponseWriter, r *Request) { | |
150 rw.Write(([]byte)("someHost.com/someDir")) | |
151 rw.Flush() | |
152 } | |
153 | |
154 func GetVHost(url, host string) (r *Response, finalURL string, err os.Error) { | |
rsc
2011/01/26 15:29:37
This is a copy of http.Get but I don't see what's
| |
155 for redirect := 0; ; redirect++ { | |
156 if redirect >= 10 { | |
157 err = os.ErrorString("stopped after 10 redirects") | |
158 break | |
159 } | |
160 var req Request | |
161 if req.URL, err = ParseURL(url); err != nil { | |
162 break | |
163 } | |
164 url = req.URL.String() | |
165 req.Host = host | |
166 if r, err = send(&req); err != nil { | |
167 break | |
168 } | |
169 if shouldRedirect(r.StatusCode) { | |
170 r.Body.Close() | |
171 if url = r.GetHeader("Location"); url == "" { | |
172 err = os.ErrorString(fmt.Sprintf( | |
173 "%d response missing Location header", r .StatusCode)) | |
174 break | |
175 } | |
176 continue | |
177 } | |
178 finalURL = url | |
179 return | |
180 } | |
181 err = &URLError{"Get", url, err} | |
182 return | |
183 } | |
184 | |
185 func checkResponse(t *testing.T, url, host, rsp string) { | |
186 var r *Response | |
187 var e os.Error | |
188 if host == "" { | |
189 r, _, e = Get(url) | |
190 } else { | |
191 r, _, e = GetVHost(url, host) | |
192 } | |
193 if e != nil { | |
194 t.Errorf("Get error %v\n", e) | |
195 } | |
196 msg, e := ioutil.ReadAll(r.Body) | |
197 if e != nil { | |
198 t.Errorf("Get body error: %v\n", e) | |
199 } | |
200 s := (string)(msg) | |
rsc
2011/01/26 15:29:37
() are unnecessary around string
| |
201 if s != rsp { | |
202 t.Errorf("Get body is unexpected: %v instead of %v\n", s, rsp) | |
203 } | |
204 } | |
205 | |
206 func TestVirtualHostHandlers(t *testing.T) { | |
207 HandleFunc("/", defaultHandler) | |
208 HandleFunc("/someDir/", someDirHandler) | |
209 HandleFunc("someHost.com/someDir/", someHostHandler) | |
210 go ListenAndServe(":12345", nil) | |
211 checkResponse(t, "http://localhost:12345/someDir/apage", "", "someDir") | |
rsc
2011/01/26 15:29:37
please use a table.
see url_test.go, for example.
| |
212 checkResponse(t, "http://localhost:12345/otherDir/apage", "", "Default") | |
213 checkResponse(t, "http://localhost:12345/someDir/apage", "someHost.com", | |
214 "someHost.com/someDir") | |
215 checkResponse(t, "http://localhost:12345/someDir/apage", "otherHost.com" , | |
216 "someDir") | |
217 checkResponse(t, "http://localhost:12345/aDir/apage", "otherHost.com", | |
218 "Default") | |
219 } | |
OLD | NEW |