8d81cde56e6d09ae90981dca1e705163357c1b94
[vpp.git] / extras / hs-test / ldp_test.go
1 package main
2
3 import (
4         "fmt"
5         "os"
6         "time"
7 )
8
9 func (s *VethsSuite) TestLDPreloadIperfVpp() {
10         var clnVclConf, srvVclConf Stanza
11
12         serverContainer := s.getContainerByName("server-vpp")
13         serverVolume := serverContainer.getVolumeByHostDir("/tmp/server")
14         srvVcl := serverVolume.containerDir + "/vcl_srv.conf"
15
16         clientContainer := s.getContainerByName("client-vpp")
17         clientVolume := clientContainer.getVolumeByHostDir("/tmp/client")
18         clnVcl := clientVolume.containerDir + "/vcl_cln.conf"
19
20         ldpreload := os.Getenv("HST_LDPRELOAD")
21         s.assertNotEqual("", ldpreload)
22
23         ldpreload = "LD_PRELOAD=" + ldpreload
24
25         stopServerCh := make(chan struct{}, 1)
26         srvCh := make(chan error, 1)
27         clnCh := make(chan error)
28
29         s.log("starting VPPs")
30
31         originalWorkDir := serverContainer.workDir
32         serverContainer.workDir = serverVolume.containerDir
33         _, err := serverContainer.execAction("Configure2Veths srv")
34         s.assertNil(err)
35         serverContainer.workDir = originalWorkDir
36
37         originalWorkDir = clientContainer.workDir
38         clientContainer.workDir = clientVolume.containerDir
39         _, err = clientContainer.execAction("Configure2Veths cln")
40         s.assertNil(err)
41         clientContainer.workDir = originalWorkDir
42
43         clientAppSocketApi := fmt.Sprintf("app-socket-api %s/var/run/app_ns_sockets/2",
44                 clientVolume.containerDir)
45         err = clnVclConf.
46                 NewStanza("vcl").
47                 Append("rx-fifo-size 4000000").
48                 Append("tx-fifo-size 4000000").
49                 Append("app-scope-local").
50                 Append("app-scope-global").
51                 Append("use-mq-eventfd").
52                 Append(clientAppSocketApi).Close().
53                 SaveToFile(clnVcl)
54         s.assertNil(err)
55
56         serverAppSocketApi := fmt.Sprintf("app-socket-api %s/var/run/app_ns_sockets/1",
57                 serverVolume.containerDir)
58         err = srvVclConf.
59                 NewStanza("vcl").
60                 Append("rx-fifo-size 4000000").
61                 Append("tx-fifo-size 4000000").
62                 Append("app-scope-local").
63                 Append("app-scope-global").
64                 Append("use-mq-eventfd").
65                 Append(serverAppSocketApi).Close().
66                 SaveToFile(srvVcl)
67         s.assertNil(err)
68
69         s.log("attaching server to vpp")
70
71         // FIXME
72         time.Sleep(5 * time.Second)
73
74         srvEnv := append(os.Environ(), ldpreload, "VCL_CONFIG="+srvVcl)
75         go StartServerApp(srvCh, stopServerCh, srvEnv)
76
77         err = <-srvCh
78         s.assertNil(err)
79
80         s.log("attaching client to vpp")
81         var clnRes = make(chan string, 1)
82         clnEnv := append(os.Environ(), ldpreload, "VCL_CONFIG="+clnVcl)
83         go StartClientApp(clnEnv, clnCh, clnRes)
84         s.log(<- clnRes)
85
86         // wait for client's result
87         err = <-clnCh
88         s.assertNil(err)
89
90         // stop server
91         stopServerCh <- struct{}{}
92 }