aboutsummaryrefslogtreecommitdiffstats
path: root/extras/hs-test/http_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'extras/hs-test/http_test.go')
-rw-r--r--extras/hs-test/http_test.go97
1 files changed, 51 insertions, 46 deletions
diff --git a/extras/hs-test/http_test.go b/extras/hs-test/http_test.go
index 68934550b69..b143e559244 100644
--- a/extras/hs-test/http_test.go
+++ b/extras/hs-test/http_test.go
@@ -7,7 +7,6 @@ import (
"math/rand"
"net"
"net/http"
- "net/http/httptest"
"net/http/httptrace"
"os"
"strconv"
@@ -36,10 +35,10 @@ func init() {
HttpClientErrRespTest, HttpClientPostFormTest, HttpClientGet128kbResponseTest, HttpClientGetResponseBodyTest,
HttpClientGetNoResponseBodyTest, HttpClientPostFileTest, HttpClientPostFilePtrTest, HttpUnitTest,
HttpRequestLineTest, HttpClientGetTimeout, HttpStaticFileHandlerWrkTest, HttpStaticUrlHandlerWrkTest, HttpConnTimeoutTest,
- HttpClientGetRepeat, HttpClientPostRepeat, HttpIgnoreH2UpgradeTest, HttpInvalidAuthorityFormUriTest, HttpHeaderErrorConnectionDropTest)
+ HttpClientGetRepeatTest, HttpClientPostRepeatTest, HttpIgnoreH2UpgradeTest, HttpInvalidAuthorityFormUriTest, HttpHeaderErrorConnectionDropTest)
RegisterNoTopoSoloTests(HttpStaticPromTest, HttpGetTpsTest, HttpGetTpsInterruptModeTest, PromConcurrentConnectionsTest,
PromMemLeakTest, HttpClientPostMemLeakTest, HttpInvalidClientRequestMemLeakTest, HttpPostTpsTest, HttpPostTpsInterruptModeTest,
- PromConsecutiveConnectionsTest, HttpGetTpsTlsTest, HttpPostTpsTlsTest)
+ PromConsecutiveConnectionsTest, HttpGetTpsTlsTest, HttpPostTpsTlsTest, HttpClientGetRepeatMTTest, HttpClientPtrGetRepeatMTTest)
}
const wwwRootPath = "/tmp/www_root"
@@ -382,35 +381,37 @@ func httpClientGet(s *NoTopoSuite, response string, size int) {
s.AssertContains(file_contents, response)
}
-func startSimpleServer(s *NoTopoSuite, replyCount *int, serverAddress string) (server *httptest.Server) {
- var err error
- server = httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "Hello")
- *replyCount++
- }))
- server.Listener, err = net.Listen("tcp", serverAddress+":80")
- s.AssertNil(err, "Error while creating listener.")
-
- server.Start()
+func HttpClientGetRepeatMTTest(s *NoTopoSuite) {
+ httpClientRepeat(s, "", "sessions 2")
+}
- return server
+func HttpClientPtrGetRepeatMTTest(s *NoTopoSuite) {
+ httpClientRepeat(s, "", "use-ptr sessions 2")
}
-func HttpClientGetRepeat(s *NoTopoSuite) {
- httpClientRepeat(s, "")
+func HttpClientGetRepeatTest(s *NoTopoSuite) {
+ httpClientRepeat(s, "", "")
}
-func HttpClientPostRepeat(s *NoTopoSuite) {
- httpClientRepeat(s, "post")
+func HttpClientPostRepeatTest(s *NoTopoSuite) {
+ httpClientRepeat(s, "post", "")
}
-func httpClientRepeat(s *NoTopoSuite, requestMethod string) {
- replyCount := 0
+func httpClientRepeat(s *NoTopoSuite, requestMethod string, clientArgs string) {
vpp := s.Containers.Vpp.VppInstance
- serverAddress := s.HostAddr()
+ logPath := s.Containers.NginxServer.GetContainerWorkDir() + "/" + s.Containers.NginxServer.Name + "-access.log"
+ serverAddress := s.Interfaces.Tap.Ip4AddressString()
+ replyCountInt := 0
repeatAmount := 10000
- server := startSimpleServer(s, &replyCount, serverAddress)
- defer server.Close()
+ durationInSec := 10
+ var err error
+
+ // recreate interfaces with RX-queues
+ s.AssertNil(vpp.DeleteTap(s.Interfaces.Tap))
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Tap, 2, 2))
+
+ s.CreateNginxServer()
+ s.AssertNil(s.Containers.NginxServer.Start())
if requestMethod == "post" {
fileName := "/tmp/test_file.txt"
@@ -419,41 +420,45 @@ func httpClientRepeat(s *NoTopoSuite, requestMethod string) {
requestMethod += " file /tmp/test_file.txt"
}
- uri := "http://" + serverAddress + "/80"
- cmd := fmt.Sprintf("http client %s use-ptr duration 10 header Hello:World uri %s target /index.html",
- requestMethod, uri)
+ uri := "http://" + serverAddress + "/" + s.GetPortFromPpid()
+ cmd := fmt.Sprintf("http client %s %s duration %d header Hello:World uri %s target /index.html",
+ requestMethod, clientArgs, durationInSec, uri)
- s.Log("Duration 10s")
+ s.Log("Duration %ds", durationInSec)
o := vpp.Vppctl(cmd)
- outputLen := len(o)
- if outputLen > 500 {
- s.Log(o[:500])
- s.Log("* HST Framework: output limited to 500 chars to avoid flooding the console. Output length: " + fmt.Sprint(outputLen))
- } else {
- s.Log(o)
+ s.Log(o)
+
+ replyCount := s.Containers.NginxServer.Exec(false, "awk 'END { print NR }' "+logPath)
+ if replyCount != "" {
+ replyCountInt, err = strconv.Atoi(replyCount[:len(replyCount)-1])
+ s.AssertNil(err)
}
- s.Log("Server response count: %d", replyCount)
+ // empty the log file
+ s.Containers.NginxServer.Exec(false, "truncate -s 0 "+logPath)
+
+ s.Log("Server response count: %d", replyCountInt)
s.AssertNotNil(o)
s.AssertNotContains(o, "error")
- s.AssertGreaterThan(replyCount, 15000)
+ s.AssertGreaterThan(replyCountInt, 15000)
- cmd = fmt.Sprintf("http client %s use-ptr repeat %d header Hello:World uri %s target /index.html",
- requestMethod, repeatAmount, uri)
+ replyCount = ""
+ cmd = fmt.Sprintf("http client %s %s repeat %d header Hello:World uri %s target /index.html",
+ requestMethod, clientArgs, repeatAmount, uri)
- replyCount = 0
+ s.AssertNil(err, fmt.Sprint(err))
s.Log("Repeat %d", repeatAmount)
o = vpp.Vppctl(cmd)
- outputLen = len(o)
- if outputLen > 500 {
- s.Log(o[:500])
- s.Log("* HST Framework: output limited to 500 chars to avoid flooding the console. Output length: " + fmt.Sprint(outputLen))
- } else {
- s.Log(o)
+ s.Log(o)
+
+ replyCount = s.Containers.NginxServer.Exec(false, "awk 'END { print NR }' "+logPath)
+ if replyCount != "" {
+ replyCountInt, err = strconv.Atoi(replyCount[:len(replyCount)-1])
+ s.AssertNil(err)
}
- s.Log("Server response count: %d", replyCount)
+ s.Log("Server response count: %d", replyCountInt)
s.AssertNotNil(o)
s.AssertNotContains(o, "error")
- s.AssertEqual(repeatAmount, replyCount)
+ s.AssertEqual(repeatAmount, replyCountInt)
}
func HttpClientGetTimeout(s *NoTopoSuite) {