Files
fasthttp/client_unix_test.go
T
Aoang a696949f6c Deprecate Go 1.15 (#1379)
* Dropping support for 1.15.

* Replaces Go 1.16 Deprecated functions

* Update test build flag

* Fix import sort and comment

* Update github.com/klauspost/compress to v1.15.9

https://github.com/klauspost/compress improved performance and changed Minimum version is 1.16, this should be the final supported release for Go 1.16 (https://github.com/klauspost/compress/commit/6d0019a95afa3221f7522d1f2eed0033b5e79470) .
2022-09-15 22:28:25 +03:00

136 lines
2.6 KiB
Go

//go:build !windows
// +build !windows
package fasthttp
import (
"io"
"net"
"net/http"
"strings"
"testing"
)
// See issue #1232
func TestRstConnResponseWhileSending(t *testing.T) {
const expectedStatus = http.StatusTeapot
const payload = "payload"
srv, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatal(err)
}
defer srv.Close()
go func() {
for {
conn, err := srv.Accept()
if err != nil {
return
}
// Read at least one byte of the header
// Otherwise we would have an unsolicited response
_, err = io.ReadAll(io.LimitReader(conn, 1))
if err != nil {
t.Error(err)
}
// Respond
_, err = conn.Write([]byte("HTTP/1.1 418 Teapot\r\n\r\n"))
if err != nil {
t.Error(err)
}
// Forcefully close connection
err = conn.(*net.TCPConn).SetLinger(0)
if err != nil {
t.Error(err)
}
conn.Close()
}
}()
svrUrl := "http://" + srv.Addr().String()
client := HostClient{Addr: srv.Addr().String()}
for i := 0; i < 100; i++ {
req := AcquireRequest()
defer ReleaseRequest(req)
resp := AcquireResponse()
defer ReleaseResponse(resp)
req.Header.SetMethod("POST")
req.SetBodyStream(strings.NewReader(payload), len(payload))
req.SetRequestURI(svrUrl)
err = client.Do(req, resp)
if err != nil {
t.Fatal(err)
}
if expectedStatus != resp.StatusCode() {
t.Fatalf("Expected %d status code, but got %d", expectedStatus, resp.StatusCode())
}
}
}
// See issue #1232
func TestRstConnClosedWithoutResponse(t *testing.T) {
const payload = "payload"
srv, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatal(err)
}
defer srv.Close()
go func() {
for {
conn, err := srv.Accept()
if err != nil {
return
}
// Read at least one byte of the header
// Otherwise we would have an unsolicited response
_, err = io.ReadAll(io.LimitReader(conn, 1))
if err != nil {
t.Error(err)
}
// Respond with incomplete header
_, err = conn.Write([]byte("Http"))
if err != nil {
t.Error(err)
}
// Forcefully close connection
err = conn.(*net.TCPConn).SetLinger(0)
if err != nil {
t.Error(err)
}
conn.Close()
}
}()
svrUrl := "http://" + srv.Addr().String()
client := HostClient{Addr: srv.Addr().String()}
for i := 0; i < 100; i++ {
req := AcquireRequest()
defer ReleaseRequest(req)
resp := AcquireResponse()
defer ReleaseResponse(resp)
req.Header.SetMethod("POST")
req.SetBodyStream(strings.NewReader(payload), len(payload))
req.SetRequestURI(svrUrl)
err = client.Do(req, resp)
if !isConnectionReset(err) {
t.Fatal("Expected connection reset error")
}
}
}