Skip to content

Commit e5b814c

Browse files
authored
Merge pull request rails#37682 from erichmachado/fix-namespaced-uuids-generation
Fixes namespaced UUID generation for namespace IDs represented as strings
2 parents 31ad3f1 + cdf537a commit e5b814c

File tree

8 files changed

+261
-12
lines changed

8 files changed

+261
-12
lines changed

activesupport/CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
* Fix the `Digest::UUID.uuid_from_hash` behavior for namespace IDs that are different from the ones defined on `Digest::UUID`.
2+
3+
The new behavior will be enabled by setting the
4+
`config.active_support.use_rfc4122_namespaced_uuids` option to `true`
5+
and is the default for new apps.
6+
7+
The old behavior is the default for upgraded apps and will output a
8+
deprecation warning every time a value that is different than one of
9+
the constants defined on the `Digest::UUID` extension is used as the
10+
namespace ID.
11+
12+
*Alex Robbin, Erich Soares Machado, Eugene Kenny*
13+
114
* `ActiveSupport::Inflector::Inflections#clear(:acronyms)` is now supported,
215
and `inflector.clear` / `inflector.clear(:all)` also clears acronyms.
316

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
# frozen_string_literal: true
22

33
require "active_support/core_ext/digest/uuid"
4+
5+
module ActiveSupport
6+
class << self
7+
delegate :use_rfc4122_namespaced_uuids, :use_rfc4122_namespaced_uuids=, to: :'Digest::UUID'
8+
end
9+
end

activesupport/lib/active_support/core_ext/digest/uuid.rb

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ module UUID
1010
OID_NAMESPACE = "k\xA7\xB8\x12\x9D\xAD\x11\xD1\x80\xB4\x00\xC0O\xD40\xC8" # :nodoc:
1111
X500_NAMESPACE = "k\xA7\xB8\x14\x9D\xAD\x11\xD1\x80\xB4\x00\xC0O\xD40\xC8" # :nodoc:
1212

13+
mattr_accessor :use_rfc4122_namespaced_uuids, instance_accessor: false, default: false
14+
1315
# Generates a v5 non-random UUID (Universally Unique IDentifier).
1416
#
1517
# Using OpenSSL::Digest::MD5 generates version 3 UUIDs; OpenSSL::Digest::SHA1 generates version 5 UUIDs.
1618
# uuid_from_hash always generates the same UUID for a given name and namespace combination.
1719
#
1820
# See RFC 4122 for details of UUID at: https://www.ietf.org/rfc/rfc4122.txt
19-
def self.uuid_from_hash(hash_class, uuid_namespace, name)
21+
def self.uuid_from_hash(hash_class, namespace, name)
2022
if hash_class == Digest::MD5 || hash_class == OpenSSL::Digest::MD5
2123
version = 3
2224
elsif hash_class == Digest::SHA1 || hash_class == OpenSSL::Digest::SHA1
@@ -25,6 +27,8 @@ def self.uuid_from_hash(hash_class, uuid_namespace, name)
2527
raise ArgumentError, "Expected OpenSSL::Digest::SHA1 or OpenSSL::Digest::MD5, got #{hash_class.name}."
2628
end
2729

30+
uuid_namespace = pack_uuid_namespace(namespace)
31+
2832
hash = hash_class.new
2933
hash.update(uuid_namespace)
3034
hash.update(name)
@@ -50,5 +54,26 @@ def self.uuid_v5(uuid_namespace, name)
5054
def self.uuid_v4
5155
SecureRandom.uuid
5256
end
57+
58+
def self.pack_uuid_namespace(namespace)
59+
if [DNS_NAMESPACE, OID_NAMESPACE, URL_NAMESPACE, X500_NAMESPACE].include?(namespace)
60+
namespace
61+
elsif use_rfc4122_namespaced_uuids == true
62+
match_data = namespace.match(/\A(\h{8})-(\h{4})-(\h{4})-(\h{4})-(\h{4})(\h{8})\z/)
63+
64+
raise ArgumentError, "Only UUIDs are valid namespace identifiers" unless match_data.present?
65+
66+
match_data.captures.map { |s| s.to_i(16) }.pack("NnnnnN")
67+
else
68+
ActiveSupport::Deprecation.warn <<~WARNING.squish
69+
Providing a namespace ID that is not one of the constants defined on Digest::UUID generates an incorrect UUID value according to RFC 4122.
70+
To enable the correct behavior, set the Rails.application.config.active_support.use_rfc4122_namespaced_uuids configuration option to true.
71+
WARNING
72+
73+
namespace
74+
end
75+
end
76+
77+
private_class_method :pack_uuid_namespace
5378
end
5479
end

