Skip to content

Commit 7eafd78

Browse files
committed
Add test for :http1 + :http2
1 parent 573de8d commit 7eafd78

File tree

5 files changed

+101
-2
lines changed

5 files changed

+101
-2
lines changed

test/req_test.exs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
defmodule ReqTest do
22
use ExUnit.Case, async: true
3-
import TestHelper, only: [start_http_server: 1]
3+
import TestHelper, only: [start_http_server: 1, start_https_server: 1]
44

55
doctest Req,
66
only: [
@@ -96,4 +96,21 @@ defmodule ReqTest do
9696
resp = Req.get!(origin_url, into: :self)
9797
assert Req.put!(echo_url, body: resp.body).body == "foobarbaz"
9898
end
99+
100+
test "http1 + http2" do
101+
%{url: url} =
102+
start_https_server(fn conn ->
103+
assert Plug.Conn.get_http_protocol(conn) == :"HTTP/2"
104+
Plug.Conn.send_resp(conn, 200, "ok")
105+
end)
106+
107+
assert Req.get!(
108+
url,
109+
connect_options: [
110+
transport_opts: [cacertfile: "#{__DIR__}/support/ca.pem"],
111+
protocols: [:http1, :http2]
112+
],
113+
retry: false
114+
).body == "ok"
115+
end
99116
end

test/support/ca.pem

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICyjCCAbICCQCRKhJFmW6v0zANBgkqhkiG9w0BAQsFADAnMQswCQYDVQQGEwJV
3+
UzEYMBYGA1UEAwwPRXhhbXBsZS1Sb290LUNBMB4XDTIxMDYwNjAzMDcxMVoXDTI3
4+
MDExNDAzMDcxMVowJzELMAkGA1UEBhMCVVMxGDAWBgNVBAMMD0V4YW1wbGUtUm9v
5+
dC1DQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOdFzns6VXOtAsVw
6+
CxAVWFbfEEDzzJemaCmcnW7xxcPu/NutEKbrZzDPUW8FcRTK90i81rffcT12hEFV
7+
k66zVWVOxYFAGxqYhvrOaJlehwlWdmGCl2740UdsvXsziNXuKFYmZi3/8+rV4UJY
8+
s/Ipv61a8x/2KagCYykr2G03iAiF/C2j//xpjrUfSuGMu/lapDXxQfDsAGtd7qSc
9+
HHEMzBvLq8cLuwVJFQEBqvEU3Nkn3gAeW7gC6myGRH3c68mbWmY/r5RcS7KdFjsD
10+
BVMGZXOtzLozXzQqI/G4DmTxKvYqFN/pjz9PZ8vQFkr9ddrC09kNmxCcCbC3WQfa
11+
3FihVM0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA1oErpO9Co61Wb+6mqYyFMZpy
12+
Bedyf3SIQzQlDig+R/+avs7ZMmZtu0A7LjMPdgpfrJhlBK/1ThkNRYRsMbnyku+F
13+
qC1XEnrfRG9PXYcxigH6DLTaHSfYVE5QQFQAZequiQb6K0LVWUcuPVkzZNGMl3RR
14+
qb9/pM2hCwwNApnZYi4SzH6tfhF6OFi5dNexCEqqtKd00ZZh09ERhnqZpR62jQS/
15+
SERs6ZS9K9D+A9f/4cRSJOFB9gSfil0sqxBC5GhO6Bse5HEprlPkHPeoHMD1Mj1K
16+
zH1twf4Amnz3p9OGRZZ6qspkXhT+8gTIfzlcX/wJpv7c53uI/OAIxRwogI0w7Q==
17+
-----END CERTIFICATE-----

test/support/cert.pem

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDijCCAnKgAwIBAgIJAI8sEm5tQlsrMA0GCSqGSIb3DQEBCwUAMCcxCzAJBgNV
3+
BAYTAlVTMRgwFgYDVQQDDA9FeGFtcGxlLVJvb3QtQ0EwHhcNMjEwNjA2MDMwODMw
4+
WhcNNDgxMDIyMDMwODMwWjBtMQswCQYDVQQGEwJVUzESMBAGA1UECAwJWW91clN0
5+
YXRlMREwDwYDVQQHDAhZb3VyQ2l0eTEdMBsGA1UECgwURXhhbXBsZS1DZXJ0aWZp
6+
Y2F0ZXMxGDAWBgNVBAMMD2xvY2FsaG9zdC5sb2NhbDCCASIwDQYJKoZIhvcNAQEB
7+
BQADggEPADCCAQoCggEBAPN+9Lo3Z1DGmMLzj/5nb+48Wx4Ra4xBooeMyO22IqEu
8+
93y4clasT8YZYoUh283AUUGajZaggia19HKSKAzmu2SFi4fRoqYYtyztsvm2qih2
9+
ORPGOJo0UUE7q5alM4RtgnNoAuPnjZ2eYAMEflt80K0X8TYAAfZ3wvfHEL5y8NDd
10+
8LrBKsSVmE14bq7OzHMNPGuHEsTk/ESjBtJehQkQ1eT02TCgPPudTIky4jkkFQ/F
11+
OiMurScH+GsauKRZqSbhzv8a30FBl/50cTbnQb9KSfg0DjKEbP51NIX+PuSt9KlL
12+
49r7AsKpSNqmpuVGSmInRVx+XOo4Ytt2Deu6lQAUzU8CAwEAAaNzMHEwQQYDVR0j
13+
BDowOKErpCkwJzELMAkGA1UEBhMCVVMxGDAWBgNVBAMMD0V4YW1wbGUtUm9vdC1D
14+
QYIJAJEqEkWZbq/TMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgTwMBQGA1UdEQQNMAuC
15+
CWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAuTlHn/ytxq0QVtvFlEUXfWFi
16+
z0JUxTty7cwXPVVqxIYh5fVip6GYjlJgaQiMPeMneWbne6DtXckLvsje4XrjGeZO
17+
BYrsA4i6Ik6idxw3/AVyncJsNeA8fkEzyxFRUoAOLRrS7pb1EkuakgGuVv3c/gTa
18+
E1bAHzqQyEWW3i2H5hKBSjy5KD61MMcmD006dmypxmwaLmted28cgvqVR9fdU/5p
19+
vl6rnqUxEmTnKzX9LX4NQQR3lodyhj7zMVcL8ozC39YQ15oOSneDtMOweWmMAgE6
20+
idRfFBX/fBaprJKRAR9TGCCXcOO/cA9QTkI31iCdWCuqeCpKHtFSbpI8cehMZQ==
21+
-----END CERTIFICATE-----

test/support/key.pem

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDzfvS6N2dQxpjC
3+
84/+Z2/uPFseEWuMQaKHjMjttiKhLvd8uHJWrE/GGWKFIdvNwFFBmo2WoIImtfRy
4+
kigM5rtkhYuH0aKmGLcs7bL5tqoodjkTxjiaNFFBO6uWpTOEbYJzaALj542dnmAD
5+
BH5bfNCtF/E2AAH2d8L3xxC+cvDQ3fC6wSrElZhNeG6uzsxzDTxrhxLE5PxEowbS
6+
XoUJENXk9NkwoDz7nUyJMuI5JBUPxTojLq0nB/hrGrikWakm4c7/Gt9BQZf+dHE2
7+
50G/Skn4NA4yhGz+dTSF/j7krfSpS+Pa+wLCqUjapqblRkpiJ0VcflzqOGLbdg3r
8+
upUAFM1PAgMBAAECggEAL2mEC5JoKqFQ83zrh9TqRZA5CcTIlTnehNhT831ohswX
9+
YpCjqt7IdcFRnqy2GP0elVCbyz2buh/p5jkxVTnEOVGLlrmqGv9rA3ORSvBXd6N1
10+
f7U0JkqTm8kboyytuFZ+dSxGi8v1lkBVX6ELXZMTKvEjhalAuJYfP5HiX8MPwwti
11+
540zHN4fQ9cgDkpjLyR+g4us1iBtYmbx/+BHeE6tsN5I0dc4Ee/LxXLkBRqNhB4K
12+
g6wWynqLtX12py/TFaBfs8DSMY1IfdCxJDxiahtGCXFokfsQbqBySpLrdx41ela4
13+
IG5qr0u9/XyX4Y6pm4chNxKMwqRRF9bllGXEI2HySQKBgQD/pY43H3gPM/8IMzcT
14+
f3YvBX1KliU26xdbjPGrp+lAsUcAEv0gNmYsr6lUFZNd3RmsqfYR7Rt2GE468i95
15+
gfgRmTXUrDbZKeu92qvZNfd9f3HJYsjcHhSNNtRSYNubjpwniU4zyl78Jjz4jv44
16+
xNjEtmQ//FNTIIaKAr5zQ8lTxQKBgQDz1RoFwkJs38+LfLotjmNcmV7vC4Q4H3ZG
17+
m6mRNTfAiwFy9kbF16d4+fZ/byoHxSAOEjH08sKjQ1koH0moFQaFXWDW7/gwIiq3
18+
ErKO8ZE53uazFGOhNmHMdkdaTwb/Hn5/DKJBBexY/2O8S+tIZchhB0hluiz3QKSo
19+
p/rbcDiqAwKBgQDAXDFrltk/D0/qOqdJm5IxBX9mPR4ZecHkmGRMVpczn3EeRCuF
20+
LompPDA8XdO6QCEOhADtMi2EqftLbWp9kmc3zsHrmf3XYCzLeZvvYCUuoFPdReB/
21+
iH7MVyJiLhFwtlkXgsB+Rds8/gTIvsfZrXyyX8+FOfb0yLeTZ0co8iuuRQKBgCgG
22+
hT0IxGqm2qTlFpK/2uOqcYD//PZRg9LXXqBtgfdjWhuK/dcgLWeYcLQ+hUG9RCPL
23+
LNQuvXCbb5k8eZTTzrw5tdnSjoUoNqbStOjuEo7TXj9rS2d9S9SKXfAfJODgGpe0
24+
dTYDSObbFX4lYDwEKT50OZgpVZRI0j61RGKdK1ANAoGBAKoO8Sbm6O9KTfvgVuQf
25+
t/L1c47JI6GnX1i9JCgQxRapmEYEupt0hRJh36zSvnip+iy8J22useJFtCcxeZUj
26+
XOH1WOWwQn8qDSUPA3PVO3TZb+k4Z8VlIKzrEWHLl56zWPO5Su7AHXseJhY1Z4Bz
27+
WmUvA9kdCmStQ7RMH89NRnh8
28+
-----END PRIVATE KEY-----

test/test_helper.exs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
defmodule TestHelper do
2-
def start_http_server(plug) do
2+
def start_http_server(plug) when is_function(plug, 1) do
33
options = [
44
scheme: :http,
55
port: 0,
@@ -13,6 +13,22 @@ defmodule TestHelper do
1313
%{pid: pid, url: URI.new!("http://localhost:#{port}")}
1414
end
1515

16+
def start_https_server(plug) when is_function(plug, 1) do
17+
options = [
18+
scheme: :https,
19+
port: 0,
20+
plug: fn conn, _ -> plug.(conn) end,
21+
startup_log: false,
22+
http_options: [compress: false],
23+
certfile: "#{__DIR__}/support/cert.pem",
24+
keyfile: "#{__DIR__}/support/key.pem"
25+
]
26+
27+
pid = ExUnit.Callbacks.start_supervised!({Bandit, options})
28+
{:ok, {_ip, port}} = ThousandIsland.listener_info(pid)
29+
%{pid: pid, url: URI.new!("https://localhost:#{port}")}
30+
end
31+
1632
def start_tcp_server(fun) do
1733
{:ok, listen_socket} = :gen_tcp.listen(0, mode: :binary, active: false)
1834
{:ok, port} = :inet.port(listen_socket)

0 commit comments

Comments
 (0)