test/xds: remove redundant server when using stubserver in tests (#7846)

This commit is contained in:
janardhanvissa 2024-11-25 12:57:01 +05:30 committed by GitHub
parent 8b70aeb896
commit dcba136b36
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 58 additions and 140 deletions

View File

@ -310,6 +310,7 @@ func setupGRPCServerWithModeChangeChannelAndServe(t *testing.T, bootstrapContent
updateCh <- args.Mode updateCh <- args.Mode
}) })
stub := &stubserver.StubServer{ stub := &stubserver.StubServer{
Listener: lis,
EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) {
return &testpb.Empty{}, nil return &testpb.Empty{}, nil
}, },
@ -321,17 +322,10 @@ func setupGRPCServerWithModeChangeChannelAndServe(t *testing.T, bootstrapContent
if err != nil { if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err) t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err)
} }
t.Cleanup(server.Stop)
stub.S = server stub.S = server
stubserver.StartTestService(t, stub) t.Cleanup(stub.S.Stop)
// Serve. stubserver.StartTestService(t, stub)
go func() {
if err := server.Serve(lis); err != nil {
t.Errorf("Serve() failed: %v", err)
}
}()
return updateCh return updateCh
} }

View File

@ -158,27 +158,21 @@ func (s) TestServerSideXDS_WithNoCertificateProvidersInBootstrap_Failure(t *test
close(servingModeCh) close(servingModeCh)
} }
}) })
server, err := xds.NewGRPCServer(grpc.Creds(creds), modeChangeOpt, xds.BootstrapContentsForTesting(bs))
if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err)
}
defer server.Stop()
stub := &stubserver.StubServer{} // Create a local listener and assign it to the stub server.
stub.S = server
stubserver.StartTestService(t, stub)
// Create a local listener and pass it to Serve().
lis, err := testutils.LocalTCPListener() lis, err := testutils.LocalTCPListener()
if err != nil { if err != nil {
t.Fatalf("testutils.LocalTCPListener() failed: %v", err) t.Fatalf("testutils.LocalTCPListener() failed: %v", err)
} }
go func() { stub := &stubserver.StubServer{
if err := server.Serve(lis); err != nil { Listener: lis,
t.Errorf("Serve() failed: %v", err)
} }
}() if stub.S, err = xds.NewGRPCServer(grpc.Creds(creds), modeChangeOpt, xds.BootstrapContentsForTesting(bs)); err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err)
}
defer stub.S.Stop()
stubserver.StartTestService(t, stub)
// Create an inbound xDS listener resource for the server side that contains // Create an inbound xDS listener resource for the server side that contains
// mTLS security configuration. Since the received certificate provider // mTLS security configuration. Since the received certificate provider
@ -288,30 +282,10 @@ func (s) TestServerSideXDS_WithValidAndInvalidSecurityConfiguration(t *testing.T
} }
}) })
stub := &stubserver.StubServer{ stub1 := createStubServer(t, lis1, creds, modeChangeOpt, bootstrapContents)
EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { defer stub1.S.Stop()
return &testpb.Empty{}, nil stub2 := createStubServer(t, lis2, creds, modeChangeOpt, bootstrapContents)
}, defer stub2.S.Stop()
}
server, err := xds.NewGRPCServer(grpc.Creds(creds), modeChangeOpt, xds.BootstrapContentsForTesting(bootstrapContents))
if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err)
}
defer server.Stop()
stub.S = server
stubserver.StartTestService(t, stub)
go func() {
if err := server.Serve(lis1); err != nil {
t.Errorf("Serve() failed: %v", err)
}
}()
go func() {
if err := server.Serve(lis2); err != nil {
t.Errorf("Serve() failed: %v", err)
}
}()
// Create inbound xDS listener resources for the server side that contains // Create inbound xDS listener resources for the server side that contains
// mTLS security configuration. // mTLS security configuration.

View File

@ -111,12 +111,10 @@ func setupGRPCServer(t *testing.T, bootstrapContents []byte) (net.Listener, func
}, },
} }
server, err := xds.NewGRPCServer(grpc.Creds(creds), testModeChangeServerOption(t), xds.BootstrapContentsForTesting(bootstrapContents)) if stub.S, err = xds.NewGRPCServer(grpc.Creds(creds), testModeChangeServerOption(t), xds.BootstrapContentsForTesting(bootstrapContents)); err != nil {
if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err) t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err)
} }
stub.S = server
stubserver.StartTestService(t, stub) stubserver.StartTestService(t, stub)
// Create a local listener and pass it to Serve(). // Create a local listener and pass it to Serve().
@ -131,7 +129,7 @@ func setupGRPCServer(t *testing.T, bootstrapContents []byte) (net.Listener, func
} }
go func() { go func() {
if err := server.Serve(readyLis); err != nil { if err := stub.S.Serve(readyLis); err != nil {
t.Errorf("Serve() failed: %v", err) t.Errorf("Serve() failed: %v", err)
} }
}() }()
@ -144,7 +142,7 @@ func setupGRPCServer(t *testing.T, bootstrapContents []byte) (net.Listener, func
} }
return lis, func() { return lis, func() {
server.Stop() stub.S.Stop()
} }
} }

