Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 40 additions & 25 deletions src/precompile.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,36 +10,51 @@ try
# Doesn't seem to be needed here, and might not be safe to call twice (here and during runtime)
# ConnectionRequest.__init__()

gzip_data(data::String) = read(GzipCompressorStream(IOBuffer(data)))
# First try a real internet URL because the fallback of seting up a local server
# may trigger firewall warnings
internet_success = false
@compile_workload begin
try
HTTP.get("https://httpbin.org/status/200"; readtimeout=5);
internet_success = true
catch
# Internet request failed, will fallback to local server
end
end

# random port in the dynamic/private range (49152–65535) which are are
# least likely to be used by well-known services
_port = 57813
# Only set up local server if internet request failed
if !internet_success
gzip_data(data::String) = read(GzipCompressorStream(IOBuffer(data)))

cert, key = joinpath.(@__DIR__, "../test", "resources", ("cert.pem", "key.pem"))
sslconfig = MbedTLS.SSLConfig(cert, key)
# random port in the dynamic/private range (49152–65535) which are are
# least likely to be used by well-known services
_port = 57813

server = HTTP.serve!("0.0.0.0", _port; verbose = -1, listenany=true, sslconfig=sslconfig) do req
HTTP.Response(200, ["Content-Encoding" => "gzip"], gzip_data("dummy response"))
end
try
# listenany allows changing port if that one is already in use, so check the actual port
_port = HTTP.port(server)
url = "https://localhost:$_port"

env = ["JULIA_NO_VERIFY_HOSTS" => "localhost",
"JULIA_SSL_NO_VERIFY_HOSTS" => nothing,
"JULIA_ALWAYS_VERIFY_HOSTS" => nothing]

@compile_workload begin
withenv(env...) do
HTTP.get(url);
cert, key = joinpath.(@__DIR__, "../test", "resources", ("cert.pem", "key.pem"))
sslconfig = MbedTLS.SSLConfig(cert, key)

server = HTTP.serve!("0.0.0.0", _port; verbose = -1, listenany=true, sslconfig=sslconfig) do req
HTTP.Response(200, ["Content-Encoding" => "gzip"], gzip_data("dummy response"))
end
try
# listenany allows changing port if that one is already in use, so check the actual port
_port = HTTP.port(server)
url = "https://localhost:$_port"

env = ["JULIA_NO_VERIFY_HOSTS" => "localhost",
"JULIA_SSL_NO_VERIFY_HOSTS" => nothing,
"JULIA_ALWAYS_VERIFY_HOSTS" => nothing]

@compile_workload begin
withenv(env...) do
HTTP.get(url);
end
end
finally
HTTP.forceclose(server)
yield() # needed on 1.9 to avoid some issue where it seems a task doesn't stop before serialization
server = nothing
end
finally
HTTP.forceclose(server)
yield() # needed on 1.9 to avoid some issue where it seems a task doesn't stop before serialization
server = nothing
end
end
catch e
Expand Down
Loading