http_static: fix reply data leak
[vpp.git] / extras / hs-test / ldp_test.go
1 package main
2
3 import (
4         "fmt"
5         "os"
6
7         . "fd.io/hs-test/infra"
8         . "github.com/onsi/ginkgo/v2"
9 )
10
11 func init() {
12         RegisterVethTests(LDPreloadIperfVppTest)
13 }
14
15 func LDPreloadIperfVppTest(s *VethsSuite) {
16         var clnVclConf, srvVclConf Stanza
17         var ldpreload string
18
19         serverContainer := s.GetContainerByName("server-vpp")
20         serverVclFileName := serverContainer.GetHostWorkDir() + "/vcl_srv.conf"
21
22         clientContainer := s.GetContainerByName("client-vpp")
23         clientVclFileName := clientContainer.GetHostWorkDir() + "/vcl_cln.conf"
24
25         if *IsDebugBuild {
26                 ldpreload = "LD_PRELOAD=../../build-root/build-vpp_debug-native/vpp/lib/x86_64-linux-gnu/libvcl_ldpreload.so"
27         } else {
28                 ldpreload = "LD_PRELOAD=../../build-root/build-vpp-native/vpp/lib/x86_64-linux-gnu/libvcl_ldpreload.so"
29         }
30
31         stopServerCh := make(chan struct{}, 1)
32         srvCh := make(chan error, 1)
33         clnCh := make(chan error)
34
35         s.Log("starting VPPs")
36
37         clientAppSocketApi := fmt.Sprintf("app-socket-api %s/var/run/app_ns_sockets/default",
38                 clientContainer.GetHostWorkDir())
39         err := clnVclConf.
40                 NewStanza("vcl").
41                 Append("rx-fifo-size 4000000").
42                 Append("tx-fifo-size 4000000").
43                 Append("app-scope-local").
44                 Append("app-scope-global").
45                 Append("use-mq-eventfd").
46                 Append(clientAppSocketApi).Close().
47                 SaveToFile(clientVclFileName)
48         s.AssertNil(err, fmt.Sprint(err))
49
50         serverAppSocketApi := fmt.Sprintf("app-socket-api %s/var/run/app_ns_sockets/default",
51                 serverContainer.GetHostWorkDir())
52         err = srvVclConf.
53                 NewStanza("vcl").
54                 Append("rx-fifo-size 4000000").
55                 Append("tx-fifo-size 4000000").
56                 Append("app-scope-local").
57                 Append("app-scope-global").
58                 Append("use-mq-eventfd").
59                 Append(serverAppSocketApi).Close().
60                 SaveToFile(serverVclFileName)
61         s.AssertNil(err, fmt.Sprint(err))
62
63         s.Log("attaching server to vpp")
64
65         srvEnv := append(os.Environ(), ldpreload, "VCL_CONFIG="+serverVclFileName)
66         go func() {
67                 defer GinkgoRecover()
68                 s.StartServerApp(srvCh, stopServerCh, srvEnv)
69         }()
70
71         err = <-srvCh
72         s.AssertNil(err, fmt.Sprint(err))
73
74         s.Log("attaching client to vpp")
75         var clnRes = make(chan string, 1)
76         clnEnv := append(os.Environ(), ldpreload, "VCL_CONFIG="+clientVclFileName)
77         serverVethAddress := s.GetInterfaceByName(ServerInterfaceName).Ip4AddressString()
78         go func() {
79                 defer GinkgoRecover()
80                 s.StartClientApp(serverVethAddress, clnEnv, clnCh, clnRes)
81         }()
82         s.Log(<-clnRes)
83
84         // wait for client's result
85         err = <-clnCh
86         s.AssertNil(err, fmt.Sprint(err))
87
88         // stop server
89         stopServerCh <- struct{}{}
90 }