activesupport/lib/active_support/railtie.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,5 +121,14 @@ class Railtie < Rails::Railtie # :nodoc:
121121
end
122122
end
123123
end
124+
125+
initializer "active_support.set_rfc4122_namespaced_uuids" do |app|
126+
config.after_initialize do
127+
if app.config.active_support.use_rfc4122_namespaced_uuids
128+
require "active_support/core_ext/digest"
129+
ActiveSupport.use_rfc4122_namespaced_uuids = app.config.active_support.use_rfc4122_namespaced_uuids
130+
end
131+
end
132+
end
124133
end
125134
end

activesupport/test/core_ext/digest/uuid_test.rb

Lines changed: 172 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,182 @@
11
# frozen_string_literal: true
22

33
require_relative "../../abstract_unit"
4-
require "active_support/core_ext/digest/uuid"
4+
require "active_support/core_ext/digest"
55

66
class DigestUUIDExt < ActiveSupport::TestCase
7-
def test_v3_uuids
8-
assert_equal "3d813cbb-47fb-32ba-91df-831e1593ac29", Digest::UUID.uuid_v3(Digest::UUID::DNS_NAMESPACE, "www.widgets.com")
9-
assert_equal "86df55fb-428e-3843-8583-ba3c05f290bc", Digest::UUID.uuid_v3(Digest::UUID::URL_NAMESPACE, "http://www.widgets.com")
10-
assert_equal "8c29ab0e-a2dc-3482-b5eb-20cb2e2387a1", Digest::UUID.uuid_v3(Digest::UUID::OID_NAMESPACE, "1.2.3")
11-
assert_equal "ee49149d-53a4-304a-890b-468229f6afc3", Digest::UUID.uuid_v3(Digest::UUID::X500_NAMESPACE, "cn=John Doe, ou=People, o=Acme, Inc., c=US")
7+
def with_use_rfc4122_namespaced_uuids_set
8+
old_value = ActiveSupport.use_rfc4122_namespaced_uuids
9+
ActiveSupport.use_rfc4122_namespaced_uuids = true
10+
yield
11+
ensure
12+
ActiveSupport.use_rfc4122_namespaced_uuids = old_value
1213
end
1314