View File

@ -27,6 +27,7 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/connectivity" "google.golang.org/grpc/connectivity"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
xdscreds "google.golang.org/grpc/credentials/xds" xdscreds "google.golang.org/grpc/credentials/xds"
"google.golang.org/grpc/internal/stubserver" "google.golang.org/grpc/internal/stubserver"
@ -65,19 +66,8 @@ func (s) TestServerSideXDS_RedundantUpdateSuppression(t *testing.T) {
// Initialize a test gRPC server, assign it to the stub server, and start // Initialize a test gRPC server, assign it to the stub server, and start
// the test service. // the test service.
stub := &stubserver.StubServer{ stub := createStubServer(t, lis, creds, modeChangeOpt, bootstrapContents)
EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { defer stub.S.Stop()
return &testpb.Empty{}, nil
},
}
server, err := xds.NewGRPCServer(grpc.Creds(creds), modeChangeOpt, xds.BootstrapContentsForTesting(bootstrapContents))
if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err)
}
defer server.Stop()
stub.S = server
stubserver.StartTestService(t, stub)
// Setup the management server to respond with the listener resources. // Setup the management server to respond with the listener resources.
host, port, err := hostPortFromListener(lis) host, port, err := hostPortFromListener(lis)
@ -95,12 +85,6 @@ func (s) TestServerSideXDS_RedundantUpdateSuppression(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
go func() {
if err := server.Serve(lis); err != nil {
t.Errorf("Serve() failed: %v", err)
}
}()
// Wait for the listener to move to "serving" mode. // Wait for the listener to move to "serving" mode.
select { select {
case <-ctx.Done(): case <-ctx.Done():
@ -217,19 +201,10 @@ func (s) TestServerSideXDS_ServingModeChanges(t *testing.T) {
// Initialize a test gRPC server, assign it to the stub server, and start // Initialize a test gRPC server, assign it to the stub server, and start
// the test service. // the test service.
stub := &stubserver.StubServer{ stub1 := createStubServer(t, lis1, creds, modeChangeOpt, bootstrapContents)
EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { defer stub1.S.Stop()
return &testpb.Empty{}, nil stub2 := createStubServer(t, lis2, creds, modeChangeOpt, bootstrapContents)
}, defer stub2.S.Stop()
}
server, err := xds.NewGRPCServer(grpc.Creds(creds), modeChangeOpt, xds.BootstrapContentsForTesting(bootstrapContents))
if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err)
}
defer server.Stop()
stub.S = server
stubserver.StartTestService(t, stub)
// Setup the management server to respond with server-side Listener // Setup the management server to respond with server-side Listener
// resources for both listeners. // resources for both listeners.
@ -251,17 +226,6 @@ func (s) TestServerSideXDS_ServingModeChanges(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
go func() {
if err := server.Serve(lis1); err != nil {
t.Errorf("Serve() failed: %v", err)
}
}()
go func() {
if err := server.Serve(lis2); err != nil {
t.Errorf("Serve() failed: %v", err)
}
}()
// Wait for both listeners to move to "serving" mode. // Wait for both listeners to move to "serving" mode.
select { select {
case <-ctx.Done(): case <-ctx.Done():
@ -384,6 +348,22 @@ func (s) TestServerSideXDS_ServingModeChanges(t *testing.T) {
waitForSuccessfulRPC(ctx, t, cc2) waitForSuccessfulRPC(ctx, t, cc2)
} }
func createStubServer(t *testing.T, lis net.Listener, creds credentials.TransportCredentials, modeChangeOpt grpc.ServerOption, bootstrapContents []byte) *stubserver.StubServer {
stub := &stubserver.StubServer{
Listener: lis,
EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) {
return &testpb.Empty{}, nil
},
}
server, err := xds.NewGRPCServer(grpc.Creds(creds), modeChangeOpt, xds.BootstrapContentsForTesting(bootstrapContents))
if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err)
}
stub.S = server
stubserver.StartTestService(t, stub)
return stub
}
func waitForSuccessfulRPC(ctx context.Context, t *testing.T, cc *grpc.ClientConn) { func waitForSuccessfulRPC(ctx context.Context, t *testing.T, cc *grpc.ClientConn) {
t.Helper() t.Helper()

View File

@ -30,6 +30,7 @@ import (
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
"google.golang.org/grpc/connectivity" "google.golang.org/grpc/connectivity"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
xdscreds "google.golang.org/grpc/credentials/xds"
"google.golang.org/grpc/internal/grpcsync" "google.golang.org/grpc/internal/grpcsync"
"google.golang.org/grpc/internal/stubserver" "google.golang.org/grpc/internal/stubserver"
"google.golang.org/grpc/internal/testutils" "google.golang.org/grpc/internal/testutils"
@ -93,26 +94,15 @@ func (s) TestServeLDSRDS(t *testing.T) {
serving.Fire() serving.Fire()
} }
}) })
// Configure xDS credentials with an insecure fallback to be used on the
stub := &stubserver.StubServer{ // server-side.
EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { creds, err := xdscreds.NewServerCredentials(xdscreds.ServerOptions{FallbackCreds: insecure.NewCredentials()})
return &testpb.Empty{}, nil
},
}
server, err := xds.NewGRPCServer(grpc.Creds(insecure.NewCredentials()), modeChangeOpt, xds.BootstrapContentsForTesting(bootstrapContents))
if err != nil { if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err) t.Fatalf("failed to create server credentials: %v", err)
} }
defer server.Stop() stub := createStubServer(t, lis, creds, modeChangeOpt, bootstrapContents)
defer stub.S.Stop()
stub.S = server
stubserver.StartTestService(t, stub)
go func() {
if err := server.Serve(lis); err != nil {
t.Errorf("Serve() failed: %v", err)
}
}()
select { select {
case <-ctx.Done(): case <-ctx.Done():
t.Fatal("timeout waiting for the xDS Server to go Serving") t.Fatal("timeout waiting for the xDS Server to go Serving")
@ -210,25 +200,15 @@ func (s) TestRDSNack(t *testing.T) {
} }
}) })
stub := &stubserver.StubServer{ // Configure xDS credentials with an insecure fallback to be used on the
EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { // server-side.
return &testpb.Empty{}, nil creds, err := xdscreds.NewServerCredentials(xdscreds.ServerOptions{FallbackCreds: insecure.NewCredentials()})
},
}
server, err := xds.NewGRPCServer(grpc.Creds(insecure.NewCredentials()), modeChangeOpt, xds.BootstrapContentsForTesting(bootstrapContents))
if err != nil { if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err) t.Fatalf("failed to create server credentials: %v", err)
} }
defer server.Stop()
stub.S = server stub := createStubServer(t, lis, creds, modeChangeOpt, bootstrapContents)
stubserver.StartTestService(t, stub) defer stub.S.Stop()
go func() {
if err := server.Serve(lis); err != nil {
t.Errorf("Serve() failed: %v", err)
}
}()
cc, err := grpc.NewClient(lis.Addr().String(), grpc.WithTransportCredentials(insecure.NewCredentials())) cc, err := grpc.NewClient(lis.Addr().String(), grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { if err != nil {
@ -278,6 +258,7 @@ func (s) TestMultipleUpdatesImmediatelySwitch(t *testing.T) {
} }
stub := &stubserver.StubServer{ stub := &stubserver.StubServer{
Listener: lis,
EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { EmptyCallF: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) {
return &testpb.Empty{}, nil return &testpb.Empty{}, nil
}, },
@ -291,21 +272,12 @@ func (s) TestMultipleUpdatesImmediatelySwitch(t *testing.T) {
}, },
} }
server, err := xds.NewGRPCServer(grpc.Creds(insecure.NewCredentials()), testModeChangeServerOption(t), xds.BootstrapContentsForTesting(bootstrapContents)) if stub.S, err = xds.NewGRPCServer(grpc.Creds(insecure.NewCredentials()), testModeChangeServerOption(t), xds.BootstrapContentsForTesting(bootstrapContents)); err != nil {
if err != nil {
t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err) t.Fatalf("Failed to create an xDS enabled gRPC server: %v", err)
} }
defer server.Stop() defer stub.S.Stop()
stub.S = server
stubserver.StartTestService(t, stub) stubserver.StartTestService(t, stub)
go func() {
if err := server.Serve(lis); err != nil {
t.Errorf("Serve() failed: %v", err)
}
}()
cc, err := grpc.NewClient(lis.Addr().String(), grpc.WithTransportCredentials(insecure.NewCredentials())) cc, err := grpc.NewClient(lis.Addr().String(), grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { if err != nil {
t.Fatalf("failed to dial local test server: %v", err) t.Fatalf("failed to dial local test server: %v", err)