Skip to content

Commit 2528368

Browse files
committed
Added integration test
1 parent 1354343 commit 2528368

File tree

5 files changed

+79
-12
lines changed

5 files changed

+79
-12
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from codemodder.codemods.test import SonarIntegrationTest
2+
from core_codemods.sonar.sonar_secure_cookie import (
3+
SonarSecureCookie,
4+
SonarSecureCookieTransformer,
5+
)
6+
7+
8+
class TestSonarSecureCookie(SonarIntegrationTest):
9+
codemod = SonarSecureCookie
10+
code_path = "tests/samples/secure_cookie.py"
11+
replacement_lines = [
12+
(
13+
8,
14+
""" resp.set_cookie('custom_cookie', 'value', secure=True, httponly=True, samesite='Lax')\n""",
15+
),
16+
]
17+
expected_diff = "--- \n+++ \n@@ -5,5 +5,5 @@\n @app.route('/')\n def index():\n resp = make_response('Custom Cookie Set')\n- resp.set_cookie('custom_cookie', 'value')\n+ resp.set_cookie('custom_cookie', 'value', secure=True, httponly=True, samesite='Lax')\n return resp\n"
18+
expected_line_change = "8"
19+
change_description = SonarSecureCookieTransformer.change_description

integration_tests/test_secure_flask_cookie.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from codemodder.codemods.test import BaseIntegrationTest
2-
from core_codemods.secure_flask_cookie import SecureFlaskCookie
2+
from core_codemods.secure_flask_cookie import SecureCookieTransformer, SecureFlaskCookie
33

44

55
class TestSecureFlaskCookie(BaseIntegrationTest):
@@ -23,4 +23,4 @@ def index():
2323
]
2424
expected_diff = "--- \n+++ \n@@ -5,5 +5,5 @@\n @app.route('/')\n def index():\n resp = make_response('Custom Cookie Set')\n- resp.set_cookie('custom_cookie', 'value')\n+ resp.set_cookie('custom_cookie', 'value', secure=True, httponly=True, samesite='Lax')\n return resp\n"
2525
expected_line_change = "8"
26-
change_description = SecureFlaskCookie.change_description
26+
change_description = SecureCookieTransformer.change_description

src/codemodder/codemods/test/integration_utils.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,12 @@ def _assert_results_fields(self, results, output_path):
124124

125125
# TODO: if/when we add description for each url
126126
for reference in result["references"][
127-
# Last reference for Sonar has a different description
128-
: (-1 if self.sonar_issues_json or self.sonar_hotspots_json else None)
127+
# Last references for Sonar has a different description
128+
: (
129+
-len(self.codemod.requested_rules)
130+
if self.sonar_issues_json or self.sonar_hotspots_json
131+
else None
132+
)
129133
]:
130134
assert reference["url"] == reference["description"]
131135

@@ -288,21 +292,25 @@ def check_sonar_issues(cls):
288292
(cls.sonar_issues_json, cls.sonar_hotspots_json)
289293
)
290294

291-
assert (
292-
cls.codemod.requested_rules[-1] in sonar_results
295+
assert any(
296+
map(lambda x: x in sonar_results, cls.codemod.requested_rules)
293297
), f"Make sure to add a sonar issue/hotspot for {cls.codemod.rule_id} in {cls.sonar_issues_json} or {cls.sonar_hotspots_json}"
294298
results_for_codemod = sonar_results[cls.codemod.requested_rules[-1]]
295299
file_path = pathlib.Path(cls.code_filename)
296300
assert (
297301
file_path in results_for_codemod
298-
), f"Make sure to add a sonar issue/hotspot for file `{cls.code_filename}` under rule `{cls.codemod.rule_id}`in {cls.sonar_issues_json} or {cls.sonar_hotspots_json}"
302+
), f"Make sure to add a sonar issue/hotspot for file `{cls.code_filename}` under one of the rules `{cls.codemod.requested_rules}`in {cls.sonar_issues_json} or {cls.sonar_hotspots_json}"
299303

300304
def _assert_sonar_fields(self, result):
301305
assert self.codemod_instance._metadata.tool is not None
302-
assert (
303-
result["references"][-1]["description"]
304-
== self.codemod_instance._metadata.tool.rules[0].name
305-
)
306+
rules = self.codemod_instance._metadata.tool.rules
307+
for i in range(len(rules)):
308+
assert (
309+
result["references"][len(result["references"]) - len(rules) + i][
310+
"description"
311+
]
312+
== self.codemod_instance._metadata.tool.rules[i].name
313+
)
306314
assert result["detectionTool"]["name"] == "Sonar"
307315

308316

src/core_codemods/sonar/sonar_secure_cookie.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
ToolRule(
1717
id="python:S2092",
1818
name='Creating cookies without the "secure" flag is security-sensitive',
19-
url="ahttps://rules.sonarsource.com/python/RSPEC-2092/",
19+
url="https://rules.sonarsource.com/python/RSPEC-2092/",
2020
),
2121
]
2222

tests/samples/sonar_hotspots.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,46 @@
55
"total": 4
66
},
77
"hotspots": [
8+
{
9+
"key": "AZRvB_g13jBxJiUZnPHJ",
10+
"component": "pixee_codemodder-python:secure_cookie.py",
11+
"project": "pixee_codemodder-python",
12+
"securityCategory": "insecure-conf",
13+
"vulnerabilityProbability": "LOW",
14+
"status": "TO_REVIEW",
15+
"line": 8,
16+
"message": "Make sure creating this cookie without the \"secure\" flag is safe.",
17+
"creationDate": "2025-01-16T13:11:02+0100",
18+
"updateDate": "2025-01-16T13:12:34+0100",
19+
"textRange": {
20+
"startLine": 8,
21+
"endLine": 8,
22+
"startOffset": 4,
23+
"endOffset": 19
24+
},
25+
"flows": [],
26+
"ruleKey": "python:S2092"
27+
},
28+
{
29+
"key": "AZRvB_g13jBxJiUZnPHI",
30+
"component": "pixee_codemodder-python:secure_cookie.py",
31+
"project": "pixee_codemodder-python",
32+
"securityCategory": "others",
33+
"vulnerabilityProbability": "LOW",
34+
"status": "TO_REVIEW",
35+
"line": 8,
36+
"message": "Make sure creating this cookie without the \"HttpOnly\" flag is safe.",
37+
"creationDate": "2025-01-16T13:11:02+0100",
38+
"updateDate": "2025-01-16T13:12:34+0100",
39+
"textRange": {
40+
"startLine": 8,
41+
"endLine": 8,
42+
"startOffset": 4,
43+
"endOffset": 19
44+
},
45+
"flows": [],
46+
"ruleKey": "python:S3330"
47+
},
848
{
949
"key": "AY6fXn2rzaaymEtIucTd",
1050
"component": "pixee_codemodder-python:secure_random.py",

0 commit comments

Comments
 (0)