statsd-instrument 2.5.1 → 2.6.0
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.
- checksums.yaml +4 -4
- data/.rubocop-https---shopify-github-io-ruby-style-guide-rubocop-yml +1 -1
- data/.rubocop.yml +11 -6
- data/.yardopts +5 -0
- data/CHANGELOG.md +75 -6
- data/README.md +54 -46
- data/benchmark/datagram-client +41 -0
- data/lib/statsd/instrument/assertions.rb +168 -57
- data/lib/statsd/instrument/backends/udp_backend.rb +20 -29
- data/lib/statsd/instrument/capture_sink.rb +27 -0
- data/lib/statsd/instrument/client.rb +313 -0
- data/lib/statsd/instrument/datagram.rb +75 -0
- data/lib/statsd/instrument/datagram_builder.rb +101 -0
- data/lib/statsd/instrument/dogstatsd_datagram_builder.rb +71 -0
- data/lib/statsd/instrument/environment.rb +106 -29
- data/lib/statsd/instrument/log_sink.rb +24 -0
- data/lib/statsd/instrument/null_sink.rb +13 -0
- data/lib/statsd/instrument/rubocop/measure_as_dist_argument.rb +39 -0
- data/lib/statsd/instrument/rubocop/metaprogramming_positional_arguments.rb +6 -10
- data/lib/statsd/instrument/rubocop/metric_prefix_argument.rb +37 -0
- data/lib/statsd/instrument/rubocop/metric_return_value.rb +7 -6
- data/lib/statsd/instrument/rubocop/metric_value_keyword_argument.rb +11 -20
- data/lib/statsd/instrument/rubocop/positional_arguments.rb +13 -13
- data/lib/statsd/instrument/rubocop/splat_arguments.rb +8 -14
- data/lib/statsd/instrument/rubocop.rb +64 -0
- data/lib/statsd/instrument/statsd_datagram_builder.rb +14 -0
- data/lib/statsd/instrument/strict.rb +112 -22
- data/lib/statsd/instrument/udp_sink.rb +62 -0
- data/lib/statsd/instrument/version.rb +1 -1
- data/lib/statsd/instrument.rb +191 -100
- data/test/assertions_test.rb +139 -176
- data/test/capture_sink_test.rb +44 -0
- data/test/client_test.rb +164 -0
- data/test/compatibility/dogstatsd_datagram_compatibility_test.rb +162 -0
- data/test/datagram_builder_test.rb +120 -0
- data/test/deprecations_test.rb +56 -10
- data/test/dogstatsd_datagram_builder_test.rb +32 -0
- data/test/environment_test.rb +73 -7
- data/test/log_sink_test.rb +37 -0
- data/test/null_sink_test.rb +13 -0
- data/test/rubocop/measure_as_dist_argument_test.rb +44 -0
- data/test/rubocop/metaprogramming_positional_arguments_test.rb +1 -1
- data/test/rubocop/metric_prefix_argument_test.rb +38 -0
- data/test/rubocop/metric_return_value_test.rb +1 -1
- data/test/rubocop/metric_value_keyword_argument_test.rb +1 -1
- data/test/rubocop/positional_arguments_test.rb +1 -1
- data/test/rubocop/splat_arguments_test.rb +1 -1
- data/test/statsd_datagram_builder_test.rb +22 -0
- data/test/statsd_instrumentation_test.rb +0 -24
- data/test/statsd_test.rb +0 -23
- data/test/test_helper.rb +0 -2
- data/test/udp_backend_test.rb +25 -8
- data/test/udp_sink_test.rb +85 -0
- metadata +38 -2
data/test/assertions_test.rb
CHANGED
@@ -10,141 +10,120 @@ class AssertionsTest < Minitest::Test
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_assert_no_statsd_calls
|
13
|
-
|
14
|
-
|
15
|
-
# noop
|
16
|
-
end
|
13
|
+
@test_case.assert_no_statsd_calls('counter') do
|
14
|
+
# noop
|
17
15
|
end
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
StatsD.increment('other')
|
22
|
-
end
|
17
|
+
@test_case.assert_no_statsd_calls('counter') do
|
18
|
+
StatsD.increment('other')
|
23
19
|
end
|
24
20
|
|
25
|
-
|
21
|
+
assertion = assert_raises(Minitest::Assertion) do
|
26
22
|
@test_case.assert_no_statsd_calls('counter') do
|
27
23
|
StatsD.increment('counter')
|
28
24
|
end
|
29
25
|
end
|
26
|
+
assert_equal assertion.message, "No StatsD calls for metric counter expected."
|
30
27
|
|
31
|
-
|
28
|
+
assertion = assert_raises(Minitest::Assertion) do
|
32
29
|
@test_case.assert_no_statsd_calls do
|
33
30
|
StatsD.increment('other')
|
34
31
|
end
|
35
32
|
end
|
33
|
+
assert_equal assertion.message, "No StatsD calls for metric other expected."
|
36
34
|
|
37
|
-
|
35
|
+
assertion = assert_raises(Minitest::Assertion) do
|
38
36
|
@test_case.assert_no_statsd_calls do
|
39
37
|
StatsD.increment('other')
|
40
38
|
StatsD.increment('another')
|
41
39
|
end
|
42
40
|
end
|
41
|
+
assert_equal assertion.message, "No StatsD calls for metric other, another expected."
|
43
42
|
end
|
44
43
|
|
45
44
|
def test_assert_statsd_call
|
46
|
-
|
47
|
-
|
48
|
-
StatsD.increment('counter')
|
49
|
-
end
|
45
|
+
@test_case.assert_statsd_increment('counter') do
|
46
|
+
StatsD.increment('counter')
|
50
47
|
end
|
51
48
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
StatsD.increment('other')
|
56
|
-
end
|
49
|
+
@test_case.assert_statsd_increment('counter') do
|
50
|
+
StatsD.increment('counter')
|
51
|
+
StatsD.increment('other')
|
57
52
|
end
|
58
53
|
|
59
|
-
|
54
|
+
assert_raises(Minitest::Assertion) do
|
60
55
|
@test_case.assert_statsd_increment('counter') do
|
61
56
|
StatsD.increment('other')
|
62
57
|
end
|
63
58
|
end
|
64
59
|
|
65
|
-
|
60
|
+
assert_raises(Minitest::Assertion) do
|
66
61
|
@test_case.assert_statsd_increment('counter') do
|
67
62
|
StatsD.gauge('counter', 42)
|
68
63
|
end
|
69
64
|
end
|
70
65
|
|
71
|
-
|
66
|
+
assert_raises(Minitest::Assertion) do
|
72
67
|
@test_case.assert_statsd_increment('counter') do
|
73
68
|
StatsD.increment('counter')
|
74
69
|
StatsD.increment('counter')
|
75
70
|
end
|
76
71
|
end
|
77
72
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
StatsD.increment('counter')
|
82
|
-
end
|
73
|
+
@test_case.assert_statsd_increment('counter', times: 2) do
|
74
|
+
StatsD.increment('counter')
|
75
|
+
StatsD.increment('counter')
|
83
76
|
end
|
84
77
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
StatsD.increment('counter', tags: { foo: 1 })
|
89
|
-
end
|
78
|
+
@test_case.assert_statsd_increment('counter', times: 2, tags: ['foo:1']) do
|
79
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
80
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
90
81
|
end
|
91
82
|
|
92
|
-
|
83
|
+
assert_raises(Minitest::Assertion) do
|
93
84
|
@test_case.assert_statsd_increment('counter', times: 2, tags: ['foo:1']) do
|
94
85
|
StatsD.increment('counter', tags: { foo: 1 })
|
95
86
|
StatsD.increment('counter', tags: { foo: 2 })
|
96
87
|
end
|
97
88
|
end
|
98
89
|
|
99
|
-
|
100
|
-
|
101
|
-
StatsD.increment('counter', sample_rate: 0.5, tags: ['a', 'b'])
|
102
|
-
end
|
90
|
+
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: ['a', 'b']) do
|
91
|
+
StatsD.increment('counter', sample_rate: 0.5, tags: ['a', 'b'])
|
103
92
|
end
|
104
93
|
|
105
|
-
|
94
|
+
assert_raises(Minitest::Assertion) do
|
106
95
|
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: ['a', 'b'], ignore_tags: ['b']) do
|
107
96
|
StatsD.increment('counter', sample_rate: 0.5, tags: ['a'])
|
108
97
|
end
|
109
98
|
end
|
110
99
|
|
111
|
-
|
112
|
-
|
113
|
-
StatsD.increment('counter', sample_rate: 0.5, tags: ['a', 'b'])
|
114
|
-
end
|
100
|
+
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: ['a'], ignore_tags: ['b']) do
|
101
|
+
StatsD.increment('counter', sample_rate: 0.5, tags: ['a', 'b'])
|
115
102
|
end
|
116
103
|
|
117
|
-
|
118
|
-
|
119
|
-
StatsD.increment('counter', sample_rate: 0.5, tags: ['a'])
|
120
|
-
end
|
104
|
+
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: ['a'], ignore_tags: ['b']) do
|
105
|
+
StatsD.increment('counter', sample_rate: 0.5, tags: ['a'])
|
121
106
|
end
|
122
107
|
|
123
|
-
|
124
|
-
|
125
|
-
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 2 })
|
126
|
-
end
|
108
|
+
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: { a: 1 }, ignore_tags: { b: 2 }) do
|
109
|
+
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 2 })
|
127
110
|
end
|
128
111
|
|
129
|
-
|
130
|
-
|
131
|
-
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 3 })
|
132
|
-
end
|
112
|
+
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: { a: 1 }, ignore_tags: { b: 2 }) do
|
113
|
+
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 3 })
|
133
114
|
end
|
134
115
|
|
135
|
-
|
116
|
+
assert_raises(Minitest::Assertion) do
|
136
117
|
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: { a: 1, b: 3 }, ignore_tags: ['b']) do
|
137
118
|
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 2 })
|
138
119
|
end
|
139
120
|
end
|
140
121
|
|
141
|
-
|
142
|
-
|
143
|
-
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 2 })
|
144
|
-
end
|
122
|
+
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: { a: 1 }, ignore_tags: ['b']) do
|
123
|
+
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 2 })
|
145
124
|
end
|
146
125
|
|
147
|
-
|
126
|
+
assert_raises(Minitest::Assertion) do
|
148
127
|
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: ['a', 'b']) do
|
149
128
|
StatsD.increment('counter', sample_rate: 0.2, tags: ['c'])
|
150
129
|
end
|
@@ -152,13 +131,11 @@ class AssertionsTest < Minitest::Test
|
|
152
131
|
end
|
153
132
|
|
154
133
|
def test_tags_will_match_subsets
|
155
|
-
|
156
|
-
|
157
|
-
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 2 })
|
158
|
-
end
|
134
|
+
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: { a: 1 }) do
|
135
|
+
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 2 })
|
159
136
|
end
|
160
137
|
|
161
|
-
|
138
|
+
assert_raises(Minitest::Assertion) do
|
162
139
|
@test_case.assert_statsd_increment('counter', sample_rate: 0.5, tags: { a: 1, b: 3 }) do
|
163
140
|
StatsD.increment('counter', sample_rate: 0.5, tags: { a: 1, b: 2, c: 4 })
|
164
141
|
end
|
@@ -166,66 +143,58 @@ class AssertionsTest < Minitest::Test
|
|
166
143
|
end
|
167
144
|
|
168
145
|
def test_tags_friendly_error
|
169
|
-
|
170
|
-
|
146
|
+
assertion = assert_raises(Minitest::Assertion) do
|
147
|
+
@test_case.assert_statsd_increment('counter', tags: { class: "AnotherJob" }) do
|
148
|
+
StatsD.increment('counter', tags: { class: "MyJob" })
|
149
|
+
end
|
171
150
|
end
|
172
|
-
|
173
|
-
|
174
|
-
|
151
|
+
|
152
|
+
assert_includes assertion.message, "Captured metrics with the same key"
|
153
|
+
assert_includes assertion.message, "MyJob"
|
175
154
|
end
|
176
155
|
|
177
156
|
def test_multiple_metrics_are_not_order_dependent
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
StatsD.increment('counter', tags: { foo: 2 })
|
184
|
-
end
|
157
|
+
foo_1_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:1'])
|
158
|
+
foo_2_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:2'])
|
159
|
+
@test_case.assert_statsd_calls([foo_1_metric, foo_2_metric]) do
|
160
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
161
|
+
StatsD.increment('counter', tags: { foo: 2 })
|
185
162
|
end
|
186
163
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
StatsD.increment('counter', tags: { foo: 2 })
|
193
|
-
end
|
164
|
+
foo_1_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:1'])
|
165
|
+
foo_2_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:2'])
|
166
|
+
@test_case.assert_statsd_calls([foo_2_metric, foo_1_metric]) do
|
167
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
168
|
+
StatsD.increment('counter', tags: { foo: 2 })
|
194
169
|
end
|
195
170
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
StatsD.increment('counter', tags: { foo: 2 })
|
203
|
-
end
|
171
|
+
foo_1_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 2, tags: ['foo:1'])
|
172
|
+
foo_2_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:2'])
|
173
|
+
@test_case.assert_statsd_calls([foo_1_metric, foo_2_metric]) do
|
174
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
175
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
176
|
+
StatsD.increment('counter', tags: { foo: 2 })
|
204
177
|
end
|
205
178
|
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
StatsD.increment('counter', tags: { foo: 2 })
|
213
|
-
end
|
179
|
+
foo_1_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 2, tags: ['foo:1'])
|
180
|
+
foo_2_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:2'])
|
181
|
+
@test_case.assert_statsd_calls([foo_2_metric, foo_1_metric]) do
|
182
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
183
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
184
|
+
StatsD.increment('counter', tags: { foo: 2 })
|
214
185
|
end
|
215
186
|
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
StatsD.increment('counter', tags: { foo: 1 })
|
223
|
-
end
|
187
|
+
foo_1_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 2, tags: ['foo:1'])
|
188
|
+
foo_2_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:2'])
|
189
|
+
@test_case.assert_statsd_calls([foo_2_metric, foo_1_metric]) do
|
190
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
191
|
+
StatsD.increment('counter', tags: { foo: 2 })
|
192
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
224
193
|
end
|
225
194
|
end
|
226
195
|
|
227
196
|
def test_assert_multiple_statsd_calls
|
228
|
-
|
197
|
+
assert_raises(Minitest::Assertion) do
|
229
198
|
foo_1_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 2, tags: ['foo:1'])
|
230
199
|
foo_2_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:2'])
|
231
200
|
@test_case.assert_statsd_calls([foo_1_metric, foo_2_metric]) do
|
@@ -234,7 +203,7 @@ class AssertionsTest < Minitest::Test
|
|
234
203
|
end
|
235
204
|
end
|
236
205
|
|
237
|
-
|
206
|
+
assert_raises(Minitest::Assertion) do
|
238
207
|
foo_1_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 2, tags: ['foo:1'])
|
239
208
|
foo_2_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:2'])
|
240
209
|
@test_case.assert_statsd_calls([foo_1_metric, foo_2_metric]) do
|
@@ -245,60 +214,52 @@ class AssertionsTest < Minitest::Test
|
|
245
214
|
end
|
246
215
|
end
|
247
216
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
StatsD.increment('counter', tags: { foo: 2 })
|
255
|
-
end
|
217
|
+
foo_1_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 2, tags: ['foo:1'])
|
218
|
+
foo_2_metric = StatsD::Instrument::MetricExpectation.new(type: :c, name: 'counter', times: 1, tags: ['foo:2'])
|
219
|
+
@test_case.assert_statsd_calls([foo_1_metric, foo_2_metric]) do
|
220
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
221
|
+
StatsD.increment('counter', tags: { foo: 1 })
|
222
|
+
StatsD.increment('counter', tags: { foo: 2 })
|
256
223
|
end
|
257
224
|
end
|
258
225
|
|
259
226
|
def test_assert_statsd_call_with_tags
|
260
|
-
|
261
|
-
|
262
|
-
StatsD.increment('counter', tags: { a: 'b', c: 'd' })
|
263
|
-
end
|
227
|
+
@test_case.assert_statsd_increment('counter', tags: ['a:b', 'c:d']) do
|
228
|
+
StatsD.increment('counter', tags: { a: 'b', c: 'd' })
|
264
229
|
end
|
265
230
|
|
266
|
-
|
267
|
-
|
268
|
-
StatsD.increment('counter', tags: ['a:b', 'c:d'])
|
269
|
-
end
|
231
|
+
@test_case.assert_statsd_increment('counter', tags: { a: 'b', c: 'd' }) do
|
232
|
+
StatsD.increment('counter', tags: ['a:b', 'c:d'])
|
270
233
|
end
|
271
234
|
end
|
272
235
|
|
273
236
|
def test_assert_statsd_call_with_wrong_sample_rate_type
|
274
237
|
skip("In Strict mode, the StatsD.increment call will raise") if StatsD::Instrument.strict_mode_enabled?
|
275
|
-
|
238
|
+
|
239
|
+
assertion = assert_raises(Minitest::Assertion) do
|
276
240
|
@test_case.assert_statsd_increment('counter', tags: ['a', 'b']) do
|
277
241
|
StatsD.increment('counter', sample_rate: 'abc', tags: ['a', 'b'])
|
278
242
|
end
|
279
243
|
end
|
244
|
+
assert_equal "Unexpected sample rate type for metric counter, must be numeric", assertion.message
|
280
245
|
end
|
281
246
|
|
282
247
|
def test_nested_assertions
|
283
|
-
|
284
|
-
@test_case.assert_statsd_increment('
|
285
|
-
|
286
|
-
|
287
|
-
StatsD.increment('counter2')
|
288
|
-
end
|
248
|
+
@test_case.assert_statsd_increment('counter1') do
|
249
|
+
@test_case.assert_statsd_increment('counter2') do
|
250
|
+
StatsD.increment('counter1')
|
251
|
+
StatsD.increment('counter2')
|
289
252
|
end
|
290
253
|
end
|
291
254
|
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
StatsD.increment('counter2')
|
297
|
-
end
|
255
|
+
@test_case.assert_statsd_increment('counter1') do
|
256
|
+
StatsD.increment('counter1')
|
257
|
+
@test_case.assert_statsd_increment('counter2') do
|
258
|
+
StatsD.increment('counter2')
|
298
259
|
end
|
299
260
|
end
|
300
261
|
|
301
|
-
|
262
|
+
assert_raises(Minitest::Assertion) do
|
302
263
|
@test_case.assert_statsd_increment('counter1') do
|
303
264
|
@test_case.assert_statsd_increment('counter2') do
|
304
265
|
StatsD.increment('counter2')
|
@@ -306,7 +267,7 @@ class AssertionsTest < Minitest::Test
|
|
306
267
|
end
|
307
268
|
end
|
308
269
|
|
309
|
-
|
270
|
+
assert_raises(Minitest::Assertion) do
|
310
271
|
@test_case.assert_statsd_increment('counter1') do
|
311
272
|
@test_case.assert_statsd_increment('counter2') do
|
312
273
|
StatsD.increment('counter1')
|
@@ -316,62 +277,64 @@ class AssertionsTest < Minitest::Test
|
|
316
277
|
end
|
317
278
|
end
|
318
279
|
|
319
|
-
def
|
320
|
-
|
280
|
+
def test_assertion_block_with_expected_exceptions
|
281
|
+
@test_case.assert_statsd_increment('expected_happened') do
|
321
282
|
@test_case.assert_raises(RuntimeError) do
|
322
|
-
|
323
|
-
|
324
|
-
|
283
|
+
begin
|
284
|
+
raise "expected"
|
285
|
+
rescue
|
286
|
+
StatsD.increment('expected_happened')
|
287
|
+
raise
|
325
288
|
end
|
326
289
|
end
|
327
290
|
end
|
328
291
|
|
329
|
-
|
292
|
+
assertion = assert_raises(Minitest::Assertion) do
|
330
293
|
@test_case.assert_statsd_increment('counter') do
|
331
294
|
@test_case.assert_raises(RuntimeError) do
|
332
|
-
|
333
|
-
raise "foo"
|
295
|
+
raise "expected"
|
334
296
|
end
|
335
297
|
end
|
336
298
|
end
|
299
|
+
assert_includes assertion.message, "No StatsD calls for metric counter of type c were made"
|
300
|
+
end
|
337
301
|
|
338
|
-
|
302
|
+
def test_assertion_block_with_unexpected_exceptions
|
303
|
+
assertion = assert_raises(Minitest::Assertion) do
|
339
304
|
@test_case.assert_statsd_increment('counter') do
|
340
|
-
|
341
|
-
|
342
|
-
end
|
305
|
+
StatsD.increment('counter')
|
306
|
+
raise "unexpected"
|
343
307
|
end
|
344
308
|
end
|
309
|
+
assert_includes assertion.message, "An exception occurred in the block provided to the StatsD assertion"
|
345
310
|
|
346
|
-
|
311
|
+
assertion = assert_raises(Minitest::Assertion) do
|
347
312
|
@test_case.assert_raises(RuntimeError) do
|
348
313
|
@test_case.assert_statsd_increment('counter') do
|
349
|
-
|
314
|
+
StatsD.increment('counter')
|
315
|
+
raise "unexpected"
|
350
316
|
end
|
351
317
|
end
|
352
318
|
end
|
353
|
-
|
354
|
-
|
355
|
-
private
|
319
|
+
assert_includes assertion.message, "An exception occurred in the block provided to the StatsD assertion"
|
356
320
|
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
321
|
+
assertion = assert_raises(Minitest::Assertion) do
|
322
|
+
@test_case.assert_raises(RuntimeError) do
|
323
|
+
@test_case.assert_no_statsd_calls do
|
324
|
+
raise "unexpected"
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
328
|
+
assert_includes assertion.message, "An exception occurred in the block provided to the StatsD assertion"
|
363
329
|
end
|
364
330
|
|
365
|
-
def
|
366
|
-
block
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
assertion
|
374
|
-
else
|
375
|
-
flunk("No assertion was triggered, but one was expected.")
|
331
|
+
def test_assertion_block_with_other_assertion_failures
|
332
|
+
# If another assertion failure happens inside the block, that failrue should have priority
|
333
|
+
assertion = assert_raises(Minitest::Assertion) do
|
334
|
+
@test_case.assert_statsd_increment('counter') do
|
335
|
+
@test_case.flunk('other assertion failure')
|
336
|
+
end
|
337
|
+
end
|
338
|
+
assert_equal "other assertion failure", assertion.message
|
376
339
|
end
|
377
340
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
require 'statsd/instrument/client'
|
6
|
+
|
7
|
+
class CaptureSinktest < Minitest::Test
|
8
|
+
def test_capture_sink_captures_datagram_instances
|
9
|
+
capture_sink = StatsD::Instrument::CaptureSink.new(parent: [])
|
10
|
+
capture_sink << 'foo:1|c'
|
11
|
+
|
12
|
+
assert_equal 1, capture_sink.datagrams.length
|
13
|
+
assert_kind_of StatsD::Instrument::Datagram, capture_sink.datagrams.first
|
14
|
+
assert_equal 'foo:1|c', capture_sink.datagrams.first.source
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_capture_sink_sends_datagrams_to_parent
|
18
|
+
parent = []
|
19
|
+
capture_sink = StatsD::Instrument::CaptureSink.new(parent: parent)
|
20
|
+
capture_sink << 'foo:1|c' << 'bar:1|c'
|
21
|
+
|
22
|
+
assert_equal ['foo:1|c', 'bar:1|c'], parent
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_nesting_capture_sink_instances
|
26
|
+
null_sink = StatsD::Instrument::NullSink.new
|
27
|
+
outer_capture_sink = StatsD::Instrument::CaptureSink.new(parent: null_sink)
|
28
|
+
inner_capture_sink = StatsD::Instrument::CaptureSink.new(parent: outer_capture_sink)
|
29
|
+
|
30
|
+
outer_capture_sink << 'foo:1|c'
|
31
|
+
inner_capture_sink << 'bar:1|c'
|
32
|
+
|
33
|
+
assert_equal ['foo:1|c', 'bar:1|c'], outer_capture_sink.datagrams.map(&:source)
|
34
|
+
assert_equal ['bar:1|c'], inner_capture_sink.datagrams.map(&:source)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_using_a_different_datagram_class
|
38
|
+
sink = StatsD::Instrument::CaptureSink.new(parent: [], datagram_class: String)
|
39
|
+
sink << 'foo:1|c'
|
40
|
+
|
41
|
+
assert sink.datagrams.all? { |datagram| datagram.is_a?(String) }
|
42
|
+
assert_equal ['foo:1|c'], sink.datagrams
|
43
|
+
end
|
44
|
+
end
|