2022-11-10 12:34:17 +01:00
|
|
|
package main
|
|
|
|
|
2022-12-21 08:59:16 +01:00
|
|
|
import (
|
2023-01-27 13:14:34 +01:00
|
|
|
"fmt"
|
2022-12-21 08:59:16 +01:00
|
|
|
"os"
|
2023-01-27 13:14:34 +01:00
|
|
|
"os/exec"
|
2022-12-21 08:59:16 +01:00
|
|
|
)
|
|
|
|
|
2022-11-10 12:34:17 +01:00
|
|
|
func (s *NsSuite) TestHttpTps() {
|
2023-02-02 08:58:04 +01:00
|
|
|
iface := s.netInterfaces[clientInterface]
|
2023-02-28 16:55:01 +01:00
|
|
|
client_ip := iface.ip4AddressString()
|
2022-11-10 12:34:17 +01:00
|
|
|
port := "8080"
|
2023-02-02 08:58:04 +01:00
|
|
|
finished := make(chan error, 1)
|
2022-11-10 12:34:17 +01:00
|
|
|
|
2022-12-14 16:30:04 +01:00
|
|
|
container := s.getContainerByName("vpp")
|
2022-11-10 12:34:17 +01:00
|
|
|
|
2023-02-02 08:58:04 +01:00
|
|
|
// configure vpp in the container
|
|
|
|
container.vppInstance.vppctl("http tps uri tcp://0.0.0.0/8080")
|
2022-11-10 12:34:17 +01:00
|
|
|
|
2023-02-02 08:58:04 +01:00
|
|
|
go startWget(finished, client_ip, port, "test_file_10M", "client")
|
2022-11-10 12:34:17 +01:00
|
|
|
// wait for client
|
2023-02-02 08:58:04 +01:00
|
|
|
err := <-finished
|
2022-12-06 15:38:05 +01:00
|
|
|
s.assertNil(err)
|
2022-11-10 12:34:17 +01:00
|
|
|
}
|
|
|
|
|
2022-12-01 09:56:37 +01:00
|
|
|
func (s *VethsSuite) TestHttpCli() {
|
2022-12-14 16:30:04 +01:00
|
|
|
serverContainer := s.getContainerByName("server-vpp")
|
|
|
|
clientContainer := s.getContainerByName("client-vpp")
|
2022-11-10 12:34:17 +01:00
|
|
|
|
2023-02-02 08:58:04 +01:00
|
|
|
serverVeth := s.netInterfaces[serverInterfaceName]
|
2022-11-10 12:34:17 +01:00
|
|
|
|
2023-02-02 08:58:04 +01:00
|
|
|
serverContainer.vppInstance.vppctl("http cli server")
|
2022-11-10 12:34:17 +01:00
|
|
|
|
2023-02-28 16:55:01 +01:00
|
|
|
uri := "http://" + serverVeth.ip4AddressString() + "/80"
|
2022-11-10 12:34:17 +01:00
|
|
|
|
2023-02-02 08:58:04 +01:00
|
|
|
o := clientContainer.vppInstance.vppctl("http cli client" +
|
2023-01-26 10:07:29 +01:00
|
|
|
" uri " + uri + " query /show/version")
|
2022-12-06 15:38:05 +01:00
|
|
|
|
2023-01-26 10:07:29 +01:00
|
|
|
s.log(o)
|
2022-12-06 15:38:05 +01:00
|
|
|
s.assertContains(o, "<html>", "<html> not found in the result!")
|
2022-11-10 12:34:17 +01:00
|
|
|
}
|
2022-12-21 08:59:16 +01:00
|
|
|
|
2023-02-24 14:16:25 +01:00
|
|
|
func (s *NoTopoSuite) TestNginxAsServer() {
|
2022-12-21 08:59:16 +01:00
|
|
|
query := "return_ok"
|
|
|
|
finished := make(chan error, 1)
|
|
|
|
|
|
|
|
nginxCont := s.getContainerByName("nginx")
|
|
|
|
s.assertNil(nginxCont.run())
|
|
|
|
|
2023-02-07 20:40:27 +01:00
|
|
|
vpp := s.getContainerByName("vpp").vppInstance
|
2023-02-28 14:51:03 -08:00
|
|
|
vpp.waitForApp("nginx-", 5)
|
2022-12-21 08:59:16 +01:00
|
|
|
|
2023-02-28 16:55:01 +01:00
|
|
|
serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
|
2023-02-07 20:40:27 +01:00
|
|
|
|
2022-12-21 08:59:16 +01:00
|
|
|
defer func() { os.Remove(query) }()
|
2023-02-07 20:40:27 +01:00
|
|
|
go startWget(finished, serverAddress, "80", query, "")
|
2022-12-21 08:59:16 +01:00
|
|
|
s.assertNil(<-finished)
|
|
|
|
}
|
2023-01-27 13:14:34 +01:00
|
|
|
|
|
|
|
func runNginxPerf(s *NoTopoSuite, mode, ab_or_wrk string) error {
|
|
|
|
nRequests := 1000000
|
|
|
|
nClients := 2000
|
|
|
|
var args []string
|
|
|
|
var exeName string
|
|
|
|
|
2023-02-28 16:55:01 +01:00
|
|
|
serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
|
2023-02-07 20:40:27 +01:00
|
|
|
|
2023-01-27 13:14:34 +01:00
|
|
|
if ab_or_wrk == "ab" {
|
|
|
|
args = []string{"-n", fmt.Sprintf("%d", nRequests), "-c",
|
|
|
|
fmt.Sprintf("%d", nClients)}
|
|
|
|
if mode == "rps" {
|
|
|
|
args = append(args, "-k")
|
|
|
|
} else if mode != "cps" {
|
|
|
|
return fmt.Errorf("invalid mode %s; expected cps/rps", mode)
|
|
|
|
}
|
2023-02-07 20:40:27 +01:00
|
|
|
args = append(args, "http://"+serverAddress+":80/64B.json")
|
2023-01-27 13:14:34 +01:00
|
|
|
exeName = "ab"
|
|
|
|
} else {
|
|
|
|
args = []string{"-c", fmt.Sprintf("%d", nClients), "-t", "2", "-d", "30",
|
2023-02-24 14:16:25 +01:00
|
|
|
"http://" + serverAddress + ":80/64B.json"}
|
2023-01-27 13:14:34 +01:00
|
|
|
exeName = "wrk"
|
|
|
|
}
|
|
|
|
|
2023-02-07 20:40:27 +01:00
|
|
|
vpp := s.getContainerByName("vpp").vppInstance
|
2023-01-27 13:14:34 +01:00
|
|
|
|
|
|
|
nginxCont := s.getContainerByName("nginx")
|
|
|
|
s.assertNil(nginxCont.run())
|
2023-02-28 14:51:03 -08:00
|
|
|
vpp.waitForApp("nginx-", 5)
|
2023-01-27 13:14:34 +01:00
|
|
|
|
|
|
|
cmd := exec.Command(exeName, args...)
|
2023-02-07 20:40:27 +01:00
|
|
|
s.log(cmd)
|
2023-03-16 13:52:54 +01:00
|
|
|
o, err := cmd.CombinedOutput()
|
2023-02-07 20:40:27 +01:00
|
|
|
s.log(string(o))
|
2023-03-16 13:52:54 +01:00
|
|
|
s.assertNil(err)
|
2023-02-15 17:44:46 +01:00
|
|
|
s.assertNotEmpty(o)
|
2023-01-27 13:14:34 +01:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *NoTopoSuite) TestNginxPerfCps() {
|
|
|
|
s.assertNil(runNginxPerf(s, "cps", "ab"))
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *NoTopoSuite) TestNginxPerfRps() {
|
|
|
|
s.assertNil(runNginxPerf(s, "rps", "ab"))
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *NoTopoSuite) TestNginxPerfWrk() {
|
|
|
|
s.assertNil(runNginxPerf(s, "", "wrk"))
|
|
|
|
}
|