File: bench_curly_test.go

package info (click to toggle)
golang-github-emicklei-go-restful 3.10.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 792 kB
  • sloc: makefile: 9; sh: 6
file content (51 lines) | stat: -rw-r--r-- 1,295 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package restful

import (
	"fmt"
	"net/http"
	"net/http/httptest"
	"testing"
)

func setupCurly(container *Container) []string {
	wsCount := 26
	rtCount := 26
	urisCurly := []string{}

	container.Router(CurlyRouter{})
	for i := 0; i < wsCount; i++ {
		root := fmt.Sprintf("/%s/{%s}/", string(rune(i+97)), string(rune(i+97)))
		ws := new(WebService).Path(root)
		for j := 0; j < rtCount; j++ {
			sub := fmt.Sprintf("/%s2/{%s2}", string(rune(j+97)), string(rune(j+97)))
			ws.Route(ws.GET(sub).Consumes("application/xml").Produces("application/xml").To(echoCurly))
		}
		container.Add(ws)
		for _, each := range ws.Routes() {
			urisCurly = append(urisCurly, "http://bench.com"+each.Path)
		}
	}
	return urisCurly
}

func echoCurly(req *Request, resp *Response) {}

func BenchmarkManyCurly(b *testing.B) {
	container := NewContainer()
	urisCurly := setupCurly(container)
	b.ResetTimer()
	for t := 0; t < b.N; t++ {
		for r := 0; r < 1000; r++ {
			for _, each := range urisCurly {
				sendNoReturnTo(each, container, t)
			}
		}
	}
}

func sendNoReturnTo(address string, container *Container, t int) {
	httpRequest, _ := http.NewRequest("GET", address, nil)
	httpRequest.Header.Set("Accept", "application/xml")
	httpWriter := httptest.NewRecorder()
	container.dispatch(httpWriter, httpRequest)
}