diff --git a/test/issues.jl b/test/issues.jl index dfdeef8dc9..623c341c59 100644 --- a/test/issues.jl +++ b/test/issues.jl @@ -88,10 +88,37 @@ try try S3.put_object(BUCKET_NAME, file_name) + + # The tests below validate the current behavior of how streams are handled. + # Note: Avoid using `eof` for these tests can hang when using an unclosed `Base.BufferStream` + stream = S3.get_object(BUCKET_NAME, file_name, Dict("return_stream" => true)) - println("test #466") # So we know if this is the reason for tests hanging. - @test eof(stream) # This will hang if #466 not fixed and using HTTP.jl v0.9.15+ - println("#466 fixed") + if AWS.DEFAULT_BACKEND[] isa AWS.HTTPBackend + @test !isopen(stream) + else + @test isopen(stream) + end + + stream = Base.BufferStream() + S3.get_object(BUCKET_NAME, file_name, Dict("response_stream" => stream)) + if AWS.DEFAULT_BACKEND[] isa AWS.HTTPBackend + @test !isopen(stream) + else + # See: https://github.com/JuliaCloud/AWS.jl/issues/471 + @test_broken isopen(stream) + end + + stream = Base.BufferStream() + S3.get_object( + BUCKET_NAME, + file_name, + Dict("response_stream" => stream, "return_stream" => true), + ) + if AWS.DEFAULT_BACKEND[] isa AWS.HTTPBackend + @test !isopen(stream) + else + @test isopen(stream) + end finally S3.delete_object(BUCKET_NAME, file_name) end diff --git a/test/minio.jl b/test/minio.jl index 921fe0a14c..ab41ab7b12 100644 --- a/test/minio.jl +++ b/test/minio.jl @@ -62,6 +62,48 @@ try @test sort(getindex.(objs_prefix["Contents"], "Key")) == ["empty", "myobject"] @test objs_prefix["CommonPrefixes"]["Prefix"] == "foo/" + # Duplicated testset from "test/issues.jl". Useful for testing outside the CI. Ideally, + # the tests should be revised such that local testing works without having to duplicate + # testsets. + @testset "issue 466" begin + file_name = "hang.txt" + + try + S3.put_object("anewbucket", file_name) + + # Note: Using `eof` for these tests can hang when using an unclosed `Base.BufferStream` + + stream = S3.get_object("anewbucket", file_name, Dict("return_stream" => true)) + if AWS.DEFAULT_BACKEND[] isa AWS.HTTPBackend + @test !isopen(stream) + else + @test isopen(stream) + end + + stream = Base.BufferStream() + S3.get_object("anewbucket", file_name, Dict("response_stream" => stream)) + if AWS.DEFAULT_BACKEND[] isa AWS.HTTPBackend + @test !isopen(stream) + else + @test_broken isopen(stream) + end + + stream = Base.BufferStream() + S3.get_object( + "anewbucket", + file_name, + Dict("response_stream" => stream, "return_stream" => true), + ) + if AWS.DEFAULT_BACKEND[] isa AWS.HTTPBackend + @test !isopen(stream) + else + @test isopen(stream) + end + finally + S3.delete_object("anewbucket", file_name) + end + end + finally # Delete all objects and the bucket objs = S3.list_objects_v2("anewbucket")