google.golang.org/grpc@v1.62.1/xds/internal/test/e2e/controlplane.go (about) 1 /* 2 * 3 * Copyright 2021 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package e2e 19 20 import ( 21 "fmt" 22 23 "github.com/google/uuid" 24 "google.golang.org/grpc/internal/testutils/xds/bootstrap" 25 "google.golang.org/grpc/internal/testutils/xds/e2e" 26 ) 27 28 type controlPlane struct { 29 server *e2e.ManagementServer 30 nodeID string 31 bootstrapContent string 32 } 33 34 func newControlPlane() (*controlPlane, error) { 35 // Spin up an xDS management server on a local port. 36 server, err := e2e.StartManagementServer(e2e.ManagementServerOptions{}) 37 if err != nil { 38 return nil, fmt.Errorf("failed to spin up the xDS management server: %v", err) 39 } 40 41 nodeID := uuid.New().String() 42 bootstrapContentBytes, err := bootstrap.Contents(bootstrap.Options{ 43 NodeID: nodeID, 44 ServerURI: server.Address, 45 ServerListenerResourceNameTemplate: e2e.ServerListenerResourceNameTemplate, 46 }) 47 if err != nil { 48 server.Stop() 49 return nil, fmt.Errorf("failed to create bootstrap file: %v", err) 50 } 51 52 return &controlPlane{ 53 server: server, 54 nodeID: nodeID, 55 bootstrapContent: string(bootstrapContentBytes), 56 }, nil 57 } 58 59 func (cp *controlPlane) stop() { 60 cp.server.Stop() 61 }