Repository: JuliaLang/julia
File: test/download_exec.jl (Julia)

Code before:
# This file is a part of Julia. License is MIT: https://julialang.org/license

module TestDownload

using Test

mktempdir() do temp_dir
    url = try
        download("https://httpbin.julialang.org")
        "https://httpbin.julialang.org"
    catch ex
        bt = catch_backtrace()
        @info "Looks like there is a problem with a JuliaLang mirror of httpbin."
        @info "Trying httpbingo" exception=(ex,bt)
        "https://httpbingo.julialang.org/"
    end
    # Download a file
    file = joinpath(temp_dir, "ip")
    @test download("$url/ip", file) == file
    @test isfile(file)
    @test !isempty(read(file))
    ip = read(file, String)

    # Download an empty file
    empty_file = joinpath(temp_dir, "empty")
    @test download("$url/status/200", empty_file) == empty_file
    @test isfile(empty_file)
    @test isempty(read(empty_file))

    # Make sure that failed downloads do not leave files around
    missing_file = joinpath(temp_dir, "missing")
    @test_throws Exception download("$url/status/404", missing_file)
    @test !isfile(missing_file)

    # Use a TEST-NET (192.0.2.0/24) address which shouldn't be bound
    invalid_host_file = joinpath(temp_dir, "invalid_host")
    @test_throws Exception download("http://192.0.2.1", invalid_host_file)
    @test !isfile(invalid_host_file)
end

end # module

Review comment (suggestion):
Let's start with `httpbingo`, and then fall back to `httpbin`.

```suggestion
    url = try
        download("https://httpbingo.julialang.org")
        "https://httpbingo.julialang.org"
    catch ex
        bt = catch_backtrace()
        @info "Looks like there is a problem with a JuliaLang mirror of httpbingo"
        @info "Trying httpbin" exception=(ex,bt)
        "https://httpbin.julialang.org/"
    end
```

Code after:
# This file is a part of Julia. License is MIT: https://julialang.org/license

module TestDownload

using Test

mktempdir() do temp_dir
    url = try
        download("https://httpbingo.julialang.org")
        "https://httpbingo.julialang.org"
    catch ex
        bt = catch_backtrace()
        @info "Looks like there is a problem with a JuliaLang mirror of httpbingo"
        @info "Trying httpbin" exception=(ex,bt)
        "https://httpbin.julialang.org/"
    end
    # Download a file
    file = joinpath(temp_dir, "ip")
    @test download("$url/ip", file) == file
    @test isfile(file)
    @test !isempty(read(file))
    ip = read(file, String)

    # Download an empty file
    empty_file = joinpath(temp_dir, "empty")
    @test download("$url/status/200", empty_file) == empty_file
    @test isfile(empty_file)
    @test isempty(read(empty_file))

    # Make sure that failed downloads do not leave files around
    missing_file = joinpath(temp_dir, "missing")
    @test_throws Exception download("$url/status/404", missing_file)
    @test !isfile(missing_file)

    # Use a TEST-NET (192.0.2.0/24) address which shouldn't be bound
    invalid_host_file = joinpath(temp_dir, "invalid_host")
    @test_throws Exception download("http://192.0.2.1", invalid_host_file)
    @test !isfile(invalid_host_file)
end

end # module