Skip to content

Commit f472048

Browse files
authored
Merge pull request rails#43675 from esparta/fix_race_conditions_test_cache_ii
ActiveSupport, fix more race conditions on test/cache - part II
2 parents 485d3e9 + efed47e commit f472048

File tree

2 files changed

+83
-43
lines changed

2 files changed

+83
-43
lines changed

activesupport/test/cache/behaviors/cache_store_behavior.rb

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -655,21 +655,24 @@ def assert_uncompressed(value, **options)
655655
end
656656

657657
def assert_compression(should_compress, value, **options)
658+
actual = "actual" + SecureRandom.uuid
659+
uncompressed = "uncompressed" + SecureRandom.uuid
660+
658661
freeze_time do
659-
@cache.write("actual", value, options)
660-
@cache.write("uncompressed", value, options.merge(compress: false))
662+
@cache.write(actual, value, options)
663+
@cache.write(uncompressed, value, options.merge(compress: false))
661664
end
662665

663666
if value.nil?
664-
assert_nil @cache.read("actual")
665-
assert_nil @cache.read("uncompressed")
667+
assert_nil @cache.read(actual)
668+
assert_nil @cache.read(uncompressed)
666669
else
667-
assert_equal value, @cache.read("actual")
668-
assert_equal value, @cache.read("uncompressed")
670+
assert_equal value, @cache.read(actual)
671+
assert_equal value, @cache.read(uncompressed)
669672
end
670673

671-
actual_entry = @cache.send(:read_entry, @cache.send(:normalize_key, "actual", {}), **{})
672-
uncompressed_entry = @cache.send(:read_entry, @cache.send(:normalize_key, "uncompressed", {}), **{})
674+
actual_entry = @cache.send(:read_entry, @cache.send(:normalize_key, actual, {}), **{})
675+
uncompressed_entry = @cache.send(:read_entry, @cache.send(:normalize_key, uncompressed, {}), **{})
673676

674677
actual_payload = @cache.send(:serialize_entry, actual_entry, **@cache.send(:merged_options, options))
675678
uncompressed_payload = @cache.send(:serialize_entry, uncompressed_entry, compress: false)

activesupport/test/cache/behaviors/cache_store_version_behavior.rb

Lines changed: 72 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,85 +4,122 @@ module CacheStoreVersionBehavior
44
ModelWithKeyAndVersion = Struct.new(:cache_key, :cache_version)
55

66
def test_fetch_with_right_version_should_hit
7-
@cache.fetch("foo", version: 1) { "bar" }
8-
assert_equal "bar", @cache.read("foo", version: 1)
7+
key = SecureRandom.uuid
8+
value = SecureRandom.alphanumeric
9+
10+
@cache.fetch(key, version: 1) { value }
11+
assert_equal value, @cache.read(key, version: 1)
912
end
1013

1114
def test_fetch_with_wrong_version_should_miss
12-
@cache.fetch("foo", version: 1) { "bar" }
13-
assert_nil @cache.read("foo", version: 2)
15+
key = SecureRandom.uuid
16+
17+
@cache.fetch(key, version: 1) { SecureRandom.alphanumeric }
18+
assert_nil @cache.read(key, version: 2)
1419
end
1520

1621
def test_read_with_right_version_should_hit
17-
@cache.write("foo", "bar", version: 1)
18-
assert_equal "bar", @cache.read("foo", version: 1)
22+
key = SecureRandom.uuid
23+
value = SecureRandom.alphanumeric
24+
25+
@cache.write(key, value, version: 1)
26+
assert_equal value, @cache.read(key, version: 1)
1927
end
2028

2129
def test_read_with_wrong_version_should_miss
22-
@cache.write("foo", "bar", version: 1)
23-
assert_nil @cache.read("foo", version: 2)
30+
key = SecureRandom.uuid
31+
value = SecureRandom.alphanumeric
32+
33+
@cache.write(key, value, version: 1)
34+
assert_nil @cache.read(key, version: 2)
2435
end
2536

2637
def test_exist_with_right_version_should_be_true
27-
@cache.write("foo", "bar", version: 1)
28-
assert @cache.exist?("foo", version: 1)
38+
key = SecureRandom.uuid
39+
40+
@cache.write(key, SecureRandom.alphanumeric, version: 1)
41+
assert @cache.exist?(key, version: 1)
2942
end
3043

3144
def test_exist_with_wrong_version_should_be_false
32-
@cache.write("foo", "bar", version: 1)
33-
assert_not @cache.exist?("foo", version: 2)
45+
key = SecureRandom.uuid
46+
47+
@cache.write(key, SecureRandom.alphanumeric, version: 1)
48+
assert_not @cache.exist?(key, version: 2)
3449
end
3550

