HTTPRequest has no timeout by default, so a server that accepts the connection but never responds left song downloads waiting forever. Requests now fail after 120 seconds, which triggers the normal retry.
49 lines
1.4 KiB
GDScript
49 lines
1.4 KiB
GDScript
extends GdUnitTestSuite
|
|
## Uses a local TCP server that accepts connections but never answers, like a hung
|
|
## MusicServer.
|
|
|
|
var _server: TCPServer
|
|
var _connections: Array[StreamPeerTCP] = []
|
|
var _owner: Node
|
|
|
|
|
|
func before_test() -> void:
|
|
_server = TCPServer.new()
|
|
assert_int(_server.listen(0, "127.0.0.1")).is_equal(OK)
|
|
_owner = auto_free(Node.new())
|
|
add_child(_owner)
|
|
|
|
|
|
func after_test() -> void:
|
|
for connection: StreamPeerTCP in _connections:
|
|
connection.disconnect_from_host()
|
|
_server.stop()
|
|
|
|
|
|
func _accept_connections() -> void:
|
|
while _server.is_connection_available():
|
|
_connections.append(_server.take_connection())
|
|
|
|
|
|
func test_request_to_silent_server_times_out_as_failed() -> void:
|
|
var transport: HttpTransport = HttpTransport.new(_owner)
|
|
transport.timeout_seconds = 0.5
|
|
var response_codes: Array[int] = []
|
|
|
|
transport.request("http://127.0.0.1:%d/music/rand" % _server.get_local_port(),
|
|
HTTPClient.METHOD_GET,
|
|
func(response_code: int, _body: PackedByteArray) -> void:
|
|
response_codes.append(response_code))
|
|
for i: int in 40:
|
|
_accept_connections()
|
|
await await_millis(50)
|
|
if !response_codes.is_empty():
|
|
break
|
|
|
|
assert_bool(_connections.is_empty()).is_false()
|
|
assert_array(response_codes).contains_exactly([0])
|
|
|
|
|
|
func test_default_timeout_is_set() -> void:
|
|
assert_float(HttpTransport.new(_owner).timeout_seconds).is_greater(0.0)
|