feat(http): add http header size limit for initial request

This commit is contained in:
2026-01-25 18:47:54 +07:00
parent 4041681be6
commit 79fd292a77
11 changed files with 182 additions and 64 deletions
+30 -14
View File
@@ -13,31 +13,32 @@ import (
func TestNewHTTPSServer(t *testing.T) {
msr := new(MockSessionRegistry)
domain := "example.com"
port := "443"
redirectTLS := false
mockConfig := &MockConfig{}
port := "0"
tlsConfig := &tls.Config{}
srv := NewHTTPSServer(domain, port, msr, redirectTLS, tlsConfig)
mockConfig.On("Domain").Return(mockConfig)
mockConfig.On("HTTPSPort").Return(port)
srv := NewHTTPSServer(mockConfig, msr, tlsConfig)
assert.NotNil(t, srv)
httpsSrv, ok := srv.(*https)
assert.True(t, ok)
assert.Equal(t, port, httpsSrv.port)
assert.Equal(t, domain, httpsSrv.domain)
assert.Equal(t, tlsConfig, httpsSrv.tlsConfig)
assert.Equal(t, msr, httpsSrv.httpHandler.sessionRegistry)
}
func TestHTTPSServer_Listen(t *testing.T) {
msr := new(MockSessionRegistry)
mockConfig := &MockConfig{}
port := "0"
mockConfig.On("Domain").Return(mockConfig)
mockConfig.On("HTTPSPort").Return(port)
tlsConfig := &tls.Config{
GetCertificate: func(hello *tls.ClientHelloInfo) (*tls.Certificate, error) {
return nil, nil
},
}
srv := NewHTTPSServer("example.com", "0", msr, false, tlsConfig)
srv := NewHTTPSServer(mockConfig, msr, tlsConfig)
listener, err := srv.Listen()
if err != nil {
@@ -50,7 +51,11 @@ func TestHTTPSServer_Listen(t *testing.T) {
func TestHTTPSServer_Serve(t *testing.T) {
msr := new(MockSessionRegistry)
srv := NewHTTPSServer("example.com", "0", msr, false, &tls.Config{})
mockConfig := &MockConfig{}
port := "0"
mockConfig.On("Domain").Return(mockConfig)
mockConfig.On("HTTPSPort").Return(port)
srv := NewHTTPSServer(mockConfig, msr, &tls.Config{})
listener, err := net.Listen("tcp", "127.0.0.1:0")
assert.NoError(t, err)
@@ -66,7 +71,12 @@ func TestHTTPSServer_Serve(t *testing.T) {
func TestHTTPSServer_Serve_AcceptError(t *testing.T) {
msr := new(MockSessionRegistry)
srv := NewHTTPSServer("example.com", "0", msr, false, &tls.Config{})
mockConfig := &MockConfig{}
port := "0"
mockConfig.On("Domain").Return(mockConfig)
mockConfig.On("HTTPSPort").Return(port)
srv := NewHTTPSServer(mockConfig, msr, &tls.Config{})
ml := new(mockListener)
ml.On("Accept").Return(nil, errors.New("accept error")).Once()
@@ -79,17 +89,23 @@ func TestHTTPSServer_Serve_AcceptError(t *testing.T) {
func TestHTTPSServer_Serve_Success(t *testing.T) {
msr := new(MockSessionRegistry)
srv := NewHTTPSServer("example.com", "0", msr, false, &tls.Config{})
mockConfig := &MockConfig{}
port := "0"
mockConfig.On("Domain").Return(mockConfig)
mockConfig.On("HTTPSPort").Return(port)
mockConfig.On("HeaderSize").Return(4096)
srv := NewHTTPSServer(mockConfig, msr, &tls.Config{})
listener, err := net.Listen("tcp", "127.0.0.1:0")
assert.NoError(t, err)
port := listener.Addr().(*net.TCPAddr).Port
listenerport := listener.Addr().(*net.TCPAddr).Port
go func() {
_ = srv.Serve(listener)
}()
conn, err := net.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", port))
conn, err := net.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", listenerport))
assert.NoError(t, err)
_, _ = conn.Write([]byte("GET / HTTP/1.1\r\nHost: ping.example.com\r\n\r\n"))