| // Copyright 2011 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package http_test | |
| import ( | |
| "http" | |
| "io/ioutil" | |
| "path/filepath" | |
| "testing" | |
| ) | |
| func checker(t *testing.T) func(string, error) { | |
| return func(call string, err error) { | |
| if err == nil { | |
| return | |
| } | |
| t.Fatalf("%s: %v", call, err) | |
| } | |
| } | |
| func TestFileTransport(t *testing.T) { | |
| check := checker(t) | |
| dname, err := ioutil.TempDir("", "") | |
| check("TempDir", err) | |
| fname := filepath.Join(dname, "foo.txt") | |
| err = ioutil.WriteFile(fname, []byte("Bar"), 0644) | |
| check("WriteFile", err) | |
| tr := &http.Transport{} | |
| tr.RegisterProtocol("file", http.NewFileTransport(http.Dir(dname))) | |
| c := &http.Client{Transport: tr} | |
| fooURLs := []string{"file:///foo.txt", "file://../foo.txt"} | |
| for _, urlstr := range fooURLs { | |
| res, err := c.Get(urlstr) | |
| check("Get "+urlstr, err) | |
| if res.StatusCode != 200 { | |
| t.Errorf("for %s, StatusCode = %d, want 200", urlstr, res.StatusCode) | |
| } | |
| if res.ContentLength != -1 { | |
| t.Errorf("for %s, ContentLength = %d, want -1", urlstr, res.ContentLength) | |
| } | |
| if res.Body == nil { | |
| t.Fatalf("for %s, nil Body", urlstr) | |
| } | |
| slurp, err := ioutil.ReadAll(res.Body) | |
| check("ReadAll "+urlstr, err) | |
| if string(slurp) != "Bar" { | |
| t.Errorf("for %s, got content %q, want %q", urlstr, string(slurp), "Bar") | |
| } | |
| } | |
| const badURL = "file://../no-exist.txt" | |
| res, err := c.Get(badURL) | |
| check("Get "+badURL, err) | |
| if res.StatusCode != 404 { | |
| t.Errorf("for %s, StatusCode = %d, want 404", badURL, res.StatusCode) | |
| } | |
| } |