From 6ada1b203c162a4dfc040b47fcec82ab984553c0 Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Wed, 23 May 2018 11:07:25 +0200 Subject: [PATCH 1/3] Update to upcoming HTTP::Server API Small refactor to avoid not_nil! and unnecessary check --- src/kemal.cr | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/kemal.cr b/src/kemal.cr index 13880eae..c0b96e6a 100644 --- a/src/kemal.cr +++ b/src/kemal.cr @@ -50,7 +50,7 @@ module Kemal # This route serves the built-in images for not_found and exceptions. get "/__kemal__/404.png" do |env| file_path = File.expand_path("lib/kemal/images/404.png", Dir.current) - + if File.exists? file_path send_file env, file_path else @@ -59,7 +59,7 @@ module Kemal end end - config.server ||= HTTP::Server.new(config.host_binding, config.port, config.handlers) + server = config.server ||= HTTP::Server.new(config.handlers) {% if !flag?(:without_openssl) %} config.server.not_nil!.tls = config.ssl @@ -68,7 +68,7 @@ module Kemal config.running = true yield config - config.server.not_nil!.listen if config.env != "test" && config.server + server.listen(config.host_binding, config.port) if config.env != "test" end def self.stop From 7e23d4b6999423aae0b6273a96476a606216d957 Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Wed, 23 May 2018 11:12:48 +0200 Subject: [PATCH 2/3] Fix WebSockets specs --- spec/websocket_handler_spec.cr | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/spec/websocket_handler_spec.cr b/spec/websocket_handler_spec.cr index 5f2974df..b07c91b1 100644 --- a/spec/websocket_handler_spec.cr +++ b/spec/websocket_handler_spec.cr @@ -25,27 +25,29 @@ describe "Kemal::WebSocketHandler" do ws "/" { |socket, context| socket.send("Match") } ws "/no_match" { |socket, context| socket.send "No Match" } headers = HTTP::Headers{ - "Upgrade" => "websocket", - "Connection" => "Upgrade", - "Sec-WebSocket-Key" => "dGhlIHNhbXBsZSBub25jZQ==", + "Upgrade" => "websocket", + "Connection" => "Upgrade", + "Sec-WebSocket-Key" => "dGhlIHNhbXBsZSBub25jZQ==", + "Sec-WebSocket-Version" => "13", } request = HTTP::Request.new("GET", "/", headers) io_with_context = create_ws_request_and_return_io(handler, request) - io_with_context.to_s.should eq("HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-Websocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n\x81\u0005Match") + io_with_context.to_s.should eq("HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n\x81\u0005Match") end it "fetches named url parameters" do handler = Kemal::WebSocketHandler::INSTANCE ws "/:id" { |s, c| c.params.url["id"] } headers = HTTP::Headers{ - "Upgrade" => "websocket", - "Connection" => "Upgrade", - "Sec-WebSocket-Key" => "dGhlIHNhbXBsZSBub25jZQ==", + "Upgrade" => "websocket", + "Connection" => "Upgrade", + "Sec-WebSocket-Key" => "dGhlIHNhbXBsZSBub25jZQ==", + "Sec-WebSocket-Version" => "13", } request = HTTP::Request.new("GET", "/1234", headers) io_with_context = create_ws_request_and_return_io(handler, request) - io_with_context.to_s.should eq("HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-Websocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n") + io_with_context.to_s.should eq("HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n") end it "matches correct verb" do From c51f6506e0d86eeedb273d7119ede20a1c6b5b05 Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Wed, 23 May 2018 11:18:04 +0200 Subject: [PATCH 3/3] Avoid closing HTTP::Server if already closed --- src/kemal.cr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/kemal.cr b/src/kemal.cr index c0b96e6a..32300221 100644 --- a/src/kemal.cr +++ b/src/kemal.cr @@ -73,8 +73,8 @@ module Kemal def self.stop if config.running - if config.server - config.server.not_nil!.close + if server = config.server + server.close unless server.closed? config.running = false else raise "Kemal.config.server is not set. Please use Kemal.run to set the server."