diff options
author | 2024-10-02 09:00:19 +0200 | |
---|---|---|
committer | 2024-10-03 19:25:21 +0000 | |
commit | fa5defdc2d7f674b2a9a68030bf2af993c42ad01 (patch) | |
tree | c94f5f4cf41afaa71f1a8944594c978c46c95e38 | |
parent | 46ab0b22bb2915c28ae30d26501ea4cfa1f9b577 (diff) |
hs-test: prom consecutive connections test
Type: test
Change-Id: Ide4571dd8ac9bcb64fcd5ba408b6d1f99d34185f
Signed-off-by: Matus Fabian <matfabia@cisco.com>
-rw-r--r-- | extras/hs-test/http_test.go | 64 | ||||
-rw-r--r-- | extras/hs-test/infra/utils.go | 4 |
2 files changed, 42 insertions, 26 deletions
diff --git a/extras/hs-test/http_test.go b/extras/hs-test/http_test.go index d1d28fb893c..0e3118f6e80 100644 --- a/extras/hs-test/http_test.go +++ b/extras/hs-test/http_test.go @@ -33,15 +33,17 @@ func init() { HttpHeadersTest, HttpStaticFileHandlerTest, HttpStaticFileHandlerDefaultMaxAgeTest, HttpClientTest, HttpClientErrRespTest, HttpClientPostFormTest, HttpClientPostFileTest, HttpClientPostFilePtrTest, AuthorityFormTargetTest, HttpRequestLineTest) RegisterNoTopoSoloTests(HttpStaticPromTest, HttpGetTpsTest, HttpGetTpsInterruptModeTest, PromConcurrentConnectionsTest, - PromMemLeakTest, HttpClientPostMemLeakTest, HttpInvalidClientRequestMemLeakTest, HttpPostTpsTest, HttpPostTpsInterruptModeTest) + PromMemLeakTest, HttpClientPostMemLeakTest, HttpInvalidClientRequestMemLeakTest, HttpPostTpsTest, HttpPostTpsInterruptModeTest, + PromConsecutiveConnectionsTest) } const wwwRootPath = "/tmp/www_root" +const defaultHttpTimeout = time.Second * 10 func httpDownloadBenchmark(s *HstSuite, experiment *gmeasure.Experiment, data interface{}) { url, isValid := data.(string) s.AssertEqual(true, isValid) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", url, nil) s.AssertNil(err, fmt.Sprint(err)) t := time.Now() @@ -74,7 +76,7 @@ func httpUploadBenchmark(s *HstSuite, experiment *gmeasure.Experiment, data inte s.AssertEqual(true, isValid) body := make([]byte, 10485760) _, err := rand.Read(body) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("POST", url, bytes.NewBuffer(body)) s.AssertNil(err, fmt.Sprint(err)) t := time.Now() @@ -376,7 +378,7 @@ func HttpStaticPromTest(s *NoTopoSuite) { s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers")) s.Log(vpp.Vppctl("prom enable")) time.Sleep(time.Second * 5) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/"+query, nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -390,8 +392,8 @@ func HttpStaticPromTest(s *NoTopoSuite) { s.AssertNil(err, fmt.Sprint(err)) } -func promReq(s *NoTopoSuite, url string) { - client := NewHttpClient() +func promReq(s *NoTopoSuite, url string, timeout time.Duration) { + client := NewHttpClient(timeout) req, err := http.NewRequest("GET", url, nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -405,7 +407,7 @@ func promReq(s *NoTopoSuite, url string) { func promReqWg(s *NoTopoSuite, url string, wg *sync.WaitGroup) { defer GinkgoRecover() defer wg.Done() - promReq(s, url) + promReq(s, url, defaultHttpTimeout) } func PromConcurrentConnectionsTest(s *NoTopoSuite) { @@ -426,6 +428,20 @@ func PromConcurrentConnectionsTest(s *NoTopoSuite) { s.Log(vpp.Vppctl("show session verbose proto http")) } +func PromConsecutiveConnectionsTest(s *NoTopoSuite) { + vpp := s.GetContainerByName("vpp").VppInstance + serverAddress := s.VppAddr() + url := "http://" + serverAddress + ":80/stats.prom" + + s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers")) + s.Log(vpp.Vppctl("prom enable")) + time.Sleep(time.Second * 5) + + for i := 0; i < 1000; i++ { + promReq(s, url, time.Millisecond*500) + } +} + func PromMemLeakTest(s *NoTopoSuite) { s.SkipUnlessLeakCheck() @@ -441,7 +457,7 @@ func PromMemLeakTest(s *NoTopoSuite) { time.Sleep(time.Second * 3) /* warmup request (FIB) */ - promReq(s, url) + promReq(s, url, defaultHttpTimeout) vpp.EnableMemoryTrace() traces1, err := vpp.GetMemoryTrace() @@ -450,7 +466,7 @@ func PromMemLeakTest(s *NoTopoSuite) { /* collect stats couple of times */ for i := 0; i < 5; i++ { time.Sleep(time.Second * 1) - promReq(s, url) + promReq(s, url, defaultHttpTimeout) } /* let's give it some time to clean up sessions */ @@ -607,7 +623,7 @@ func HttpStaticFileHandlerTestFunction(s *NoTopoSuite, max_age string) { serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server www-root " + wwwRootPath + " uri tcp://" + serverAddress + "/80 debug cache-size 2m " + maxAgeFormatted)) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/index.html", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -662,7 +678,7 @@ func HttpStaticPathTraversalTest(s *NoTopoSuite) { serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server www-root " + wwwRootPath + " uri tcp://" + serverAddress + "/80 debug")) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/../secret_folder/secret_file.txt", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -683,7 +699,7 @@ func HttpStaticMovedTest(s *NoTopoSuite) { serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server www-root " + wwwRootPath + " uri tcp://" + serverAddress + "/80 debug")) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/tmp.aaa", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -703,7 +719,7 @@ func HttpStaticNotFoundTest(s *NoTopoSuite) { serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server www-root " + wwwRootPath + " uri tcp://" + serverAddress + "/80 debug")) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/notfound.html", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -721,7 +737,7 @@ func HttpCliMethodNotAllowedTest(s *NoTopoSuite) { serverAddress := s.VppAddr() vpp.Vppctl("http cli server") - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("POST", "http://"+serverAddress+":80/test", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -739,7 +755,7 @@ func HttpCliBadRequestTest(s *NoTopoSuite) { serverAddress := s.VppAddr() vpp.Vppctl("http cli server") - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -756,7 +772,7 @@ func HttpStaticBuildInUrlGetVersionTest(s *NoTopoSuite) { serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/version.json", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -780,7 +796,7 @@ func HttpStaticBuildInUrlGetVersionVerboseTest(s *NoTopoSuite) { serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/version.json?verbose=true", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -804,7 +820,7 @@ func HttpStaticBuildInUrlGetIfListTest(s *NoTopoSuite) { serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/interface_list.json", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -824,7 +840,7 @@ func HttpStaticBuildInUrlGetIfStatsTest(s *NoTopoSuite) { serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/interface_stats.json", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -853,7 +869,7 @@ func HttpStaticBuildInUrlPostIfStatsTest(s *NoTopoSuite) { s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) body := []byte(s.VppIfName()) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("POST", "http://"+serverAddress+":80/interface_stats.json", bytes.NewBuffer(body)) s.AssertNil(err, fmt.Sprint(err)) @@ -874,7 +890,7 @@ func HttpStaticMacTimeTest(s *NoTopoSuite) { s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) s.Log(vpp.Vppctl("mactime enable-disable " + s.VppIfName())) - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/mactime.json", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -1045,7 +1061,7 @@ func HttpMethodNotImplementedTest(s *NoTopoSuite) { serverAddress := s.VppAddr() vpp.Vppctl("http cli server") - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("OPTIONS", "http://"+serverAddress+":80/show/version", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -1072,7 +1088,7 @@ func HttpUriDecodeTest(s *NoTopoSuite) { serverAddress := s.VppAddr() vpp.Vppctl("http cli server") - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/sh%6fw%20versio%6E%20verbose", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) @@ -1144,7 +1160,7 @@ func HeaderServerTest(s *NoTopoSuite) { serverAddress := s.VppAddr() vpp.Vppctl("http cli server") - client := NewHttpClient() + client := NewHttpClient(defaultHttpTimeout) req, err := http.NewRequest("GET", "http://"+serverAddress+":80/show/version", nil) s.AssertNil(err, fmt.Sprint(err)) resp, err := client.Do(req) diff --git a/extras/hs-test/infra/utils.go b/extras/hs-test/infra/utils.go index ee528370280..a32acb30193 100644 --- a/extras/hs-test/infra/utils.go +++ b/extras/hs-test/infra/utils.go @@ -86,13 +86,13 @@ func (s *Stanza) SaveToFile(fileName string) error { } // NewHttpClient creates [http.Client] with disabled proxy and redirects, it also sets timeout to 30seconds. -func NewHttpClient() *http.Client { +func NewHttpClient(timeout time.Duration) *http.Client { transport := http.DefaultTransport transport.(*http.Transport).Proxy = nil transport.(*http.Transport).DisableKeepAlives = true client := &http.Client{ Transport: transport, - Timeout: time.Second * 30, + Timeout: timeout, CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }} |