blob: f702adfc4fa55014adf11573339e72665e209761 [file] [log] [blame]
package main
import (
"crypto/tls"
"errors"
"log"
"net/http"
"net/url"
"sync"
"sync/atomic"
"time"
)
var success int32
var fail int32
var total int32
var clientNum = 5000
var wg = sync.WaitGroup{}
var client = &http.Client{}
var start time.Time
func main() {
u := "http://127.0.0.1:30110/v1/default/kie/kv?label=app:default&label=env:test&wait=5m"
req, err := http.NewRequest("GET", u, nil)
if err != nil {
log.Panic(err)
return
}
uri, err := url.Parse(u)
if err != nil {
log.Panic(err)
}
wg.Add(clientNum)
client = &http.Client{
Timeout: 1 * time.Minute,
}
if uri.Scheme == "https" {
client.Transport = &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
}
}
for n := 0; n < clientNum; n++ {
go func() {
defer wg.Done()
err = watch(req)
if err != nil {
atomic.AddInt32(&fail, 1)
return
}
atomic.AddInt32(&success, 1)
if total == 0 {
start = time.Now()
atomic.AddInt32(&total, 1)
}
}()
}
wg.Wait()
duration := time.Since(start)
log.Printf("success %d", success)
log.Printf("fail %d", fail)
log.Printf("takes %s", duration.String())
}
func watch(req *http.Request) error {
res, err := client.Do(req)
if err != nil {
log.Println(err)
return err
}
defer res.Body.Close()
if res.Status != "200 OK" {
log.Println(res.Status)
return errors.New("not OK")
}
return nil
}