Skip to content

Commit 892b4b6

Browse files
authored
launch test servers from julia (#14)
* launch test servers from julia - launch test servers from julia - add flags and depot path matching the test environment - check http server port instead of sleep to detect server availability * improve coverage
1 parent c54ba26 commit 892b4b6

14 files changed

+160
-67
lines changed

src/datetime.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ function str2zoneddatetime(str::String)
2222
end
2323
end
2424
return ZonedDateTime(str2datetime(str), localzone())
25-
throw(OpenAPIException("Unsupported ZonedDateTime format: $str"))
2625
end
2726
str2zoneddatetime(datetime::DateTime) = ZonedDateTime(datetime, localzone())
2827

test/client/runtests.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ function runtests()
1313
@testset "Utils" begin
1414
test_longpoll_exception_check()
1515
test_request_interrupted_exception_check()
16+
test_date()
1617
end
1718
@testset "Validations" begin
1819
test_validations()

test/client/utilstests.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,22 @@
11
using OpenAPI
22
using OpenAPI.Clients
33
using Test
4+
using Dates
5+
using TimeZones
6+
7+
function test_date()
8+
dt_string = string(ZonedDateTime(now(), localzone()))
9+
dt = OpenAPI.str2zoneddatetime(dt_string)
10+
@test dt_string == string(dt)
11+
12+
dt_string = string(DateTime(now()))
13+
dt = OpenAPI.str2datetime(dt_string)
14+
@test dt_string == string(dt)
15+
16+
dt_string = string(Date(now()))
17+
dt = OpenAPI.str2date(dt_string)
18+
@test dt_string == string(dt)
19+
end
420

521
function as_taskfailedexception(ex)
622
try
@@ -74,6 +90,13 @@ function test_custom_format_validations()
7490
return nothing
7591
end
7692

93+
function test_numeric_format_validations()
94+
@test OpenAPI.val_format(typemax(Float32), ":float")
95+
@test OpenAPI.val_format(typemax(Float64), ":double")
96+
@test OpenAPI.val_multiple_of(10.0, 5.0)
97+
@test !OpenAPI.val_multiple_of(10.0, 3.0)
98+
end
99+
77100
function test_validations()
78101
# maximum
79102
@test_throws OpenAPI.ValidationException OpenAPI.validate_param("test_param", "test_model", :maximum, 11, 10, true)
@@ -122,5 +145,6 @@ function test_validations()
122145

123146
# custom format Validations
124147
test_custom_format_validations()
148+
test_numeric_format_validations()
125149
return nothing
126150
end

test/runtests.jl

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,62 @@
1-
using Test
1+
using Test, HTTP
22

3+
include("testutils.jl")
34
include("client/runtests.jl")
45
include("client/allany/runtests.jl")
56

67
@testset "OpenAPI" begin
78
@testset "Client" begin
89
try
9-
if get(ENV, "RUNNER_OS", "") == "Linux"
10+
if run_tests_with_servers
1011
run(`client/petstore_v2/start_petstore_server.sh`)
1112
run(`client/petstore_v3/start_petstore_server.sh`)
12-
sleep(20)
13+
sleep(20) # let servers start
1314
end
1415
OpenAPIClientTests.runtests()
1516
finally
16-
if get(ENV, "RUNNER_OS", "") == "Linux"
17+
if run_tests_with_servers
1718
run(`client/petstore_v2/stop_petstore_server.sh`)
1819
run(`client/petstore_v3/stop_petstore_server.sh`)
1920
end
2021
end
2122
end
22-
if get(ENV, "RUNNER_OS", "") == "Linux"
23-
sleep(20)
24-
end
23+
run_tests_with_servers && sleep(20) # avoid port conflicts
2524
@testset "Server" begin
25+
v2_ret = v2_out = v3_ret = v3_out = nothing
26+
servers_running = true
27+
2628
try
27-
if get(ENV, "RUNNER_OS", "") == "Linux"
28-
run(`server/petstore_v2/start_petstore_server.sh`)
29-
run(`server/petstore_v3/start_petstore_server.sh`)
30-
sleep(20)
29+
if run_tests_with_servers
30+
v2_ret, v2_out = run_server(joinpath(@__DIR__, "server", "petstore_v2", "petstore_server.jl"))
31+
v3_ret, v3_out = run_server(joinpath(@__DIR__, "server", "petstore_v3", "petstore_server.jl"))
32+
servers_running &= wait_server(8080)
33+
servers_running &= wait_server(8081)
34+
else
35+
servers_running = false
3136
end
32-
OpenAPIClientTests.runtests()
37+
servers_running && OpenAPIClientTests.runtests()
3338
finally
34-
if get(ENV, "RUNNER_OS", "") == "Linux"
35-
run(`server/petstore_v2/stop_petstore_server.sh`)
36-
run(`server/petstore_v3/stop_petstore_server.sh`)
39+
if run_tests_with_servers
40+
stop_server(8080, v2_ret, v2_out)
41+
stop_server(8081, v3_ret, v3_out)
3742
end
3843
end
3944
end
40-
if get(ENV, "RUNNER_OS", "") == "Linux"
41-
sleep(20)
42-
end
45+
run_tests_with_servers && sleep(20) # avoid port conflicts
4346
@testset "Union types" begin
47+
ret = out = nothing
48+
servers_running = true
49+
4450
try
45-
if get(ENV, "RUNNER_OS", "") == "Linux"
46-
run(`server/allany/start_allany_server.sh`)
47-
sleep(20)
51+
if run_tests_with_servers
52+
ret, out = run_server(joinpath(@__DIR__, "server", "allany", "allany_server.jl"))
53+
servers_running &= wait_server(8081)
4854
AllAnyTests.runtests()
55+
else
56+
servers_running = false
4957
end
5058
finally
51-
if get(ENV, "RUNNER_OS", "") == "Linux"
52-
run(`server/allany/stop_allany_server.sh`)
53-
end
59+
run_tests_with_servers && stop_server(8081, ret, out)
5460
end
5561
end
5662
end

test/server/allany/allany_server.jl

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,21 @@ function stop(::HTTP.Request)
4949
return HTTP.Response(200, "")
5050
end
5151

52+
function ping(::HTTP.Request)
53+
return HTTP.Response(200, "")
54+
end
55+
5256
function run_server(port=8081)
53-
router = HTTP.Router()
54-
router = AllAnyServer.register(router, @__MODULE__)
55-
HTTP.register!(router, "GET", "/stop", stop)
56-
server[] = HTTP.serve!(router, port)
57-
wait(server[])
57+
try
58+
router = HTTP.Router()
59+
router = AllAnyServer.register(router, @__MODULE__)
60+
HTTP.register!(router, "GET", "/stop", stop)
61+
HTTP.register!(router, "GET", "/ping", ping)
62+
server[] = HTTP.serve!(router, port)
63+
wait(server[])
64+
catch ex
65+
@error("Server error", exception=(ex, catch_backtrace()))
66+
end
5867
end
5968

6069
end # module AllAnyServerImpl

test/server/allany/start_allany_server.sh

Lines changed: 0 additions & 4 deletions
This file was deleted.

test/server/allany/stop_allany_server.sh

Lines changed: 0 additions & 5 deletions
This file was deleted.

test/server/petstore_v2/petstore_server.jl

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,21 @@ function stop(::HTTP.Request)
148148
return HTTP.Response(200, "")
149149
end
150150

151+
function ping(::HTTP.Request)
152+
return HTTP.Response(200, "")
153+
end
154+
151155
function run_server(port=8080)
152-
router = HTTP.Router()
153-
router = PetStoreServer.register(router, @__MODULE__; path_prefix="/v2")
154-
HTTP.register!(router, "GET", "/stop", stop)
155-
server[] = HTTP.serve!(router, port)
156-
wait(server[])
156+
try
157+
router = HTTP.Router()
158+
router = PetStoreServer.register(router, @__MODULE__; path_prefix="/v2")
159+
HTTP.register!(router, "GET", "/stop", stop)
160+
HTTP.register!(router, "GET", "/ping", ping)
161+
server[] = HTTP.serve!(router, port)
162+
wait(server[])
163+
catch ex
164+
@error("Server error", exception=(ex, catch_backtrace()))
165+
end
157166
end
158167

159168
end # module PetStoreV2Server

test/server/petstore_v2/start_petstore_server.sh

Lines changed: 0 additions & 4 deletions
This file was deleted.

test/server/petstore_v2/stop_petstore_server.sh

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)