11import json
22import os .path
3- import sys
43
54import pytest
65from six import ensure_binary
2726RULES_MISSING_PATH = os .path .join (ROOT_DIR , "nonexistent" )
2827
2928
30- class Config (object ):
31- def __init__ (self ):
32- self .is_header_tracing_configured = False
29+ @pytest .fixture
30+ def tracer_appsec (tracer ):
31+ with override_global_config (dict (_appsec_enabled = True )):
32+ yield _enable_appsec (tracer )
3333
3434
3535def _enable_appsec (tracer ):
@@ -39,6 +39,11 @@ def _enable_appsec(tracer):
3939 return tracer
4040
4141
42+ class Config (object ):
43+ def __init__ (self ):
44+ self .is_header_tracing_configured = False
45+
46+
4247def test_transform_headers ():
4348 transformed = _transform_headers (
4449 {
@@ -56,8 +61,8 @@ def test_transform_headers():
5661 assert set (transformed ["foo" ]) == {"bar1" , "bar2" , "bar3" }
5762
5863
59- def test_enable (tracer ):
60- _enable_appsec ( tracer )
64+ def test_enable (tracer_appsec ):
65+ tracer = tracer_appsec
6166
6267 with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
6368 set_http_meta (span , {}, raw_uri = "http://example.com/.git" , status_code = "404" )
@@ -85,35 +90,35 @@ def test_enable_bad_rules(rule, exc, tracer):
8590 _enable_appsec (tracer )
8691
8792
88- def test_retain_traces (tracer ):
89- _enable_appsec ( tracer )
93+ def test_retain_traces (tracer_appsec ):
94+ tracer = tracer_appsec
9095
9196 with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
9297 set_http_meta (span , {}, raw_uri = "http://example.com/.git" , status_code = "404" )
9398
9499 assert span .context .sampling_priority == USER_KEEP
95100
96101
97- def test_valid_json (tracer ):
98- _enable_appsec ( tracer )
102+ def test_valid_json (tracer_appsec ):
103+ tracer = tracer_appsec
99104
100105 with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
101106 set_http_meta (span , {}, raw_uri = "http://example.com/.git" , status_code = "404" )
102107
103108 assert "triggers" in json .loads (span .get_tag (APPSEC_JSON ))
104109
105110
106- def test_header_attack (tracer ):
107- _enable_appsec ( tracer )
111+ def test_header_attack (tracer_appsec ):
112+ tracer = tracer_appsec
108113
109114 with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
110115 set_http_meta (span , Config (), request_headers = {"User-Agent" : "Arachni/v1" , "user-agent" : "aa" })
111116
112117 assert "triggers" in json .loads (span .get_tag (APPSEC_JSON ))
113118
114119
115- def test_headers_collection (tracer ):
116- _enable_appsec ( tracer )
120+ def test_headers_collection (tracer_appsec ):
121+ tracer = tracer_appsec
117122
118123 with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
119124
@@ -148,17 +153,20 @@ def test_headers_collection(tracer):
148153 ],
149154)
150155def test_appsec_cookies_no_collection_snapshot (tracer ):
151- _enable_appsec (tracer )
152- with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
153- set_http_meta (
154- span ,
155- {},
156- raw_uri = "http://example.com/.git" ,
157- status_code = "404" ,
158- request_cookies = {"cookie1" : "im the cookie1" },
159- )
156+ # We use tracer instead of tracer_appsec because snapshot is looking for tracer fixture and not understands
157+ # other fixtures
158+ with override_global_config (dict (_appsec_enabled = True )):
159+ _enable_appsec (tracer )
160+ with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
161+ set_http_meta (
162+ span ,
163+ {},
164+ raw_uri = "http://example.com/.git" ,
165+ status_code = "404" ,
166+ request_cookies = {"cookie1" : "im the cookie1" },
167+ )
160168
161- assert "triggers" in json .loads (span .get_tag (APPSEC_JSON ))
169+ assert "triggers" in json .loads (span .get_tag (APPSEC_JSON ))
162170
163171
164172@snapshot (
@@ -191,16 +199,15 @@ def test_appsec_body_no_collection_snapshot(tracer):
191199 ],
192200)
193201def test_appsec_span_tags_snapshot (tracer ):
194- _enable_appsec ( tracer )
195-
196- with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
197- span .set_tag ("http.url" , "http://example.com/.git" )
198- set_http_meta (span , {}, raw_uri = "http://example.com/.git" , status_code = "404" )
202+ with override_global_config ( dict ( _appsec_enabled = True )):
203+ _enable_appsec ( tracer )
204+ with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
205+ span .set_tag ("http.url" , "http://example.com/.git" )
206+ set_http_meta (span , {}, raw_uri = "http://example.com/.git" , status_code = "404" )
199207
200- assert "triggers" in json .loads (span .get_tag (APPSEC_JSON ))
208+ assert "triggers" in json .loads (span .get_tag (APPSEC_JSON ))
201209
202210
203- @pytest .mark .skipif (sys .version_info > (3 , 5 , 0 ), reason = "Python 2.7 and Python 3.5 test" )
204211@snapshot (
205212 include_tracer = True ,
206213 ignores = [
@@ -210,19 +217,20 @@ def test_appsec_span_tags_snapshot(tracer):
210217 ],
211218)
212219def test_appsec_span_tags_snapshot_with_errors (tracer ):
213- with override_env (dict (DD_APPSEC_RULES = os .path .join (ROOT_DIR , "rules-with-2-errors.json" ))):
214- _enable_appsec (tracer )
215- with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
216- span .set_tag ("http.url" , "http://example.com/.git" )
217- set_http_meta (span , {}, raw_uri = "http://example.com/.git" , status_code = "404" )
220+ with override_global_config (dict (_appsec_enabled = True )):
221+ with override_env (dict (DD_APPSEC_RULES = os .path .join (ROOT_DIR , "rules-with-2-errors.json" ))):
222+ _enable_appsec (tracer )
223+ with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
224+ span .set_tag ("http.url" , "http://example.com/.git" )
225+ set_http_meta (span , {}, raw_uri = "http://example.com/.git" , status_code = "404" )
218226
219- assert span .get_tag (APPSEC_JSON ) is None
227+ assert span .get_tag (APPSEC_JSON ) is None
220228
221229
222230def test_appsec_span_rate_limit (tracer ):
223- with override_env (dict (DD_APPSEC_TRACE_RATE_LIMIT = "1" )):
224- _enable_appsec (tracer )
225231
232+ with override_global_config (dict (_appsec_enabled = True )), override_env (dict (DD_APPSEC_TRACE_RATE_LIMIT = "1" )):
233+ _enable_appsec (tracer )
226234 # we have 2 spans going through with a rate limit of 1: this is because the first span will update the rate
227235 # limiter last update timestamp. In other words, we need a first call to reset the rate limiter's clock
228236 # DEV: aligning rate limiter clock with this span (this
@@ -299,8 +307,8 @@ def test_obfuscation_parameter_key_and_value_invalid_regex():
299307 assert processor .enabled
300308
301309
302- def test_obfuscation_parameter_value_unconfigured_not_matching (tracer ):
303- _enable_appsec ( tracer )
310+ def test_obfuscation_parameter_value_unconfigured_not_matching (tracer_appsec ):
311+ tracer = tracer_appsec
304312
305313 with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
306314 set_http_meta (span , Config (), raw_uri = "http://example.com/.git?hello=goodbye" , status_code = "404" )
@@ -312,8 +320,8 @@ def test_obfuscation_parameter_value_unconfigured_not_matching(tracer):
312320 assert "<Redacted>" not in span .get_tag ("_dd.appsec.json" )
313321
314322
315- def test_obfuscation_parameter_value_unconfigured_matching (tracer ):
316- _enable_appsec ( tracer )
323+ def test_obfuscation_parameter_value_unconfigured_matching (tracer_appsec ):
324+ tracer = tracer_appsec
317325
318326 with tracer .trace ("test" , span_type = SpanTypes .WEB ) as span :
319327 set_http_meta (span , Config (), raw_uri = "http://example.com/.git?password=goodbye" , status_code = "404" )
@@ -326,7 +334,9 @@ def test_obfuscation_parameter_value_unconfigured_matching(tracer):
326334
327335
328336def test_obfuscation_parameter_value_configured_not_matching (tracer ):
329- with override_env (dict (DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP = "token" )):
337+ with override_global_config (dict (_appsec_enabled = True )), override_env (
338+ dict (DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP = "token" )
339+ ):
330340
331341 _enable_appsec (tracer )
332342
@@ -341,7 +351,9 @@ def test_obfuscation_parameter_value_configured_not_matching(tracer):
341351
342352
343353def test_obfuscation_parameter_value_configured_matching (tracer ):
344- with override_env (dict (DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP = "token" )):
354+ with override_global_config (dict (_appsec_enabled = True )), override_env (
355+ dict (DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP = "token" )
356+ ):
345357
346358 _enable_appsec (tracer )
347359
0 commit comments