summaryrefslogtreecommitdiff
path: root/test/rubygems
diff options
context:
space:
mode:
authorJenny Shen <jenny.shen@shopify.com>2023-02-27 10:07:12 -0500
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2023-04-12 11:51:07 +0900
commit096f6eec3e6be23991e752a6ce56a2efca7a47c9 (patch)
tree0dbb43af98a5bff96e6606f0a1fd6fff8529c729 /test/rubygems
parentef85b6de42c9d73451eb392178e1faa95b002edd (diff)
downloadruby-096f6eec3e6be23991e752a6ce56a2efca7a47c9.tar.gz
[rubygems/rubygems] Refactor Webauthn listener response - Makes the response class a wrapper around Net::HTTPResponse - Builds a Net::HTTPResponse upon initialization - to_s returns a string representation of the response to send - Adds a Socket Responder class to send responses given a socket
https://github.com/rubygems/rubygems/commit/7513c220b6 Co-authored-by: Jacques Chester <jacques.chester@shopify.com>
Diffstat (limited to 'test/rubygems')
-rw-r--r--test/rubygems/test_webauthn_listener_response.rb141
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