Skip to content

Commit 265c16f

Browse files
committed
Add auto HEAD compliance tests
1 parent db2576e commit 265c16f

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

app_test.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"net/http"
1818
"net/http/httptest"
1919
"os"
20+
"path/filepath"
2021
"reflect"
2122
"regexp"
2223
"runtime"
@@ -1088,6 +1089,89 @@ func Test_App_Order(t *testing.T) {
10881089
require.Equal(t, "123", string(body))
10891090
}
10901091

1092+
func Test_App_AutoHead_Compliance(t *testing.T) {
1093+
t.Parallel()
1094+
1095+
app := New()
1096+
app.Get("/hello", func(c Ctx) error {
1097+
c.Set("X-Test", "string")
1098+
return c.SendString("hello")
1099+
})
1100+
app.startupProcess()
1101+
1102+
getReq := httptest.NewRequest(MethodGet, "/hello", http.NoBody)
1103+
getResp, err := app.Test(getReq)
1104+
require.NoError(t, err, "app.Test(get)")
1105+
defer func() {
1106+
require.NoError(t, getResp.Body.Close())
1107+
}()
1108+
1109+
body, err := io.ReadAll(getResp.Body)
1110+
require.NoError(t, err)
1111+
require.Equal(t, "hello", string(body))
1112+
require.Equal(t, "string", getResp.Header.Get("X-Test"))
1113+
1114+
headReq := httptest.NewRequest(MethodHead, "/hello", http.NoBody)
1115+
headResp, err := app.Test(headReq)
1116+
require.NoError(t, err, "app.Test(head)")
1117+
defer func() {
1118+
require.NoError(t, headResp.Body.Close())
1119+
}()
1120+
1121+
require.Equal(t, getResp.StatusCode, headResp.StatusCode)
1122+
require.Equal(t, strconv.Itoa(len(body)), headResp.Header.Get(HeaderContentLength))
1123+
require.Equal(t, getResp.Header.Get(HeaderContentType), headResp.Header.Get(HeaderContentType))
1124+
require.Equal(t, getResp.Header.Get("X-Test"), headResp.Header.Get("X-Test"))
1125+
1126+
headBody, err := io.ReadAll(headResp.Body)
1127+
require.NoError(t, err)
1128+
require.Empty(t, headBody)
1129+
}
1130+
1131+
func Test_App_AutoHead_Compliance_SendFile(t *testing.T) {
1132+
t.Parallel()
1133+
1134+
tmpDir := t.TempDir()
1135+
filePath := filepath.Join(tmpDir, "hello.txt")
1136+
fileContent := []byte("file-body")
1137+
require.NoError(t, os.WriteFile(filePath, fileContent, 0o644))
1138+
1139+
app := New()
1140+
app.Get("/file", func(c Ctx) error {
1141+
c.Set("X-Test", "file")
1142+
return c.SendFile(filePath)
1143+
})
1144+
app.startupProcess()
1145+
1146+
getReq := httptest.NewRequest(MethodGet, "/file", http.NoBody)
1147+
getResp, err := app.Test(getReq)
1148+
require.NoError(t, err, "app.Test(get)")
1149+
defer func() {
1150+
require.NoError(t, getResp.Body.Close())
1151+
}()
1152+
1153+
body, err := io.ReadAll(getResp.Body)
1154+
require.NoError(t, err)
1155+
require.Equal(t, fileContent, body)
1156+
require.Equal(t, "file", getResp.Header.Get("X-Test"))
1157+
1158+
headReq := httptest.NewRequest(MethodHead, "/file", http.NoBody)
1159+
headResp, err := app.Test(headReq)
1160+
require.NoError(t, err, "app.Test(head)")
1161+
defer func() {
1162+
require.NoError(t, headResp.Body.Close())
1163+
}()
1164+
1165+
require.Equal(t, getResp.StatusCode, headResp.StatusCode)
1166+
require.Equal(t, strconv.Itoa(len(fileContent)), headResp.Header.Get(HeaderContentLength))
1167+
require.Equal(t, getResp.Header.Get(HeaderContentType), headResp.Header.Get(HeaderContentType))
1168+
require.Equal(t, getResp.Header.Get("X-Test"), headResp.Header.Get("X-Test"))
1169+
1170+
headBody, err := io.ReadAll(headResp.Body)
1171+
require.NoError(t, err)
1172+
require.Empty(t, headBody)
1173+
}
1174+
10911175
func Test_App_Methods(t *testing.T) {
10921176
t.Parallel()
10931177
dummyHandler := testEmptyHandler

0 commit comments

Comments
 (0)