e2e

package
v1.63.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 2, 2024 License: Apache-2.0 Imports: 40 Imported by: 0

Documentation

Overview

Package e2e provides utilities for end2end testing of xDS functionality.

Index

Constants

View Source
const (
	// ServerListenerResourceNameTemplate is the Listener resource name template
	// used on the server side.
	ServerListenerResourceNameTemplate = "grpc/server?xds.resource.listening_address=%s"
	// ClientSideCertProviderInstance is the certificate provider instance name
	// used in the Cluster resource on the client side.
	ClientSideCertProviderInstance = "client-side-certificate-provider-instance"
	// ServerSideCertProviderInstance is the certificate provider instance name
	// used in the Listener resource on the server side.
	ServerSideCertProviderInstance = "server-side-certificate-provider-instance"
)

Variables

View Source
var RouterHTTPFilter = HTTPFilter("router", &v3routerpb.Router{})

RouterHTTPFilter is the HTTP Filter configuration for the Router filter.

Functions

func ClusterResourceWithOptions added in v1.50.0

func ClusterResourceWithOptions(opts ClusterOptions) *v3clusterpb.Cluster

ClusterResourceWithOptions returns an xDS Cluster resource configured with the provided options.

func CreateClientTLSCredentials

func CreateClientTLSCredentials(t *testing.T) credentials.TransportCredentials

CreateClientTLSCredentials creates client-side TLS transport credentials using certificate and key files from testdata/x509 directory.

func CreateServerTLSCredentials added in v1.61.0

func CreateServerTLSCredentials(t *testing.T, clientAuth tls.ClientAuthType) credentials.TransportCredentials

CreateServerTLSCredentials creates server-side TLS transport credentials using certificate and key files from testdata/x509 directory.

func DefaultBootstrapContents added in v1.58.0

func DefaultBootstrapContents(nodeID, serverURI string) ([]byte, error)

DefaultBootstrapContents creates a default bootstrap configuration with the given node ID and server URI. It also creates certificate provider configuration and sets the listener resource name template to be used on the server side.

func DefaultClientListener

func DefaultClientListener(target, routeName string) *v3listenerpb.Listener

DefaultClientListener returns a basic xds Listener resource to be used on the client side.

func DefaultCluster

func DefaultCluster(clusterName, edsServiceName string, secLevel SecurityLevel) *v3clusterpb.Cluster

DefaultCluster returns a basic xds Cluster resource.

func DefaultEndpoint

func DefaultEndpoint(clusterName string, host string, ports []uint32) *v3endpointpb.ClusterLoadAssignment

DefaultEndpoint returns a basic xds Endpoint resource.

func DefaultFileWatcherConfig

func DefaultFileWatcherConfig(certPath, keyPath, caPath string) json.RawMessage

DefaultFileWatcherConfig is a helper function to create a default certificate provider plugin configuration. The test is expected to have setup the files appropriately before this configuration is used to instantiate providers.

func DefaultRouteConfig

func DefaultRouteConfig(routeName, vhDomain, clusterName string) *v3routepb.RouteConfiguration

DefaultRouteConfig returns a basic xds RouteConfig resource.

func DefaultServerListener

func DefaultServerListener(host string, port uint32, secLevel SecurityLevel, routeName string) *v3listenerpb.Listener

DefaultServerListener returns a basic xds Listener resource to be used on the server side. The returned Listener resource contains an inline route configuration with the name of routeName.

func DefaultServerListenerWithRouteConfigName added in v1.60.0

func DefaultServerListenerWithRouteConfigName(host string, port uint32, secLevel SecurityLevel, routeName string) *v3listenerpb.Listener

DefaultServerListenerWithRouteConfigName returns a basic xds Listener resource to be used on the server side. The returned Listener resource contains a RouteCongiguration resource name that needs to be resolved.

func EndpointResourceWithOptions added in v1.54.0

func EndpointResourceWithOptions(opts EndpointOptions) *v3endpointpb.ClusterLoadAssignment

EndpointResourceWithOptions returns an xds Endpoint resource configured with the provided options.

func HTTPFilter

func HTTPFilter(name string, config proto.Message) *v3httppb.HttpFilter

HTTPFilter constructs an xds HttpFilter with the provided name and config.

func ListenerResourceFallbackToDefault added in v1.61.0

func ListenerResourceFallbackToDefault(host string, port uint32, secLevel SecurityLevel) *v3listenerpb.Listener

