From 79d5bbdafc9d7f634efe2a42f59018504a0c9322 Mon Sep 17 00:00:00 2001 From: Deep Kapadia Date: Wed, 5 Oct 2016 23:59:47 -0400 Subject: [PATCH 1/2] Added support for User-Agent header. --- gobench.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gobench.go b/gobench.go index d186b67..21d1ca3 100644 --- a/gobench.go +++ b/gobench.go @@ -30,6 +30,7 @@ var ( writeTimeout int readTimeout int authHeader string + userAgent string ) type Configuration struct { @@ -40,6 +41,7 @@ type Configuration struct { period int64 keepAlive bool authHeader string + userAgent string myClient fasthttp.Client } @@ -89,6 +91,7 @@ func init() { flag.IntVar(&writeTimeout, "tw", 5000, "Write timeout (in milliseconds)") flag.IntVar(&readTimeout, "tr", 5000, "Read timeout (in milliseconds)") flag.StringVar(&authHeader, "auth", "", "Authorization header") + flag.StringVar(&userAgent, "agent", "", "User-Agent") } func printResults(results map[int]*Result, startTime time.Time) { @@ -175,7 +178,8 @@ func NewConfiguration() *Configuration { postData: nil, keepAlive: keepAlive, requests: int64((1 << 63) - 1), - authHeader: authHeader} + authHeader: authHeader, + userAgent: userAgent} if period != -1 { configuration.period = period @@ -269,6 +273,10 @@ func client(configuration *Configuration, result *Result, done *sync.WaitGroup) req.Header.Set("Authorization", configuration.authHeader) } + if len(configuration.userAgent) > 0 { + req.Header.Set("User-Agent", configuration.userAgent) + } + req.SetBody(configuration.postData) resp := fasthttp.AcquireResponse() From 877d8b7528d8521480bc91e7f496d9d1a23d3ecd Mon Sep 17 00:00:00 2001 From: Jeroen Vermeulen Date: Mon, 31 Oct 2016 00:23:22 +0100 Subject: [PATCH 2/2] Improved @durple's User-Agent option. Added option to randomize URLs to be called. Added accept-encoding header option. --- gobench.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/gobench.go b/gobench.go index 21d1ca3..93a9550 100644 --- a/gobench.go +++ b/gobench.go @@ -15,6 +15,7 @@ import ( "sync" "sync/atomic" "time" + "math/rand" "github.com/valyala/fasthttp" ) @@ -31,6 +32,8 @@ var ( readTimeout int authHeader string userAgent string + acceptEnc string + randomize bool ) type Configuration struct { @@ -41,7 +44,8 @@ type Configuration struct { period int64 keepAlive bool authHeader string - userAgent string + acceptEnc string + randomize bool myClient fasthttp.Client } @@ -91,7 +95,9 @@ func init() { flag.IntVar(&writeTimeout, "tw", 5000, "Write timeout (in milliseconds)") flag.IntVar(&readTimeout, "tr", 5000, "Read timeout (in milliseconds)") flag.StringVar(&authHeader, "auth", "", "Authorization header") - flag.StringVar(&userAgent, "agent", "", "User-Agent") + flag.StringVar(&userAgent, "agent", "", "User-Agent header") + flag.StringVar(&acceptEnc, "accept", "", "Accept-Encoding header") + flag.BoolVar(&randomize, "random", false, "Randomize URL order") } func printResults(results map[int]*Result, startTime time.Time) { @@ -179,7 +185,8 @@ func NewConfiguration() *Configuration { keepAlive: keepAlive, requests: int64((1 << 63) - 1), authHeader: authHeader, - userAgent: userAgent} + acceptEnc: acceptEnc, + randomize: randomize} if period != -1 { configuration.period = period @@ -235,6 +242,7 @@ func NewConfiguration() *Configuration { configuration.myClient.ReadTimeout = time.Duration(readTimeout) * time.Millisecond configuration.myClient.WriteTimeout = time.Duration(writeTimeout) * time.Millisecond configuration.myClient.MaxConnsPerHost = clients + configuration.myClient.Name = userAgent configuration.myClient.Dial = MyDialer() @@ -255,8 +263,15 @@ func MyDialer() func(address string) (conn net.Conn, err error) { } func client(configuration *Configuration, result *Result, done *sync.WaitGroup) { + rand := rand.New(rand.NewSource(time.Now().UnixNano())) for result.requests < configuration.requests { - for _, tmpUrl := range configuration.urls { + var tmpUrls []string; + if (configuration.randomize) { + tmpUrls = []string{configuration.urls[rand.Intn(len(configuration.urls))]} + } else { + tmpUrls = configuration.urls + } + for _, tmpUrl := range tmpUrls { req := fasthttp.AcquireRequest() @@ -273,8 +288,8 @@ func client(configuration *Configuration, result *Result, done *sync.WaitGroup) req.Header.Set("Authorization", configuration.authHeader) } - if len(configuration.userAgent) > 0 { - req.Header.Set("User-Agent", configuration.userAgent) + if len(configuration.acceptEnc) > 0 { + req.Header.Set("Accept-Encoding", configuration.acceptEnc) } req.SetBody(configuration.postData)