310dc8331eede87e0583f37ec20c4e641c12555e
[vpp.git] / extras / hs-test / http_test.go
1 package main
2
3 import (
4         "fmt"
5         "os"
6         "os/exec"
7 )
8
9 func (s *NsSuite) TestHttpTps() {
10         iface := s.netInterfaces[clientInterface]
11         client_ip := iface.ip4AddressString()
12         port := "8080"
13         finished := make(chan error, 1)
14
15         container := s.getContainerByName("vpp")
16
17         // configure vpp in the container
18         container.vppInstance.vppctl("http tps uri tcp://0.0.0.0/8080")
19
20         go startWget(finished, client_ip, port, "test_file_10M", "client")
21         // wait for client
22         err := <-finished
23         s.assertNil(err)
24 }
25
26 func (s *VethsSuite) TestHttpCli() {
27         serverContainer := s.getContainerByName("server-vpp")
28         clientContainer := s.getContainerByName("client-vpp")
29
30         serverVeth := s.netInterfaces[serverInterfaceName]
31
32         serverContainer.vppInstance.vppctl("http cli server")
33
34         uri := "http://" + serverVeth.ip4AddressString() + "/80"
35
36         o := clientContainer.vppInstance.vppctl("http cli client" +
37                 " uri " + uri + " query /show/version")
38
39         s.log(o)
40         s.assertContains(o, "<html>", "<html> not found in the result!")
41 }
42
43 func (s *NoTopoSuite) TestNginxAsServer() {
44         query := "return_ok"
45         finished := make(chan error, 1)
46
47         nginxCont := s.getContainerByName("nginx")
48         s.assertNil(nginxCont.run())
49
50         vpp := s.getContainerByName("vpp").vppInstance
51         vpp.waitForApp("nginx-", 5)
52
53         serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
54
55         defer func() { os.Remove(query) }()
56         go startWget(finished, serverAddress, "80", query, "")
57         s.assertNil(<-finished)
58 }
59
60 func runNginxPerf(s *NoTopoSuite, mode, ab_or_wrk string) error {
61         nRequests := 1000000
62         nClients := 2000
63         var args []string
64         var exeName string
65
66         serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
67
68         if ab_or_wrk == "ab" {
69                 args = []string{"-n", fmt.Sprintf("%d", nRequests), "-c",
70                         fmt.Sprintf("%d", nClients)}
71                 if mode == "rps" {
72                         args = append(args, "-k")
73                 } else if mode != "cps" {
74                         return fmt.Errorf("invalid mode %s; expected cps/rps", mode)
75                 }
76                 args = append(args, "http://"+serverAddress+":80/64B.json")
77                 exeName = "ab"
78         } else {
79                 args = []string{"-c", fmt.Sprintf("%d", nClients), "-t", "2", "-d", "30",
80                         "http://" + serverAddress + ":80/64B.json"}
81                 exeName = "wrk"
82         }
83
84         vpp := s.getContainerByName("vpp").vppInstance
85
86         nginxCont := s.getContainerByName("nginx")
87         s.assertNil(nginxCont.run())
88         vpp.waitForApp("nginx-", 5)
89
90         cmd := exec.Command(exeName, args...)
91         s.log(cmd)
92         o, err := cmd.CombinedOutput()
93         s.log(string(o))
94         s.assertNil(err)
95         s.assertNotEmpty(o)
96         return nil
97 }
98
99 func (s *NoTopoSuite) TestNginxPerfCps() {
100         s.assertNil(runNginxPerf(s, "cps", "ab"))
101 }
102
103 func (s *NoTopoSuite) TestNginxPerfRps() {
104         s.assertNil(runNginxPerf(s, "rps", "ab"))
105 }
106
107 func (s *NoTopoSuite) TestNginxPerfWrk() {
108         s.assertNil(runNginxPerf(s, "", "wrk"))
109 }