ListenerResourceFallbackToDefault returns a listener resource that contains a filter chain that will never get chosen to process traffic and a default filter chain. The default filter chain points to routeName2.

func ListenerResourceThreeRouteResources added in v1.61.0

func ListenerResourceThreeRouteResources(host string, port uint32, secLevel SecurityLevel, routeName string) *v3listenerpb.Listener

ListenerResourceThreeRouteResources returns a listener resource that points to three route configurations. Only the filter chain that points to the first route config can be matched to.

func RouteConfigFilterAction added in v1.61.0

func RouteConfigFilterAction(routeName string) *v3routepb.RouteConfiguration

RouteConfigFilterAction returns an xDS RouteConfig resource which specifies to route to a route specifying route filter action. Since this is not type non forwarding action, this should fail requests that match to this server side.

func RouteConfigNoRouteMatch added in v1.61.0

func RouteConfigNoRouteMatch(routeName string) *v3routepb.RouteConfiguration

RouteConfigNoRouteMatch returns an xDS RouteConfig resource which a route with no route match. This will be NACKed by the xDS Client.

func RouteConfigNonForwardingAction added in v1.61.0

func RouteConfigNonForwardingAction(routeName string) *v3routepb.RouteConfiguration

RouteConfigNonForwardingAction returns an xDS RouteConfig resource which specifies to route to a route specifying non forwarding action. This is intended to be used on the server side for RDS requests, and corresponds to the inline route configuration in DefaultServerListener.

func RouteConfigResourceWithOptions added in v1.54.0

func RouteConfigResourceWithOptions(opts RouteConfigOptions) *v3routepb.RouteConfiguration

RouteConfigResourceWithOptions returns a RouteConfiguration resource configured with the provided options.

Types

type BackendOptions added in v1.57.0

type BackendOptions struct {
	// Port number on which the backend is accepting connections. All backends
	// are expected to run on localhost, hence host name is not stored here.
	Port uint32
	// Health status of the backend. Default is UNKNOWN which is treated the
	// same as HEALTHY.
	HealthStatus v3corepb.HealthStatus
}

BackendOptions contains options to configure individual backends in a locality.

type ClusterOptions added in v1.50.0

type ClusterOptions struct {
	Type ClusterType
	// ClusterName is the name of the Cluster resource.
	ClusterName string
	// ServiceName is the EDS service name of the Cluster. Applicable only when
	// cluster type is EDS.
	ServiceName string
	// ChildNames is the list of child Cluster names. Applicable only when
	// cluster type is Aggregate.
	ChildNames []string
	// DNSHostName is the dns host name of the Cluster. Applicable only when the
	// cluster type is DNS.
	DNSHostName string
	// DNSPort is the port number of the Cluster. Applicable only when the
	// cluster type is DNS.
	DNSPort uint32
	// Policy is the LB policy to be used.
	Policy LoadBalancingPolicy
	// SecurityLevel determines the security configuration for the Cluster.
	SecurityLevel SecurityLevel
	// EnableLRS adds a load reporting configuration with a config source
	// pointing to self.
	EnableLRS bool
}

ClusterOptions contains options to configure a Cluster resource.

type ClusterType added in v1.59.0

type ClusterType int

ClusterType specifies the type of the Cluster resource.

const (
	// ClusterTypeEDS specifies a Cluster that uses EDS to resolve endpoints.
	ClusterTypeEDS ClusterType = iota
	// ClusterTypeLogicalDNS specifies a Cluster that uses DNS to resolve
	// endpoints.
	ClusterTypeLogicalDNS
	// ClusterTypeAggregate specifies a Cluster that is made up of child
	// clusters.
	ClusterTypeAggregate
)

type EndpointOptions added in v1.54.0

type EndpointOptions struct {
	// ClusterName is the name of the Cluster resource (or EDS service name)
	// containing the endpoints specified below.
	ClusterName string
	// Host is the hostname of the endpoints. In our e2e tests, hostname must
	// always be "localhost".
	Host string
	// Localities is a set of localities belonging to this resource.
	Localities []LocalityOptions
	// DropPercents is a map from drop category to a drop percentage. If unset,
	// no drops are configured.
	DropPercents map[string]int
}

EndpointOptions contains options to configure an Endpoint (or ClusterLoadAssignment) resource.

type LoadBalancingPolicy added in v1.50.0

type LoadBalancingPolicy int

LoadBalancingPolicy determines the policy used for balancing load across endpoints in the Cluster.

