1 package static
2
3 import (
4 "io/ioutil"
5 "net/http"
6 "net/http/httptest"
7 "os"
8 "path/filepath"
9 "testing"
10
11 "github.com/gin-gonic/gin"
12 "github.com/stretchr/testify/assert"
13 )
14
15 func performRequest(r http.Handler, method, path string) *httptest.ResponseRecorder {
16 req, _ := http.NewRequest(method, path, nil)
17 w := httptest.NewRecorder()
18 r.ServeHTTP(w, req)
19 return w
20 }
21
22 func TestEmptyDirectory(t *testing.T) {
23
24 testRoot, _ := os.Getwd()
25 f, err := ioutil.TempFile(testRoot, "")
26 if err != nil {
27 t.Error(err)
28 }
29 defer os.Remove(f.Name())
30 f.WriteString("Gin Web Framework")
31 f.Close()
32
33 dir, filename := filepath.Split(f.Name())
34
35 router := gin.New()
36 router.Use(ServeRoot("/", dir))
37 router.GET("/", func(c *gin.Context) {
38 c.String(200, "index")
39 })
40 router.GET("/a", func(c *gin.Context) {
41 c.String(200, "a")
42 })
43 router.GET("/"+filename, func(c *gin.Context) {
44 c.String(200, "this is not printed")
45 })
46 w := performRequest(router, "GET", "/")
47 assert.Equal(t, w.Code, 200)
48 assert.Equal(t, w.Body.String(), "index")
49
50 w = performRequest(router, "GET", "/"+filename)
51 assert.Equal(t, w.Code, 200)
52 assert.Equal(t, w.Body.String(), "Gin Web Framework")
53
54 w = performRequest(router, "GET", "/"+filename+"a")
55 assert.Equal(t, w.Code, 404)
56
57 w = performRequest(router, "GET", "/a")
58 assert.Equal(t, w.Code, 200)
59 assert.Equal(t, w.Body.String(), "a")
60
61 router2 := gin.New()
62 router2.Use(ServeRoot("/static", dir))
63 router2.GET("/"+filename, func(c *gin.Context) {
64 c.String(200, "this is printed")
65 })
66
67 w = performRequest(router2, "GET", "/")
68 assert.Equal(t, w.Code, 404)
69
70 w = performRequest(router2, "GET", "/static")
71 assert.Equal(t, w.Code, 404)
72 router2.GET("/static", func(c *gin.Context) {
73 c.String(200, "index")
74 })
75
76 w = performRequest(router2, "GET", "/static")
77 assert.Equal(t, w.Code, 200)
78
79 w = performRequest(router2, "GET", "/"+filename)
80 assert.Equal(t, w.Code, 200)
81 assert.Equal(t, w.Body.String(), "this is printed")
82
83 w = performRequest(router2, "GET", "/static/"+filename)
84 assert.Equal(t, w.Code, 200)
85 assert.Equal(t, w.Body.String(), "Gin Web Framework")
86 }
87
View as plain text