@@ -48,195 +48,5 @@ module Concurrent
48
48
expect ( subject . remaining_capacity ) . to be < expected_max
49
49
end
50
50
end
51
-
52
- context '#fallback_policy' do
53
-
54
- let! ( :min_threads ) { 1 }
55
- let! ( :max_threads ) { 1 }
56
- let! ( :idletime ) { 60 }
57
- let! ( :max_queue ) { 1 }
58
-
59
- context ':abort' do
60
-
61
- subject do
62
- described_class . new (
63
- min_threads : min_threads ,
64
- max_threads : max_threads ,
65
- idletime : idletime ,
66
- max_queue : max_queue ,
67
- fallback_policy : :abort
68
- )
69
- end
70
-
71
- specify '#post raises an error when the queue is at capacity' do
72
- expect {
73
- 100 . times { subject . post { sleep ( 1 ) } }
74
- } . to raise_error ( Concurrent ::RejectedExecutionError )
75
- end
76
-
77
- specify '#<< raises an error when the queue is at capacity' do
78
- expect {
79
- 100 . times { subject << proc { sleep ( 1 ) } }
80
- } . to raise_error ( Concurrent ::RejectedExecutionError )
81
- end
82
-
83
- specify '#post raises an error when the executor is shutting down' do
84
- expect {
85
- subject . shutdown ; subject . post { sleep ( 1 ) }
86
- } . to raise_error ( Concurrent ::RejectedExecutionError )
87
- end
88
-
89
- specify '#<< raises an error when the executor is shutting down' do
90
- expect {
91
- subject . shutdown ; subject << proc { sleep ( 1 ) }
92
- } . to raise_error ( Concurrent ::RejectedExecutionError )
93
- end
94
-
95
- specify 'a #post task is never executed when the queue is at capacity' do
96
- executed = Concurrent ::AtomicFixnum . new ( 0 )
97
- 10 . times do
98
- begin
99
- subject . post { executed . increment ; sleep ( 0.1 ) }
100
- rescue
101
- end
102
- end
103
- sleep ( 0.2 )
104
- expect ( executed . value ) . to be < 10
105
- end
106
-
107
- specify 'a #<< task is never executed when the queue is at capacity' do
108
- executed = Concurrent ::AtomicFixnum . new ( 0 )
109
- 10 . times do
110
- begin
111
- subject << proc { executed . increment ; sleep ( 0.1 ) }
112
- rescue
113
- end
114
- end
115
- sleep ( 0.2 )
116
- expect ( executed . value ) . to be < 10
117
- end
118
- end
119
-
120
- context ':discard' do
121
-
122
- subject do
123
- described_class . new (
124
- min_threads : min_threads ,
125
- max_threads : max_threads ,
126
- idletime : idletime ,
127
- max_queue : max_queue ,
128
- fallback_policy : :discard
129
- )
130
- end
131
-
132
- specify 'a #post task is never executed when the queue is at capacity' do
133
- executed = Concurrent ::AtomicFixnum . new ( 0 )
134
- 1000 . times do
135
- subject . post { executed . increment }
136
- end
137
- sleep ( 0.1 )
138
- expect ( executed . value ) . to be < 1000
139
- end
140
-
141
- specify 'a #<< task is never executed when the queue is at capacity' do
142
- executed = Concurrent ::AtomicFixnum . new ( 0 )
143
- 1000 . times do
144
- subject << proc { executed . increment }
145
- end
146
- sleep ( 0.1 )
147
- expect ( executed . value ) . to be < 1000
148
- end
149
-
150
- specify 'a #post task is never executed when the executor is shutting down' do
151
- executed = Concurrent ::AtomicFixnum . new ( 0 )
152
- subject . shutdown
153
- subject . post { executed . increment }
154
- sleep ( 0.1 )
155
- expect ( executed . value ) . to be 0
156
- end
157
-
158
- specify 'a #<< task is never executed when the executor is shutting down' do
159
- executed = Concurrent ::AtomicFixnum . new ( 0 )
160
- subject . shutdown
161
- subject << proc { executed . increment }
162
- sleep ( 0.1 )
163
- expect ( executed . value ) . to be 0
164
- end
165
-
166
- specify '#post returns false when the executor is shutting down' do
167
- executed = Concurrent ::AtomicFixnum . new ( 0 )
168
- subject . shutdown
169
- ret = subject . post { executed . increment }
170
- expect ( ret ) . to be false
171
- end
172
- end
173
-
174
- context ':caller_runs' do
175
-
176
- subject do
177
- described_class . new (
178
- min_threads : 1 ,
179
- max_threads : 1 ,
180
- idletime : idletime ,
181
- max_queue : 1 ,
182
- fallback_policy : :caller_runs
183
- )
184
- end
185
-
186
- specify '#post does not create any new threads when the queue is at capacity' do
187
- initial = Thread . list . length
188
- 5 . times { subject . post { sleep ( 0.1 ) } }
189
- expect ( Thread . list . length ) . to be < initial + 5
190
- end
191
-
192
- specify '#<< executes the task on the current thread when the queue is at capacity' do
193
- expect ( subject ) . to receive ( :handle_fallback ) . with ( any_args ) . at_least ( :once )
194
- 5 . times { subject << proc { sleep ( 0.1 ) } }
195
- end
196
-
197
- specify '#post executes the task on the current thread when the queue is at capacity' do
198
- latch = Concurrent ::CountDownLatch . new ( 5 )
199
- subject . post { sleep ( 1 ) }
200
- 5 . times { |i | subject . post { latch . count_down } }
201
- latch . wait ( 0.1 )
202
- end
203
-
204
- specify '#post executes the task on the current thread when the executor is shutting down' do
205
- latch = Concurrent ::CountDownLatch . new ( 1 )
206
- subject . shutdown
207
- subject . post { latch . count_down }
208
- latch . wait ( 0.1 )
209
- end
210
-
211
- specify '#<< executes the task on the current thread when the executor is shutting down' do
212
- latch = Concurrent ::CountDownLatch . new ( 1 )
213
- subject . shutdown
214
- subject << proc { latch . count_down }
215
- latch . wait ( 0.1 )
216
- end
217
- end
218
- end
219
-
220
- context '#fallback_policy' do
221
- context ':caller_runs is honoured even if the old fallback_policy arg is used' do
222
-
223
- subject do
224
- described_class . new (
225
- min_threads : 1 ,
226
- max_threads : 1 ,
227
- idletime : 60 ,
228
- max_queue : 1 ,
229
- fallback_policy : :caller_runs
230
- )
231
- end
232
-
233
- specify '#<< executes the task on the current thread when the executor is shutting down' do
234
- latch = Concurrent ::CountDownLatch . new ( 1 )
235
- subject . shutdown
236
- subject << proc { latch . count_down }
237
- latch . wait ( 0.1 )
238
- end
239
- end
240
- end
241
51
end
242
52
end
0 commit comments