airbrake-ruby 6.1.0-java → 6.1.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/airbrake-ruby/filters/git_last_checkout_filter.rb +1 -1
  3. data/lib/airbrake-ruby/nested_exception.rb +10 -1
  4. data/lib/airbrake-ruby/notice.rb +5 -3
  5. data/lib/airbrake-ruby/version.rb +1 -1
  6. metadata +4 -122
  7. data/spec/airbrake_spec.rb +0 -522
  8. data/spec/async_sender_spec.rb +0 -65
  9. data/spec/backtrace_spec.rb +0 -430
  10. data/spec/benchmark_spec.rb +0 -35
  11. data/spec/code_hunk_spec.rb +0 -124
  12. data/spec/config/processor_spec.rb +0 -167
  13. data/spec/config/validator_spec.rb +0 -204
  14. data/spec/config_spec.rb +0 -188
  15. data/spec/context_spec.rb +0 -54
  16. data/spec/deploy_notifier_spec.rb +0 -50
  17. data/spec/file_cache_spec.rb +0 -35
  18. data/spec/filter_chain_spec.rb +0 -124
  19. data/spec/filters/context_filter_spec.rb +0 -32
  20. data/spec/filters/dependency_filter_spec.rb +0 -14
  21. data/spec/filters/exception_attributes_filter_spec.rb +0 -52
  22. data/spec/filters/gem_root_filter_spec.rb +0 -44
  23. data/spec/filters/git_last_checkout_filter_spec.rb +0 -61
  24. data/spec/filters/git_repository_filter_spec.rb +0 -72
  25. data/spec/filters/git_revision_filter_spec.rb +0 -126
  26. data/spec/filters/keys_allowlist_spec.rb +0 -204
  27. data/spec/filters/keys_blocklist_spec.rb +0 -242
  28. data/spec/filters/root_directory_filter_spec.rb +0 -39
  29. data/spec/filters/sql_filter_spec.rb +0 -274
  30. data/spec/filters/system_exit_filter_spec.rb +0 -16
  31. data/spec/filters/thread_filter_spec.rb +0 -281
  32. data/spec/fixtures/notroot.txt +0 -7
  33. data/spec/fixtures/project_root/code.rb +0 -221
  34. data/spec/fixtures/project_root/empty_file.rb +0 -0
  35. data/spec/fixtures/project_root/long_line.txt +0 -1
  36. data/spec/fixtures/project_root/short_file.rb +0 -3
  37. data/spec/fixtures/project_root/vendor/bundle/ignored_file.rb +0 -5
  38. data/spec/helpers.rb +0 -9
  39. data/spec/ignorable_spec.rb +0 -14
  40. data/spec/inspectable_spec.rb +0 -45
  41. data/spec/loggable_spec.rb +0 -17
  42. data/spec/monotonic_time_spec.rb +0 -25
  43. data/spec/nested_exception_spec.rb +0 -73
  44. data/spec/notice_notifier/options_spec.rb +0 -269
  45. data/spec/notice_notifier_spec.rb +0 -361
  46. data/spec/notice_spec.rb +0 -300
  47. data/spec/performance_breakdown_spec.rb +0 -11
  48. data/spec/performance_notifier_spec.rb +0 -645
  49. data/spec/promise_spec.rb +0 -203
  50. data/spec/query_spec.rb +0 -11
  51. data/spec/queue_spec.rb +0 -18
  52. data/spec/remote_settings/callback_spec.rb +0 -162
  53. data/spec/remote_settings/settings_data_spec.rb +0 -348
  54. data/spec/remote_settings_spec.rb +0 -201
  55. data/spec/request_spec.rb +0 -9
  56. data/spec/response_spec.rb +0 -110
  57. data/spec/spec_helper.rb +0 -100
  58. data/spec/stashable_spec.rb +0 -23
  59. data/spec/stat_spec.rb +0 -39
  60. data/spec/sync_sender_spec.rb +0 -168
  61. data/spec/tdigest_spec.rb +0 -235
  62. data/spec/thread_pool_spec.rb +0 -196
  63. data/spec/time_truncate_spec.rb +0 -30
  64. data/spec/timed_trace_spec.rb +0 -127
  65. data/spec/truncator_spec.rb +0 -267
