diff options
Diffstat (limited to 'test/rubygems')
-rw-r--r-- | test/rubygems/test_webauthn_listener_response.rb | 141 |
1 files changed, 59 insertions, 82 deletions
diff --git a/test/rubygems/test_webauthn_listener_response.rb b/test/rubygems/test_webauthn_listener_response.rb index b3e54e0f19..79e88f1f02 100644 --- a/test/rubygems/test_webauthn_listener_response.rb +++ b/test/rubygems/test_webauthn_listener_response.rb @@ -1,116 +1,93 @@ # frozen_string_literal: true require_relative "helper" -require "rubygems/webauthn_listener/response/response_ok" -require "rubygems/webauthn_listener/response/response_no_content" -require "rubygems/webauthn_listener/response/response_bad_request" -require "rubygems/webauthn_listener/response/response_not_found" -require "rubygems/webauthn_listener/response/response_method_not_allowed" +require "rubygems/webauthn_listener/response" class WebauthnListenerResponseTest < Gem::TestCase - class MockResponse < Gem::WebauthnListener::Response - def payload - "hello world" - end - end - def setup super @host = "rubygems.example" end - def test_ok_response_payload - payload = Gem::WebauthnListener::ResponseOk.new(@host).payload - - expected_payload = <<~RESPONSE - HTTP/1.1 200 OK - Connection: close - Access-Control-Allow-Origin: rubygems.example - Access-Control-Allow-Methods: POST - Access-Control-Allow-Headers: Content-Type, Authorization, x-csrf-token - Content-Type: text/plain - Content-Length: 7 - + def test_ok_response_to_s + to_s = Gem::WebauthnListener::OkResponse.new(@host).to_s + + expected_to_s = <<~RESPONSE + HTTP/1.1 200 OK\r + connection: close\r + access-control-allow-origin: rubygems.example\r + access-control-allow-methods: POST\r + access-control-allow-headers: Content-Type, Authorization, x-csrf-token\r + content-type: text/plain\r + content-length: 7\r + \r success RESPONSE - assert_equal expected_payload, payload + assert_equal expected_to_s, to_s end - def test_no_payload_response_payload - payload = Gem::WebauthnListener::ResponseNoContent.new(@host).payload + def test_no_to_s_response_to_s + to_s = Gem::WebauthnListener::NoContentResponse.new(@host).to_s - expected_payload = <<~RESPONSE - HTTP/1.1 204 No Content - Connection: close - Access-Control-Allow-Origin: rubygems.example - Access-Control-Allow-Methods: POST - Access-Control-Allow-Headers: Content-Type, Authorization, x-csrf-token + expected_to_s = <<~RESPONSE + HTTP/1.1 204 No Content\r + connection: close\r + access-control-allow-origin: rubygems.example\r + access-control-allow-methods: POST\r + access-control-allow-headers: Content-Type, Authorization, x-csrf-token\r + \r RESPONSE - assert_equal expected_payload, payload + assert_equal expected_to_s, to_s end - def test_method_not_allowed_response_payload - payload = Gem::WebauthnListener::ResponseMethodNotAllowed.new(@host).payload - - expected_payload = <<~RESPONSE - HTTP/1.1 405 Method Not Allowed - Connection: close - Access-Control-Allow-Origin: rubygems.example - Access-Control-Allow-Methods: POST - Access-Control-Allow-Headers: Content-Type, Authorization, x-csrf-token - Allow: GET, OPTIONS + def test_method_not_allowed_response_to_s + to_s = Gem::WebauthnListener::MethodNotAllowedResponse.new(@host).to_s + + expected_to_s = <<~RESPONSE + HTTP/1.1 405 Method Not Allowed\r + connection: close\r + access-control-allow-origin: rubygems.example\r + access-control-allow-methods: POST\r + access-control-allow-headers: Content-Type, Authorization, x-csrf-token\r + allow: GET, OPTIONS\r + \r RESPONSE - assert_equal expected_payload, payload + assert_equal expected_to_s, to_s end - def test_method_not_found_response_payload - payload = Gem::WebauthnListener::ResponseNotFound.new(@host).payload + def test_method_not_found_response_to_s + to_s = Gem::WebauthnListener::NotFoundResponse.new(@host).to_s - expected_payload = <<~RESPONSE - HTTP/1.1 404 Not Found - Connection: close - Access-Control-Allow-Origin: rubygems.example - Access-Control-Allow-Methods: POST - Access-Control-Allow-Headers: Content-Type, Authorization, x-csrf-token + expected_to_s = <<~RESPONSE + HTTP/1.1 404 Not Found\r + connection: close\r + access-control-allow-origin: rubygems.example\r + access-control-allow-methods: POST\r + access-control-allow-headers: Content-Type, Authorization, x-csrf-token\r + \r RESPONSE - assert_equal expected_payload, payload + assert_equal expected_to_s, to_s end - def test_bad_request_response_payload - payload = Gem::WebauthnListener::ResponseBadRequest.new(@host).payload - - expected_payload = <<~RESPONSE - HTTP/1.1 400 Bad Request - Connection: close - Access-Control-Allow-Origin: rubygems.example - Access-Control-Allow-Methods: POST - Access-Control-Allow-Headers: Content-Type, Authorization, x-csrf-token - Content-Type: text/plain - Content-Length: 22 - + def test_bad_request_response_to_s + to_s = Gem::WebauthnListener::BadRequestResponse.new(@host).to_s + + expected_to_s = <<~RESPONSE + HTTP/1.1 400 Bad Request\r + connection: close\r + access-control-allow-origin: rubygems.example\r + access-control-allow-methods: POST\r + access-control-allow-headers: Content-Type, Authorization, x-csrf-token\r + content-type: text/plain\r + content-length: 22\r + \r missing code parameter RESPONSE - assert_equal expected_payload, payload - end - - def test_send_response - server = TCPServer.new "localhost", 5678 - thread = Thread.new do - receive_socket = server.accept - Thread.current[:payload] = receive_socket.read - receive_socket.close - end - - send_socket = TCPSocket.new "localhost", 5678 - MockResponse.send(send_socket, @host) - - thread.join - assert_equal "hello world", thread[:payload] - assert_predicate send_socket, :closed? + assert_equal expected_to_s, to_s end end |