Browse Source

Fix h2spec "invalid preface sequence" test

Introduce a currently undocumented option to allow disabling
cowboy_http when using a clear listener.
Loïc Hoguin 5 years ago
parent
commit
a8a2689727
2 changed files with 12 additions and 1 deletions
  1. 10 1
      src/cowboy_clear.erl
  2. 2 0
      test/h2spec_SUITE.erl

+ 10 - 1
src/cowboy_clear.erl

@@ -41,7 +41,16 @@ connection_process(Parent, Ref, Transport, Opts) ->
 			undefined
 	end,
 	{ok, Socket} = ranch:handshake(Ref),
-	init(Parent, Ref, Socket, Transport, ProxyInfo, Opts, cowboy_http).
+	%% Use cowboy_http2 directly only when 'http' is missing.
+	%% Otherwise switch to cowboy_http2 from cowboy_http.
+	%%
+	%% @todo Extend this option to cowboy_tls and allow disabling
+	%% the switch to cowboy_http2 in cowboy_http. Also document it.
+	Protocol = case maps:get(protocols, Opts, [http2, http]) of
+		[http2] -> cowboy_http2;
+		[_|_] -> cowboy_http
+	end,
+	init(Parent, Ref, Socket, Transport, ProxyInfo, Opts, Protocol).
 
 init(Parent, Ref, Socket, Transport, ProxyInfo, Opts, Protocol) ->
 	_ = case maps:get(connection_type, Opts, supervisor) of

+ 2 - 0
test/h2spec_SUITE.erl

@@ -36,6 +36,8 @@ init_per_suite(Config) ->
 					cowboy_test:init_http(h2spec, #{
 						env => #{dispatch => init_dispatch()},
 						max_concurrent_streams => 100,
+						%% This test suite expects an HTTP/2-only connection.
+						protocols => [http2],
 						%% Disable the DATA threshold for this test suite.
 						stream_window_data_threshold => 0
 					}, Config)