lune-packaging/tests/net/serve.luau

79 lines
2.3 KiB
Lua
Raw Normal View History

2023-02-11 21:40:14 +00:00
local PORT = 8080
local RESPONSE = "Hello, lune!"
2023-02-11 21:40:14 +00:00
local handle = net.serve(PORT, function(request)
-- info("Request:", request)
-- info("Responding with", RESPONSE)
assert(request.path == "/some/path")
assert(request.query.key == "param2")
assert(request.query.key2 == "param3")
return RESPONSE
end)
local response =
2023-02-11 21:40:14 +00:00
net.request(`http://127.0.0.1:{PORT}/some/path?key=param1&key=param2&key2=param3`).body
assert(response == RESPONSE, "Invalid response from server")
handle.stop()
-- Stopping is not guaranteed to happen instantly since it is async, but
-- it should happen on the next yield, so we wait the minimum amount here
task.wait()
-- Sending a net request may error if there was
-- a connection issue, we should handle that here
2023-02-11 21:40:14 +00:00
local success, response2 = pcall(net.request, `http://127.0.0.1:{PORT}/`)
if not success then
local message = tostring(response2)
assert(
string.find(message, "Connection reset")
or string.find(message, "Connection closed")
or string.find(message, "Connection refused"),
"Server did not stop responding to requests"
)
else
assert(not response2.ok, "Server did not stop responding to requests")
end
--[[
Trying to stop the server again should error and
mention that the server has already been stopped
Note that we cast pcall to any because of a
Luau limitation where it throws a type error for
`err` because handle.stop doesn't return any value
]]
local success2, err = (pcall :: any)(handle.stop)
assert(not success2, "Calling stop twice on the net serve handle should error")
local message = tostring(err)
assert(
string.find(message, "stop")
or string.find(message, "shutdown")
or string.find(message, "shut down"),
"The error message for calling stop twice on the net serve handle should be descriptive"
)
2023-02-11 21:40:14 +00:00
--[[
Serve should also take a full config with handler functions
A server should also be able to start on the previously closed port
]]
local handle2 = net.serve(PORT, {
handleRequest = function()
return RESPONSE
end,
handleWebSocket = function(socket)
socket.close()
end,
})
local response3 = net.request(`http://127.0.0.1:{PORT}/`).body
assert(response3 == RESPONSE, "Invalid response from server")
-- TODO: Test web sockets properly when we have a web socket client
-- Stop the server and yield once more to end the test
handle2.stop()
task.wait()