@@ -10,6 +10,8 @@ import (
10
10
"http/httptest"
11
11
"io/ioutil"
12
12
"os"
13
+ "path/filepath"
14
+ "strings"
13
15
"testing"
14
16
)
15
17
@@ -117,6 +119,36 @@ func TestFileServerCleans(t *testing.T) {
117
119
}
118
120
}
119
121
122
+ func TestFileServerImplicitLeadingSlash (t * testing.T ) {
123
+ tempDir , err := ioutil .TempDir ("" , "" )
124
+ if err != nil {
125
+ t .Fatalf ("TempDir: %v" , err )
126
+ }
127
+ defer os .RemoveAll (tempDir )
128
+ if err := ioutil .WriteFile (filepath .Join (tempDir , "foo.txt" ), []byte ("Hello world" ), 0644 ); err != nil {
129
+ t .Fatalf ("WriteFile: %v" , err )
130
+ }
131
+ ts := httptest .NewServer (StripPrefix ("/bar/" , FileServer (Dir (tempDir ))))
132
+ defer ts .Close ()
133
+ get := func (suffix string ) string {
134
+ res , err := Get (ts .URL + suffix )
135
+ if err != nil {
136
+ t .Fatalf ("Get %s: %v" , suffix , err )
137
+ }
138
+ b , err := ioutil .ReadAll (res .Body )
139
+ if err != nil {
140
+ t .Fatalf ("ReadAll %s: %v" , suffix , err )
141
+ }
142
+ return string (b )
143
+ }
144
+ if s := get ("/bar/" ); ! strings .Contains (s , ">foo.txt<" ) {
145
+ t .Logf ("expected a directory listing with foo.txt, got %q" , s )
146
+ }
147
+ if s := get ("/bar/foo.txt" ); s != "Hello world" {
148
+ t .Logf ("expected %q, got %q" , "Hello world" , s )
149
+ }
150
+ }
151
+
120
152
func TestDirJoin (t * testing.T ) {
121
153
wfi , err := os .Stat ("/etc/hosts" )
122
154
if err != nil {
0 commit comments