package main
import (
+ "context"
"flag"
"fmt"
"log"
"github.com/pkg/profile"
"github.com/sirupsen/logrus"
- "git.fd.io/govpp.git/adapter/socketclient"
- "git.fd.io/govpp.git/adapter/statsclient"
- "git.fd.io/govpp.git/api"
- "git.fd.io/govpp.git/core"
- "git.fd.io/govpp.git/examples/binapi/vpe"
+ "go.fd.io/govpp/adapter/socketclient"
+ "go.fd.io/govpp/adapter/statsclient"
+ "go.fd.io/govpp/api"
+ "go.fd.io/govpp/binapi/memclnt"
+ "go.fd.io/govpp/core"
)
const (
if sync {
// run synchronous test
syncTest(ch, cnt)
+ //syncTest2(conn, cnt)
} else {
// run asynchronous test
asyncTest(ch, cnt)
+ //asyncTest2(conn, cnt)
}
elapsed := time.Since(start)
fmt.Printf("Running synchronous perf test with %d requests...\n", cnt)
for i := 0; i < cnt; i++ {
- req := &vpe.ControlPing{}
- reply := &vpe.ControlPingReply{}
+ req := &memclnt.ControlPing{}
+ reply := &memclnt.ControlPingReply{}
if err := ch.SendRequest(req).ReceiveReply(reply); err != nil {
log.Fatalln("Error in reply:", err)
}
}
+func syncTest2(conn api.Connection, cnt int) {
+ fmt.Printf("Running synchronous perf test with %d requests...\n", cnt)
+
+ stream, err := conn.NewStream(context.Background())
+ if err != nil {
+ log.Fatalln("Error NewStream:", err)
+ }
+ for i := 0; i < cnt; i++ {
+ if err := stream.SendMsg(&memclnt.ControlPing{}); err != nil {
+ log.Fatalln("Error SendMsg:", err)
+ }
+ if msg, err := stream.RecvMsg(); err != nil {
+ log.Fatalln("Error RecvMsg:", err)
+ } else if _, ok := msg.(*memclnt.ControlPingReply); ok {
+ // ok
+ } else {
+ log.Fatalf("unexpected reply: %v", msg.GetMessageName())
+ }
+ }
+}
+
func asyncTest(ch api.Channel, cnt int) {
fmt.Printf("Running asynchronous perf test with %d requests...\n", cnt)
go func() {
for i := 0; i < cnt; i++ {
- ctxChan <- ch.SendRequest(&vpe.ControlPing{})
+ ctxChan <- ch.SendRequest(&memclnt.ControlPing{})
}
close(ctxChan)
fmt.Printf("Sending asynchronous requests finished\n")
}()
for ctx := range ctxChan {
- reply := &vpe.ControlPingReply{}
+ reply := &memclnt.ControlPingReply{}
if err := ctx.ReceiveReply(reply); err != nil {
log.Fatalln("Error in reply:", err)
}
}
}
+
+func asyncTest2(conn api.Connection, cnt int) {
+ fmt.Printf("Running asynchronous perf test with %d requests...\n", cnt)
+
+ ctxChan := make(chan api.Stream, cnt)
+
+ go func() {
+ for i := 0; i < cnt; i++ {
+ stream, err := conn.NewStream(context.Background())
+ if err != nil {
+ log.Fatalln("Error NewStream:", err)
+ }
+ if err := stream.SendMsg(&memclnt.ControlPing{}); err != nil {
+ log.Fatalln("Error SendMsg:", err)
+ }
+ ctxChan <- stream
+ }
+ close(ctxChan)
+ fmt.Printf("Sending asynchronous requests finished\n")
+ }()
+
+ for ctx := range ctxChan {
+ if msg, err := ctx.RecvMsg(); err != nil {
+ log.Fatalln("Error RecvMsg:", err)
+ } else if _, ok := msg.(*memclnt.ControlPingReply); ok {
+ // ok
+ } else {
+ log.Fatalf("unexpected reply: %v", msg.GetMessageName())
+ }
+ ctx.Close()
+ }
+}