3651
def test_reading_and_writing_with_model_supporting_cache_version
37-
m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
38-
m1v2 = ModelWithKeyAndVersion.new("model/1", 2)
52+
model_name = SecureRandom.alphanumeric
53+
54+
m1v1 = ModelWithKeyAndVersion.new("#{model_name}/1", 1)
55+
m1v2 = ModelWithKeyAndVersion.new("#{model_name}/1", 2)
56+
57+
value = SecureRandom.alphanumeric
3958

40-
@cache.write(m1v1, "bar")
41-
assert_equal "bar", @cache.read(m1v1)
59+
@cache.write(m1v1, value)
60+
assert_equal value, @cache.read(m1v1)
4261
assert_nil @cache.read(m1v2)
4362
end
4463

4564
def test_reading_and_writing_with_model_supporting_cache_version_using_nested_key
46-
m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
47-
m1v2 = ModelWithKeyAndVersion.new("model/1", 2)
65+
model_name = SecureRandom.alphanumeric
4866

49-
@cache.write([ "something", m1v1 ], "bar")
50-
assert_equal "bar", @cache.read([ "something", m1v1 ])
67+
m1v1 = ModelWithKeyAndVersion.new("#{model_name}/1", 1)
68+
m1v2 = ModelWithKeyAndVersion.new("#{model_name}/1", 2)
69+
70+
value = SecureRandom.alphanumeric
71+
72+
@cache.write([ "something", m1v1 ], value)
73+
assert_equal value, @cache.read([ "something", m1v1 ])
5174
assert_nil @cache.read([ "something", m1v2 ])
5275
end
5376

5477
def test_fetching_with_model_supporting_cache_version
55-
m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
56-
m1v2 = ModelWithKeyAndVersion.new("model/1", 2)
78+
model_name = SecureRandom.alphanumeric
79+
80+
m1v1 = ModelWithKeyAndVersion.new("#{model_name}/1", 1)
81+
m1v2 = ModelWithKeyAndVersion.new("#{model_name}/1", 2)
82+
83+
value = SecureRandom.alphanumeric
84+
other_value = SecureRandom.alphanumeric
5785

58-
@cache.fetch(m1v1) { "bar" }
59-
assert_equal "bar", @cache.fetch(m1v1) { "bu" }
60-
assert_equal "bu", @cache.fetch(m1v2) { "bu" }
86+
@cache.fetch(m1v1) { value }
87+
assert_equal value, @cache.fetch(m1v1) { other_value }
88+
assert_equal other_value, @cache.fetch(m1v2) { other_value }
6189
end
6290

6391
def test_exist_with_model_supporting_cache_version
64-
m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
65-
m1v2 = ModelWithKeyAndVersion.new("model/1", 2)
92+
model_name = SecureRandom.alphanumeric
6693

67-
@cache.write(m1v1, "bar")
94+
m1v1 = ModelWithKeyAndVersion.new("#{model_name}/1", 1)
95+
m1v2 = ModelWithKeyAndVersion.new("#{model_name}/1", 2)
96+
97+
value = SecureRandom.alphanumeric
98+
99+
@cache.write(m1v1, value)
68100
assert @cache.exist?(m1v1)
69101
assert_not @cache.fetch(m1v2)
70102
end
71103

72104
def test_fetch_multi_with_model_supporting_cache_version
73-
m1v1 = ModelWithKeyAndVersion.new("model/1", 1)
74-
m2v1 = ModelWithKeyAndVersion.new("model/2", 1)
75-
m2v2 = ModelWithKeyAndVersion.new("model/2", 2)
105+
model_name = SecureRandom.alphanumeric
106+
107+
m1v1 = ModelWithKeyAndVersion.new("#{model_name}/1", 1)
108+
m2v1 = ModelWithKeyAndVersion.new("#{model_name}/2", 1)
109+
m2v2 = ModelWithKeyAndVersion.new("#{model_name}/2", 2)
76110

77111
first_fetch_values = @cache.fetch_multi(m1v1, m2v1) { |m| m.cache_key }
78112
second_fetch_values = @cache.fetch_multi(m1v1, m2v2) { |m| m.cache_key + " 2nd" }
79113

80-
assert_equal({ m1v1 => "model/1", m2v1 => "model/2" }, first_fetch_values)
81-
assert_equal({ m1v1 => "model/1", m2v2 => "model/2 2nd" }, second_fetch_values)
114+
assert_equal({ m1v1 => "#{model_name}/1", m2v1 => "#{model_name}/2" }, first_fetch_values)
115+
assert_equal({ m1v1 => "#{model_name}/1", m2v2 => "#{model_name}/2 2nd" }, second_fetch_values)
82116
end
83117

84118
def test_version_is_normalized
85-
@cache.write("foo", "bar", version: 1)
86-
assert_equal "bar", @cache.read("foo", version: "1")
119+
key = SecureRandom.uuid
120+
value = SecureRandom.alphanumeric
121+
122+
@cache.write(key, value, version: 1)
123+
assert_equal value, @cache.read(key, version: "1")
87124
end
88125
end

0 commit comments

Comments
 (0)