Skip to content

Commit fc9ef7d

Browse files
committed
Address feedback and add unit tests
Signed-off-by: Rajat Vig <rvig@etsy.com>
1 parent f343167 commit fc9ef7d

File tree

2 files changed

+111
-1
lines changed

2 files changed

+111
-1
lines changed

internal/envoy/v3/listener.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ func (b *httpConnectionManagerBuilder) Get() *envoy_config_listener_v3.Filter {
618618
}
619619

620620
// Assign http2Options only if it has been modified
621-
if b.http2MaxConcurrentStreams != nil {
621+
if b.http2MaxConcurrentStreams != nil || b.enableWebsockets {
622622
cm.Http2ProtocolOptions = http2Options
623623
}
624624

internal/envoy/v3/listener_test.go

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,7 @@ func TestHTTPConnectionManager(t *testing.T) {
676676
stripTrailingHostDot bool
677677
maxRequestsPerConnection *uint32
678678
http2MaxConcurrentStreams *uint32
679+
enableWebsockets bool
679680
want *envoy_config_listener_v3.Filter
680681
}{
681682
"default": {
@@ -1518,6 +1519,114 @@ func TestHTTPConnectionManager(t *testing.T) {
15181519
},
15191520
},
15201521
},
1522+
"websockets enabled without http2MaxConcurrentStreams": {
1523+
routename: "default/kuard",
1524+
accesslogger: FileAccessLogEnvoy("/dev/stdout", "", nil, contour_v1alpha1.LogLevelInfo),
1525+
enableWebsockets: true,
1526+
want: &envoy_config_listener_v3.Filter{
1527+
Name: wellknown.HTTPConnectionManager,
1528+
ConfigType: &envoy_config_listener_v3.Filter_TypedConfig{
1529+
TypedConfig: protobuf.MustMarshalAny(&envoy_filter_network_http_connection_manager_v3.HttpConnectionManager{
1530+
StatPrefix: "default/kuard",
1531+
RouteSpecifier: &envoy_filter_network_http_connection_manager_v3.HttpConnectionManager_Rds{
1532+
Rds: &envoy_filter_network_http_connection_manager_v3.Rds{
1533+
RouteConfigName: "default/kuard",
1534+
ConfigSource: &envoy_config_core_v3.ConfigSource{
1535+
ResourceApiVersion: envoy_config_core_v3.ApiVersion_V3,
1536+
ConfigSourceSpecifier: &envoy_config_core_v3.ConfigSource_ApiConfigSource{
1537+
ApiConfigSource: &envoy_config_core_v3.ApiConfigSource{
1538+
ApiType: envoy_config_core_v3.ApiConfigSource_GRPC,
1539+
TransportApiVersion: envoy_config_core_v3.ApiVersion_V3,
1540+
GrpcServices: []*envoy_config_core_v3.GrpcService{{
1541+
TargetSpecifier: &envoy_config_core_v3.GrpcService_EnvoyGrpc_{
1542+
EnvoyGrpc: &envoy_config_core_v3.GrpcService_EnvoyGrpc{
1543+
ClusterName: "contour",
1544+
Authority: "contour",
1545+
},
1546+
},
1547+
}},
1548+
},
1549+
},
1550+
},
1551+
},
1552+
},
1553+
HttpFilters: defaultHTTPFilters,
1554+
HttpProtocolOptions: &envoy_config_core_v3.Http1ProtocolOptions{
1555+
AcceptHttp_10: true,
1556+
},
1557+
CommonHttpProtocolOptions: &envoy_config_core_v3.HttpProtocolOptions{},
1558+
Http2ProtocolOptions: &envoy_config_core_v3.Http2ProtocolOptions{
1559+
AllowConnect: true,
1560+
},
1561+
UpgradeConfigs: []*envoy_filter_network_http_connection_manager_v3.HttpConnectionManager_UpgradeConfig{
1562+
{
1563+
UpgradeType: "websocket",
1564+
},
1565+
},
1566+
AccessLog: FileAccessLogEnvoy("/dev/stdout", "", nil, contour_v1alpha1.LogLevelInfo),
1567+
UseRemoteAddress: wrapperspb.Bool(true),
1568+
NormalizePath: wrapperspb.Bool(true),
1569+
PreserveExternalRequestId: true,
1570+
MergeSlashes: false,
1571+
}),
1572+
},
1573+
},
1574+
},
1575+
"websockets enabled with http2MaxConcurrentStreams": {
1576+
routename: "default/kuard",
1577+
accesslogger: FileAccessLogEnvoy("/dev/stdout", "", nil, contour_v1alpha1.LogLevelInfo),
1578+
http2MaxConcurrentStreams: ptr.To(uint32(50)),
1579+
enableWebsockets: true,
1580+
want: &envoy_config_listener_v3.Filter{
1581+
Name: wellknown.HTTPConnectionManager,
1582+
ConfigType: &envoy_config_listener_v3.Filter_TypedConfig{
1583+
TypedConfig: protobuf.MustMarshalAny(&envoy_filter_network_http_connection_manager_v3.HttpConnectionManager{
1584+
StatPrefix: "default/kuard",
1585+
RouteSpecifier: &envoy_filter_network_http_connection_manager_v3.HttpConnectionManager_Rds{
1586+
Rds: &envoy_filter_network_http_connection_manager_v3.Rds{
1587+
RouteConfigName: "default/kuard",
1588+
ConfigSource: &envoy_config_core_v3.ConfigSource{
1589+
ResourceApiVersion: envoy_config_core_v3.ApiVersion_V3,
1590+
ConfigSourceSpecifier: &envoy_config_core_v3.ConfigSource_ApiConfigSource{
1591+
ApiConfigSource: &envoy_config_core_v3.ApiConfigSource{
1592+
ApiType: envoy_config_core_v3.ApiConfigSource_GRPC,
1593+
TransportApiVersion: envoy_config_core_v3.ApiVersion_V3,
1594+
GrpcServices: []*envoy_config_core_v3.GrpcService{{
1595+
TargetSpecifier: &envoy_config_core_v3.GrpcService_EnvoyGrpc_{
1596+
EnvoyGrpc: &envoy_config_core_v3.GrpcService_EnvoyGrpc{
1597+
ClusterName: "contour",
1598+
Authority: "contour",
1599+
},
1600+
},
1601+
}},
1602+
},
1603+
},
1604+
},
1605+
},
1606+
},
1607+
HttpFilters: defaultHTTPFilters,
1608+
HttpProtocolOptions: &envoy_config_core_v3.Http1ProtocolOptions{
1609+
AcceptHttp_10: true,
1610+
},
1611+
CommonHttpProtocolOptions: &envoy_config_core_v3.HttpProtocolOptions{},
1612+
Http2ProtocolOptions: &envoy_config_core_v3.Http2ProtocolOptions{
1613+
MaxConcurrentStreams: wrapperspb.UInt32(50),
1614+
AllowConnect: true,
1615+
},
1616+
UpgradeConfigs: []*envoy_filter_network_http_connection_manager_v3.HttpConnectionManager_UpgradeConfig{
1617+
{
1618+
UpgradeType: "websocket",
1619+
},
1620+
},
1621+
AccessLog: FileAccessLogEnvoy("/dev/stdout", "", nil, contour_v1alpha1.LogLevelInfo),
1622+
UseRemoteAddress: wrapperspb.Bool(true),
1623+
NormalizePath: wrapperspb.Bool(true),
1624+
PreserveExternalRequestId: true,
1625+
MergeSlashes: false,
1626+
}),
1627+
},
1628+
},
1629+
},
15211630
}
15221631
for name, tc := range tests {
15231632
t.Run(name, func(t *testing.T) {
@@ -1539,6 +1648,7 @@ func TestHTTPConnectionManager(t *testing.T) {
15391648
ForwardClientCertificate(tc.forwardClientCertificate).
15401649
MaxRequestsPerConnection(tc.maxRequestsPerConnection).
15411650
HTTP2MaxConcurrentStreams(tc.http2MaxConcurrentStreams).
1651+
EnableWebsockets(tc.enableWebsockets).
15421652
DefaultFilters().
15431653
Get()
15441654

0 commit comments

Comments
 (0)