|
4 | 4 | require "openssl"
|
5 | 5 | require "active_support/time"
|
6 | 6 | require "active_support/json"
|
| 7 | +require "active_support/core_ext/securerandom" |
7 | 8 | require_relative "messages/message_codec_tests"
|
8 | 9 |
|
9 | 10 | class MessageVerifierTest < ActiveSupport::TestCase
|
@@ -81,6 +82,25 @@ def test_verify_exception_on_invalid_message
|
81 | 82 | "Unable to assert that the message payload is unpadded, because it does not require padding"
|
82 | 83 | end
|
83 | 84 |
|
| 85 | + test "URL-safe and URL-unsafe can decode each other messages" do |
| 86 | + safe_verifier = ActiveSupport::MessageVerifier.new(@secret, url_safe: true, serializer: JSON) |
| 87 | + unsafe_verifier = ActiveSupport::MessageVerifier.new(@secret, url_safe: false, serializer: JSON) |
| 88 | + |
| 89 | + data = "??" |
| 90 | + |
| 91 | + assert_equal safe_verifier.generate(data), safe_verifier.generate(data) |
| 92 | + assert_not_equal safe_verifier.generate(data), unsafe_verifier.generate(data) |
| 93 | + |
| 94 | + assert_equal data, unsafe_verifier.verify(safe_verifier.generate(data)) |
| 95 | + assert_equal data, safe_verifier.verify(unsafe_verifier.generate(data)) |
| 96 | + |
| 97 | + 50.times do |
| 98 | + data = SecureRandom.base58(Random.rand(10..50)) |
| 99 | + assert_equal data, unsafe_verifier.verify(safe_verifier.generate(data)) |
| 100 | + assert_equal data, safe_verifier.verify(unsafe_verifier.generate(data)) |
| 101 | + end |
| 102 | + end |
| 103 | + |
84 | 104 | def test_alternative_serialization_method
|
85 | 105 | prev = ActiveSupport.use_standard_json_time_format
|
86 | 106 | ActiveSupport.use_standard_json_time_format = true
|
|
0 commit comments