| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- package server
- import (
- "context"
- "io/ioutil"
- "os"
- "path"
- "testing"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "github.com/stretchr/testify/suite"
- "google.golang.org/grpc"
- "google.golang.org/grpc/metadata"
- "github.com/docker/api/config"
- apicontext "github.com/docker/api/context"
- )
- type interceptorSuite struct {
- suite.Suite
- dir string
- ctx context.Context
- }
- func (is *interceptorSuite) BeforeTest(suiteName, testName string) {
- dir, err := ioutil.TempDir("", "example")
- require.Nil(is.T(), err)
- ctx := context.Background()
- ctx = config.WithDir(ctx, dir)
- err = ioutil.WriteFile(path.Join(dir, "config.json"), []byte(`{"currentContext": "default"}`), 0644)
- require.Nil(is.T(), err)
- is.dir = dir
- is.ctx = ctx
- }
- func (is *interceptorSuite) AfterTest(suiteName, tesName string) {
- err := os.RemoveAll(is.dir)
- require.Nil(is.T(), err)
- }
- func (is *interceptorSuite) TestUnaryGetCurrentContext() {
- interceptor := unaryServerInterceptor(is.ctx)
- currentContext := is.callUnary(context.Background(), interceptor)
- assert.Equal(is.T(), "default", currentContext)
- }
- func (is *interceptorSuite) TestUnaryContextFromMetadata() {
- contextName := "test"
- interceptor := unaryServerInterceptor(is.ctx)
- reqCtx := context.Background()
- reqCtx = metadata.NewIncomingContext(reqCtx, metadata.MD{
- (key): []string{contextName},
- })
- currentContext := is.callUnary(reqCtx, interceptor)
- assert.Equal(is.T(), contextName, currentContext)
- }
- func (is *interceptorSuite) TestStreamGetCurrentContext() {
- interceptor := streamServerInterceptor(is.ctx)
- currentContext := is.callStream(context.Background(), interceptor)
- assert.Equal(is.T(), "default", currentContext)
- }
- func (is *interceptorSuite) TestStreamContextFromMetadata() {
- contextName := "test"
- interceptor := streamServerInterceptor(is.ctx)
- reqCtx := context.Background()
- reqCtx = metadata.NewIncomingContext(reqCtx, metadata.MD{
- (key): []string{contextName},
- })
- currentContext := is.callStream(reqCtx, interceptor)
- assert.Equal(is.T(), contextName, currentContext)
- }
- func (is *interceptorSuite) callStream(ctx context.Context, interceptor grpc.StreamServerInterceptor) string {
- currentContext := ""
- err := interceptor(nil, &contextServerStream{
- ctx: ctx,
- }, &grpc.StreamServerInfo{
- FullMethod: "/com.docker.api.protos.context.v1.Contexts/test",
- }, func(srv interface{}, stream grpc.ServerStream) error {
- currentContext = apicontext.CurrentContext(stream.Context())
- return nil
- })
- require.Nil(is.T(), err)
- return currentContext
- }
- func (is *interceptorSuite) callUnary(ctx context.Context, interceptor grpc.UnaryServerInterceptor) string {
- currentContext := ""
- resp, err := interceptor(ctx, nil, &grpc.UnaryServerInfo{
- FullMethod: "/com.docker.api.protos.context.v1.Contexts/test",
- }, func(ctx context.Context, req interface{}) (interface{}, error) {
- currentContext = apicontext.CurrentContext(ctx)
- return nil, nil
- })
- require.Nil(is.T(), err)
- require.Nil(is.T(), resp)
- return currentContext
- }
- func TestInterceptor(t *testing.T) {
- suite.Run(t, new(interceptorSuite))
- }
|