14-
def test_v5_uuids
15-
assert_equal "21f7f8de-8051-5b89-8680-0195ef798b6a", Digest::UUID.uuid_v5(Digest::UUID::DNS_NAMESPACE, "www.widgets.com")
16-
assert_equal "4e570fd8-186d-5a74-90f0-4d28e34673a1", Digest::UUID.uuid_v5(Digest::UUID::URL_NAMESPACE, "http://www.widgets.com")
17-
assert_equal "42d5e23b-3a02-5135-85c6-52d1102f1f00", Digest::UUID.uuid_v5(Digest::UUID::OID_NAMESPACE, "1.2.3")
18-
assert_equal "fd5b2ddf-bcfe-58b6-90d6-db50f74db527", Digest::UUID.uuid_v5(Digest::UUID::X500_NAMESPACE, "cn=John Doe, ou=People, o=Acme, Inc., c=US")
15+
def test_constants
16+
assert_equal "6ba7b810-9dad-11d1-80b4-00c04fd430c8", "%08x-%04x-%04x-%04x-%04x%08x" % Digest::UUID::DNS_NAMESPACE.unpack("NnnnnN")
17+
assert_equal "6ba7b811-9dad-11d1-80b4-00c04fd430c8", "%08x-%04x-%04x-%04x-%04x%08x" % Digest::UUID::URL_NAMESPACE.unpack("NnnnnN")
18+
assert_equal "6ba7b812-9dad-11d1-80b4-00c04fd430c8", "%08x-%04x-%04x-%04x-%04x%08x" % Digest::UUID::OID_NAMESPACE.unpack("NnnnnN")
19+
assert_equal "6ba7b814-9dad-11d1-80b4-00c04fd430c8", "%08x-%04x-%04x-%04x-%04x%08x" % Digest::UUID::X500_NAMESPACE.unpack("NnnnnN")
20+
end
21+
22+
def test_v3_uuids_with_rfc4122_namespaced_uuids_enabled
23+
with_use_rfc4122_namespaced_uuids_set do
24+
assert_not_deprecated do
25+
assert_equal "3d813cbb-47fb-32ba-91df-831e1593ac29", Digest::UUID.uuid_v3("6BA7B810-9DAD-11D1-80B4-00C04FD430C8", "www.widgets.com")
26+
assert_equal "3d813cbb-47fb-32ba-91df-831e1593ac29", Digest::UUID.uuid_v3("6ba7b810-9dad-11d1-80b4-00c04fd430c8", "www.widgets.com")
27+
assert_equal "3d813cbb-47fb-32ba-91df-831e1593ac29", Digest::UUID.uuid_v3(Digest::UUID::DNS_NAMESPACE, "www.widgets.com")
28+
29+
assert_equal "86df55fb-428e-3843-8583-ba3c05f290bc", Digest::UUID.uuid_v3("6BA7B811-9DAD-11D1-80B4-00C04FD430C8", "http://www.widgets.com")
30+
assert_equal "86df55fb-428e-3843-8583-ba3c05f290bc", Digest::UUID.uuid_v3("6ba7b811-9dad-11d1-80b4-00c04fd430c8", "http://www.widgets.com")
31+
assert_equal "86df55fb-428e-3843-8583-ba3c05f290bc", Digest::UUID.uuid_v3(Digest::UUID::URL_NAMESPACE, "http://www.widgets.com")
32+
33+
assert_equal "8c29ab0e-a2dc-3482-b5eb-20cb2e2387a1", Digest::UUID.uuid_v3("6BA7B812-9DAD-11D1-80B4-00C04FD430C8", "1.2.3")
34+
assert_equal "8c29ab0e-a2dc-3482-b5eb-20cb2e2387a1", Digest::UUID.uuid_v3("6ba7b812-9dad-11d1-80b4-00c04fd430c8", "1.2.3")
35+
assert_equal "8c29ab0e-a2dc-3482-b5eb-20cb2e2387a1", Digest::UUID.uuid_v3(Digest::UUID::OID_NAMESPACE, "1.2.3")
36+
37+
assert_equal "ee49149d-53a4-304a-890b-468229f6afc3", Digest::UUID.uuid_v3("6BA7B814-9DAD-11D1-80B4-00C04FD430C8", "cn=John Doe, ou=People, o=Acme, Inc., c=US")
38+
assert_equal "ee49149d-53a4-304a-890b-468229f6afc3", Digest::UUID.uuid_v3("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "cn=John Doe, ou=People, o=Acme, Inc., c=US")
39+
assert_equal "ee49149d-53a4-304a-890b-468229f6afc3", Digest::UUID.uuid_v3(Digest::UUID::X500_NAMESPACE, "cn=John Doe, ou=People, o=Acme, Inc., c=US")
40+
end
41+
42+
assert_raise ArgumentError do
43+
Digest::UUID.uuid_v3("A non-UUID string", "some value")
44+
end
45+
end
46+
end
47+
48+
def test_v3_uuids_with_rfc4122_namespaced_uuids_disabled
49+
assert_deprecated do
50+
assert_equal "995e5d8e-364a-386e-8b3d-65d6a7d5478f", Digest::UUID.uuid_v3("6BA7B810-9DAD-11D1-80B4-00C04FD430C8", "www.widgets.com")
51+
end
52+
53+
assert_deprecated do
54+
assert_equal "fe5a52d1-703f-3326-b919-2d96003288f3", Digest::UUID.uuid_v3("6ba7b810-9dad-11d1-80b4-00c04fd430c8", "www.widgets.com")
55+
end
56+
57+
assert_not_deprecated do
58+
assert_equal "3d813cbb-47fb-32ba-91df-831e1593ac29", Digest::UUID.uuid_v3(Digest::UUID::DNS_NAMESPACE, "www.widgets.com")
59+
end
60+
61+
assert_deprecated do
62+
assert_equal "1a27509f-2955-3d78-8f53-c92935fecc57", Digest::UUID.uuid_v3("6BA7B811-9DAD-11D1-80B4-00C04FD430C8", "http://www.widgets.com")
63+
end
64+
65+
assert_deprecated do
66+
assert_equal "2676127a-9073-36e3-b9db-14bc16b7c083", Digest::UUID.uuid_v3("6ba7b811-9dad-11d1-80b4-00c04fd430c8", "http://www.widgets.com")
67+
end
68+
69+
assert_not_deprecated do
70+
assert_equal "86df55fb-428e-3843-8583-ba3c05f290bc", Digest::UUID.uuid_v3(Digest::UUID::URL_NAMESPACE, "http://www.widgets.com")
71+
end
72+
73+
assert_deprecated do
74+
assert_equal "2e2a2437-160c-36e7-952d-d6f494edea44", Digest::UUID.uuid_v3("6BA7B812-9DAD-11D1-80B4-00C04FD430C8", "1.2.3")
75+
end
76+
77+
assert_deprecated do
78+
assert_equal "719357e1-54f1-3930-8113-a1faffde48fa", Digest::UUID.uuid_v3("6ba7b812-9dad-11d1-80b4-00c04fd430c8", "1.2.3")
79+
end
80+
81+
assert_not_deprecated do
82+
assert_equal "8c29ab0e-a2dc-3482-b5eb-20cb2e2387a1", Digest::UUID.uuid_v3(Digest::UUID::OID_NAMESPACE, "1.2.3")
83+
end
84+
85+
assert_deprecated do
86+
assert_equal "01c2671b-fd20-3e43-8cff-217f40e110c8", Digest::UUID.uuid_v3("6BA7B814-9DAD-11D1-80B4-00C04FD430C8", "cn=John Doe, ou=People, o=Acme, Inc., c=US")
87+
end
88+
89+
assert_deprecated do
90+
assert_equal "32560c4a-c9f1-3974-9c1c-5e52761e091f", Digest::UUID.uuid_v3("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "cn=John Doe, ou=People, o=Acme, Inc., c=US")
91+
end
92+
93+
assert_not_deprecated do
94+
assert_equal "ee49149d-53a4-304a-890b-468229f6afc3", Digest::UUID.uuid_v3(Digest::UUID::X500_NAMESPACE, "cn=John Doe, ou=People, o=Acme, Inc., c=US")
95+
end
96+
97+
assert_deprecated do
98+
assert_equal "cd3d768f-7380-3d1f-8834-e034b40e65ea", Digest::UUID.uuid_v3("A non-UUID string", "some value")
99+
end
100+
end
101+
102+
def test_v5_uuids_with_rfc4122_namespaced_uuids_enabled
103+
with_use_rfc4122_namespaced_uuids_set do
104+
assert_not_deprecated do
105+
assert_equal "21f7f8de-8051-5b89-8680-0195ef798b6a", Digest::UUID.uuid_v5("6BA7B810-9DAD-11D1-80B4-00C04FD430C8", "www.widgets.com")
106+
assert_equal "21f7f8de-8051-5b89-8680-0195ef798b6a", Digest::UUID.uuid_v5("6ba7b810-9dad-11d1-80b4-00c04fd430c8", "www.widgets.com")
107+
assert_equal "21f7f8de-8051-5b89-8680-0195ef798b6a", Digest::UUID.uuid_v5(Digest::UUID::DNS_NAMESPACE, "www.widgets.com")
108+
109+
assert_equal "4e570fd8-186d-5a74-90f0-4d28e34673a1", Digest::UUID.uuid_v5("6BA7B811-9DAD-11D1-80B4-00C04FD430C8", "http://www.widgets.com")
110+
assert_equal "4e570fd8-186d-5a74-90f0-4d28e34673a1", Digest::UUID.uuid_v5("6ba7b811-9dad-11d1-80b4-00c04fd430c8", "http://www.widgets.com")
111+
assert_equal "4e570fd8-186d-5a74-90f0-4d28e34673a1", Digest::UUID.uuid_v5(Digest::UUID::URL_NAMESPACE, "http://www.widgets.com")
112+
113+
assert_equal "42d5e23b-3a02-5135-85c6-52d1102f1f00", Digest::UUID.uuid_v5("6BA7B812-9DAD-11D1-80B4-00C04FD430C8", "1.2.3")
114+
assert_equal "42d5e23b-3a02-5135-85c6-52d1102f1f00", Digest::UUID.uuid_v5("6ba7b812-9dad-11d1-80b4-00c04fd430c8", "1.2.3")
115+
assert_equal "42d5e23b-3a02-5135-85c6-52d1102f1f00", Digest::UUID.uuid_v5(Digest::UUID::OID_NAMESPACE, "1.2.3")
116+
117+
assert_equal "fd5b2ddf-bcfe-58b6-90d6-db50f74db527", Digest::UUID.uuid_v5("6BA7B814-9DAD-11D1-80B4-00C04FD430C8", "cn=John Doe, ou=People, o=Acme, Inc., c=US")
118+
assert_equal "fd5b2ddf-bcfe-58b6-90d6-db50f74db527", Digest::UUID.uuid_v5("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "cn=John Doe, ou=People, o=Acme, Inc., c=US")
119+
assert_equal "fd5b2ddf-bcfe-58b6-90d6-db50f74db527", Digest::UUID.uuid_v5(Digest::UUID::X500_NAMESPACE, "cn=John Doe, ou=People, o=Acme, Inc., c=US")
120+
end
121+
122+
assert_raise ArgumentError do
123+
Digest::UUID.uuid_v5("A non-UUID string", "some value")
124+
end
125+
end
126+
end
127+
128+
def test_v5_uuids_with_rfc4122_namespaced_uuids_disabled
129+
assert_deprecated do
130+
assert_equal "442faf6c-4996-5266-aeef-ecadb5d49e54", Digest::UUID.uuid_v5("6BA7B810-9DAD-11D1-80B4-00C04FD430C8", "www.widgets.com")
131+
end
132+
133+
assert_deprecated do
134+
assert_equal "027963ef-431c-5670-ab2c-820168da74e9", Digest::UUID.uuid_v5("6ba7b810-9dad-11d1-80b4-00c04fd430c8", "www.widgets.com")
135+
end
136+
137+
assert_not_deprecated do
138+
assert_equal "21f7f8de-8051-5b89-8680-0195ef798b6a", Digest::UUID.uuid_v5(Digest::UUID::DNS_NAMESPACE, "www.widgets.com")
139+
end
140+
141+
assert_deprecated do
142+
assert_equal "59207e54-33c5-5914-ab39-b7f3333a0097", Digest::UUID.uuid_v5("6BA7B811-9DAD-11D1-80B4-00C04FD430C8", "http://www.widgets.com")
143+
end
144+
145+
assert_deprecated do
146+
assert_equal "d8e1e518-2337-58e5-bf52-6c563631db90", Digest::UUID.uuid_v5("6ba7b811-9dad-11d1-80b4-00c04fd430c8", "http://www.widgets.com")
147+
end
148+
149+
assert_not_deprecated do
150+
assert_equal "4e570fd8-186d-5a74-90f0-4d28e34673a1", Digest::UUID.uuid_v5(Digest::UUID::URL_NAMESPACE, "http://www.widgets.com")
151+
end
152+
153+
assert_deprecated do
154+
assert_equal "72409eff-7406-5906-b86e-6c7a726ed04e", Digest::UUID.uuid_v5("6BA7B812-9DAD-11D1-80B4-00C04FD430C8", "1.2.3")
155+
end
156+
157+
assert_deprecated do
158+
assert_equal "b9b86653-48bb-5059-861a-2c72974b5c8d", Digest::UUID.uuid_v5("6ba7b812-9dad-11d1-80b4-00c04fd430c8", "1.2.3")
159+
end
160+
161+
assert_not_deprecated do
162+
assert_equal "42d5e23b-3a02-5135-85c6-52d1102f1f00", Digest::UUID.uuid_v5(Digest::UUID::OID_NAMESPACE, "1.2.3")
163+
end
164+
165+
assert_deprecated do
166+
assert_equal "de6fe50e-eded-580a-81c9-f0774a3531da", Digest::UUID.uuid_v5("6BA7B814-9DAD-11D1-80B4-00C04FD430C8", "cn=John Doe, ou=People, o=Acme, Inc., c=US")
167+
end
168+
169+
assert_deprecated do
170+
assert_equal "e84a8a4e-a5c7-55b8-ad09-020c0b5662a7", Digest::UUID.uuid_v5("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "cn=John Doe, ou=People, o=Acme, Inc., c=US")
171+
end
172+
173+
assert_not_deprecated do
174+
assert_equal "fd5b2ddf-bcfe-58b6-90d6-db50f74db527", Digest::UUID.uuid_v5(Digest::UUID::X500_NAMESPACE, "cn=John Doe, ou=People, o=Acme, Inc., c=US")
175+
end
176+
177+
assert_deprecated do
178+
assert_equal "b42d5423-1047-5bb3-afd4-0dec60fb22d2", Digest::UUID.uuid_v5("A non-UUID string", "some value")
179+
end
19180
end
20181

21182
def test_invalid_hash_class

guides/source/configuring.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,6 +1385,26 @@ Configures deprecation warnings that the Application considers disallowed. This
13851385
13861386
Allows you to disable all deprecation warnings (including disallowed deprecations); it makes `ActiveSupport::Deprecation.warn` a no-op. This is enabled by default in production.
13871387
1388+
#### `config.active_support.use_rfc4122_namespaced_uuids`
1389+
1390+
Specifies whether generated namespaced UUIDs follow the RFC 4122 standard for namespace IDs provided as a `String` to `Digest::UUID.uuid_v3` or `Digest::UUID.uuid_v5` method calls.
1391+
1392+
If set to `true`:
1393+
1394+
* Only UUIDs are allowed as namespace IDs. If a namespace ID value provided is not allowed, an `ArgumentError` will be raised.
1395+
* No deprecation warning will be generated, no matter if the namespace ID used is one of the constants defined on `Digest::UUID` or a `String`.
1396+
* Namespace IDs are case-insensitive.
1397+
* All generated namespaced UUIDs should be compliant to the standard.
1398+
1399+
If set to `false`:
1400+
1401+
* Any `String` value can be used as namespace ID (although not recommended). No `ArgumentError` will be raised in this case in order to preserve backwards-compatibility.
1402+
* A deprecation warning will be generated if the namespace ID provided is not one of the constants defined on `Digest::UUID`.
1403+
* Namespace IDs are case-sensitive.
1404+
* Only namespaced UUIDs generated using one of the namespace ID constants defined on `Digest::UUID` are compliant to the standard.
1405+
1406+
The default value is `true` for new apps. Upgraded apps will have that value set to `false` for backwards-compatibility.
1407+
13881408
#### `ActiveSupport::Logger.silencer`
13891409
13901410
Is set to `false` to disable the ability to silence logging in a block. The default is `true`.

railties/lib/rails/application/configuration.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ def load_defaults(target_version)
213213
active_support.key_generator_hash_digest_class = OpenSSL::Digest::SHA256
214214
active_support.remove_deprecated_time_with_zone_name = true
215215
active_support.cache_format_version = 7.0
216+
active_support.use_rfc4122_namespaced_uuids = true
216217
end
217218

218219
if respond_to?(:action_mailer)

railties/test/application/configuration_test.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,6 +2422,20 @@ def index
24222422
assert_equal 1234, ActiveSupport.test_parallelization_threshold
24232423
end
24242424

2425+
test "ActiveSupport.use_rfc4122_namespaced_uuids is enabled by default for new apps" do
2426+
app "development"
2427+
2428+
assert_equal true, ActiveSupport.use_rfc4122_namespaced_uuids
2429+
end
2430+
2431+
test "ActiveSupport.use_rfc4122_namespaced_uuids is disabled by default for upgraded apps" do
2432+
remove_from_config '.*config\.load_defaults.*\n'
2433+
2434+
app "development"
2435+
2436+
assert_equal false, ActiveSupport.use_rfc4122_namespaced_uuids
2437+
end
2438+
24252439
test "custom serializers should be able to set via config.active_job.custom_serializers in an initializer" do
24262440
class ::DummySerializer < ActiveJob::Serializers::ObjectSerializer; end
24272441

0 commit comments

Comments
 (0)