github.com/avenga/couper@v1.12.2/handler/file_test.go (about) 1 package handler 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "os" 7 "path" 8 "testing" 9 10 "github.com/avenga/couper/config" 11 "github.com/avenga/couper/config/runtime/server" 12 "github.com/avenga/couper/errors" 13 ) 14 15 func TestFile_ServeHTTP(t *testing.T) { 16 type fields struct { 17 basePath string 18 errFile string 19 docRootDir string 20 } 21 22 wd, err := os.Getwd() 23 if err != nil { 24 t.Error(err) 25 } 26 27 tests := []struct { 28 name string 29 fields fields 30 req *http.Request 31 expectedCode int 32 }{ 33 {"not found", fields{}, httptest.NewRequest(http.MethodGet, "http://domain.test/", nil), http.StatusNotFound}, 34 {"index.html", fields{docRootDir: "testdata/file"}, httptest.NewRequest(http.MethodGet, "http://domain.test/", nil), http.StatusOK}, 35 {"serve file", fields{docRootDir: "testdata/file"}, httptest.NewRequest(http.MethodGet, "http://domain.test/favicon.ico", nil), http.StatusOK}, 36 {"not found within root dir", fields{docRootDir: "testdata/file"}, httptest.NewRequest(http.MethodGet, "http://domain.test/.git", nil), http.StatusNotFound}, 37 {"serve file /w basePath", fields{docRootDir: "testdata/file", basePath: "/base"}, httptest.NewRequest(http.MethodGet, "http://domain.test/base/favicon.ico", nil), http.StatusOK}, 38 {"not found within root dir /w basePath", fields{docRootDir: "testdata/file", basePath: "/base"}, httptest.NewRequest(http.MethodGet, "http://domain.test/base/.git", nil), http.StatusNotFound}, 39 {"not found /w errorFile", fields{errFile: "testdata/file_err_doc.html"}, httptest.NewRequest(http.MethodGet, "http://domain.test/", nil), http.StatusNotFound}, 40 {"not found /w errorFile HEAD", fields{errFile: "testdata/file_err_doc.html"}, httptest.NewRequest(http.MethodHead, "http://domain.test/", nil), http.StatusNotFound}, 41 } 42 43 srvOpts, _ := server.NewServerOptions(&config.Server{}, nil) 44 45 for _, tt := range tests { 46 t.Run(tt.name, func(subT *testing.T) { 47 f, err := NewFile(path.Join(wd, tt.fields.docRootDir), tt.fields.basePath, func(s string) bool { 48 return false 49 }, errors.DefaultHTML, srvOpts, nil) 50 if err != nil { 51 subT.Fatal(err) 52 } 53 54 rec := httptest.NewRecorder() 55 f.ServeHTTP(rec, tt.req) 56 57 if !rec.Flushed { 58 rec.Flush() 59 } 60 61 if rec.Code != tt.expectedCode { 62 subT.Errorf("Expected status %d, got: %d", tt.expectedCode, rec.Code) 63 } 64 }) 65 } 66 }