X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fhs-test%2Futils.go;h=f912880a78a53e9a62b11a3de1cce393d153ce17;hb=064ff151504453220ae377f6092cd706d2e317e2;hp=581b8461082cafd7bc8e44bdbc56e7d2bfa13f7b;hpb=98a91e82608e6e30d4516b52556cdaaa9837ee24;p=vpp.git diff --git a/extras/hs-test/utils.go b/extras/hs-test/utils.go old mode 100755 new mode 100644 index 581b8461082..f912880a78a --- a/extras/hs-test/utils.go +++ b/extras/hs-test/utils.go @@ -1,58 +1,17 @@ package main import ( - "context" - "encoding/json" "errors" "fmt" "io" - "io/ioutil" "os" "os/exec" "strings" "time" - - "github.com/edwarnicke/exechelper" ) -// TODO remove `configTemplate` once its usage has been replaced everywhere with VppConfig -const configTemplate = `unix { - nodaemon - log %[1]s/var/log/vpp/vpp.log - full-coredump - cli-listen %[1]s/var/run/vpp/cli.sock - runtime-dir %[1]s/var/run - gid vpp -} - -api-trace { - on -} - -api-segment { - gid vpp -} - -socksvr { - socket-name %[1]s/var/run/vpp/api.sock -} - -statseg { - socket-name %[1]s/var/run/vpp/stats.sock -} - -plugins { - plugin unittest_plugin.so { enable } - plugin dpdk_plugin.so { disable } - plugin crypto_aesni_plugin.so { enable } - plugin quic_plugin.so { enable } - plugin crypto_ipsecmb_plugin.so { disable } -} - -` - const vclTemplate = `vcl { - app-socket-api %[1]s + app-socket-api %[1]s/var/run/app_ns_sockets/%[2]s app-scope-global app-scope-local namespace-id %[2]s @@ -61,7 +20,8 @@ const vclTemplate = `vcl { } ` -const TopologyDir string = "topo/" +const NetworkTopologyDir string = "topo-network/" +const ContainerTopologyDir string = "topo-containers/" type Stanza struct { content string @@ -98,7 +58,7 @@ func StartServerApp(running chan error, done chan struct{}, env []string) { cmd.Process.Kill() } -func StartClientApp(env []string, clnCh chan error) { +func StartClientApp(ipAddress string, env []string, clnCh chan error, clnRes chan string) { defer func() { clnCh <- nil }() @@ -106,7 +66,7 @@ func StartClientApp(env []string, clnCh chan error) { nTries := 0 for { - cmd := exec.Command("iperf3", "-c", "10.10.10.1", "-u", "-l", "1460", "-b", "10g") + cmd := exec.Command("iperf3", "-c", ipAddress, "-u", "-l", "1460", "-b", "10g") if env != nil { cmd.Env = env } @@ -120,70 +80,12 @@ func StartClientApp(env []string, clnCh chan error) { nTries++ continue } else { - fmt.Printf("Client output: %s", o) + clnRes <- fmt.Sprintf("Client output: %s", o) } break } } -// run vpphelper in docker -func hstExec(args string, instance string) (string, error) { - syncFile := fmt.Sprintf("/tmp/%s/sync/rc", instance) - os.Remove(syncFile) - - c := "docker exec -d " + instance + " /hs-test " + args - err := exechelper.Run(c) - if err != nil { - return "", err - } - - res, err := waitForSyncFile(syncFile) - - if err != nil { - return "", fmt.Errorf("failed to read sync file while executing './hs-test %s': %v", args, err) - } - - o := res.StdOutput + res.ErrOutput - if res.Code != 0 { - return o, fmt.Errorf("cmd resulted in non-zero value %d: %s", res.Code, res.Desc) - } - return o, err -} - -func waitForSyncFile(fname string) (*JsonResult, error) { - var res JsonResult - - for i := 0; i < 360; i++ { - f, err := os.Open(fname) - if err == nil { - defer f.Close() - - data, err := ioutil.ReadFile(fname) - if err != nil { - return nil, fmt.Errorf("read error: %v", err) - } - err = json.Unmarshal(data, &res) - if err != nil { - return nil, fmt.Errorf("json unmarshal error: %v", err) - } - return &res, nil - } - time.Sleep(1 * time.Second) - } - return nil, fmt.Errorf("no sync file found") -} - -func dockerRun(instance, args string) error { - exechelper.Run(fmt.Sprintf("mkdir -p /tmp/%s/sync", instance)) - syncPath := fmt.Sprintf("-v /tmp/%s/sync:/tmp/sync", instance) - cmd := "docker run --cap-add=all -d --privileged --network host --rm " - cmd += syncPath - cmd += " " + args - cmd += " --name " + instance + " hs-test/vpp" - fmt.Println(cmd) - return exechelper.Run(cmd) -} - func assertFileSize(f1, f2 string) error { fi1, err := os.Stat(f1) if err != nil { @@ -201,62 +103,6 @@ func assertFileSize(f1, f2 string) error { return nil } -func dockerExec(cmd string, instance string) ([]byte, error) { - c := "docker exec -d " + instance + " " + cmd - return exechelper.CombinedOutput(c) -} - -func startEnvoy(ctx context.Context, dockerInstance string) <-chan error { - errCh := make(chan error) - wd, err := os.Getwd() - if err != nil { - errCh <- err - return errCh - } - - c := []string{"docker", "run", "--rm", "--name", "envoy", - "-v", fmt.Sprintf("%s/envoy/proxy.yaml:/etc/envoy/envoy.yaml", wd), - "-v", fmt.Sprintf("shared-vol:/tmp/%s", dockerInstance), - "-v", fmt.Sprintf("%s/envoy:/tmp", wd), - "-e", "ENVOY_UID=0", - "-e", "VCL_CONFIG=/tmp/vcl.conf", - "envoyproxy/envoy-contrib:v1.21-latest"} - fmt.Println(c) - - go func(errCh chan error) { - count := 0 - var cmd *exec.Cmd - for ; ; count++ { - cmd = NewCommand(c, "") - err = cmd.Start() - if err == nil { - break - } - if count > 5 { - errCh <- fmt.Errorf("failed to start envoy docker after %d attempts", count) - return - } - } - - err = cmd.Wait() - if err != nil { - errCh <- fmt.Errorf("failed to start docker: %v", err) - return - } - <-ctx.Done() - }(errCh) - return errCh -} - -func configureVppProxy() error { - _, err := dockerExec("vppctl test proxy server server-uri tcp://10.0.0.2/555 client-uri tcp://10.0.1.1/666", - "vpp-proxy") - if err != nil { - return fmt.Errorf("error while configuring vpp proxy test: %v", err) - } - return nil -} - func startHttpServer(running chan struct{}, done chan struct{}, addressPort, netNs string) { cmd := NewCommand([]string{"./http_server", addressPort}, netNs) err := cmd.Start() @@ -269,20 +115,21 @@ func startHttpServer(running chan struct{}, done chan struct{}, addressPort, net cmd.Process.Kill() } -func startWget(finished chan error, server_ip, port string, netNs string) { - fname := "test_file_10M" +func startWget(finished chan error, server_ip, port, query, netNs string) { defer func() { finished <- errors.New("wget error") }() - cmd := NewCommand([]string{"wget", "--tries=5", "-q", "-O", "/dev/null", server_ip + ":" + port + "/" + fname}, + cmd := NewCommand([]string{"wget", "--timeout=10", "--no-proxy", "--tries=5", "-O", "/dev/null", server_ip + ":" + port + "/" + query}, netNs) o, err := cmd.CombinedOutput() if err != nil { - fmt.Printf("wget error: '%s'.\n%s", err, o) + finished <- fmt.Errorf("wget error: '%v\n\n%s'", err, o) + return + } else if strings.Contains(string(o), "200 OK") == false { + finished <- fmt.Errorf("wget error: response not 200 OK") return } - fmt.Printf("Client output: %s", o) finished <- nil }