Documentation
¶
Index ¶
- Constants
- Variables
- func GetUnique(slice []string) []string
- func NewFakeXDSServer(cert *x509.Certificate, requestsCh chan xds_discovery.DiscoveryRequest, ...) (xds_discovery.AggregatedDiscoveryService_StreamAggregatedResourcesServer, ...)
- func NewMockAddress(address string) net.Addr
- func NewMockAuthInfo(cert *x509.Certificate) credentials.AuthInfo
- func NewPodTestFixture(namespace string, podName string) corev1.Pod
- func NewPodTestFixtureWithOptions(namespace string, podName string, serviceAccountName string) corev1.Pod
- func NewServiceFixture(serviceName, namespace string, selectors map[string]string) *corev1.Service
- type XDSServer
- func (s *XDSServer) Context() context.Context
- func (s *XDSServer) Recv() (*xds_discovery.DiscoveryRequest, error)
- func (s *XDSServer) RecvMsg(m interface{}) error
- func (s *XDSServer) Send(r *xds_discovery.DiscoveryResponse) error
- func (s *XDSServer) SendHeader(metadata.MD) error
- func (s *XDSServer) SendMsg(m interface{}) error
- func (s *XDSServer) SetHeader(metadata.MD) error
- func (s *XDSServer) SetTrailer(metadata.MD)
Constants ¶
const ( // Namespace is the commonly used namespace. Namespace = "default" // PodName is the name of the pod commonly used namespace. PodName = "pod-name" // BookstoreServiceName is the name of the bookstore service. BookstoreServiceName = "bookstore" // BookstoreApexServiceName that have been is the name of the bookstore service, which is then split into other services. BookstoreApexServiceName = "bookstore-apex" // BookbuyerServiceName is the name of the bookbuyer service BookbuyerServiceName = "bookbuyer" // BookwarehouseServiceName is the name of the bookwarehouse service BookwarehouseServiceName = "bookwarehouse" // BookstoreServiceAccountName is the name of the bookstore service account BookstoreServiceAccountName = "bookstore" // BookbuyerServiceAccountName is the name of the bookbuyer service account BookbuyerServiceAccountName = "bookbuyer" // TrafficTargetName is the name of the traffic target SMI object. TrafficTargetName = "bookbuyer-access-bookstore" // BuyBooksMatchName is the name of the match object. BuyBooksMatchName = "buy-books" // SellBooksMatchName is the name of the match object. SellBooksMatchName = "sell-books" // WildcardWithHeadersMatchName is the name of the match object. WildcardWithHeadersMatchName = "allow-everything-on-header" // Weight is the percentage of the traffic to be sent this way in a traffic split scenario. Weight = 100 // RouteGroupName is the name of the route group SMI object. RouteGroupName = "bookstore-service-routes" // BookstoreBuyPath is the path to the bookstore. BookstoreBuyPath = "/buy" // BookstoreSellPath is the path to the bookstore. BookstoreSellPath = "/sell" // SelectorKey is a Pod selector key constant. SelectorKey = "app" // SelectorValue is a Pod selector value constant. SelectorValue = "frontend" // EnvoyUID is the unique ID of the Envoy used for unit tests. EnvoyUID = "A-B-C-D" // ServicePort is the port used by a service ServicePort = 8888 // ServiceIP is the IP used by a service ServiceIP = "8.8.8.8" // HTTPUserAgent is the User Agent in the HTTP header HTTPUserAgent = "test-UA" )
Variables ¶
var ( // BookstoreService is the bookstore service. BookstoreService = service.MeshService{ Namespace: Namespace, Name: BookstoreServiceName, } // BookbuyerService is the bookbuyer service. BookbuyerService = service.MeshService{ Namespace: Namespace, Name: BookbuyerServiceName, } // BookstoreApexService is the bookstore-apex service BookstoreApexService = service.MeshService{ Namespace: Namespace, Name: BookstoreApexServiceName, } // BookwarehouseService is the bookwarehouse service. BookwarehouseService = service.MeshService{ Namespace: Namespace, Name: BookwarehouseServiceName, } // BookstoreBuyHTTPRoute is an HTTP route to buy books BookstoreBuyHTTPRoute = trafficpolicy.HTTPRoute{ PathRegex: BookstoreBuyPath, Methods: []string{"GET"}, Headers: map[string]string{ "user-agent": HTTPUserAgent, }, } // BookstoreSellHTTPRoute is an HTTP route to sell books BookstoreSellHTTPRoute = trafficpolicy.HTTPRoute{ PathRegex: BookstoreSellPath, Methods: []string{"GET"}, Headers: map[string]string{ "user-agent": HTTPUserAgent, }, } // Endpoint is an endpoint object. Endpoint = endpoint.Endpoint{ IP: net.ParseIP(ServiceIP), Port: endpoint.Port(ServicePort), } // BookstoreTrafficPolicy is a traffic policy SMI object. BookstoreTrafficPolicy = trafficpolicy.TrafficTarget{ Name: fmt.Sprintf("%s:default/bookbuyer->default/bookstore", TrafficTargetName), Destination: BookstoreService, Source: BookbuyerService, HTTPRoutes: []trafficpolicy.HTTPRoute{ { PathRegex: BookstoreBuyPath, Methods: []string{"GET"}, Headers: map[string]string{ "user-agent": HTTPUserAgent, }, }, { PathRegex: BookstoreSellPath, Methods: []string{"GET"}, Headers: map[string]string{ "user-agent": HTTPUserAgent, }, }, }, } // BookstoreApexTrafficPolicy is a traffic policy SMI object. BookstoreApexTrafficPolicy = trafficpolicy.TrafficTarget{ Name: fmt.Sprintf("%s:default/bookbuyer->default/bookstore-apex", TrafficTargetName), Destination: BookstoreApexService, Source: BookbuyerService, HTTPRoutes: []trafficpolicy.HTTPRoute{ { PathRegex: BookstoreBuyPath, Methods: []string{"GET"}, Headers: map[string]string{ "user-agent": HTTPUserAgent, }, }, { PathRegex: BookstoreSellPath, Methods: []string{"GET"}, Headers: map[string]string{ "user-agent": HTTPUserAgent, }, }, }, } // TrafficSplit is a traffic split SMI object. TrafficSplit = v1alpha2.TrafficSplit{ ObjectMeta: v1.ObjectMeta{ Namespace: Namespace, }, Spec: v1alpha2.TrafficSplitSpec{ Service: BookstoreApexServiceName, Backends: []v1alpha2.TrafficSplitBackend{ { Service: BookstoreServiceName, Weight: Weight, }, }, }, } // TrafficTarget is a traffic target SMI object. TrafficTarget = target.TrafficTarget{ TypeMeta: v1.TypeMeta{ APIVersion: "access.smi-spec.io/v1alpha2", Kind: "TrafficTarget", }, ObjectMeta: v1.ObjectMeta{ Name: TrafficTargetName, Namespace: "default", }, Spec: target.TrafficTargetSpec{ Destination: target.IdentityBindingSubject{ Kind: "Name", Name: BookstoreServiceAccountName, Namespace: "default", }, Sources: []target.IdentityBindingSubject{{ Kind: "Name", Name: BookbuyerServiceAccountName, Namespace: "default", }}, Rules: []target.TrafficTargetRule{{ Kind: "HTTPRouteGroup", Name: RouteGroupName, Matches: []string{BuyBooksMatchName, SellBooksMatchName}, }}, }, } // RoutePolicyMap is a map of a key to a route policy SMI object. RoutePolicyMap = map[trafficpolicy.TrafficSpecName]map[trafficpolicy.TrafficSpecMatchName]trafficpolicy.HTTPRoute{ trafficpolicy.TrafficSpecName(fmt.Sprintf("HTTPRouteGroup/%s/%s", Namespace, RouteGroupName)): { trafficpolicy.TrafficSpecMatchName(BuyBooksMatchName): BookstoreBuyHTTPRoute, trafficpolicy.TrafficSpecMatchName(SellBooksMatchName): BookstoreSellHTTPRoute, }, } // BookstoreServiceAccount is a namespaced service account. BookstoreServiceAccount = service.K8sServiceAccount{ Namespace: Namespace, Name: BookstoreServiceAccountName, } // BookbuyerServiceAccount is a namespaced bookbuyer account. BookbuyerServiceAccount = service.K8sServiceAccount{ Namespace: Namespace, Name: BookbuyerServiceAccountName, } // WeightedService is a service with a weight used for traffic split. WeightedService = service.WeightedService{ Service: service.MeshService{ Namespace: Namespace, Name: BookstoreServiceName, }, Weight: Weight, RootService: BookstoreApexServiceName, } // HTTPRouteGroup is the HTTP route group SMI object. HTTPRouteGroup = spec.HTTPRouteGroup{ TypeMeta: v1.TypeMeta{ APIVersion: "specs.smi-spec.io/v1alpha2", Kind: "HTTPRouteGroup", }, ObjectMeta: v1.ObjectMeta{ Namespace: "default", Name: RouteGroupName, }, Spec: spec.HTTPRouteGroupSpec{ Matches: []spec.HTTPMatch{ { Name: BuyBooksMatchName, PathRegex: BookstoreBuyPath, Methods: []string{"GET"}, Headers: map[string]string{ "user-agent": HTTPUserAgent, }, }, { Name: SellBooksMatchName, PathRegex: BookstoreSellPath, Methods: []string{"GET"}, Headers: map[string]string{ "user-agent": HTTPUserAgent, }, }, { Name: WildcardWithHeadersMatchName, Headers: map[string]string{ "user-agent": HTTPUserAgent, }, }, }, }, } // TCPRoute is a TCPRoute SMI resource TCPRoute = spec.TCPRoute{ TypeMeta: v1.TypeMeta{ APIVersion: "specs.smi-spec.io/v1alpha2", Kind: "TCPRoute", }, ObjectMeta: v1.ObjectMeta{ Namespace: "default", Name: "tcp-route", }, Spec: spec.TCPRouteSpec{}, } // Backpressure is an experimental Backpressure policy. // This will be replaced by an SMI Spec when it is ready. Backpressure = backpressure.Backpressure{ Spec: backpressure.BackpressureSpec{ MaxConnections: 123, }, } )
Functions ¶
func GetUnique ¶ added in v0.4.0
GetUnique gets a slice of strings and returns a slice with the unique strings
func NewFakeXDSServer ¶
func NewFakeXDSServer(cert *x509.Certificate, requestsCh chan xds_discovery.DiscoveryRequest, responsesCh chan xds_discovery.DiscoveryResponse) (xds_discovery.AggregatedDiscoveryService_StreamAggregatedResourcesServer, *[]*xds_discovery.DiscoveryResponse)
NewFakeXDSServer returns a new XDSServer and implements AggregatedDiscoveryService_StreamAggregatedResourcesServer
func NewMockAddress ¶
NewMockAddress creates a new net.Addr
func NewMockAuthInfo ¶
func NewMockAuthInfo(cert *x509.Certificate) credentials.AuthInfo
NewMockAuthInfo creates a new credentials.AuthInfo
func NewPodTestFixture ¶
NewPodTestFixture creates a new Pod struct for testing.
Types ¶
type XDSServer ¶
type XDSServer struct {
// contains filtered or unexported fields
}
XDSServer implements AggregatedDiscoveryService_StreamAggregatedResourcesServer
func (*XDSServer) Recv ¶
func (s *XDSServer) Recv() (*xds_discovery.DiscoveryRequest, error)
Recv implements AggregatedDiscoveryService_StreamAggregatedResourcesServer
func (*XDSServer) RecvMsg ¶
RecvMsg blocks until it receives a message into m or the stream is done. It returns io.EOF when the client has performed a CloseSend. On any non-EOF error, the stream is aborted and the error contains the RPC status.
It is safe to have a goroutine calling SendMsg and another goroutine calling RecvMsg on the same stream at the same time, but it is not safe to call RecvMsg on the same stream in different goroutines.
func (*XDSServer) Send ¶
func (s *XDSServer) Send(r *xds_discovery.DiscoveryResponse) error
Send implements AggregatedDiscoveryService_StreamAggregatedResourcesServer
func (*XDSServer) SendHeader ¶
SendHeader sends the header metadata. The provided md and headers set by SetHeader() will be sent. It fails if called multiple times.
func (*XDSServer) SendMsg ¶
SendMsg sends a message. On error, SendMsg aborts the stream and the error is returned directly.
SendMsg blocks until:
- There is sufficient flow control to schedule m with the transport, or
- The stream is done, or
- The stream breaks.
SendMsg does not wait until the message is received by the client. An untimely stream closure may result in lost messages.
It is safe to have a goroutine calling SendMsg and another goroutine calling RecvMsg on the same stream at the same time, but it is not safe to call SendMsg on the same stream in different goroutines.
func (*XDSServer) SetHeader ¶
SetHeader sets the header metadata. It may be called multiple times. When call multiple times, all the provided metadata will be merged. All the metadata will be sent out when one of the following happens:
- ServerStream.SendHeader() is called;
- The first response is sent out;
- An RPC status is sent out (error or success).
func (*XDSServer) SetTrailer ¶
SetTrailer sets the trailer metadata which will be sent with the RPC status. When called more than once, all the provided metadata will be merged.