@@ -1,645 +0,0 @@
1
- RSpec.describe Airbrake::PerformanceNotifier do
2
- subject(:perf_notifier) { described_class.new }
3
-
4
- let(:routes) { 'https://api.airbrake.io/api/v5/projects/1/routes-stats' }
5
- let(:queries) { 'https://api.airbrake.io/api/v5/projects/1/queries-stats' }
6
- let(:breakdowns) { 'https://api.airbrake.io/api/v5/projects/1/routes-breakdowns' }
7
- let(:queues) { 'https://api.airbrake.io/api/v5/projects/1/queues-stats' }
8
-
9
- before do
10
- stub_request(:put, routes).to_return(status: 200, body: '')
11
- stub_request(:put, queries).to_return(status: 200, body: '')
12
- stub_request(:put, breakdowns).to_return(status: 200, body: '')
13
- stub_request(:put, queues).to_return(status: 200, body: '')
14
-
15
- Airbrake::Config.instance = Airbrake::Config.new(
16
- project_id: 1,
17
- project_key: 'banana',
18
- performance_stats: true,
19
- performance_stats_flush_period: 0,
20
- query_stats: true,
21
- job_stats: true,
22
- )
23
- end
24
-
25
- describe "#notify" do
26
- it "sends full query" do
27
- perf_notifier.notify(
28
- Airbrake::Query.new(
29
- method: 'POST',
30
- route: '/foo',
31
- query: 'SELECT * FROM things',
32
- func: 'foo',
33
- file: 'foo.rb',
34
- line: 123,
35
- timing: 60000,
36
- time: Time.new(2018, 1, 1, 0, 49, 0, 0),
37
- ),
38
- )
39
- perf_notifier.close
40
-
41
- expect(
42
- a_request(:put, queries).with(body: %r|
43
- \A{"queries":\[{
44
- "method":"POST",
45
- "route":"/foo",
46
- "query":"SELECT\s\*\sFROM\sthings",
47
- "time":"2018-01-01T00:49:00\+00:00",
48
- "function":"foo",
49
- "file":"foo.rb",
50
- "line":123,
51
- "count":1,
52
- "sum":60000.0,
53
- "sumsq":3600000000.0,
54
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUdqYAAB"
55
- }\]}\z|x),
56
- ).to have_been_made
57
- end
58
-
59
- it "sends full request" do
60
- perf_notifier.notify(
61
- Airbrake::Request.new(
62
- method: 'POST',
63
- route: '/foo',
64
- status_code: 200,
65
- timing: 60000,
66
- time: Time.new(2018, 1, 1, 0, 49, 0, 0),
67
- ),
68
- )
69
- perf_notifier.close
70
-
71
- expect(
72
- a_request(:put, routes).with(body: %r|
73
- \A{"routes":\[{
74
- "method":"POST",
75
- "route":"/foo",
76
- "statusCode":200,
77
- "time":"2018-01-01T00:49:00\+00:00",
78
- "count":1,
79
- "sum":60000.0,
80
- "sumsq":3600000000.0,
81
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUdqYAAB"
82
- }\]}\z|x),
83
- ).to have_been_made
84
- end
85
-
86
- it "sends full performance breakdown" do
87
- perf_notifier.notify(
88
- Airbrake::PerformanceBreakdown.new(
89
- method: 'DELETE',
90
- route: '/routes-breakdowns',
91
- response_type: 'json',
92
- timing: 60000,
93
- time: Time.new(2018, 1, 1, 0, 49, 0, 0),
94
- groups: { db: 131, view: 421 },
95
- ),
96
- )
97
- perf_notifier.close
98
-
99
- expect(
100
- a_request(:put, breakdowns).with(body: %r|
101
- \A{"routes":\[{
102
- "method":"DELETE",
103
- "route":"/routes-breakdowns",
104
- "responseType":"json",
105
- "time":"2018-01-01T00:49:00\+00:00",
106
- "count":1,
107
- "sum":60000.0,
108
- "sumsq":3600000000.0,
109
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUdqYAAB",
110
- "groups":{
111
- "db":{
112
- "count":1,
113
- "sum":131.0,
114
- "sumsq":17161.0,
115
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUMDAAAB"
116
- },
117
- "view":{
118
- "count":1,
119
- "sum":421.0,
120
- "sumsq":177241.0,
121
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUPSgAAB"
122
- }
123
- }
124
- }\]}\z|x),
125
- ).to have_been_made
126
- end
127
-
128
- it "sends full queue" do
129
- perf_notifier.notify(
130
- Airbrake::Queue.new(
131
- queue: 'emails',
132
- error_count: 2,
133
- groups: { redis: 131, sql: 421 },
134
- timing: 60000,
135
- time: Time.new(2018, 1, 1, 0, 49, 0, 0),
136
- ),
137
- )
138
- perf_notifier.close
139
-
140
- expect(
141
- a_request(:put, queues).with(body: /
142
- \A{"queues":\[{
143
- "queue":"emails",
144
- "errorCount":2,
145
- "time":"2018-01-01T00:49:00\+00:00",
146
- "count":1,
147
- "sum":60000.0,
148
- "sumsq":3600000000.0,
149
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUdqYAAB",
150
- "groups":{
151
- "redis":{
152
- "count":1,
153
- "sum":131.0,
154
- "sumsq":17161.0,
155
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUMDAAAB"
156
- },
157
- "sql":{
158
- "count":1,
159
- "sum":421.0,
160
- "sumsq":177241.0,
161
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUPSgAAB"
162
- }
163
- }
164
- }\]}\z/x),
165
- ).to have_been_made
166
- end
167
-
168
- it "rounds time to the floor minute" do
169
- perf_notifier.notify(
170
- Airbrake::Request.new(
171
- method: 'GET',
172
- route: '/foo',
173
- status_code: 200,
174
- timing: 60000,
175
- time: Time.new(2018, 1, 1, 0, 0, 20, 0),
176
- ),
177
- )
178
- perf_notifier.close
179
-
180
- expect(
181
- a_request(:put, routes).with(body: /"time":"2018-01-01T00:00:00\+00:00"/),
182
- ).to have_been_made
183
- end
184
-
185
- it "increments routes with the same key" do
186
- perf_notifier.notify(
187
- Airbrake::Request.new(
188
- method: 'GET',
189
- route: '/foo',
190
- status_code: 200,
191
- timing: 213,
192
- ),
193
- )
194
- perf_notifier.notify(
195
- Airbrake::Request.new(
196
- method: 'GET',
197
- route: '/foo',
198
- status_code: 200,
199
- timing: 123,
200
- ),
201
- )
202
- perf_notifier.close
203
-
204
- expect(
205
- a_request(:put, routes).with(body: /"count":2/),
206
- ).to have_been_made
207
- end
208
-
209
- it "groups routes by time" do
210
- perf_notifier.notify(
211
- Airbrake::Request.new(
212
- method: 'GET',
213
- route: '/foo',
214
- status_code: 200,
215
- timing: 1000,
216
- time: Time.new(2018, 1, 1, 0, 0, 49, 0),
217
- ),
218
- )
219
- perf_notifier.notify(
220
- Airbrake::Request.new(
221
- method: 'GET',
222
- route: '/foo',
223
- status_code: 200,
224
- timing: 6000,
225
- time: Time.new(2018, 1, 1, 0, 1, 49, 0),
226
- ),
227
- )
228
- perf_notifier.close
229
-
230
- expect(
231
- a_request(:put, routes).with(
232
- body: %r|\A
233
- {"routes":\[
234
- {"method":"GET","route":"/foo","statusCode":200,
235
- "time":"2018-01-01T00:00:00\+00:00","count":1,"sum":1000.0,
236
- "sumsq":1000000.0,"tdigest":"AAAAAkA0AAAAAAAAAAAAAUR6AAAB"},
237
- {"method":"GET","route":"/foo","statusCode":200,
238
- "time":"2018-01-01T00:01:00\+00:00","count":1,"sum":6000.0,
239
- "sumsq":36000000.0,"tdigest":"AAAAAkA0AAAAAAAAAAAAAUW7gAAB"}\]}
240
- \z|x,
241
- ),
242
- ).to have_been_made
243
- end
244
-
245
- it "groups routes by route key" do
246
- perf_notifier.notify(
247
- Airbrake::Request.new(
248
- method: 'GET',
249
- route: '/foo',
250
- status_code: 200,
251
- timing: 60000,
252
- time: Time.new(2018, 1, 1, 0, 49, 0, 0),
253
- ),
254
- )
255
- perf_notifier.notify(
256
- Airbrake::Request.new(
257
- method: 'POST',
258
- route: '/foo',
259
- status_code: 200,
260
- timing: 60000,
261
- time: Time.new(2018, 1, 1, 0, 49, 0, 0),
262
- ),
263
- )
264
- perf_notifier.close
265
-
266
- expect(
267
- a_request(:put, routes).with(
268
- body: %r|\A
269
- {"routes":\[
270
- {"method":"GET","route":"/foo","statusCode":200,
271
- "time":"2018-01-01T00:49:00\+00:00","count":1,"sum":60000.0,
272
- "sumsq":3600000000.0,"tdigest":"AAAAAkA0AAAAAAAAAAAAAUdqYAAB"},
273
- {"method":"POST","route":"/foo","statusCode":200,
274
- "time":"2018-01-01T00:49:00\+00:00","count":1,"sum":60000.0,
275
- "sumsq":3600000000.0,"tdigest":"AAAAAkA0AAAAAAAAAAAAAUdqYAAB"}\]}
276
- \z|x,
277
- ),
278
- ).to have_been_made
279
- end
280
-
281
- it "groups performance breakdowns by route key" do
282
- perf_notifier.notify(
283
- Airbrake::PerformanceBreakdown.new(
284
- method: 'DELETE',
285
- route: '/routes-breakdowns',
286
- response_type: 'json',
287
- timing: 2000,
288
- time: Time.new(2018, 1, 1, 0, 0, 20, 0),
289
- groups: { db: 131, view: 421 },
290
- ),
291
- )
292
- perf_notifier.notify(
293
- Airbrake::PerformanceBreakdown.new(
294
- method: 'DELETE',
295
- route: '/routes-breakdowns',
296
- response_type: 'json',
297
- timing: 2000,
298
- time: Time.new(2018, 1, 1, 0, 0, 30, 0),
299
- groups: { db: 55, view: 11 },
300
- ),
301
- )
302
- perf_notifier.close
303
-
304
- expect(
305
- a_request(:put, breakdowns).with(body: %r|
306
- \A{"routes":\[{
307
- "method":"DELETE",
308
- "route":"/routes-breakdowns",
309
- "responseType":"json",
310
- "time":"2018-01-01T00:00:00\+00:00",
311
- "count":2,
312
- "sum":4000.0,
313
- "sumsq":8000000.0,
314
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUT6AAAC",
315
- "groups":{
316
- "db":{
317
- "count":2,
318
- "sum":186.0,
319
- "sumsq":20186.0,
320
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAkJcAABCmAAAAQE="
321
- },
322
- "view":{
323
- "count":2,
324
- "sum":432.0,
325
- "sumsq":177362.0,
326
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAkEwAABDzQAAAQE="
327
- }
328
- }
329
- }\]}\z|x),
330
- ).to have_been_made
331
- end
332
-
333
- it "groups queues by queue key" do
334
- perf_notifier.notify(
335
- Airbrake::Queue.new(
336
- queue: 'emails',
337
- error_count: 2,
338
- groups: { redis: 131, sql: 421 },
339
- timing: 60000,
340
- time: Time.new(2018, 1, 1, 0, 49, 0, 0),
341
- ),
342
- )
343
- perf_notifier.notify(
344
- Airbrake::Queue.new(
345
- queue: 'emails',
346
- error_count: 3,
347
- groups: { redis: 131, sql: 421 },
348
- timing: 60000,
349
- time: Time.new(2018, 1, 1, 0, 49, 0, 0),
350
- ),
351
- )
352
- perf_notifier.close
353
-
354
- expect(
355
- a_request(:put, queues).with(body: /
356
- \A{"queues":\[{
357
- "queue":"emails",
358
- "errorCount":5,
359
- "time":"2018-01-01T00:49:00\+00:00",
360
- "count":2,
361
- "sum":120000.0,
362
- "sumsq":7200000000.0,
363
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUdqYAAC",
364
- "groups":{
365
- "redis":{
366
- "count":2,
367
- "sum":262.0,
368
- "sumsq":34322.0,
369
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUMDAAAC"
370
- },
371
- "sql":{
372
- "count":2,
373
- "sum":842.0,
374
- "sumsq":354482.0,
375
- "tdigest":"AAAAAkA0AAAAAAAAAAAAAUPSgAAC"
376
- }
377
- }
378
- }\]}\z/x),
379
- ).to have_been_made
380
- end
381
-
382
- it "returns a promise" do
383
- promise = perf_notifier.notify(
384
- Airbrake::Request.new(
385
- method: 'GET',
386
- route: '/foo',
387
- status_code: 200,
388
- timing: 123,
389
- ),
390
- )
391
- perf_notifier.close
392
-
393
- expect(promise).to be_an(Airbrake::Promise)
394
- expect(promise.value).to eq('' => '')
395
- end
396
-
397
- it "checks performance stat configuration" do
398
- request = Airbrake::Request.new(
399
- method: 'GET', route: '/foo', status_code: 200, timing: 123,
400
- )
401
- allow(Airbrake::Config.instance).to receive(:check_performance_options)
402
- .and_return(Airbrake::Promise.new)
403
- perf_notifier.notify(request)
404
- perf_notifier.close
405
-
406
- expect(Airbrake::Config.instance)
407
- .to have_received(:check_performance_options).with(request)
408
- end
409
-
410
- it "sends environment when it's specified" do
411
- Airbrake::Config.instance.merge(performance_stats: true, environment: 'test')
412
-
413
- perf_notifier.notify(
414
- Airbrake::Request.new(
415
- method: 'POST',
416
- route: '/foo',
417
- status_code: 200,
418
- timing: 123,
419
- ),
420
- )
421
- perf_notifier.close
422
-
423
- expect(
424
- a_request(:put, routes).with(
425
- body: /\A{"routes":\[.+\],"environment":"test"}\z/x,
426
- ),
427
- ).to have_been_made
428
- end
429
-
430
- context "when config is invalid" do
431
- before { Airbrake::Config.instance.merge(project_id: nil) }
432
-
433
- it "returns a rejected promise" do
434
- promise = perf_notifier.notify({})
435
- expect(promise).to be_rejected
436
- end
437
- end
438
-
439
- describe "payload grouping" do
440
- let(:flush_period) { 0.5 }
441
-
442
- it "groups payload by performance name and sends it separately" do
443
- Airbrake::Config.instance.merge(
444
- project_id: 1,
445
- project_key: 'banana',
446
- performance_stats: true,
447
- performance_stats_flush_period: flush_period,
448
- )
449
-
450
- perf_notifier.notify(
451
- Airbrake::Request.new(
452
- method: 'GET',
453
- route: '/foo',
454
- status_code: 200,
455
- timing: 123,
456
- ),
457
- )
458
-
459
- perf_notifier.notify(
460
- Airbrake::Query.new(
461
- method: 'POST',
462
- route: '/foo',
463
- query: 'SELECT * FROM things',
464
- timing: 123,
465
- ),
466
- )
467
-
468
- sleep(flush_period + 0.5)
469
-
470
- expect(a_request(:put, routes)).to have_been_made
471
- expect(a_request(:put, queries)).to have_been_made
472
- end
473
- end
474
-
475
- context "when an ignore filter was defined" do
476
- before { perf_notifier.add_filter(&:ignore!) }
477
-
478
- it "doesn't notify airbrake of requests" do
479
- perf_notifier.notify(
480
- Airbrake::Request.new(
481
- method: 'GET',
482
- route: '/foo',
483
- status_code: 200,
484
- timing: 1,
485
- ),
486
- )
487
- perf_notifier.close
488
-
489
- expect(a_request(:put, routes)).not_to have_been_made
490
- end
491
-
492
- it "doesn't notify airbrake of queries" do
493
- perf_notifier.notify(
494
- Airbrake::Query.new(
495
- method: 'POST',
496
- route: '/foo',
497
- query: 'SELECT * FROM things',
498
- timing: 1,
499
- ),
500
- )
501
- perf_notifier.close
502
-
503
- expect(a_request(:put, queries)).not_to have_been_made
504
- end
505
-
506
- it "returns a rejected promise" do
507
- promise = perf_notifier.notify(
508
- Airbrake::Query.new(
509
- method: 'POST',
510
- route: '/foo',
511
- query: 'SELECT * FROM things',
512
- timing: 1,
513
- ),
514
- )
515
- perf_notifier.close
516
-
517
- expect(promise.value).to eq(
518
- 'error' => 'Airbrake::Query was ignored by a filter',
519
- )
520
- end
521
- end
522
-
523
- context "when a filter that modifies payload was defined" do
524
- before do
525
- perf_notifier.add_filter do |metric|
526
- metric.route = '[Filtered]'
527
- end
528
- end
529
-
530
- it "notifies airbrake with modified payload" do
531
- perf_notifier.notify(
532
- Airbrake::Query.new(
533
- method: 'POST',
534
- route: '/foo',
535
- query: 'SELECT * FROM things',
536
- timing: 123,
537
- ),
538
- )
539
- perf_notifier.close
540
-
541
- expect(
542
- a_request(:put, queries).with(
543
- body: /\A{"queries":\[{"method":"POST","route":"\[Filtered\]"/,
544
- ),
545
- ).to have_been_made
546
- end
547
- end
548
-
549
- context "when provided :timing is zero" do
550
- it "doesn't notify" do
551
- queue = Airbrake::Queue.new(queue: 'bananas', error_count: 0, timing: 0)
552
- perf_notifier.notify(queue)
553
- perf_notifier.close
554
-
555
- expect(a_request(:put, queues)).not_to have_been_made
556
- end
557
-
558
- it "returns a rejected promise" do
559
- queue = Airbrake::Queue.new(queue: 'bananas', error_count: 0, timing: 0)
560
- promise = perf_notifier.notify(queue)
561
- perf_notifier.close
562
-
563
- expect(promise.value).to eq('error' => ':timing cannot be zero')
564
- end
565
- end
566
- end
567
-
568
- describe "#notify_sync" do
569
- it "notifies synchronously" do
570
- retval = perf_notifier.notify_sync(
571
- Airbrake::Query.new(
572
- method: 'POST',
573
- route: '/foo',
574
- query: 'SELECT * FROM things',
575
- timing: 123,
576
- ),
577
- )
578
-
579
- expect(
580
- a_request(:put, queries).with(
581
- body: %r|\A{"queries":\[{"method":"POST","route":"/foo"|,
582
- ),
583
- ).to have_been_made
584
- expect(retval).to eq('' => '')
585
- end
586
- end
587
-
588
- describe "#close" do
589
- before do
590
- Airbrake::Config.instance.merge(performance_stats_flush_period: 0.1)
591
- end
592
-
593
- after do
594
- Airbrake::Config.instance.merge(performance_stats_flush_period: 0)
595
- end
596
-
597
- it "kills the background thread" do
598
- expect_any_instance_of(Thread).to receive(:kill).and_call_original
599
- perf_notifier.notify(
600
- Airbrake::Query.new(
601
- method: 'POST',
602
- route: '/foo',
603
- query: 'SELECT * FROM things',
604
- timing: 123,
605
- ),
606
- )
607
- perf_notifier.close
608
- end
609
-
610
- it "logs the exit message" do
611
- allow(Airbrake::Loggable.instance).to receive(:debug)
612
-
613
- perf_notifier.close
614
-
615
- expect(Airbrake::Loggable.instance).to have_received(:debug).with(
616
- /Airbrake::PerformanceNotifier thread pool closed/,
617
- )
618
- end
619
- end
620
-
621
- describe "#delete_filter" do
622
- let(:filter) do
623
- Class.new do
624
- def call(metric); end
625
- end
626
- end
627
-
628
- before { perf_notifier.add_filter(filter.new) }
629
-
630
- it "deletes a filter" do
631
- perf_notifier.delete_filter(filter)
632
- perf_notifier.notify(
633
- Airbrake::Request.new(
634
- method: 'POST',
635
- route: '/foo',
636
- status_code: 200,
637
- timing: 123,
638
- ),
639
- )
640
- perf_notifier.close
641
-
642
- expect(a_request(:put, routes)).to have_been_made
643
- end
644
- end
645
- end