diff --git a/xds/internal/test/xds_client_integration_test.go b/xds/internal/test/xds_client_integration_test.go index 2e0e03aa3ac..713331b325e 100644 --- a/xds/internal/test/xds_client_integration_test.go +++ b/xds/internal/test/xds_client_integration_test.go @@ -23,13 +23,12 @@ package xds_test import ( "context" + "fmt" "net" "testing" - "github.com/google/uuid" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" - "google.golang.org/grpc/internal/xds" "google.golang.org/grpc/xds/internal/testutils" "google.golang.org/grpc/xds/internal/testutils/e2e" @@ -37,34 +36,13 @@ import ( ) // clientSetup performs a bunch of steps common to all xDS client tests here: -// - spin up an xDS management server on a local port // - spin up a gRPC server and register the test service on it // - create a local TCP listener and start serving on it // // Returns the following: -// - the management server: tests use this to configure resources -// - nodeID expected by the management server: this is set in the Node proto -// sent by the xdsClient for queries. // - the port the server is listening on // - cleanup function to be invoked by the tests when done -func clientSetup(t *testing.T) (*e2e.ManagementServer, string, uint32, func()) { - // Spin up a xDS management server on a local port. - nodeID := uuid.New().String() - fs, err := e2e.StartManagementServer() - if err != nil { - t.Fatal(err) - } - - // Create a bootstrap file in a temporary directory. - bootstrapCleanup, err := xds.SetupBootstrapFile(xds.BootstrapOptions{ - Version: xds.TransportV3, - NodeID: nodeID, - ServerURI: fs.Address, - }) - if err != nil { - t.Fatal(err) - } - +func clientSetup(t *testing.T) (uint32, func()) { // Initialize a gRPC server and register the stubServer on it. server := grpc.NewServer() testpb.RegisterTestServiceServer(server, &testService{}) @@ -81,30 +59,29 @@ func clientSetup(t *testing.T) (*e2e.ManagementServer, string, uint32, func()) { } }() - return fs, nodeID, uint32(lis.Addr().(*net.TCPAddr).Port), func() { - fs.Stop() - bootstrapCleanup() + return uint32(lis.Addr().(*net.TCPAddr).Port), func() { server.Stop() } } func (s) TestClientSideXDS(t *testing.T) { - fs, nodeID, port, cleanup := clientSetup(t) + port, cleanup := clientSetup(t) defer cleanup() + serviceName := xdsServiceName + "-client-side-xds" resources := e2e.DefaultClientResources(e2e.ResourceParams{ - DialTarget: "myservice", - NodeID: nodeID, + DialTarget: serviceName, + NodeID: xdsClientNodeID, Host: "localhost", Port: port, SecLevel: e2e.SecurityLevelNone, }) - if err := fs.Update(resources); err != nil { + if err := managementServer.Update(resources); err != nil { t.Fatal(err) } // Create a ClientConn and make a successful RPC. - cc, err := grpc.Dial("xds:///myservice", grpc.WithTransportCredentials(insecure.NewCredentials())) + cc, err := grpc.Dial(fmt.Sprintf("xds:///%s", serviceName), grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { t.Fatalf("failed to dial local test server: %v", err) } diff --git a/xds/internal/test/xds_integration_test.go b/xds/internal/test/xds_integration_test.go index 1c4b73ac58f..a41fec92976 100644 --- a/xds/internal/test/xds_integration_test.go +++ b/xds/internal/test/xds_integration_test.go @@ -24,10 +24,26 @@ package xds_test import ( "context" + "crypto/tls" + "crypto/x509" + "encoding/json" + "fmt" + "io/ioutil" + "log" + "os" + "path" "testing" "time" + "github.com/google/uuid" + "google.golang.org/grpc/credentials" "google.golang.org/grpc/internal/grpctest" + "google.golang.org/grpc/internal/leakcheck" + "google.golang.org/grpc/internal/xds/env" + "google.golang.org/grpc/testdata" + "google.golang.org/grpc/xds/internal/testutils/e2e" + + xdsinternal "google.golang.org/grpc/internal/xds" testpb "google.golang.org/grpc/test/grpc_testing" ) @@ -51,3 +67,148 @@ type testService struct { func (*testService) EmptyCall(context.Context, *testpb.Empty) (*testpb.Empty, error) { return &testpb.Empty{}, nil } + +var ( + // Globals corresponding to the single instance of the xDS management server + // which is spawned for all the tests in this package. + managementServer *e2e.ManagementServer + xdsClientNodeID string +) + +// TestMain sets up an xDS management server, runs all tests, and stops the +// management server. +func TestMain(m *testing.M) { + // The management server is started and stopped from here, but the leakcheck + // runs after every individual test. So, we need to skip the goroutine which + // spawns the management server and is blocked on the call to `Serve()`. + leakcheck.RegisterIgnoreGoroutine("e2e.StartManagementServer") + + cancel, err := setupManagementServer() + if err != nil { + log.Printf("setupManagementServer() failed: %v", err) + os.Exit(1) + } + + code := m.Run() + cancel() + os.Exit(code) +} + +func createTmpFile(src, dst string) error { + data, err := ioutil.ReadFile(src) + if err != nil { + return fmt.Errorf("ioutil.ReadFile(%q) failed: %v", src, err) + } + if err := ioutil.WriteFile(dst, data, os.ModePerm); err != nil { + return fmt.Errorf("ioutil.WriteFile(%q) failed: %v", dst, err) + } + return nil +} + +// createTempDirWithFiles creates a temporary directory under the system default +// tempDir with the given dirSuffix. It also reads from certSrc, keySrc and +// rootSrc files are creates appropriate files under the newly create tempDir. +// Returns the name of the created tempDir. +func createTmpDirWithFiles(dirSuffix, certSrc, keySrc, rootSrc string) (string, error) { + // Create a temp directory. Passing an empty string for the first argument + // uses the system temp directory. + dir, err := ioutil.TempDir("", dirSuffix) + if err != nil { + return "", fmt.Errorf("ioutil.TempDir() failed: %v", err) + } + + if err := createTmpFile(testdata.Path(certSrc), path.Join(dir, certFile)); err != nil { + return "", err + } + if err := createTmpFile(testdata.Path(keySrc), path.Join(dir, keyFile)); err != nil { + return "", err + } + if err := createTmpFile(testdata.Path(rootSrc), path.Join(dir, rootFile)); err != nil { + return "", err + } + return dir, nil +} + +// createClientTLSCredentials creates client-side TLS transport credentials. +func createClientTLSCredentials(t *testing.T) credentials.TransportCredentials { + t.Helper() + + cert, err := tls.LoadX509KeyPair(testdata.Path("x509/client1_cert.pem"), testdata.Path("x509/client1_key.pem")) + if err != nil { + t.Fatalf("tls.LoadX509KeyPair(x509/client1_cert.pem, x509/client1_key.pem) failed: %v", err) + } + b, err := ioutil.ReadFile(testdata.Path("x509/server_ca_cert.pem")) + if err != nil { + t.Fatalf("ioutil.ReadFile(x509/server_ca_cert.pem) failed: %v", err) + } + roots := x509.NewCertPool() + if !roots.AppendCertsFromPEM(b) { + t.Fatal("failed to append certificates") + } + return credentials.NewTLS(&tls.Config{ + Certificates: []tls.Certificate{cert}, + RootCAs: roots, + ServerName: "x.test.example.com", + }) +} + +// setupManagement server performs the following: +// - spin up an xDS management server on a local port +// - set up certificates for consumption by the file_watcher plugin +// - sets up the global variables which refer to this management server and the +// nodeID to be used when talking to this management server. +// +// Returns a function to be invoked by the caller to stop the management server. +func setupManagementServer() (func(), error) { + // Turn on the env var protection for client-side security. + origClientSideSecurityEnvVar := env.ClientSideSecuritySupport + env.ClientSideSecuritySupport = true + + // Spin up an xDS management server on a local port. + var err error + managementServer, err = e2e.StartManagementServer() + if err != nil { + return nil, err + } + + // Create a directory to hold certs and key files used on the server side. + serverDir, err := createTmpDirWithFiles("testServerSideXDS*", "x509/server1_cert.pem", "x509/server1_key.pem", "x509/client_ca_cert.pem") + if err != nil { + managementServer.Stop() + return nil, err + } + + // Create a directory to hold certs and key files used on the client side. + clientDir, err := createTmpDirWithFiles("testClientSideXDS*", "x509/client1_cert.pem", "x509/client1_key.pem", "x509/server_ca_cert.pem") + if err != nil { + managementServer.Stop() + return nil, err + } + + // Create certificate providers section of the bootstrap config with entries + // for both the client and server sides. + cpc := map[string]json.RawMessage{ + e2e.ServerSideCertProviderInstance: e2e.DefaultFileWatcherConfig(path.Join(serverDir, certFile), path.Join(serverDir, keyFile), path.Join(serverDir, rootFile)), + e2e.ClientSideCertProviderInstance: e2e.DefaultFileWatcherConfig(path.Join(clientDir, certFile), path.Join(clientDir, keyFile), path.Join(clientDir, rootFile)), + } + + // Create a bootstrap file in a temporary directory. + xdsClientNodeID = uuid.New().String() + bootstrapCleanup, err := xdsinternal.SetupBootstrapFile(xdsinternal.BootstrapOptions{ + Version: xdsinternal.TransportV3, + NodeID: xdsClientNodeID, + ServerURI: managementServer.Address, + CertificateProviders: cpc, + ServerListenerResourceNameTemplate: e2e.ServerListenerResourceNameTemplate, + }) + if err != nil { + managementServer.Stop() + return nil, err + } + + return func() { + managementServer.Stop() + bootstrapCleanup() + env.ClientSideSecuritySupport = origClientSideSecurityEnvVar + }, nil +} diff --git a/xds/internal/test/xds_server_integration_test.go b/xds/internal/test/xds_server_integration_test.go index 5e266cdc5fb..6511a6134cf 100644 --- a/xds/internal/test/xds_server_integration_test.go +++ b/xds/internal/test/xds_server_integration_test.go @@ -24,30 +24,19 @@ package xds_test import ( "context" - "crypto/tls" - "crypto/x509" - "encoding/json" "fmt" - "io/ioutil" "net" - "os" - "path" "strconv" "testing" - "github.com/google/uuid" "google.golang.org/grpc" "google.golang.org/grpc/codes" - "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" - "google.golang.org/grpc/internal/xds/env" "google.golang.org/grpc/status" - "google.golang.org/grpc/testdata" "google.golang.org/grpc/xds" "google.golang.org/grpc/xds/internal/testutils/e2e" xdscreds "google.golang.org/grpc/credentials/xds" - xdsinternal "google.golang.org/grpc/internal/xds" testpb "google.golang.org/grpc/test/grpc_testing" xdstestutils "google.golang.org/grpc/xds/internal/testutils" ) @@ -61,113 +50,17 @@ const ( xdsServiceName = "my-service" ) -func createTmpFile(t *testing.T, src, dst string) { - t.Helper() - - data, err := ioutil.ReadFile(src) - if err != nil { - t.Fatalf("ioutil.ReadFile(%q) failed: %v", src, err) - } - if err := ioutil.WriteFile(dst, data, os.ModePerm); err != nil { - t.Fatalf("ioutil.WriteFile(%q) failed: %v", dst, err) - } - t.Logf("Wrote file at: %s", dst) -} - -// createTempDirWithFiles creates a temporary directory under the system default -// tempDir with the given dirSuffix. It also reads from certSrc, keySrc and -// rootSrc files are creates appropriate files under the newly create tempDir. -// Returns the name of the created tempDir. -func createTmpDirWithFiles(t *testing.T, dirSuffix, certSrc, keySrc, rootSrc string) string { - t.Helper() - - // Create a temp directory. Passing an empty string for the first argument - // uses the system temp directory. - dir, err := ioutil.TempDir("", dirSuffix) - if err != nil { - t.Fatalf("ioutil.TempDir() failed: %v", err) - } - t.Logf("Using tmpdir: %s", dir) - - createTmpFile(t, testdata.Path(certSrc), path.Join(dir, certFile)) - createTmpFile(t, testdata.Path(keySrc), path.Join(dir, keyFile)) - createTmpFile(t, testdata.Path(rootSrc), path.Join(dir, rootFile)) - return dir -} - -// createClientTLSCredentials creates client-side TLS transport credentials. -func createClientTLSCredentials(t *testing.T) credentials.TransportCredentials { - cert, err := tls.LoadX509KeyPair(testdata.Path("x509/client1_cert.pem"), testdata.Path("x509/client1_key.pem")) - if err != nil { - t.Fatalf("tls.LoadX509KeyPair(x509/client1_cert.pem, x509/client1_key.pem) failed: %v", err) - } - b, err := ioutil.ReadFile(testdata.Path("x509/server_ca_cert.pem")) - if err != nil { - t.Fatalf("ioutil.ReadFile(x509/server_ca_cert.pem) failed: %v", err) - } - roots := x509.NewCertPool() - if !roots.AppendCertsFromPEM(b) { - t.Fatal("failed to append certificates") - } - return credentials.NewTLS(&tls.Config{ - Certificates: []tls.Certificate{cert}, - RootCAs: roots, - ServerName: "x.test.example.com", - }) -} - -// commonSetup performs a bunch of steps common to all xDS server tests here: -// - spin up an xDS management server on a local port -// - set up certificates for consumption by the file_watcher plugin +// setupGRPCServer performs the following: // - spin up an xDS-enabled gRPC server, configure it with xdsCredentials and // register the test service on it // - create a local TCP listener and start serving on it // // Returns the following: -// - the management server: tests use this to configure resources -// - nodeID expected by the management server: this is set in the Node proto -// sent by the xdsClient used on the xDS-enabled gRPC server // - local listener on which the xDS-enabled gRPC server is serving on // - cleanup function to be invoked by the tests when done -func commonSetup(t *testing.T) (*e2e.ManagementServer, string, net.Listener, func()) { +func setupGRPCServer(t *testing.T) (net.Listener, func()) { t.Helper() - // Turn on the env var protection for client-side security. - origClientSideSecurityEnvVar := env.ClientSideSecuritySupport - env.ClientSideSecuritySupport = true - - // Spin up an xDS management server on a local port. - nodeID := uuid.New().String() - fs, err := e2e.StartManagementServer() - if err != nil { - t.Fatal(err) - } - - // Create a directory to hold certs and key files used on the server side. - serverDir := createTmpDirWithFiles(t, "testServerSideXDS*", "x509/server1_cert.pem", "x509/server1_key.pem", "x509/client_ca_cert.pem") - - // Create a directory to hold certs and key files used on the client side. - clientDir := createTmpDirWithFiles(t, "testClientSideXDS*", "x509/client1_cert.pem", "x509/client1_key.pem", "x509/server_ca_cert.pem") - - // Create certificate providers section of the bootstrap config with entries - // for both the client and server sides. - cpc := map[string]json.RawMessage{ - e2e.ServerSideCertProviderInstance: e2e.DefaultFileWatcherConfig(path.Join(serverDir, certFile), path.Join(serverDir, keyFile), path.Join(serverDir, rootFile)), - e2e.ClientSideCertProviderInstance: e2e.DefaultFileWatcherConfig(path.Join(clientDir, certFile), path.Join(clientDir, keyFile), path.Join(clientDir, rootFile)), - } - - // Create a bootstrap file in a temporary directory. - bootstrapCleanup, err := xdsinternal.SetupBootstrapFile(xdsinternal.BootstrapOptions{ - Version: xdsinternal.TransportV3, - NodeID: nodeID, - ServerURI: fs.Address, - CertificateProviders: cpc, - ServerListenerResourceNameTemplate: e2e.ServerListenerResourceNameTemplate, - }) - if err != nil { - t.Fatal(err) - } - // Configure xDS credentials to be used on the server-side. creds, err := xdscreds.NewServerCredentials(xdscreds.ServerOptions{ FallbackCreds: insecure.NewCredentials(), @@ -192,11 +85,8 @@ func commonSetup(t *testing.T) (*e2e.ManagementServer, string, net.Listener, fun } }() - return fs, nodeID, lis, func() { - fs.Stop() - bootstrapCleanup() + return lis, func() { server.Stop() - env.ClientSideSecuritySupport = origClientSideSecurityEnvVar } } @@ -223,7 +113,7 @@ func hostPortFromListener(lis net.Listener) (string, uint32, error) { // the client and the server. This results in both of them using the // configured fallback credentials (which is insecure creds in this case). func (s) TestServerSideXDS_Fallback(t *testing.T) { - fs, nodeID, lis, cleanup := commonSetup(t) + lis, cleanup := setupGRPCServer(t) defer cleanup() // Grab the host and port of the server and create client side xDS resources @@ -233,9 +123,10 @@ func (s) TestServerSideXDS_Fallback(t *testing.T) { if err != nil { t.Fatalf("failed to retrieve host and port of server: %v", err) } + serviceName := xdsServiceName + "-fallback" resources := e2e.DefaultClientResources(e2e.ResourceParams{ - DialTarget: xdsServiceName, - NodeID: nodeID, + DialTarget: serviceName, + NodeID: xdsClientNodeID, Host: host, Port: port, SecLevel: e2e.SecurityLevelNone, @@ -248,7 +139,7 @@ func (s) TestServerSideXDS_Fallback(t *testing.T) { resources.Listeners = append(resources.Listeners, inboundLis) // Setup the management server with client and server-side resources. - if err := fs.Update(resources); err != nil { + if err := managementServer.Update(resources); err != nil { t.Fatal(err) } @@ -263,7 +154,7 @@ func (s) TestServerSideXDS_Fallback(t *testing.T) { // Create a ClientConn with the xds scheme and make a successful RPC. ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) defer cancel() - cc, err := grpc.DialContext(ctx, fmt.Sprintf("xds:///%s", xdsServiceName), grpc.WithTransportCredentials(creds)) + cc, err := grpc.DialContext(ctx, fmt.Sprintf("xds:///%s", serviceName), grpc.WithTransportCredentials(creds)) if err != nil { t.Fatalf("failed to dial local test server: %v", err) } @@ -271,7 +162,7 @@ func (s) TestServerSideXDS_Fallback(t *testing.T) { client := testpb.NewTestServiceClient(cc) if _, err := client.EmptyCall(ctx, &testpb.Empty{}, grpc.WaitForReady(true)); err != nil { - t.Fatalf("rpc EmptyCall() failed: %v", err) + t.Errorf("rpc EmptyCall() failed: %v", err) } } @@ -301,7 +192,7 @@ func (s) TestServerSideXDS_FileWatcherCerts(t *testing.T) { } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - fs, nodeID, lis, cleanup := commonSetup(t) + lis, cleanup := setupGRPCServer(t) defer cleanup() // Grab the host and port of the server and create client side xDS @@ -314,9 +205,10 @@ func (s) TestServerSideXDS_FileWatcherCerts(t *testing.T) { // Create xDS resources to be consumed on the client side. This // includes the listener, route configuration, cluster (with // security configuration) and endpoint resources. + serviceName := xdsServiceName + "-file-watcher-certs-" + test.name resources := e2e.DefaultClientResources(e2e.ResourceParams{ - DialTarget: xdsServiceName, - NodeID: nodeID, + DialTarget: serviceName, + NodeID: xdsClientNodeID, Host: host, Port: port, SecLevel: test.secLevel, @@ -329,7 +221,7 @@ func (s) TestServerSideXDS_FileWatcherCerts(t *testing.T) { resources.Listeners = append(resources.Listeners, inboundLis) // Setup the management server with client and server resources. - if err := fs.Update(resources); err != nil { + if err := managementServer.Update(resources); err != nil { t.Fatal(err) } @@ -344,7 +236,7 @@ func (s) TestServerSideXDS_FileWatcherCerts(t *testing.T) { // Create a ClientConn with the xds scheme and make an RPC. ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) defer cancel() - cc, err := grpc.DialContext(ctx, fmt.Sprintf("xds:///%s", xdsServiceName), grpc.WithTransportCredentials(creds)) + cc, err := grpc.DialContext(ctx, fmt.Sprintf("xds:///%s", serviceName), grpc.WithTransportCredentials(creds)) if err != nil { t.Fatalf("failed to dial local test server: %v", err) } @@ -367,7 +259,7 @@ func (s) TestServerSideXDS_FileWatcherCerts(t *testing.T) { // configuration pointing to the use of the file_watcher plugin and we verify // that the same client is now able to successfully make an RPC. func (s) TestServerSideXDS_SecurityConfigChange(t *testing.T) { - fs, nodeID, lis, cleanup := commonSetup(t) + lis, cleanup := setupGRPCServer(t) defer cleanup() // Grab the host and port of the server and create client side xDS resources @@ -378,9 +270,10 @@ func (s) TestServerSideXDS_SecurityConfigChange(t *testing.T) { if err != nil { t.Fatalf("failed to retrieve host and port of server: %v", err) } + serviceName := xdsServiceName + "-security-config-change" resources := e2e.DefaultClientResources(e2e.ResourceParams{ - DialTarget: xdsServiceName, - NodeID: nodeID, + DialTarget: serviceName, + NodeID: xdsClientNodeID, Host: host, Port: port, SecLevel: e2e.SecurityLevelNone, @@ -393,7 +286,7 @@ func (s) TestServerSideXDS_SecurityConfigChange(t *testing.T) { resources.Listeners = append(resources.Listeners, inboundLis) // Setup the management server with client and server-side resources. - if err := fs.Update(resources); err != nil { + if err := managementServer.Update(resources); err != nil { t.Fatal(err) } @@ -408,7 +301,7 @@ func (s) TestServerSideXDS_SecurityConfigChange(t *testing.T) { // Create a ClientConn with the xds scheme and make a successful RPC. ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) defer cancel() - xdsCC, err := grpc.DialContext(ctx, fmt.Sprintf("xds:///%s", xdsServiceName), grpc.WithTransportCredentials(xdsCreds)) + xdsCC, err := grpc.DialContext(ctx, fmt.Sprintf("xds:///%s", serviceName), grpc.WithTransportCredentials(xdsCreds)) if err != nil { t.Fatalf("failed to dial local test server: %v", err) } @@ -437,15 +330,15 @@ func (s) TestServerSideXDS_SecurityConfigChange(t *testing.T) { // Switch server and client side resources with ones that contain required // security configuration for mTLS with a file watcher certificate provider. resources = e2e.DefaultClientResources(e2e.ResourceParams{ - DialTarget: xdsServiceName, - NodeID: nodeID, + DialTarget: serviceName, + NodeID: xdsClientNodeID, Host: host, Port: port, SecLevel: e2e.SecurityLevelMTLS, }) inboundLis = e2e.DefaultServerListener(host, port, e2e.SecurityLevelMTLS) resources.Listeners = append(resources.Listeners, inboundLis) - if err := fs.Update(resources); err != nil { + if err := managementServer.Update(resources); err != nil { t.Fatal(err) } diff --git a/xds/internal/test/xds_server_serving_mode_test.go b/xds/internal/test/xds_server_serving_mode_test.go index 484a5b5ab74..664f0b85759 100644 --- a/xds/internal/test/xds_server_serving_mode_test.go +++ b/xds/internal/test/xds_server_serving_mode_test.go @@ -24,22 +24,18 @@ package xds_test import ( "context" - "encoding/json" "fmt" "net" - "path" "sync" "testing" v3listenerpb "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" - "github.com/google/uuid" "google.golang.org/grpc" "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials/insecure" xdscreds "google.golang.org/grpc/credentials/xds" "google.golang.org/grpc/internal/testutils" - xdsinternal "google.golang.org/grpc/internal/xds" testpb "google.golang.org/grpc/test/grpc_testing" "google.golang.org/grpc/xds" xdstestutils "google.golang.org/grpc/xds/internal/testutils" @@ -91,35 +87,6 @@ func (mt *modeTracker) waitForUpdate(ctx context.Context) error { // xDS enabled gRPC servers. It verifies that appropriate mode changes happen in // the server, and also verifies behavior of clientConns under these modes. func (s) TestServerSideXDS_ServingModeChanges(t *testing.T) { - // Spin up a xDS management server on a local port. - nodeID := uuid.New().String() - fs, err := e2e.StartManagementServer() - if err != nil { - t.Fatal(err) - } - defer fs.Stop() - - // Create a directory to hold certs and key files used on the server side. - serverDir := createTmpDirWithFiles(t, "testServerSideServingMode*", "x509/server1_cert.pem", "x509/server1_key.pem", "x509/client_ca_cert.pem") - - // Create certificate providers section of the bootstrap config. - cpc := map[string]json.RawMessage{ - e2e.ServerSideCertProviderInstance: e2e.DefaultFileWatcherConfig(path.Join(serverDir, certFile), path.Join(serverDir, keyFile), path.Join(serverDir, rootFile)), - } - - // Create a bootstrap file in a temporary directory. - bsCleanup, err := xdsinternal.SetupBootstrapFile(xdsinternal.BootstrapOptions{ - Version: xdsinternal.TransportV3, - NodeID: nodeID, - ServerURI: fs.Address, - CertificateProviders: cpc, - ServerListenerResourceNameTemplate: e2e.ServerListenerResourceNameTemplate, - }) - if err != nil { - t.Fatal(err) - } - defer bsCleanup() - // Configure xDS credentials to be used on the server-side. creds, err := xdscreds.NewServerCredentials(xdscreds.ServerOptions{ FallbackCreds: insecure.NewCredentials(), @@ -176,10 +143,10 @@ func (s) TestServerSideXDS_ServingModeChanges(t *testing.T) { } listener2 := e2e.DefaultServerListener(host2, port2, e2e.SecurityLevelNone) resources := e2e.UpdateOptions{ - NodeID: nodeID, + NodeID: xdsClientNodeID, Listeners: []*v3listenerpb.Listener{listener1, listener2}, } - if err := fs.Update(resources); err != nil { + if err := managementServer.Update(resources); err != nil { t.Fatal(err) } @@ -217,8 +184,8 @@ func (s) TestServerSideXDS_ServingModeChanges(t *testing.T) { // Update the management server to remove the second listener resource. This should // push the only the second listener into "not-serving" mode. - if err := fs.Update(e2e.UpdateOptions{ - NodeID: nodeID, + if err := managementServer.Update(e2e.UpdateOptions{ + NodeID: xdsClientNodeID, Listeners: []*v3listenerpb.Listener{listener1}, }); err != nil { t.Error(err) @@ -246,8 +213,8 @@ func (s) TestServerSideXDS_ServingModeChanges(t *testing.T) { // Update the management server to remove the first listener resource as // well. This should push the first listener into "not-serving" mode. Second // listener is already in "not-serving" mode. - if err := fs.Update(e2e.UpdateOptions{ - NodeID: nodeID, + if err := managementServer.Update(e2e.UpdateOptions{ + NodeID: xdsClientNodeID, Listeners: []*v3listenerpb.Listener{}, }); err != nil { t.Error(err) @@ -279,8 +246,8 @@ func (s) TestServerSideXDS_ServingModeChanges(t *testing.T) { } // Update the management server with both listener resources. - if err := fs.Update(e2e.UpdateOptions{ - NodeID: nodeID, + if err := managementServer.Update(e2e.UpdateOptions{ + NodeID: xdsClientNodeID, Listeners: []*v3listenerpb.Listener{listener1, listener2}, }); err != nil { t.Error(err) diff --git a/xds/internal/testutils/e2e/server.go b/xds/internal/testutils/e2e/server.go index 9ec2eb0d6f2..4a71a5054d7 100644 --- a/xds/internal/testutils/e2e/server.go +++ b/xds/internal/testutils/e2e/server.go @@ -147,7 +147,6 @@ func (s *ManagementServer) Stop() { s.cancel() } s.gs.Stop() - logger.Infof("Stopped the xDS management server...") } // resourceSlice accepts a slice of any type of proto messages and returns a