hs-test: auto register test actions
Type: improvement Signed-off-by: Filip Tehlar <ftehlar@cisco.com> Change-Id: Icb5db6f69eda93181aba69b1f8676a73c0a4561b
This commit is contained in:
committed by
Florin Coras
parent
b79d09bbfa
commit
1a9dc75fe8
@@ -19,20 +19,9 @@ import (
|
||||
"github.com/edwarnicke/vpphelper"
|
||||
)
|
||||
|
||||
func RegisterActions() {
|
||||
cfgTable = make(map[string]func([]string) *ActionResult)
|
||||
reg("echo-srv-internal", Configure2Veths)
|
||||
reg("echo-cln-internal", Configure2Veths)
|
||||
reg("echo-client", RunEchoClient)
|
||||
reg("echo-server", RunEchoServer)
|
||||
reg("vpp-proxy", ConfigureVppProxy)
|
||||
reg("vpp-envoy", ConfigureEnvoyProxy)
|
||||
reg("http-tps", ConfigureHttpTps)
|
||||
reg("2veths", Configure2Veths)
|
||||
reg("vcl-test-server", RunVclEchoServer)
|
||||
reg("vcl-test-client", RunVclEchoClient)
|
||||
reg("http-cli-srv", RunHttpCliSrv)
|
||||
reg("http-cli-cln", RunHttpCliCln)
|
||||
type ConfFn func(context.Context, api.Connection) error
|
||||
|
||||
type Actions struct {
|
||||
}
|
||||
|
||||
func configureProxyTcp(ifName0, ipAddr0, ifName1, ipAddr1 string) ConfFn {
|
||||
@@ -53,18 +42,18 @@ func configureProxyTcp(ifName0, ipAddr0, ifName1, ipAddr1 string) ConfFn {
|
||||
}
|
||||
}
|
||||
|
||||
func RunHttpCliSrv(args []string) *ActionResult {
|
||||
func (a *Actions) RunHttpCliSrv(args []string) *ActionResult {
|
||||
cmd := fmt.Sprintf("http cli server")
|
||||
return ApiCliInband("/tmp/2veths", cmd)
|
||||
return ApiCliInband("/tmp/Configure2Veths", cmd)
|
||||
}
|
||||
|
||||
func RunHttpCliCln(args []string) *ActionResult {
|
||||
func (a *Actions) RunHttpCliCln(args []string) *ActionResult {
|
||||
cmd := fmt.Sprintf("http cli client uri http://10.10.10.1/80 query %s", getArgs())
|
||||
fmt.Println(cmd)
|
||||
return ApiCliInband("/tmp/2veths", cmd)
|
||||
return ApiCliInband("/tmp/Configure2Veths", cmd)
|
||||
}
|
||||
|
||||
func ConfigureVppProxy(args []string) *ActionResult {
|
||||
func (a *Actions) ConfigureVppProxy(args []string) *ActionResult {
|
||||
ctx, cancel := newVppContext()
|
||||
defer cancel()
|
||||
|
||||
@@ -81,7 +70,7 @@ func ConfigureVppProxy(args []string) *ActionResult {
|
||||
return nil
|
||||
}
|
||||
|
||||
func ConfigureEnvoyProxy(args []string) *ActionResult {
|
||||
func (a *Actions) ConfigureEnvoyProxy(args []string) *ActionResult {
|
||||
var startup Stanza
|
||||
startup.
|
||||
NewStanza("session").
|
||||
@@ -127,7 +116,7 @@ func ApiCliInband(root, cmd string) *ActionResult {
|
||||
return NewActionResult(err, ActionResultWithStdout(cliInbandReply.Reply))
|
||||
}
|
||||
|
||||
func RunEchoClient(args []string) *ActionResult {
|
||||
func (a *Actions) RunEchoClient(args []string) *ActionResult {
|
||||
outBuff := bytes.NewBuffer([]byte{})
|
||||
errBuff := bytes.NewBuffer([]byte{})
|
||||
|
||||
@@ -140,7 +129,7 @@ func RunEchoClient(args []string) *ActionResult {
|
||||
ActionResultWithStderr(string(errBuff.String())))
|
||||
}
|
||||
|
||||
func RunEchoServer(args []string) *ActionResult {
|
||||
func (a *Actions) RunEchoServer(args []string) *ActionResult {
|
||||
cmd := fmt.Sprintf("vpp_echo server TX=RX socket-name /tmp/echo-srv/var/run/app_ns_sockets/1 use-app-socket-api uri %s://10.10.10.1/12344", args[2])
|
||||
errCh := exechelper.Start(cmd)
|
||||
select {
|
||||
@@ -152,17 +141,17 @@ func RunEchoServer(args []string) *ActionResult {
|
||||
return nil
|
||||
}
|
||||
|
||||
func RunEchoSrvInternal() *ActionResult {
|
||||
func (a *Actions) RunEchoSrvInternal(args []string) *ActionResult {
|
||||
cmd := fmt.Sprintf("test echo server %s uri tcp://10.10.10.1/1234", getArgs())
|
||||
return ApiCliInband("/tmp/2veths", cmd)
|
||||
return ApiCliInband("/tmp/Configure2Veths", cmd)
|
||||
}
|
||||
|
||||
func RunEchoClnInternal() *ActionResult {
|
||||
func (a *Actions) RunEchoClnInternal(args []string) *ActionResult {
|
||||
cmd := fmt.Sprintf("test echo client %s uri tcp://10.10.10.1/1234", getArgs())
|
||||
return ApiCliInband("/tmp/2veths", cmd)
|
||||
return ApiCliInband("/tmp/Configure2Veths", cmd)
|
||||
}
|
||||
|
||||
func RunVclEchoServer(args []string) *ActionResult {
|
||||
func (a *Actions) RunVclEchoServer(args []string) *ActionResult {
|
||||
f, err := os.Create("vcl_1.conf")
|
||||
if err != nil {
|
||||
return NewActionResult(err, ActionResultWithStderr(("create vcl config: ")))
|
||||
@@ -182,7 +171,7 @@ func RunVclEchoServer(args []string) *ActionResult {
|
||||
return nil
|
||||
}
|
||||
|
||||
func RunVclEchoClient(args []string) *ActionResult {
|
||||
func (a *Actions) RunVclEchoClient(args []string) *ActionResult {
|
||||
outBuff := bytes.NewBuffer([]byte{})
|
||||
errBuff := bytes.NewBuffer([]byte{})
|
||||
|
||||
@@ -238,7 +227,7 @@ func configure2vethsTopo(ifName, interfaceAddress, namespaceId string, secret ui
|
||||
}
|
||||
}
|
||||
|
||||
func Configure2Veths(args []string) *ActionResult {
|
||||
func (a *Actions) Configure2Veths(args []string) *ActionResult {
|
||||
var startup Stanza
|
||||
startup.
|
||||
NewStanza("session").
|
||||
@@ -317,7 +306,7 @@ func configureAfPacket(ctx context.Context, vppCon api.Connection,
|
||||
return afPacketCreateRsp.SwIfIndex, nil
|
||||
}
|
||||
|
||||
func ConfigureHttpTps(args []string) *ActionResult {
|
||||
func (a *Actions) ConfigureHttpTps(args []string) *ActionResult {
|
||||
ctx, cancel := newVppContext()
|
||||
defer cancel()
|
||||
con, vppErrCh := vpphelper.StartAndDialContext(ctx,
|
||||
|
||||
@@ -24,25 +24,25 @@ func (s *Veths2Suite) TestEchoBuiltin() {
|
||||
}
|
||||
defer func() { exechelper.Run("docker stop " + clnInstance) }()
|
||||
|
||||
_, err = hstExec("2veths srv", srvInstance)
|
||||
_, err = hstExec("Configure2Veths srv", srvInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = hstExec("2veths cln", clnInstance)
|
||||
_, err = hstExec("Configure2Veths cln", clnInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = hstExec("echo-srv-internal private-segment-size 1g fifo-size 4 no-echo", srvInstance)
|
||||
_, err = hstExec("RunEchoSrvInternal private-segment-size 1g fifo-size 4 no-echo", srvInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
o, err := hstExec("echo-cln-internal nclients 10000 bytes 1 syn-timeout 100 test-timeout 100 no-return private-segment-size 1g fifo-size 4", clnInstance)
|
||||
o, err := hstExec("RunEchoClnInternal nclients 10000 bytes 1 syn-timeout 100 test-timeout 100 no-return private-segment-size 1g fifo-size 4", clnInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
|
||||
@@ -78,5 +78,4 @@ func TestNs(t *testing.T) {
|
||||
func TestVeths2(t *testing.T) {
|
||||
var m Veths2Suite
|
||||
suite.Run(t, &m)
|
||||
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ func (s *NsSuite) TestHttpTps() {
|
||||
defer func() { exechelper.Run("docker stop " + dockerInstance) }()
|
||||
|
||||
// start & configure vpp in the container
|
||||
_, err = hstExec(dockerInstance, dockerInstance)
|
||||
_, err = hstExec("ConfigureHttpTps", dockerInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
@@ -56,13 +56,13 @@ func (s *Veths2Suite) TestHttpCli() {
|
||||
}
|
||||
defer func() { exechelper.Run("docker stop " + clnInstance) }()
|
||||
|
||||
_, err = hstExec("2veths srv", srvInstance)
|
||||
_, err = hstExec("Configure2Veths srv", srvInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = hstExec("2veths cln", clnInstance)
|
||||
_, err = hstExec("Configure2Veths cln", clnInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
@@ -70,7 +70,7 @@ func (s *Veths2Suite) TestHttpCli() {
|
||||
|
||||
t.Log("configured IPs...")
|
||||
|
||||
_, err = hstExec("http-cli-srv", srvInstance)
|
||||
_, err = hstExec("RunHttpCliSrv", srvInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
@@ -78,7 +78,7 @@ func (s *Veths2Suite) TestHttpCli() {
|
||||
|
||||
t.Log("configured http server")
|
||||
|
||||
o, err := hstExec("http-cli-cln /show/version", clnInstance)
|
||||
o, err := hstExec("RunHttpCliCln /show/version", clnInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
|
||||
@@ -47,13 +47,13 @@ func (s *Veths2Suite) TestLDPreloadIperfVpp() {
|
||||
}
|
||||
defer func() { exechelper.Run("docker stop " + clnInstance) }()
|
||||
|
||||
_, err = hstExec("2veths srv", srvInstance)
|
||||
_, err = hstExec("Configure2Veths srv", srvInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = hstExec("2veths cln", clnInstance)
|
||||
_, err = hstExec("Configure2Veths cln", clnInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
@@ -66,7 +66,7 @@ func (s *Veths2Suite) TestLDPreloadIperfVpp() {
|
||||
Append("app-scope-local").
|
||||
Append("app-scope-global").
|
||||
Append("use-mq-eventfd").
|
||||
Append(fmt.Sprintf("app-socket-api /tmp/%s/2veths/var/run/app_ns_sockets/2", clnInstance)).Close().
|
||||
Append(fmt.Sprintf("app-socket-api /tmp/%s/Configure2Veths/var/run/app_ns_sockets/2", clnInstance)).Close().
|
||||
SaveToFile(clnVcl)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
@@ -80,7 +80,7 @@ func (s *Veths2Suite) TestLDPreloadIperfVpp() {
|
||||
Append("app-scope-local").
|
||||
Append("app-scope-global").
|
||||
Append("use-mq-eventfd").
|
||||
Append(fmt.Sprintf("app-socket-api /tmp/%s/2veths/var/run/app_ns_sockets/1", srvInstance)).Close().
|
||||
Append(fmt.Sprintf("app-socket-api /tmp/%s/Configure2Veths/var/run/app_ns_sockets/1", srvInstance)).Close().
|
||||
SaveToFile(srvVcl)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
|
||||
@@ -7,15 +7,10 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/signal"
|
||||
|
||||
"git.fd.io/govpp.git/api"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
type CfgTable map[string]func([]string) *ActionResult
|
||||
|
||||
var cfgTable CfgTable
|
||||
|
||||
type ConfFn func(context.Context, api.Connection) error
|
||||
var actions Actions
|
||||
|
||||
func newVppContext() (context.Context, context.CancelFunc) {
|
||||
ctx, cancel := signal.NotifyContext(
|
||||
@@ -116,15 +111,18 @@ func OkResult() *ActionResult {
|
||||
return NewActionResult(nil)
|
||||
}
|
||||
|
||||
func reg(key string, fn func([]string) *ActionResult) {
|
||||
cfgTable[key] = fn
|
||||
}
|
||||
|
||||
func processArgs() *ActionResult {
|
||||
fn := cfgTable[os.Args[1]]
|
||||
if fn == nil {
|
||||
return NewActionResult(fmt.Errorf("internal: no config found for %s", os.Args[1]))
|
||||
nArgs := len(os.Args) - 1 // skip program name
|
||||
if nArgs < 1 {
|
||||
return NewActionResult(fmt.Errorf("internal: no action specified!"))
|
||||
}
|
||||
action := os.Args[1]
|
||||
methodValue := reflect.ValueOf(&actions).MethodByName(action)
|
||||
if !methodValue.IsValid() {
|
||||
return NewActionResult(fmt.Errorf("internal unknown action %s!", action))
|
||||
}
|
||||
methodIface := methodValue.Interface()
|
||||
fn := methodIface.(func([]string) *ActionResult)
|
||||
return fn(os.Args)
|
||||
}
|
||||
|
||||
@@ -144,8 +142,6 @@ func main() {
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
RegisterActions()
|
||||
|
||||
var err error
|
||||
res := processArgs()
|
||||
err = writeSyncFile(res)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"github.com/edwarnicke/exechelper"
|
||||
)
|
||||
|
||||
func testProxyHttpTcp(t *testing.T, dockerInstance string, proxySetup func() error) error {
|
||||
func testProxyHttpTcp(t *testing.T, dockerInstance, action string, proxySetup func() error) error {
|
||||
const outputFile = "test.data"
|
||||
const srcFile = "10M"
|
||||
stopServer := make(chan struct{}, 1)
|
||||
@@ -23,7 +23,7 @@ func testProxyHttpTcp(t *testing.T, dockerInstance string, proxySetup func() err
|
||||
defer func() { exechelper.Run("docker stop " + dockerInstance) }()
|
||||
|
||||
// start & configure vpp in the container
|
||||
_, err = hstExec(dockerInstance, dockerInstance)
|
||||
_, err = hstExec(action, dockerInstance)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error starting vpp in container: %v", err)
|
||||
}
|
||||
@@ -72,7 +72,7 @@ func testProxyHttpTcp(t *testing.T, dockerInstance string, proxySetup func() err
|
||||
func (s *NsSuite) TestVppProxyHttpTcp() {
|
||||
t := s.T()
|
||||
dockerInstance := "vpp-proxy"
|
||||
err := testProxyHttpTcp(t, dockerInstance, configureVppProxy)
|
||||
err := testProxyHttpTcp(t, dockerInstance, "ConfigureVppProxy", configureVppProxy)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
}
|
||||
@@ -88,7 +88,7 @@ func (s *NsSuite) TestEnvoyProxyHttpTcp() {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
|
||||
dockerInstance := "vpp-envoy"
|
||||
err := testProxyHttpTcp(t, dockerInstance, func() error {
|
||||
err := testProxyHttpTcp(t, dockerInstance, "ConfigureEnvoyProxy", func() error {
|
||||
return setupEnvoy(t, ctx, dockerInstance)
|
||||
})
|
||||
if err != nil {
|
||||
|
||||
@@ -32,14 +32,14 @@ func (s *Veths2Suite) testVclEcho(proto string) {
|
||||
echoSrv := "echo-srv"
|
||||
echoCln := "echo-cln"
|
||||
|
||||
err := dockerRun(srvInstance, "-v echo-srv-vol:/tmp/2veths")
|
||||
err := dockerRun(srvInstance, "-v echo-srv-vol:/tmp/Configure2Veths")
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
defer func() { exechelper.Run("docker stop " + srvInstance) }()
|
||||
|
||||
err = dockerRun(clnInstance, "-v echo-cln-vol:/tmp/2veths")
|
||||
err = dockerRun(clnInstance, "-v echo-cln-vol:/tmp/Configure2Veths")
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
@@ -60,26 +60,26 @@ func (s *Veths2Suite) testVclEcho(proto string) {
|
||||
}
|
||||
defer func() { exechelper.Run("docker stop " + echoCln) }()
|
||||
|
||||
_, err = hstExec("2veths srv", srvInstance)
|
||||
_, err = hstExec("Configure2Veths srv", srvInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = hstExec("2veths cln", clnInstance)
|
||||
_, err = hstExec("Configure2Veths cln", clnInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// run server app
|
||||
_, err = hstExec("echo-server "+proto, echoSrv)
|
||||
_, err = hstExec("RunEchoServer "+proto, echoSrv)
|
||||
if err != nil {
|
||||
t.Errorf("echo server: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
o, err := hstExec("echo-client "+proto, echoCln)
|
||||
o, err := hstExec("RunEchoClient "+proto, echoCln)
|
||||
if err != nil {
|
||||
t.Errorf("echo client: %v", err)
|
||||
}
|
||||
@@ -102,14 +102,14 @@ func (s *Veths2Suite) testRetryAttach(proto string) {
|
||||
echoSrv := "echo-srv"
|
||||
echoCln := "echo-cln"
|
||||
|
||||
err := dockerRun(srvInstance, "-v echo-srv-vol:/tmp/2veths")
|
||||
err := dockerRun(srvInstance, "-v echo-srv-vol:/tmp/Configure2Veths")
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
defer func() { exechelper.Run("docker stop " + srvInstance) }()
|
||||
|
||||
err = dockerRun(clnInstance, "-v echo-cln-vol:/tmp/2veths")
|
||||
err = dockerRun(clnInstance, "-v echo-cln-vol:/tmp/Configure2Veths")
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
@@ -130,19 +130,19 @@ func (s *Veths2Suite) testRetryAttach(proto string) {
|
||||
}
|
||||
defer func() { exechelper.Run("docker stop " + echoCln) }()
|
||||
|
||||
_, err = hstExec("2veths srv-with-preset-hw-addr", srvInstance)
|
||||
_, err = hstExec("Configure2Veths srv-with-preset-hw-addr", srvInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = hstExec("2veths cln", clnInstance)
|
||||
_, err = hstExec("Configure2Veths cln", clnInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = hstExec("vcl-test-server "+proto, echoSrv)
|
||||
_, err = hstExec("RunVclEchoServer "+proto, echoSrv)
|
||||
if err != nil {
|
||||
t.Errorf("vcl test server: %v", err)
|
||||
return
|
||||
@@ -150,7 +150,7 @@ func (s *Veths2Suite) testRetryAttach(proto string) {
|
||||
|
||||
fmt.Println("This whole test case can take around 3 minutes to run. Please be patient.")
|
||||
fmt.Println("... Running first echo client test, before disconnect.")
|
||||
_, err = hstExec("vcl-test-client "+proto, echoCln)
|
||||
_, err = hstExec("RunVclEchoClient "+proto, echoCln)
|
||||
if err != nil {
|
||||
t.Errorf("vcl test client: %v", err)
|
||||
return
|
||||
@@ -171,7 +171,7 @@ func (s *Veths2Suite) testRetryAttach(proto string) {
|
||||
t.Errorf("error while stopping hs-test: %v", err)
|
||||
return
|
||||
}
|
||||
_, err = hstExec("2veths srv-with-preset-hw-addr", srvInstance)
|
||||
_, err = hstExec("Configure2Veths srv-with-preset-hw-addr", srvInstance)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
@@ -181,7 +181,7 @@ func (s *Veths2Suite) testRetryAttach(proto string) {
|
||||
time.Sleep(30 * time.Second) // Wait a moment for the re-attachment to happen
|
||||
|
||||
fmt.Println("... Running second echo client test, after disconnect and re-attachment.")
|
||||
_, err = hstExec("vcl-test-client "+proto, echoCln)
|
||||
_, err = hstExec("RunVclEchoClient "+proto, echoCln)
|
||||
if err != nil {
|
||||
t.Errorf("vcl test client: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user