grpc-go/server_test.go

133 строки
3.1 KiB
Go
Исходник Обычный вид История

/*
*
2017-06-08 15:42:19 +03:00
* Copyright 2016 gRPC authors.
*
2017-06-08 15:42:19 +03:00
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
2017-06-08 15:42:19 +03:00
* http://www.apache.org/licenses/LICENSE-2.0
*
2017-06-08 15:42:19 +03:00
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package grpc
import (
"context"
"net"
2016-06-10 02:19:18 +03:00
"reflect"
"strings"
"testing"
"time"
"google.golang.org/grpc/internal/transport"
)
2016-06-10 02:19:18 +03:00
type emptyServiceServer interface{}
type testServer struct{}
func (s) TestStopBeforeServe(t *testing.T) {
lis, err := net.Listen("tcp", "localhost:0")
if err != nil {
t.Fatalf("failed to create listener: %v", err)
}
server := NewServer()
server.Stop()
err = server.Serve(lis)
if err != ErrServerStopped {
t.Fatalf("server.Serve() error = %v, want %v", err, ErrServerStopped)
}
// server.Serve is responsible for closing the listener, even if the
// server was already stopped.
err = lis.Close()
if got, want := errorDesc(err), "use of closed"; !strings.Contains(got, want) {
t.Errorf("Close() error = %q, want %q", got, want)
}
}
2016-06-10 02:19:18 +03:00
func (s) TestGracefulStop(t *testing.T) {
lis, err := net.Listen("tcp", "localhost:0")
if err != nil {
t.Fatalf("failed to create listener: %v", err)
}
server := NewServer()
go func() {
// make sure Serve() is called
time.Sleep(time.Millisecond * 500)
server.GracefulStop()
}()
err = server.Serve(lis)
if err != nil {
t.Fatalf("Serve() returned non-nil error on GracefulStop: %v", err)
}
}
func (s) TestGetServiceInfo(t *testing.T) {
testSd := ServiceDesc{
ServiceName: "grpc.testing.EmptyService",
HandlerType: (*emptyServiceServer)(nil),
Methods: []MethodDesc{
{
MethodName: "EmptyCall",
Handler: nil,
},
},
Streams: []StreamDesc{
{
StreamName: "EmptyStream",
Handler: nil,
2016-07-06 21:47:40 +03:00
ServerStreams: false,
ClientStreams: true,
},
},
Metadata: []int{0, 2, 1, 3},
2016-06-10 02:19:18 +03:00
}
server := NewServer()
server.RegisterService(&testSd, &testServer{})
info := server.GetServiceInfo()
2016-07-27 17:49:12 +03:00
want := map[string]ServiceInfo{
2016-07-27 17:46:58 +03:00
"grpc.testing.EmptyService": {
Methods: []MethodInfo{
2016-07-27 17:46:58 +03:00
{
Name: "EmptyCall",
IsClientStream: false,
IsServerStream: false,
},
2016-07-27 17:46:58 +03:00
{
Name: "EmptyStream",
IsClientStream: true,
IsServerStream: false,
}},
Metadata: []int{0, 2, 1, 3},
},
2016-06-10 02:19:18 +03:00
}
if !reflect.DeepEqual(info, want) {
2016-07-27 17:49:12 +03:00
t.Errorf("GetServiceInfo() = %+v, want %+v", info, want)
}
}
func (s) TestStreamContext(t *testing.T) {
expectedStream := &transport.Stream{}
ctx := NewContextWithServerTransportStream(context.Background(), expectedStream)
s := ServerTransportStreamFromContext(ctx)
stream, ok := s.(*transport.Stream)
if !ok || expectedStream != stream {
t.Fatalf("GetStreamFromContext(%v) = %v, %t, want: %v, true", ctx, stream, ok, expectedStream)
}
}