9 . "github.com/onsi/ginkgo/v2"
13 registerNsTests(HttpTpsTest)
14 registerVethTests(HttpCliTest)
15 registerNoTopoTests(NginxHttp3Test, NginxAsServerTest,
16 NginxPerfCpsTest, NginxPerfRpsTest, NginxPerfWrkTest)
17 registerNoTopoSoloTests(HttpStaticPromTest)
20 func HttpTpsTest(s *NsSuite) {
21 iface := s.getInterfaceByName(clientInterface)
22 client_ip := iface.ip4AddressString()
24 finished := make(chan error, 1)
25 clientNetns := s.getNetNamespaceByName("cln")
27 container := s.getContainerByName("vpp")
29 // configure vpp in the container
30 container.vppInstance.vppctl("http tps uri tcp://0.0.0.0/8080")
34 s.startWget(finished, client_ip, port, "test_file_10M", clientNetns)
38 s.assertNil(err, fmt.Sprint(err))
41 func HttpCliTest(s *VethsSuite) {
42 serverContainer := s.getContainerByName("server-vpp")
43 clientContainer := s.getContainerByName("client-vpp")
45 serverVeth := s.getInterfaceByName(serverInterfaceName)
47 serverContainer.vppInstance.vppctl("http cli server")
49 uri := "http://" + serverVeth.ip4AddressString() + "/80"
51 o := clientContainer.vppInstance.vppctl("http cli client" +
52 " uri " + uri + " query /show/vlib/graph")
55 s.assertContains(o, "<html>", "<html> not found in the result!")
58 func NginxHttp3Test(s *NoTopoSuite) {
59 s.SkipUnlessExtendedTestsBuilt()
62 nginxCont := s.getContainerByName("nginx-http3")
63 s.assertNil(nginxCont.run())
65 vpp := s.getContainerByName("vpp").vppInstance
66 vpp.waitForApp("nginx-", 5)
67 serverAddress := s.getInterfaceByName(tapInterfaceName).peer.ip4AddressString()
69 defer func() { os.Remove(query) }()
70 curlCont := s.getContainerByName("curl")
71 args := fmt.Sprintf("curl --noproxy '*' --local-port 55444 --http3-only -k https://%s:8443/%s", serverAddress, query)
72 curlCont.extraRunningArgs = args
73 o, err := curlCont.combinedOutput()
74 s.assertNil(err, fmt.Sprint(err))
75 s.assertContains(o, "<http>", "<http> not found in the result!")
78 func HttpStaticPromTest(s *NoTopoSuite) {
79 finished := make(chan error, 1)
81 vpp := s.getContainerByName("vpp").vppInstance
82 serverAddress := s.getInterfaceByName(tapInterfaceName).peer.ip4AddressString()
83 s.log(vpp.vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers"))
84 s.log(vpp.vppctl("prom enable"))
85 time.Sleep(time.Second * 5)
88 s.startWget(finished, serverAddress, "80", query, "")
94 func NginxAsServerTest(s *NoTopoSuite) {
96 finished := make(chan error, 1)
98 nginxCont := s.getContainerByName("nginx")
99 s.assertNil(nginxCont.run())
101 vpp := s.getContainerByName("vpp").vppInstance
102 vpp.waitForApp("nginx-", 5)
104 serverAddress := s.getInterfaceByName(tapInterfaceName).peer.ip4AddressString()
106 defer func() { os.Remove(query) }()
108 defer GinkgoRecover()
109 s.startWget(finished, serverAddress, "80", query, "")
111 s.assertNil(<-finished)
114 func parseString(s, pattern string) string {
115 temp := strings.Split(s, "\n")
116 for _, item := range temp {
117 if strings.Contains(item, pattern) {
124 func runNginxPerf(s *NoTopoSuite, mode, ab_or_wrk string) error {
128 serverAddress := s.getInterfaceByName(tapInterfaceName).peer.ip4AddressString()
130 vpp := s.getContainerByName("vpp").vppInstance
132 nginxCont := s.getContainerByName(singleTopoContainerNginx)
133 s.assertNil(nginxCont.run())
134 vpp.waitForApp("nginx-", 5)
136 if ab_or_wrk == "ab" {
137 abCont := s.getContainerByName("ab")
138 args := fmt.Sprintf("-n %d -c %d", nRequests, nClients)
141 } else if mode != "cps" {
142 return fmt.Errorf("invalid mode %s; expected cps/rps", mode)
144 // don't exit on socket receive errors
146 args += " http://" + serverAddress + ":80/64B.json"
147 abCont.extraRunningArgs = args
148 time.Sleep(time.Second * 10)
149 o, err := abCont.combinedOutput()
150 rps := parseString(o, "Requests per second:")
153 s.assertNil(err, "err: '%s', output: '%s'", err, o)
155 wrkCont := s.getContainerByName("wrk")
156 args := fmt.Sprintf("-c %d -t 2 -d 30 http://%s:80/64B.json", nClients,
158 wrkCont.extraRunningArgs = args
159 o, err := wrkCont.combinedOutput()
160 rps := parseString(o, "requests")
163 s.assertNil(err, "err: '%s', output: '%s'", err, o)
168 func NginxPerfCpsTest(s *NoTopoSuite) {
169 s.assertNil(runNginxPerf(s, "cps", "ab"))
172 func NginxPerfRpsTest(s *NoTopoSuite) {
173 s.assertNil(runNginxPerf(s, "rps", "ab"))
176 func NginxPerfWrkTest(s *NoTopoSuite) {
177 s.assertNil(runNginxPerf(s, "", "wrk"))