OSDN Git Service

add package
[bytom/vapor.git] / vendor / github.com / hashicorp / go-plugin / grpc_client_test.go
diff --git a/vendor/github.com/hashicorp/go-plugin/grpc_client_test.go b/vendor/github.com/hashicorp/go-plugin/grpc_client_test.go
new file mode 100644 (file)
index 0000000..5f762d2
--- /dev/null
@@ -0,0 +1,106 @@
+package plugin
+
+import (
+       "context"
+       "reflect"
+       "testing"
+
+       "github.com/hashicorp/go-plugin/test/grpc"
+       "google.golang.org/grpc"
+)
+
+func TestGRPCClient_App(t *testing.T) {
+       client, server := TestPluginGRPCConn(t, map[string]Plugin{
+               "test": new(testInterfacePlugin),
+       })
+       defer client.Close()
+       defer server.Stop()
+
+       raw, err := client.Dispense("test")
+       if err != nil {
+               t.Fatalf("err: %s", err)
+       }
+
+       impl, ok := raw.(testInterface)
+       if !ok {
+               t.Fatalf("bad: %#v", raw)
+       }
+
+       result := impl.Double(21)
+       if result != 42 {
+               t.Fatalf("bad: %#v", result)
+       }
+
+       err = impl.Bidirectional()
+       if err != nil {
+               t.Fatal(err)
+       }
+}
+
+func TestGRPCConn_BidirectionalPing(t *testing.T) {
+       conn, _ := TestGRPCConn(t, func(s *grpc.Server) {
+               grpctest.RegisterPingPongServer(s, &pingPongServer{})
+       })
+       defer conn.Close()
+       pingPongClient := grpctest.NewPingPongClient(conn)
+
+       pResp, err := pingPongClient.Ping(context.Background(), &grpctest.PingRequest{})
+       if err != nil {
+               t.Fatal(err)
+       }
+       if pResp.Msg != "pong" {
+               t.Fatal("Bad PingPong")
+       }
+}
+
+func TestGRPCC_Stream(t *testing.T) {
+       client, server := TestPluginGRPCConn(t, map[string]Plugin{
+               "test": new(testInterfacePlugin),
+       })
+       defer client.Close()
+       defer server.Stop()
+
+       raw, err := client.Dispense("test")
+       if err != nil {
+               t.Fatalf("err: %s", err)
+       }
+
+       impl, ok := raw.(testStreamer)
+       if !ok {
+               t.Fatalf("bad: %#v", raw)
+       }
+
+       expected := []int32{21, 22, 23, 24, 25, 26}
+       result, err := impl.Stream(21, 27)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       if !reflect.DeepEqual(result, expected) {
+               t.Fatalf("expected: %v\ngot: %v", expected, result)
+       }
+}
+
+func TestGRPCClient_Ping(t *testing.T) {
+       client, server := TestPluginGRPCConn(t, map[string]Plugin{
+               "test": new(testInterfacePlugin),
+       })
+       defer client.Close()
+       defer server.Stop()
+
+       // Run a couple pings
+       if err := client.Ping(); err != nil {
+               t.Fatalf("err: %s", err)
+       }
+       if err := client.Ping(); err != nil {
+               t.Fatalf("err: %s", err)
+       }
+
+       // Close the remote end
+       server.server.Stop()
+
+       // Test ping fails
+       if err := client.Ping(); err == nil {
+               t.Fatal("should error")
+       }
+}