197
197
import static org .junit .jupiter .api .Assumptions .assumeTrue ;
198
198
199
199
class H2PriorKnowledgeFeatureParityTest {
200
-
201
200
private static final CharSequence [] PROHIBITED_HEADERS = {CONNECTION , KEEP_ALIVE , TRANSFER_ENCODING , UPGRADE ,
202
201
PROXY_CONNECTION };
202
+ private static final String CONNECTION_HEADER1 = "conn1" ;
203
+ private static final String CONNECTION_HEADER2 = "conn2" ;
204
+ private static final String CONNECTION_HEADER3 = "conn3" ;
205
+ private static final String CONNECTION_HEADER4 = "conn4" ;
206
+ private static final CharSequence [] CONNECTION_HEADERS = {CONNECTION_HEADER1 , CONNECTION_HEADER2 ,
207
+ CONNECTION_HEADER3 , CONNECTION_HEADER4 };
203
208
private static final String EXPECT_FAIL_HEADER = "please_fail_expect" ;
204
209
private static final ContextMap .Key <String > K1 = newKey ("k1" , String .class );
205
210
private static final ContextMap .Key <String > K2 = newKey ("k2" , String .class );
@@ -1439,7 +1444,7 @@ protected void initChannel(final Channel ch) {
1439
1444
}, __ -> { }, identity ());
1440
1445
InetSocketAddress serverAddress = (InetSocketAddress ) serverAcceptorChannel .localAddress ();
1441
1446
try (BlockingHttpClient client = forSingleAddress (HostAndPort .of (serverAddress ))
1442
- .protocols (HttpProtocol .HTTP_2 .config )
1447
+ .protocols (HttpProtocol .HTTP_2 .configOtherHeaderFactory )
1443
1448
.enableWireLogging ("servicetalk-tests-wire-logger" , LogLevel .TRACE , () -> true )
1444
1449
.executionStrategy (clientExecutionStrategy )
1445
1450
.buildBlocking ()) {
@@ -1453,7 +1458,7 @@ protected void initChannel(final Channel ch) {
1453
1458
void h2LayerFiltersOutProhibitedH1HeadersOnServerSide () throws Exception {
1454
1459
setUp (DEFAULT , true );
1455
1460
try (ServerContext serverContext = HttpServers .forAddress (localAddress (0 ))
1456
- .protocols (HttpProtocol .HTTP_2 .config )
1461
+ .protocols (HttpProtocol .HTTP_2 .configOtherHeaderFactory )
1457
1462
.enableWireLogging ("servicetalk-tests-wire-logger" , LogLevel .TRACE , () -> true )
1458
1463
.listenBlockingAndAwait ((ctx , request , responseFactory ) -> addProhibitedHeaders (responseFactory .ok ()));
1459
1464
BlockingHttpClient client = forSingleAddress (serverHostAndPort (serverContext ))
@@ -1467,11 +1472,21 @@ void h2LayerFiltersOutProhibitedH1HeadersOnServerSide() throws Exception {
1467
1472
assertThat ("Unexpected headerName: " + headerName ,
1468
1473
response .headers ().contains (headerName ), is (false ));
1469
1474
}
1475
+ for (CharSequence headerName : CONNECTION_HEADERS ) {
1476
+ assertThat ("Unexpected headerName: " + headerName ,
1477
+ response .headers ().contains (headerName ), is (false ));
1478
+ }
1470
1479
}
1471
1480
}
1472
1481
1473
1482
private static <T extends HttpMetaData > T addProhibitedHeaders (T metaData ) {
1474
1483
metaData .addHeader (CONNECTION , UPGRADE )
1484
+ .addHeader (CONNECTION , CONNECTION_HEADER1 + "," + CONNECTION_HEADER2 )
1485
+ .addHeader (CONNECTION , CONNECTION_HEADER3 + ", " + CONNECTION_HEADER4 )
1486
+ .addHeader (CONNECTION_HEADER1 , "foo" )
1487
+ .addHeader (CONNECTION_HEADER2 , "bar" )
1488
+ .addHeader (CONNECTION_HEADER3 , "baz" )
1489
+ .addHeader (CONNECTION_HEADER4 , "boo" )
1475
1490
.addHeader (KEEP_ALIVE , "timeout=5" )
1476
1491
.addHeader (TRANSFER_ENCODING , CHUNKED )
1477
1492
.addHeader (UPGRADE , "foo/2" )
@@ -2072,7 +2087,17 @@ private static boolean allHeadersSanitized(Http2Headers headers) {
2072
2087
return !headers .contains (HttpHeaderNames .CONNECTION ) && !headers .contains (HttpHeaderNames .KEEP_ALIVE )
2073
2088
&& !headers .contains (HttpHeaderNames .TRANSFER_ENCODING )
2074
2089
&& !headers .contains (HttpHeaderNames .UPGRADE )
2075
- && !headers .contains (HttpHeaderNames .PROXY_CONNECTION );
2090
+ && !headers .contains (HttpHeaderNames .PROXY_CONNECTION ) &&
2091
+ allConnHeadersSanitized (headers );
2092
+ }
2093
+
2094
+ private static boolean allConnHeadersSanitized (Http2Headers headers ) {
2095
+ for (CharSequence headerName : CONNECTION_HEADERS ) {
2096
+ if (headers .contains (headerName )) {
2097
+ return false ;
2098
+ }
2099
+ }
2100
+ return true ;
2076
2101
}
2077
2102
}
2078
2103
0 commit comments