Skip to content

Commit

Permalink
Add zero allocation guarantee tests
Browse files Browse the repository at this point in the history
  • Loading branch information
erikdubbelboer committed Feb 12, 2019
1 parent 02b7301 commit 61039c9
Showing 1 changed file with 70 additions and 0 deletions.
70 changes: 70 additions & 0 deletions allocation_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// +build !race

package fasthttp

import (
"net"

"testing"
)

func TestAllocationServeConn(t *testing.T) {
s := &Server{
Handler: func(ctx *RequestCtx) {
},
}

rw := &readWriter{}
// Make space for the request and response here so it
// doesn't allocate within the test.
rw.r.Grow(1024)
rw.w.Grow(1024)

n := testing.AllocsPerRun(100, func() {
rw.r.WriteString("GET / HTTP/1.1\r\nHost: google.com\r\nCookie: foo=bar\r\n\r\n")
if err := s.ServeConn(rw); err != nil {
t.Fatal(err)
}

// Reset the write buffer to make space for the next response.
rw.w.Reset()
})

if n != 0 {
t.Fatalf("expected 0 allocations, got %f", n)
}
}

func TestAllocationClient(t *testing.T) {
ln, err := net.Listen("tcp4", "127.0.0.1:0")
if err != nil {
t.Fatalf("cannot listen: %s", err)
}
defer ln.Close()

s := &Server{
Handler: func(ctx *RequestCtx) {
},
}
go s.Serve(ln)

c := &Client{}
url := "http://" + ln.Addr().String()

n := testing.AllocsPerRun(100, func() {
req := AcquireRequest()
res := AcquireResponse()

req.SetRequestURI(url)
if err := c.Do(req, res); err != nil {
t.Fatal(err)
}

ReleaseRequest(req)
ReleaseResponse(res)
})

if n != 0 {
t.Fatalf("expected 0 allocations, got %f", n)
}
}

0 comments on commit 61039c9

Please sign in to comment.