@@ -9,11 +9,12 @@ class SolidCache::ExpiryTest < ActiveSupport::TestCase
9
9
10
10
setup do
11
11
@namespace = "test-#{ SecureRandom . hex } "
12
- SolidCache ::Cluster . any_instance . stubs ( :rand ) . returns ( 0 )
13
12
end
14
13
15
14
[ :thread , :job ] . each do |expiry_method |
16
15
test "expires old records (#{ expiry_method } )" do
16
+ SolidCache ::Cluster . any_instance . stubs ( :rand ) . returns ( 0 )
17
+
17
18
@cache = lookup_store ( expiry_batch_size : 3 , max_age : 2 . weeks , expiry_method : expiry_method )
18
19
default_shard_keys = shard_keys ( @cache , :default )
19
20
@cache . write ( default_shard_keys [ 0 ] , 1 )
@@ -36,6 +37,8 @@ class SolidCache::ExpiryTest < ActiveSupport::TestCase
36
37
end
37
38
38
39
test "expires records when the cache is full (#{ expiry_method } )" do
40
+ SolidCache ::Cluster . any_instance . stubs ( :rand ) . returns ( 0 )
41
+
39
42
@cache = lookup_store ( expiry_batch_size : 3 , max_age : nil , max_entries : 2 , expiry_method : expiry_method )
40
43
default_shard_keys = shard_keys ( @cache , :default )
41
44
@cache . write ( default_shard_keys [ 0 ] , 1 )
@@ -54,6 +57,8 @@ class SolidCache::ExpiryTest < ActiveSupport::TestCase
54
57
end
55
58
56
59
test "expires records no shards (#{ expiry_method } )" do
60
+ SolidCache ::Cluster . any_instance . stubs ( :rand ) . returns ( 0 )
61
+
57
62
@cache = ActiveSupport ::Cache . lookup_store ( :solid_cache_store , expiry_batch_size : 3 , namespace : @namespace , max_entries : 2 , expiry_method : expiry_method )
58
63
default_shard_keys = shard_keys ( @cache , :default )
59
64
@@ -72,8 +77,39 @@ class SolidCache::ExpiryTest < ActiveSupport::TestCase
72
77
assert_equal 1 , SolidCache . each_shard . sum { SolidCache ::Entry . count }
73
78
end
74
79
80
+ test "expires when random number is below threshold (#{ expiry_method } )" do
81
+ SolidCache ::Cluster . any_instance . stubs ( :rand ) . returns ( 0.416 )
82
+
83
+ @cache = ActiveSupport ::Cache . lookup_store ( :solid_cache_store , expiry_batch_size : 3 , namespace : @namespace , max_entries : 1 , expiry_method : expiry_method )
84
+ default_shard_keys = shard_keys ( @cache , :default )
85
+
86
+ @cache . write ( default_shard_keys [ 0 ] , 1 )
87
+ @cache . write ( default_shard_keys [ 1 ] , 2 )
88
+
89
+ sleep 0.1
90
+ perform_enqueued_jobs
91
+
92
+ assert_equal 0 , SolidCache . each_shard . sum { SolidCache ::Entry . count }
93
+ end
94
+
95
+ test "doesn't expire when random number is above threshold (#{ expiry_method } )" do
96
+ SolidCache ::Cluster . any_instance . stubs ( :rand ) . returns ( 0.417 )
97
+
98
+ @cache = ActiveSupport ::Cache . lookup_store ( :solid_cache_store , expiry_batch_size : 3 , namespace : @namespace , max_entries : 1 , expiry_method : expiry_method )
99
+ default_shard_keys = shard_keys ( @cache , :default )
100
+
101
+ @cache . write ( default_shard_keys [ 0 ] , 1 )
102
+ @cache . write ( default_shard_keys [ 1 ] , 2 )
103
+
104
+ sleep 0.1
105
+ perform_enqueued_jobs
106
+
107
+ assert_equal 2 , SolidCache . each_shard . sum { SolidCache ::Entry . count }
108
+ end
109
+
75
110
unless ENV [ "NO_CONNECTS_TO" ]
76
111
test "expires old records multiple shards (#{ expiry_method } )" do
112
+ SolidCache ::Cluster . any_instance . stubs ( :rand ) . returns ( 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 )
77
113
@cache = lookup_store ( expiry_batch_size : 2 , cluster : { shards : [ :default , :primary_shard_one ] } , expiry_method : expiry_method )
78
114
default_shard_keys = shard_keys ( @cache , :default )
79
115
shard_one_keys = shard_keys ( @cache , :primary_shard_one )
@@ -118,6 +154,8 @@ class SolidCache::ExpiryTest < ActiveSupport::TestCase
118
154
end
119
155
120
156
test "expires old records with a custom queue" do
157
+ SolidCache ::Cluster . any_instance . stubs ( :rand ) . returns ( 0 , 1 , 0 , 1 )
158
+
121
159
@cache = lookup_store ( expiry_batch_size : 3 , max_entries : 2 , expiry_method : :job , expiry_queue : :cache_expiry )
122
160
123
161
default_shard_keys = shard_keys ( @cache , :default )
0 commit comments