mirror of https://github.com/grpc/grpc-go.git
85 lines
2.8 KiB
Go
85 lines
2.8 KiB
Go
/*
|
|
*
|
|
* Copyright 2021 gRPC authors.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*/
|
|
|
|
package e2e
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/envoyproxy/go-control-plane/pkg/wellknown"
|
|
"google.golang.org/protobuf/proto"
|
|
"google.golang.org/protobuf/types/known/anypb"
|
|
|
|
v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
|
|
v3listenerpb "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3"
|
|
v3routerpb "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/router/v3"
|
|
v3httppb "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3"
|
|
)
|
|
|
|
const (
|
|
// ClientSideCertProviderInstance is the certificate provider instance name
|
|
// used in the Cluster resource on the client side.
|
|
ClientSideCertProviderInstance = "client-side-certificate-provider-instance"
|
|
)
|
|
|
|
// RouterHTTPFilter is the HTTP Filter configuration for the Router filter.
|
|
var RouterHTTPFilter = HTTPFilter("router", &v3routerpb.Router{})
|
|
|
|
// DefaultClientListener returns a basic xds Listener resource to be used on
|
|
// the client side.
|
|
func DefaultClientListener(target, routeName string) *v3listenerpb.Listener {
|
|
hcm := marshalAny(&v3httppb.HttpConnectionManager{
|
|
RouteSpecifier: &v3httppb.HttpConnectionManager_Rds{Rds: &v3httppb.Rds{
|
|
ConfigSource: &v3corepb.ConfigSource{
|
|
ConfigSourceSpecifier: &v3corepb.ConfigSource_Ads{Ads: &v3corepb.AggregatedConfigSource{}},
|
|
},
|
|
RouteConfigName: routeName,
|
|
}},
|
|
HttpFilters: []*v3httppb.HttpFilter{HTTPFilter("router", &v3routerpb.Router{})}, // router fields are unused by grpc
|
|
})
|
|
return &v3listenerpb.Listener{
|
|
Name: target,
|
|
ApiListener: &v3listenerpb.ApiListener{ApiListener: hcm},
|
|
FilterChains: []*v3listenerpb.FilterChain{{
|
|
Name: "filter-chain-name",
|
|
Filters: []*v3listenerpb.Filter{{
|
|
Name: wellknown.HTTPConnectionManager,
|
|
ConfigType: &v3listenerpb.Filter_TypedConfig{TypedConfig: hcm},
|
|
}},
|
|
}},
|
|
}
|
|
}
|
|
|
|
func marshalAny(m proto.Message) *anypb.Any {
|
|
a, err := anypb.New(m)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("anypb.New(%+v) failed: %v", m, err))
|
|
}
|
|
return a
|
|
}
|
|
|
|
// HTTPFilter constructs an xds HttpFilter with the provided name and config.
|
|
func HTTPFilter(name string, config proto.Message) *v3httppb.HttpFilter {
|
|
return &v3httppb.HttpFilter{
|
|
Name: name,
|
|
ConfigType: &v3httppb.HttpFilter_TypedConfig{
|
|
TypedConfig: marshalAny(config),
|
|
},
|
|
}
|
|
}
|