const (
	// LoadBalancingPolicyRoundRobin results in the use of the weighted_target
	// LB policy to balance load across localities and endpoints in the cluster.
	LoadBalancingPolicyRoundRobin LoadBalancingPolicy = iota
	// LoadBalancingPolicyRingHash results in the use of the ring_hash LB policy
	// as the leaf policy.
	LoadBalancingPolicyRingHash
)

type LocalityOptions added in v1.56.0

type LocalityOptions struct {
	// Name is the unique locality name.
	Name string
	// Weight is the weight of the locality, used for load balancing.
	Weight uint32
	// Backends is a set of backends belonging to this locality.
	Backends []BackendOptions
}

LocalityOptions contains options to configure a Locality.

type ManagementServer

type ManagementServer struct {
	// Address is the host:port on which the management server is listening for
	// new connections.
	Address string

	// LRSServer points to the fake LRS server implementation. Set only if the
	// SupportLoadReportingService option was set to true when creating this
	// management server.
	LRSServer *fakeserver.Server
	// contains filtered or unexported fields
}

ManagementServer is a thin wrapper around the xDS control plane implementation provided by envoyproxy/go-control-plane.

func SetupManagementServer

func SetupManagementServer(t *testing.T, opts ManagementServerOptions) (*ManagementServer, string, []byte, resolver.Builder, func())

SetupManagementServer performs the following: - spin up an xDS management server on a local port - set up certificates for consumption by the file_watcher plugin - creates a bootstrap file in a temporary location - creates an xDS resolver using the above bootstrap contents

Returns the following: - management server - nodeID to be used by the client when connecting to the management server - bootstrap contents to be used by the client - xDS resolver builder to be used by the client - a cleanup function to be invoked at the end of the test

func StartManagementServer

func StartManagementServer(opts ManagementServerOptions) (*ManagementServer, error)

StartManagementServer initializes a management server which implements the AggregatedDiscoveryService endpoint. The management server is initialized with no resources. Tests should call the Update() method to change the resource snapshot held by the management server, as required by the test logic. When the test is done, it should call the Stop() method to cleanup resources allocated by the management server.

func (*ManagementServer) Stop

func (s *ManagementServer) Stop()

Stop stops the management server.

func (*ManagementServer) Update

func (s *ManagementServer) Update(ctx context.Context, opts UpdateOptions) error

Update changes the resource snapshot held by the management server, which updates connected clients as required.

type ManagementServerOptions added in v1.49.0

type ManagementServerOptions struct {
	// Listener to accept connections on. If nil, a TPC listener on a local port
	// will be created and used.
	Listener net.Listener

	// SupportLoadReportingService, if set, results in the load reporting
	// service being registered on the same port as that of ADS.
	SupportLoadReportingService bool

	// AllowResourceSubSet allows the management server to respond to requests
	// before all configured resources are explicitly named in the request. The
	// default behavior that we want is for the management server to wait for
	// all configured resources to be requested before responding to any of
	// them, since this is how we have run our tests historically, and should be
	// set to true only for tests which explicitly require the other behavior.
	AllowResourceSubset bool

	// ServerFeaturesIgnoreResourceDeletion, if set, results in a bootstrap config
	// where the server features list contains `ignore_resource_deletion`. This
	// results in gRPC ignoring resource deletions from the management server, as
	// per A53.
	ServerFeaturesIgnoreResourceDeletion bool

	// OnStreamOpen is called when an xDS stream is opened. The callback is
	// invoked with the assigned stream ID and the type URL from the incoming
	// request (or "" for ADS).
	//
	// Returning an error from this callback will end processing and close the
	// stream. OnStreamClosed will still be called.
	OnStreamOpen func(context.Context, int64, string) error

	// OnStreamClosed is called immediately prior to closing an xDS stream. The
	// callback is invoked with the stream ID of the stream being closed.
	OnStreamClosed func(int64, *v3corepb.Node)

	// OnStreamRequest is called when a request is received on the stream. The
	// callback is invoked with the stream ID of the stream on which the request
	// was received and the received request.
	//
	// Returning an error from this callback will end processing and close the
	// stream. OnStreamClosed will still be called.
	OnStreamRequest func(int64, *v3discoverypb.DiscoveryRequest) error

	// OnStreamResponse is called immediately prior to sending a response on the
	// stream. The callback is invoked with the stream ID of the stream on which
	// the response is being sent along with the incoming request and the outgoing
	// response.
	OnStreamResponse func(context.Context, int64, *v3discoverypb.DiscoveryRequest, *v3discoverypb.DiscoveryResponse)
}

