tcell_agent 0.2.29 → 0.4.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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/Readme.txt +7 -0
  3. data/bin/tcell_agent +9 -0
  4. data/lib/tcell_agent/agent/policy_manager.rb +3 -0
  5. data/lib/tcell_agent/agent/policy_types.rb +4 -1
  6. data/lib/tcell_agent/appsensor/injections_matcher.rb +20 -0
  7. data/lib/tcell_agent/appsensor/injections_reporter.rb +15 -56
  8. data/lib/tcell_agent/appsensor/meta_data.rb +56 -2
  9. data/lib/tcell_agent/appsensor/rules/baserules.json +371 -138
  10. data/lib/tcell_agent/cmdi.rb +113 -0
  11. data/lib/tcell_agent/config/unknown_options.rb +2 -0
  12. data/lib/tcell_agent/configuration.rb +30 -16
  13. data/lib/tcell_agent/hooks/login_fraud.rb +79 -0
  14. data/lib/tcell_agent/instrumentation.rb +6 -11
  15. data/lib/tcell_agent/patches/meta_data.rb +14 -11
  16. data/lib/tcell_agent/policies/appsensor/injection_sensor.rb +5 -9
  17. data/lib/tcell_agent/policies/appsensor_policy.rb +22 -206
  18. data/lib/tcell_agent/policies/clickjacking_policy.rb +4 -2
  19. data/lib/tcell_agent/policies/command_injection_policy.rb +196 -0
  20. data/lib/tcell_agent/policies/content_security_policy.rb +3 -2
  21. data/lib/tcell_agent/policies/dataloss_policy.rb +3 -1
  22. data/lib/tcell_agent/policies/honeytokens_policy.rb +3 -1
  23. data/lib/tcell_agent/policies/http_redirect_policy.rb +51 -37
  24. data/lib/tcell_agent/policies/http_tx_policy.rb +5 -1
  25. data/lib/tcell_agent/policies/login_fraud_policy.rb +6 -1
  26. data/lib/tcell_agent/policies/patches_policy.rb +3 -1
  27. data/lib/tcell_agent/policies/policy.rb +10 -0
  28. data/lib/tcell_agent/policies/secure_headers_policy.rb +5 -2
  29. data/lib/tcell_agent/rails/auth/devise.rb +12 -23
  30. data/lib/tcell_agent/rails/csrf_exception.rb +1 -1
  31. data/lib/tcell_agent/rails/dlp.rb +50 -54
  32. data/lib/tcell_agent/rails/middleware/body_filter_middleware.rb +0 -1
  33. data/lib/tcell_agent/rails/middleware/context_middleware.rb +0 -1
  34. data/lib/tcell_agent/rails/middleware/global_middleware.rb +0 -1
  35. data/lib/tcell_agent/rails/middleware/headers_middleware.rb +7 -10
  36. data/lib/tcell_agent/rails/on_start.rb +0 -1
  37. data/lib/tcell_agent/rails/tcell_body_proxy.rb +4 -4
  38. data/lib/tcell_agent/rails.rb +0 -2
  39. data/lib/tcell_agent/rust/libtcellagent-0.6.1.dylib +0 -0
  40. data/lib/tcell_agent/rust/libtcellagent-0.6.1.so +0 -0
  41. data/lib/tcell_agent/rust/models.rb +61 -0
  42. data/lib/tcell_agent/rust/tcellagent-0.6.1.dll +0 -0
  43. data/lib/tcell_agent/rust/whisperer.rb +112 -0
  44. data/lib/tcell_agent/sensor_events/appsensor_event.rb +25 -21
  45. data/lib/tcell_agent/sensor_events/appsensor_meta_event.rb +31 -24
  46. data/lib/tcell_agent/sensor_events/command_injection.rb +58 -0
  47. data/lib/tcell_agent/sensor_events/discovery.rb +1 -1
  48. data/lib/tcell_agent/sensor_events/login_fraud.rb +3 -13
  49. data/lib/tcell_agent/sensor_events/sensor.rb +81 -77
  50. data/lib/tcell_agent/sensor_events/util/sanitizer_utilities.rb +8 -0
  51. data/lib/tcell_agent/start_background_thread.rb +12 -3
  52. data/lib/tcell_agent/utils/io.rb +4 -1
  53. data/lib/tcell_agent/utils/params.rb +1 -0
  54. data/lib/tcell_agent/version.rb +1 -1
  55. data/lib/tcell_agent.rb +0 -1
  56. data/spec/lib/tcell_agent/appsensor/injections_matcher_spec.rb +27 -9
  57. data/spec/lib/tcell_agent/appsensor/injections_reporter_spec.rb +143 -193
  58. data/spec/lib/tcell_agent/appsensor/meta_data_spec.rb +67 -0
  59. data/spec/lib/tcell_agent/appsensor/rules/appsensor_rule_manager_spec.rb +0 -10
  60. data/spec/lib/tcell_agent/cmdi_spec.rb +748 -0
  61. data/spec/lib/tcell_agent/config/unknown_options_spec.rb +8 -0
  62. data/spec/lib/tcell_agent/configuration_spec.rb +138 -6
  63. data/spec/lib/tcell_agent/hooks/login_fraud_spec.rb +357 -0
  64. data/spec/lib/tcell_agent/patches/block_rule_spec.rb +70 -87
  65. data/spec/lib/tcell_agent/patches_spec.rb +9 -4
  66. data/spec/lib/tcell_agent/policies/appsensor/xss_sensor_spec.rb +186 -9
  67. data/spec/lib/tcell_agent/policies/appsensor_policy_spec.rb +309 -484
  68. data/spec/lib/tcell_agent/policies/command_injection_policy_spec.rb +736 -0
  69. data/spec/lib/tcell_agent/policies/http_redirect_policy_spec.rb +222 -41
  70. data/spec/lib/tcell_agent/policies/patches_policy_spec.rb +56 -32
  71. data/spec/lib/tcell_agent/rails/middleware/appsensor_middleware_spec.rb +161 -85
  72. data/spec/lib/tcell_agent/rails/middleware/tcell_body_proxy_spec.rb +40 -72
  73. data/spec/lib/tcell_agent/rust/whisperer_spec.rb +267 -0
  74. data/spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb +20 -15
  75. data/spec/spec_helper.rb +0 -9
  76. data/tcell_agent.gemspec +8 -3
  77. metadata +40 -39
  78. data/lib/tcell_agent/appsensor/sensor.rb +0 -52
  79. data/lib/tcell_agent/policies/appsensor/database_sensor.rb +0 -56
  80. data/lib/tcell_agent/policies/appsensor/misc_sensor.rb +0 -59
  81. data/lib/tcell_agent/policies/appsensor/payloads_policy.rb +0 -150
  82. data/lib/tcell_agent/policies/appsensor/request_size_sensor.rb +0 -25
  83. data/lib/tcell_agent/policies/appsensor/response_codes_sensor.rb +0 -73
  84. data/lib/tcell_agent/policies/appsensor/response_size_sensor.rb +0 -25
  85. data/lib/tcell_agent/policies/appsensor/size_sensor.rb +0 -71
  86. data/lib/tcell_agent/policies/appsensor/user_agent_sensor.rb +0 -47
  87. data/lib/tcell_agent/rails/auth/hooks.rb +0 -79
  88. data/lib/tcell_agent/sensor_events/util/redirect_utils.rb +0 -22
  89. data/spec/lib/tcell_agent/policies/appsensor/database_sensor_spec.rb +0 -165
  90. data/spec/lib/tcell_agent/policies/appsensor/misc_sensor_spec.rb +0 -429
  91. data/spec/lib/tcell_agent/policies/appsensor/payloads_policy_apply_spec.rb +0 -466
  92. data/spec/lib/tcell_agent/policies/appsensor/payloads_policy_from_json_spec.rb +0 -890
  93. data/spec/lib/tcell_agent/policies/appsensor/payloads_policy_log_spec.rb +0 -417
  94. data/spec/lib/tcell_agent/policies/appsensor/request_size_sensor_spec.rb +0 -236
  95. data/spec/lib/tcell_agent/policies/appsensor/response_codes_sensor_spec.rb +0 -297
  96. data/spec/lib/tcell_agent/policies/appsensor/response_size_sensor_spec.rb +0 -241
  97. data/spec/lib/tcell_agent/policies/appsensor/user_agent_sensor_spec.rb +0 -172
  98. data/spec/lib/tcell_agent/rails/auth/hooks_spec.rb +0 -246
  99. data/spec/lib/tcell_agent/sensor_events/util/redirect_utils_spec.rb +0 -25
  100. data/spec/support/resources/baserules.json +0 -155
