OSDN Git Service

net/http: delete temporary files.
[pf3gnuchains/gcc-fork.git] / libgo / go / net / http / filetransport_test.go
1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package http_test
6
7 import (
8         "io/ioutil"
9         "net/http"
10         "os"
11         "path/filepath"
12         "testing"
13 )
14
15 func checker(t *testing.T) func(string, error) {
16         return func(call string, err error) {
17                 if err == nil {
18                         return
19                 }
20                 t.Fatalf("%s: %v", call, err)
21         }
22 }
23
24 func TestFileTransport(t *testing.T) {
25         check := checker(t)
26
27         dname, err := ioutil.TempDir("", "")
28         check("TempDir", err)
29         fname := filepath.Join(dname, "foo.txt")
30         err = ioutil.WriteFile(fname, []byte("Bar"), 0644)
31         check("WriteFile", err)
32         defer os.Remove(dname)
33         defer os.Remove(fname)
34
35         tr := &http.Transport{}
36         tr.RegisterProtocol("file", http.NewFileTransport(http.Dir(dname)))
37         c := &http.Client{Transport: tr}
38
39         fooURLs := []string{"file:///foo.txt", "file://../foo.txt"}
40         for _, urlstr := range fooURLs {
41                 res, err := c.Get(urlstr)
42                 check("Get "+urlstr, err)
43                 if res.StatusCode != 200 {
44                         t.Errorf("for %s, StatusCode = %d, want 200", urlstr, res.StatusCode)
45                 }
46                 if res.ContentLength != -1 {
47                         t.Errorf("for %s, ContentLength = %d, want -1", urlstr, res.ContentLength)
48                 }
49                 if res.Body == nil {
50                         t.Fatalf("for %s, nil Body", urlstr)
51                 }
52                 slurp, err := ioutil.ReadAll(res.Body)
53                 check("ReadAll "+urlstr, err)
54                 if string(slurp) != "Bar" {
55                         t.Errorf("for %s, got content %q, want %q", urlstr, string(slurp), "Bar")
56                 }
57         }
58
59         const badURL = "file://../no-exist.txt"
60         res, err := c.Get(badURL)
61         check("Get "+badURL, err)
62         if res.StatusCode != 404 {
63                 t.Errorf("for %s, StatusCode = %d, want 404", badURL, res.StatusCode)
64         }
65 }