ManagementServerOptions contains options to be passed to the management server during creation.

type ResourceParams

type ResourceParams struct {
	// DialTarget is the client's dial target. This is used as the name of the
	// Listener resource.
	DialTarget string
	// NodeID is the id of the xdsClient to which this update is to be pushed.
	NodeID string
	// Host is the host of the default Endpoint resource.
	Host string
	// port is the port of the default Endpoint resource.
	Port uint32
	// SecLevel controls the security configuration in the Cluster resource.
	SecLevel SecurityLevel
}

ResourceParams wraps the arguments to be passed to DefaultClientResources.

type RouteConfigClusterSpecifierType added in v1.54.0

type RouteConfigClusterSpecifierType int

RouteConfigClusterSpecifierType determines the cluster specifier type for the route actions configured in the returned RouteConfiguration resource.

const (
	// RouteConfigClusterSpecifierTypeCluster results in the cluster specifier
	// being set to a RouteAction_Cluster.
	RouteConfigClusterSpecifierTypeCluster RouteConfigClusterSpecifierType = iota
	// RouteConfigClusterSpecifierTypeWeightedCluster results in the cluster
	// specifier being set to RouteAction_WeightedClusters.
	RouteConfigClusterSpecifierTypeWeightedCluster
	// RouteConfigClusterSpecifierTypeClusterSpecifierPlugin results in the
	// cluster specifier being set to a RouteAction_ClusterSpecifierPlugin.
	RouteConfigClusterSpecifierTypeClusterSpecifierPlugin
)

type RouteConfigOptions added in v1.54.0

type RouteConfigOptions struct {
	// RouteConfigName is the name of the RouteConfiguration resource.
	RouteConfigName string
	// ListenerName is the name of the Listener resource which uses this
	// RouteConfiguration.
	ListenerName string
	// ClusterSpecifierType determines the cluster specifier type.
	ClusterSpecifierType RouteConfigClusterSpecifierType
	// ClusterName is name of the cluster resource used when the cluster
	// specifier type is set to RouteConfigClusterSpecifierTypeCluster.
	//
	// Default value of "A" is used if left unspecified.
	ClusterName string
	// WeightedClusters is a map from cluster name to weights, and is used when
	// the cluster specifier type is set to
	// RouteConfigClusterSpecifierTypeWeightedCluster.
	//
	// Default value of {"A": 75, "B": 25} is used if left unspecified.
	WeightedClusters map[string]int
	// The below two fields specify the name of the cluster specifier plugin and
	// its configuration, and are used when the cluster specifier type is set to
	// RouteConfigClusterSpecifierTypeClusterSpecifierPlugin. Tests are expected
	// to provide valid values for these fields when appropriate.
	ClusterSpecifierPluginName   string
	ClusterSpecifierPluginConfig *anypb.Any
}

RouteConfigOptions contains options to configure a RouteConfiguration resource.

type SecurityLevel

type SecurityLevel int

SecurityLevel allows the test to control the security level to be used in the resource returned by this package.

const (
	// SecurityLevelNone is used when no security configuration is required.
	SecurityLevelNone SecurityLevel = iota
	// SecurityLevelTLS is used when security configuration corresponding to TLS
	// is required. Only the server presents an identity certificate in this
	// configuration.
	SecurityLevelTLS
	// SecurityLevelMTLS is used when security ocnfiguration corresponding to
	// mTLS is required. Both client and server present identity certificates in
	// this configuration.
	SecurityLevelMTLS
)

type UpdateOptions

type UpdateOptions struct {
	// NodeID is the id of the client to which this update is to be pushed.
	NodeID string
	// Endpoints, Clusters, Routes, and Listeners are the updated list of xds
	// resources for the server.  All must be provided with each Update.
	Endpoints []*v3endpointpb.ClusterLoadAssignment
	Clusters  []*v3clusterpb.Cluster
	Routes    []*v3routepb.RouteConfiguration
	Listeners []*v3listenerpb.Listener
	// SkipValidation indicates whether we want to skip validation (by not
	// calling snapshot.Consistent()). It can be useful for negative tests,
	// where we send updates that the client will NACK.
	SkipValidation bool
}

UpdateOptions wraps parameters to be passed to the Update() method.

func DefaultClientResources

func DefaultClientResources(params ResourceParams) UpdateOptions

DefaultClientResources returns a set of resources (LDS, RDS, CDS, EDS) for a client to generically connect to one server.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL