-
Notifications
You must be signed in to change notification settings - Fork 51
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test(LibPQ): run the async result test with both types of connections…
…, and option to run all with any type
- Loading branch information
Showing
2 changed files
with
51 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -40,7 +40,8 @@ function count_allocs(f, args...) | |
return Base.gc_alloc_count(stats.gcstats) | ||
end | ||
|
||
@testset "LibPQ" begin | ||
usenonblocking = get(ENV, "LIBPQJL_CONNECTION_NONBLOCKING", false) | ||
@testset "LibPQ $(usenonblocking ? "(nonblocking connection)" : "")" begin | ||
|
||
Check warning on line 45 in test/runtests.jl GitHub Actions / format
|
||
@testset "ConninfoDisplay" begin | ||
Check warning on line 46 in test/runtests.jl GitHub Actions / format
|
||
@test parse(LibPQ.ConninfoDisplay, "") == LibPQ.Normal | ||
|
@@ -82,6 +83,7 @@ end | |
|
||
@testset "Example SELECT" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=false) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
@test conn isa LibPQ.Connection | ||
@test isopen(conn) | ||
@test status(conn) == LibPQ.libpq_c.CONNECTION_OK | ||
|
@@ -190,6 +192,7 @@ end | |
|
||
@testset "Example INSERT and DELETE" begin | ||
Check warning on line 193 in test/runtests.jl GitHub Actions / format
|
||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER") | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, """ | ||
CREATE TEMPORARY TABLE libpqjl_test ( | ||
|
@@ -333,6 +336,7 @@ end | |
@testset "load!" begin | ||
Check warning on line 336 in test/runtests.jl GitHub Actions / format
|
||
@testset "issue #204" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER") | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
close(execute(conn, """ | ||
Check warning on line 341 in test/runtests.jl GitHub Actions / format
|
||
CREATE TEMPORARY TABLE libpqjl_test ( | ||
|
@@ -357,6 +361,7 @@ end | |
@testset "COPY FROM" begin | ||
Check warning on line 361 in test/runtests.jl GitHub Actions / format
|
||
@testset "Example COPY FROM" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER") | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
Check warning on line 364 in test/runtests.jl GitHub Actions / format
|
||
|
||
result = execute(conn, """ | ||
CREATE TEMPORARY TABLE libpqjl_test ( | ||
|
@@ -401,6 +406,7 @@ end | |
|
||
@testset "Wrong column order" begin | ||
Check warning on line 407 in test/runtests.jl GitHub Actions / format
|
||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER") | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, """ | ||
CREATE TEMPORARY TABLE libpqjl_test ( | ||
|
@@ -458,6 +464,7 @@ end | |
local saved_conn | ||
|
||
was_open = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) do jl_conn | ||
LibPQ.setnonblocking(jl_conn, nonblock=usenonblocking) | ||
saved_conn = jl_conn | ||
return isopen(jl_conn) | ||
end | ||
|
@@ -466,6 +473,7 @@ end | |
@test !isopen(saved_conn) | ||
|
||
@test_throws LibPQ.Errors.PQConnectionError LibPQ.Connection("dbname=123fake user=$DATABASE_USER"; throw_error=true) do jl_conn | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
saved_conn = jl_conn | ||
@test false | ||
end | ||
|
@@ -475,13 +483,15 @@ end | |
|
||
@testset "Version Numbers" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
# update this test before PostgreSQL 20.0 ;) | ||
@test LibPQ.pqv"7" <= LibPQ.server_version(conn) <= LibPQ.pqv"20" | ||
end | ||
|
||
@testset "Encoding" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
@test LibPQ.encoding(conn) == "UTF8" | ||
|
||
|
@@ -513,6 +523,7 @@ end | |
throw_error=true, | ||
type_map=Dict(:interval => String), | ||
) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
conn_info = LibPQ.conninfo(conn) | ||
options = first(filter(conn_info) do conn_opt | ||
|
@@ -632,6 +643,8 @@ end | |
@testset "Finalizer" begin | ||
closed_flags = map(1:50) do _ | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER") | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
closed = conn.closed | ||
finalize(conn) | ||
return closed | ||
|
@@ -646,6 +659,8 @@ end | |
|
||
closed_flags = map(1:50) do _ | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER") | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
push!(results, execute(conn, "SELECT 1;")) | ||
return conn.closed | ||
end | ||
|
@@ -661,6 +676,8 @@ end | |
# with AsyncResults, which hold a reference to Connection | ||
closed_flags = asyncmap(1:50) do _ | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER") | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
wait(async_execute(conn, "SELECT pg_sleep(1);")) | ||
return conn.closed | ||
end | ||
|
@@ -707,6 +724,8 @@ end | |
|
||
@testset "throw_error=false" begin | ||
conn = LibPQ.Connection("dbname=123fake user=$DATABASE_USER"; throw_error=false) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
@test conn isa LibPQ.Connection | ||
@test status(conn) == LibPQ.libpq_c.CONNECTION_BAD | ||
@test isopen(conn) | ||
|
@@ -725,6 +744,8 @@ end | |
@test_throws LibPQ.Errors.PQConnectionError LibPQ.Connection("dbname=123fake user=$DATABASE_USER"; throw_error=true) | ||
|
||
conn = LibPQ.Connection("dbname=123fake user=$DATABASE_USER"; throw_error=false) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
@test conn isa LibPQ.Connection | ||
@test status(conn) == LibPQ.libpq_c.CONNECTION_BAD | ||
@test isopen(conn) | ||
|
@@ -740,6 +761,7 @@ end | |
@testset "Results" begin | ||
@testset "Nulls" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, "SELECT NULL"; throw_error=true) | ||
@test status(result) == LibPQ.libpq_c.PGRES_TUPLES_OK | ||
|
@@ -824,6 +846,7 @@ end | |
|
||
@testset "Not Nulls" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, "SELECT NULL"; not_null=[false], throw_error=true) | ||
@test status(result) == LibPQ.libpq_c.PGRES_TUPLES_OK | ||
|
@@ -949,6 +972,7 @@ end | |
|
||
@testset "Tables.jl" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, """ | ||
SELECT no_nulls, yes_nulls FROM ( | ||
|
@@ -991,6 +1015,7 @@ end | |
|
||
@testset "Duplicate names" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, "SELECT 1 AS col, 2 AS col;", not_null=true, throw_error=true) | ||
columns = Tables.columns(result) | ||
|
@@ -1007,6 +1032,7 @@ end | |
|
||
@testset "Uppercase Columns" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, "SELECT 1 AS \"Column\";") | ||
@test num_columns(result) == 1 | ||
|
@@ -1025,6 +1051,7 @@ end | |
|
||
@testset "PQResultError" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
try | ||
execute(conn, "SELECT log(-1);") | ||
|
@@ -1072,6 +1099,7 @@ end | |
@testset "Type Conversions" begin | ||
@testset "Deprecations" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, "SELECT 'infinity'::timestamp;") | ||
|
||
|
@@ -1089,6 +1117,7 @@ end | |
|
||
@testset "Automatic" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, """ | ||
SELECT oid, typname, typlen, typbyval, typcategory | ||
|
@@ -1120,6 +1149,7 @@ end | |
|
||
@testset "Overrides" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, "SELECT 4::bigint;") | ||
@test first(first(result)) === Int64(4) | ||
|
@@ -1169,6 +1199,7 @@ end | |
@testset for binary_format in (LibPQ.TEXT, LibPQ.BINARY) | ||
@testset "Default Types" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
test_data = [ | ||
("3", Cint(3)), | ||
|
@@ -1335,6 +1366,7 @@ end | |
|
||
@testset "Specified Types" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
test_data = [ | ||
("3", UInt, UInt(3)), | ||
|
@@ -1428,6 +1460,7 @@ end | |
|
||
@testset "Parameters" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
@testset "Arrays" begin | ||
tests = ( | ||
|
@@ -1542,6 +1575,7 @@ end | |
|
||
@testset "SQLString" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER") | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
execute(conn, sql``` | ||
CREATE TEMPORARY TABLE libpq_test_users ( | ||
|
@@ -1577,6 +1611,7 @@ end | |
@testset "Query Errors" begin | ||
@testset "Syntax Errors" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, "SELORCT NUUL;"; throw_error=false) | ||
@test status(result) == LibPQ.libpq_c.PGRES_FATAL_ERROR | ||
|
@@ -1595,6 +1630,7 @@ end | |
|
||
@testset "Wrong No. Parameters" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute(conn, "SELORCT \$1;", String[]; throw_error=false) | ||
@test status(result) == LibPQ.libpq_c.PGRES_FATAL_ERROR | ||
|
@@ -1619,6 +1655,7 @@ end | |
|
||
@testset "Interface Errors" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = execute( | ||
conn, | ||
|
@@ -1652,6 +1689,7 @@ end | |
|
||
# Establish connection and construct temporary table. | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER") | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
# Get the column. | ||
result = execute( | ||
|
@@ -1678,6 +1716,7 @@ end | |
@testset "Statements" begin | ||
@testset "No Params, Output" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
stmt = prepare(conn, "SELECT oid, typname FROM pg_type") | ||
|
||
|
@@ -1699,6 +1738,7 @@ end | |
|
||
@testset "Params, Output" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
stmt = prepare(conn, "SELECT oid, typname FROM pg_type WHERE oid = \$1") | ||
|
||
|
@@ -1723,11 +1763,12 @@ end | |
end | ||
end | ||
|
||
@testset "AsyncResults" begin | ||
@testset "AsyncResults (usenonblocking connection=$usenonblocking)" for usenonblocking in [true, false] | ||
trywait(ar::LibPQ.AsyncResult) = (try wait(ar) catch end; nothing) | ||
|
||
@testset "Basic" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
ar = async_execute(conn, "SELECT pg_sleep(2);"; throw_error=false) | ||
yield() | ||
|
@@ -1750,6 +1791,7 @@ end | |
|
||
@testset "Parameters" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
ar = async_execute( | ||
conn, | ||
|
@@ -1782,6 +1824,7 @@ end | |
# Ensures queries wait for previous query completion before starting | ||
@testset "Wait in line to complete" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
first_ar = async_execute(conn, "SELECT pg_sleep(4);") | ||
yield() | ||
|
@@ -1811,6 +1854,7 @@ end | |
|
||
@testset "Cancel" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
# final query needs to be one that actually does something | ||
# on Windows, first query also needs to do something | ||
|
@@ -1843,6 +1887,7 @@ end | |
|
||
@testset "Canceled by closing connection" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
# final query needs to be one that actually does something | ||
# on Windows, first query also needs to do something | ||
|
@@ -1875,6 +1920,7 @@ end | |
|
||
@testset "FDWatcher: bad file descriptor (EBADF)" begin | ||
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER"; throw_error=true) | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
ar = async_execute(conn, "SELECT pg_sleep(3); SELECT * FROM pg_type;") | ||
yield() | ||
|
@@ -1898,6 +1944,7 @@ end | |
@testset "DBInterface integration" begin | ||
conn = DBInterface.connect(LibPQ.Connection, "dbname=postgres user=$DATABASE_USER") | ||
@test conn isa LibPQ.Connection | ||
LibPQ.setnonblocking(conn, nonblock=usenonblocking) | ||
|
||
result = DBInterface.execute( | ||
conn, | ||
|