Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(97)

Side by Side Diff: src/pkg/http/serve_test.go

Issue 4070043: code review 4070043: http: added virtual host mappings BEFORE default path m...
Patch Set: code review 4070043: http: added virtual host mappings BEFORE default path m... Created 14 years, 2 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/pkg/http/server.go » ('j') | src/pkg/http/server.go » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 }
OLDNEW
« no previous file with comments | « no previous file | src/pkg/http/server.go » ('j') | src/pkg/http/server.go » ('J')

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b