@@ -1,165 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module TCellAgent
4
- module Policies
5
-
6
- describe DatabaseSensor do
7
-
8
- context "#initialize" do
9
- context "default sensor" do
10
- it "should have properties set to defaults" do
11
- sensor = DatabaseSensor.new
12
- expect(sensor.enabled).to eq(false)
13
- expect(sensor.max_rows).to eq(1001)
14
- expect(sensor.excluded_route_ids).to eq({})
15
- end
16
- end
17
-
18
- context "setting enabled on sensor" do
19
- it "should have properties set to defaults" do
20
- sensor = DatabaseSensor.new({"enabled" => true})
21
- expect(sensor.enabled).to eq(true)
22
- expect(sensor.max_rows).to eq(1001)
23
- expect(sensor.excluded_route_ids).to eq({})
24
- end
25
- end
26
-
27
- context "setting max_rows on sensor" do
28
- it "should have properties set to defaults" do
29
- sensor = DatabaseSensor.new({"large_result" => {"limit" => 1}})
30
- expect(sensor.enabled).to eq(false)
31
- expect(sensor.max_rows).to eq(1)
32
- expect(sensor.excluded_route_ids).to eq({})
33
- end
34
- end
35
-
36
- context "setting excluded routes on sensor" do
37
- it "should have properties set to defaults" do
38
- sensor = DatabaseSensor.new({"exclude_routes" => ["1", "10", "20"]})
39
- expect(sensor.enabled).to eq(false)
40
- expect(sensor.max_rows).to eq(1001)
41
- expect(sensor.excluded_route_ids).to eq({"1"=>true, "10"=>true, "20"=>true})
42
- end
43
- end
44
- end
45
-
46
- context "#check" do
47
- context "with disabled sensor" do
48
- it "should not send event" do
49
- sensor = DatabaseSensor.new({"enabled" => false})
50
-
51
- expect(TCellAgent).to_not receive(:send_event)
52
- sensor.check({}, 10)
53
- end
54
- end
55
-
56
- context "with enabled sensor" do
57
- context "records is less than limit" do
58
- it "should not send event" do
59
- sensor = DatabaseSensor.new({
60
- "enabled" => true,
61
- "large_result" => { "limit" => 10},
62
- "exclude_routes" => []
63
- })
64
-
65
- tcell_data = TCellAgent::Instrumentation::TCellData.new
66
-
67
- expect(TCellAgent).to_not receive(:send_event)
68
- sensor.check(tcell_data, 1)
69
- end
70
- end
71
-
72
- context "records are more than limit" do
73
- it "should send event" do
74
- sensor = DatabaseSensor.new({
75
- "enabled" => true,
76
- "large_result" => { "limit" => 10},
77
- "exclude_routes" => []
78
- })
79
-
80
- tcell_data = TCellAgent::Instrumentation::TCellData.new
81
- tcell_data.ip_address = "ip_address"
82
- tcell_data.request_method = "get"
83
- tcell_data.uri = "location"
84
- tcell_data.route_id = "route_id"
85
- tcell_data.session_id = "session_id"
86
- tcell_data.user_id = "user_id"
87
- tcell_data.transaction_id = "transaction_id"
88
-
89
- expect(TCellAgent).to receive(:send_event).with(
90
- {
91
- "event_type" => "as",
92
- "dp" => DatabaseSensor::DP_CODE,
93
- "remote_addr" => "ip_address",
94
- "rid" => "route_id",
95
- "m" => "get",
96
- "meta" => {"rows" => 11}
97
- }
98
- )
99
- sensor.check(tcell_data, 11)
100
- end
101
- end
102
-
103
- context "records are more than limit" do
104
- context "route_id is excluded" do
105
- it "should not send event" do
106
- sensor = DatabaseSensor.new({
107
- "enabled" => true,
108
- "large_result" => { "limit" => 10},
109
- "exclude_routes" => ["route_id"]
110
- })
111
-
112
- tcell_data = TCellAgent::Instrumentation::TCellData.new
113
- tcell_data.ip_address = "ip_address"
114
- tcell_data.request_method = "get"
115
- tcell_data.uri = "location"
116
- tcell_data.route_id = "route_id"
117
- tcell_data.session_id = "session_id"
118
- tcell_data.user_id = "user_id"
119
- tcell_data.transaction_id = "transaction_id"
120
-
121
- expect(TCellAgent).to_not receive(:send_event)
122
-
123
- sensor.check(tcell_data, 11)
124
- end
125
- end
126
-
127
- context "route is not excluded" do
128
- it "should send event" do
129
- sensor = DatabaseSensor.new({
130
- "enabled" => true,
131
- "large_result" => { "limit" => 10},
132
- "exclude_routes" => ["nonmatching_route_id"]
133
- })
134
-
135
- tcell_data = TCellAgent::Instrumentation::TCellData.new
136
- tcell_data.ip_address = "ip_address"
137
- tcell_data.request_method = "get"
138
- tcell_data.uri = "location"
139
- tcell_data.route_id = "route_id"
140
- tcell_data.session_id = "session_id"
141
- tcell_data.user_id = "user_id"
142
- tcell_data.transaction_id = "transaction_id"
143
-
144
- expect(TCellAgent).to receive(:send_event).with(
145
- {
146
- "event_type" => "as",
147
- "dp" => DatabaseSensor::DP_CODE,
148
- "remote_addr" => "ip_address",
149
- "rid" => "route_id",
150
- "m" => "get",
151
- "meta" => {"rows" => 11}
152
- }
153
- )
154
- sensor.check(tcell_data, 11)
155
- end
156
- end
157
- end
158
-
159
- end
160
- end
161
-
162
- end
163
-
164
- end
165
- end
@@ -1,429 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- module TCellAgent
5
- module Policies
6
-
7
- class FakeInvalidAuthenticityToken < StandardError
8
- end
9
-
10
- class FakeStatementInvalid < StandardError
11
- end
12
-
13
- describe MiscSensor do
14
- context "#initialize" do
15
- context "default sensor" do
16
- it "should have properties set to defaults" do
17
- sensor = MiscSensor.new
18
- expect(sensor.enabled).to eq(false)
19
- expect(sensor.csrf_exception_enabled).to eq(false)
20
- expect(sensor.sql_exception_enabled).to eq(false)
21
- expect(sensor.excluded_route_ids).to eq({})
22
- end
23
- end
24
-
25
- context "setting enabled on sensor" do
26
- it "should have enabled set" do
27
- sensor = MiscSensor.new({"enabled" => true})
28
- expect(sensor.enabled).to eq(true)
29
- expect(sensor.csrf_exception_enabled).to eq(false)
30
- expect(sensor.sql_exception_enabled).to eq(false)
31
- expect(sensor.excluded_route_ids).to eq({})
32
- end
33
- end
34
-
35
- context "setting csrf_exception_enabled on sensor" do
36
- it "should csrf_exception_enabled set" do
37
- sensor = MiscSensor.new({"csrf_exception_enabled" => true})
38
- expect(sensor.enabled).to eq(false)
39
- expect(sensor.csrf_exception_enabled).to eq(true)
40
- expect(sensor.sql_exception_enabled).to eq(false)
41
- expect(sensor.excluded_route_ids).to eq({})
42
- end
43
- end
44
-
45
- context "setting sql_exception_enabled on sensor" do
46
- it "should sql_exception_enabled set" do
47
- sensor = MiscSensor.new({"sql_exception_enabled" => true})
48
- expect(sensor.enabled).to eq(false)
49
- expect(sensor.csrf_exception_enabled).to eq(false)
50
- expect(sensor.sql_exception_enabled).to eq(true)
51
- expect(sensor.excluded_route_ids).to eq({})
52
- end
53
- end
54
-
55
- context "setting excluded_route_ids on sensor" do
56
- it "should excluded_route_ids set" do
57
- sensor = MiscSensor.new({"sql_exception_enabled" => true, "exclude_routes" => ["route_id"]})
58
- expect(sensor.enabled).to eq(false)
59
- expect(sensor.csrf_exception_enabled).to eq(false)
60
- expect(sensor.sql_exception_enabled).to eq(true)
61
- expect(sensor.excluded_route_ids).to eq({"route_id" => true})
62
- end
63
- end
64
- end
65
-
66
- describe "#csrf_rejected" do
67
- before(:each) do
68
- @exception_class = FakeInvalidAuthenticityToken
69
- end
70
-
71
- context "with disabled sensor" do
72
- context "with disabled csrf_exception_enabled sensor" do
73
- it "should not send event" do
74
- sensor = MiscSensor.new({"enabled" => false, "csrf_exception_enabled" => false})
75
- tcell_data = TCellAgent::Instrumentation::TCellData.new
76
-
77
- expect(TCellAgent).to_not receive(:send_event)
78
-
79
- sensor.csrf_rejected(tcell_data, @exception_class)
80
- end
81
- end
82
-
83
- context "with enabled csrf_exception_enabled" do
84
- it "should not send event" do
85
- sensor = MiscSensor.new({"enabled" => false, "csrf_exception_enabled" => true})
86
- tcell_data = TCellAgent::Instrumentation::TCellData.new
87
-
88
- expect(TCellAgent).to_not receive(:send_event)
89
-
90
- sensor.csrf_rejected(tcell_data, @exception_class)
91
- end
92
-
93
- context "with nil tcell-data" do
94
- it "should not send event" do
95
- sensor = MiscSensor.new({"enabled" => false, "csrf_exception_enabled" => true})
96
- tcell_data = TCellAgent::Instrumentation::TCellData.new
97
-
98
- expect(TCellAgent).to_not receive(:send_event)
99
-
100
- sensor.csrf_rejected(tcell_data, @exception_class)
101
- end
102
- end
103
- end
104
- end
105
-
106
- context "with enabled sensor" do
107
- context "with disabled csrf_exception_enabled sensor" do
108
- it "should not send event" do
109
- sensor = MiscSensor.new({"enabled" => true, "csrf_exception_enabled" => false})
110
- tcell_data = TCellAgent::Instrumentation::TCellData.new
111
-
112
- expect(TCellAgent).to_not receive(:send_event)
113
-
114
- sensor.csrf_rejected(tcell_data, @exception_class)
115
- end
116
-
117
- context "no excluded routes" do
118
- it "should not send an event" do
119
- sensor = MiscSensor.new({
120
- "enabled" => true,
121
- "csrf_exception_enabled" => false,
122
- "exclude_routes" => []
123
- })
124
- tcell_data = TCellAgent::Instrumentation::TCellData.new
125
- tcell_data.route_id = "route_id"
126
-
127
- expect(TCellAgent).to_not receive(:send_event)
128
-
129
- sensor.csrf_rejected(tcell_data, @exception_class)
130
- end
131
- end
132
-
133
- context "has excluded routes" do
134
- context "route id matches" do
135
- it "should not send an event" do
136
- sensor = MiscSensor.new({
137
- "enabled" => true,
138
- "csrf_exception_enabled" => false,
139
- "exclude_routes" => []
140
- })
141
- tcell_data = TCellAgent::Instrumentation::TCellData.new
142
- tcell_data.route_id = "route_id"
143
-
144
- expect(TCellAgent).to_not receive(:send_event)
145
-
146
- sensor.csrf_rejected(tcell_data, @exception_class)
147
- end
148
- end
149
-
150
- context "route id does not match" do
151
- it "should not send an event" do
152
- sensor = MiscSensor.new({
153
- "enabled" => true,
154
- "csrf_exception_enabled" => false,
155
- "exclude_routes" => ["nonmatching"]
156
- })
157
- tcell_data = TCellAgent::Instrumentation::TCellData.new
158
- tcell_data.route_id = "route_id"
159
-
160
- expect(TCellAgent).to_not receive(:send_event)
161
-
162
- sensor.csrf_rejected(tcell_data, @exception_class)
163
- end
164
- end
165
- end
166
- end
167
-
168
- context "with enabled csrf_exception_enabled" do
169
- it "should send event" do
170
- sensor = MiscSensor.new({"enabled" => true, "csrf_exception_enabled" => true})
171
- tcell_data = TCellAgent::Instrumentation::TCellData.new
172
-
173
- expect(TCellAgent).to receive(:send_event).with({
174
- "event_type"=>"as",
175
- "dp"=>"excsrf",
176
- "param"=>"TCellAgent::Policies::FakeInvalidAuthenticityToken"
177
- })
178
-
179
- sensor.csrf_rejected(tcell_data, @exception_class)
180
- end
181
-
182
- context "no excluded routes" do
183
- it "should send an event" do
184
- sensor = MiscSensor.new({
185
- "enabled" => true,
186
- "csrf_exception_enabled" => true,
187
- "exclude_routes" => []
188
- })
189
- tcell_data = TCellAgent::Instrumentation::TCellData.new
190
- tcell_data.route_id = "route_id"
191
-
192
- expect(TCellAgent).to receive(:send_event).with({
193
- "event_type"=>"as",
194
- "dp"=>"excsrf",
195
- "param"=>"TCellAgent::Policies::FakeInvalidAuthenticityToken",
196
- "rid"=>"route_id"
197
- })
198
-
199
- sensor.csrf_rejected(tcell_data, @exception_class)
200
- end
201
- end
202
-
203
- context "has excluded routes" do
204
- context "route id matches" do
205
- it "should not send an event" do
206
- sensor = MiscSensor.new({
207
- "enabled" => true,
208
- "csrf_exception_enabled" => true,
209
- "exclude_routes" => ["route_id"]
210
- })
211
- tcell_data = TCellAgent::Instrumentation::TCellData.new
212
- tcell_data.route_id = "route_id"
213
-
214
- expect(TCellAgent).to_not receive(:send_event)
215
-
216
- sensor.csrf_rejected(tcell_data, @exception_class)
217
- end
218
- end
219
-
220
- context "route id does not match" do
221
- it "should send an event" do
222
- sensor = MiscSensor.new({
223
- "enabled" => true,
224
- "csrf_exception_enabled" => true,
225
- "exclude_routes" => ["nonmatching"]
226
- })
227
- tcell_data = TCellAgent::Instrumentation::TCellData.new
228
- tcell_data.route_id = "route_id"
229
-
230
- expect(TCellAgent).to receive(:send_event).with({
231
- "event_type"=>"as",
232
- "dp"=>"excsrf",
233
- "param"=>"TCellAgent::Policies::FakeInvalidAuthenticityToken",
234
- "rid"=>"route_id"
235
- })
236
-
237
- sensor.csrf_rejected(tcell_data, @exception_class)
238
- end
239
- end
240
- end
241
- end
242
- end
243
-
244
- end
245
-
246
- describe "#sql_exception_enabled" do
247
- before(:each) do
248
- @exception = FakeStatementInvalid.new
249
- end
250
-
251
- context "with disabled sensor" do
252
- context "with disabled sql_exception_enabled sensor" do
253
- it "should not send event" do
254
- sensor = MiscSensor.new({"enabled" => false, "sql_exception_enabled" => false})
255
- tcell_data = TCellAgent::Instrumentation::TCellData.new
256
-
257
- expect(TCellAgent).to_not receive(:send_event)
258
-
259
- sensor.sql_exception_detected(tcell_data, @exception)
260
- end
261
- end
262
-
263
- context "with enabled sql_exception_enabled" do
264
- it "should not send event" do
265
- sensor = MiscSensor.new({"enabled" => false, "sql_exception_enabled" => true})
266
- tcell_data = TCellAgent::Instrumentation::TCellData.new
267
-
268
- expect(TCellAgent).to_not receive(:send_event)
269
-
270
- sensor.sql_exception_detected(tcell_data, @exception)
271
- end
272
-
273
- context "with nil tcell-data" do
274
- it "should not send event" do
275
- sensor = MiscSensor.new({"enabled" => false, "sql_exception_enabled" => true})
276
- tcell_data = TCellAgent::Instrumentation::TCellData.new
277
-
278
- expect(TCellAgent).to_not receive(:send_event)
279
-
280
- sensor.sql_exception_detected(tcell_data, @exception)
281
- end
282
- end
283
- end
284
- end
285
-
286
- context "with enabled sensor" do
287
- context "with disabled sql_exception_enabled sensor" do
288
- it "should not send event" do
289
- sensor = MiscSensor.new({"enabled" => true, "sql_exception_enabled" => false})
290
- tcell_data = TCellAgent::Instrumentation::TCellData.new
291
-
292
- expect(TCellAgent).to_not receive(:send_event)
293
-
294
- sensor.sql_exception_detected(tcell_data, @exception)
295
- end
296
-
297
- context "no excluded routes" do
298
- it "should not send an event" do
299
- sensor = MiscSensor.new({
300
- "enabled" => true,
301
- "sql_exception_enabled" => false,
302
- "exclude_routes" => []
303
- })
304
- tcell_data = TCellAgent::Instrumentation::TCellData.new
305
- tcell_data.route_id = "route_id"
306
-
307
- expect(TCellAgent).to_not receive(:send_event)
308
-
309
- sensor.sql_exception_detected(tcell_data, @exception)
310
- end
311
- end
312
-
313
- context "has excluded routes" do
314
- context "route id matches" do
315
- it "should not send an event" do
316
- sensor = MiscSensor.new({
317
- "enabled" => true,
318
- "sql_exception_enabled" => false,
319
- "exclude_routes" => []
320
- })
321
- tcell_data = TCellAgent::Instrumentation::TCellData.new
322
- tcell_data.route_id = "route_id"
323
-
324
- expect(TCellAgent).to_not receive(:send_event)
325
-
326
- sensor.sql_exception_detected(tcell_data, @exception)
327
- end
328
- end
329
-
330
- context "route id does not match" do
331
- it "should not send an event" do
332
- sensor = MiscSensor.new({
333
- "enabled" => true,
334
- "sql_exception_enabled" => false,
335
- "exclude_routes" => ["nonmatching"]
336
- })
337
- tcell_data = TCellAgent::Instrumentation::TCellData.new
338
- tcell_data.route_id = "route_id"
339
-
340
- expect(TCellAgent).to_not receive(:send_event)
341
-
342
- sensor.sql_exception_detected(tcell_data, @exception)
343
- end
344
- end
345
- end
346
- end
347
-
348
- context "with enabled sql_exception_enabled" do
349
- it "should send event" do
350
- sensor = MiscSensor.new({"enabled" => true, "sql_exception_enabled" => true})
351
- tcell_data = TCellAgent::Instrumentation::TCellData.new
352
-
353
- expect(TCellAgent).to receive(:send_event).with({
354
- "event_type"=>"as",
355
- "dp"=>"exsql",
356
- "param"=>"TCellAgent::Policies::FakeStatementInvalid"
357
- })
358
-
359
- sensor.sql_exception_detected(tcell_data, @exception)
360
- end
361
-
362
- context "no excluded routes" do
363
- it "should send an event" do
364
- sensor = MiscSensor.new({
365
- "enabled" => true,
366
- "sql_exception_enabled" => true,
367
- "exclude_routes" => []
368
- })
369
- tcell_data = TCellAgent::Instrumentation::TCellData.new
370
- tcell_data.route_id = "route_id"
371
-
372
- expect(TCellAgent).to receive(:send_event).with({
373
- "event_type"=>"as",
374
- "dp"=>"exsql",
375
- "param"=>"TCellAgent::Policies::FakeStatementInvalid",
376
- "rid"=>"route_id"
377
- })
378
-
379
- sensor.sql_exception_detected(tcell_data, @exception)
380
- end
381
- end
382
-
383
- context "has excluded routes" do
384
- context "route id matches" do
385
- it "should not send an event" do
386
- sensor = MiscSensor.new({
387
- "enabled" => true,
388
- "sql_exception_enabled" => true,
389
- "exclude_routes" => ["route_id"]
390
- })
391
- tcell_data = TCellAgent::Instrumentation::TCellData.new
392
- tcell_data.route_id = "route_id"
393
-
394
- expect(TCellAgent).to_not receive(:send_event)
395
-
396
- sensor.sql_exception_detected(tcell_data, @exception)
397
- end
398
- end
399
-
400
- context "route id does not match" do
401
- it "should send an event" do
402
- sensor = MiscSensor.new({
403
- "enabled" => true,
404
- "sql_exception_enabled" => true,
405
- "exclude_routes" => ["nonmatching"]
406
- })
407
- tcell_data = TCellAgent::Instrumentation::TCellData.new
408
- tcell_data.route_id = "route_id"
409
-
410
- expect(TCellAgent).to receive(:send_event).with({
411
- "event_type"=>"as",
412
- "dp"=>"exsql",
413
- "param"=>"TCellAgent::Policies::FakeStatementInvalid",
414
- "rid"=>"route_id"
415
- })
416
-
417
- sensor.sql_exception_detected(tcell_data, @exception)
418
- end
419
- end
420
- end
421
- end
422
- end
423
-
424
- end
425
-
426
- end
427
-
428
- end
429
- end