Skip to content

Commit 0bc7383

Browse files
committed
More integration tests converted
1 parent 0d7d041 commit 0bc7383

File tree

9 files changed

+59
-113
lines changed

9 files changed

+59
-113
lines changed
Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,17 @@
1-
from codemodder.codemods.test import SonarIntegrationTest
1+
from codemodder.codemods.test.integration_utils import SonarRemediationIntegrationTest
22
from core_codemods.fix_missing_self_or_cls import FixMissingSelfOrClsTransformer
33
from core_codemods.sonar.sonar_fix_missing_self_or_cls import SonarFixMissingSelfOrCls
44

55

6-
class TestSonarFixMissingSelfOrCls(SonarIntegrationTest):
6+
class TestSonarFixMissingSelfOrCls(SonarRemediationIntegrationTest):
77
codemod = SonarFixMissingSelfOrCls
88
code_path = "tests/samples/fix_missing_self_or_cls.py"
9-
replacement_lines = [
10-
(
11-
2,
12-
""" def instance_method(self):\n""",
13-
),
14-
(
15-
6,
16-
""" def class_method(cls):\n""",
17-
),
9+
10+
expected_diff_per_change = [
11+
'--- \n+++ \n@@ -1,5 +1,5 @@\n class MyClass:\n- def instance_method():\n+ def instance_method(self):\n print("instance_method")\n \n @classmethod\n',
12+
'--- \n+++ \n@@ -3,5 +3,5 @@\n print("instance_method")\n \n @classmethod\n- def class_method():\n+ def class_method(cls):\n print("class_method")\n',
1813
]
19-
# fmt: off
20-
expected_diff = (
21-
"""--- \n"""
22-
"""+++ \n"""
23-
"""@@ -1,7 +1,7 @@\n"""
24-
""" class MyClass:\n"""
25-
"""- def instance_method():\n"""
26-
"""+ def instance_method(self):\n"""
27-
""" print("instance_method")\n"""
28-
""" \n"""
29-
""" @classmethod\n"""
30-
"""- def class_method():\n"""
31-
"""+ def class_method(cls):\n"""
32-
""" print("class_method")\n"""
33-
)
34-
# fmt: on
3514

36-
expected_line_change = "2"
15+
expected_lines_changed = [2, 6]
3716
change_description = FixMissingSelfOrClsTransformer.change_description
3817
num_changes = 2
Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
1-
from codemodder.codemods.test import SonarIntegrationTest
1+
from codemodder.codemods.test.integration_utils import SonarRemediationIntegrationTest
22
from core_codemods.sonar.sonar_secure_cookie import (
33
SonarSecureCookie,
44
SonarSecureCookieTransformer,
55
)
66

77

8-
class TestSonarSecureCookie(SonarIntegrationTest):
8+
class TestSonarSecureCookie(SonarRemediationIntegrationTest):
99
codemod = SonarSecureCookie
1010
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-
),
11+
expected_diff_per_change = [
12+
"--- \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",
13+
"--- \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",
1614
]
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"
15+
16+
expected_lines_changed = [8, 8]
17+
num_changes = 2
1918
change_description = SonarSecureCookieTransformer.change_description
Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,16 @@
1-
from codemodder.codemods.test import SonarIntegrationTest
1+
from codemodder.codemods.test.integration_utils import SonarRemediationIntegrationTest
22
from core_codemods.secure_random import SecureRandomTransformer
33
from core_codemods.sonar.sonar_secure_random import SonarSecureRandom
44

55

6-
class TestSonarDjangoJsonResponseType(SonarIntegrationTest):
6+
class TestSonarSecureRandom(SonarRemediationIntegrationTest):
77
codemod = SonarSecureRandom
88
code_path = "tests/samples/secure_random.py"
9-
replacement_lines = [
10-
(1, """import secrets\n"""),
11-
(3, """secrets.SystemRandom().random()\n"""),
12-
(4, """secrets.SystemRandom().getrandbits(1)\n"""),
9+
expected_diff_per_change = [
10+
"--- \n+++ \n@@ -1,4 +1,5 @@\n import random\n+import secrets\n \n-random.random()\n+secrets.SystemRandom().random()\n random.getrandbits(1)\n",
11+
"--- \n+++ \n@@ -1,4 +1,5 @@\n import random\n+import secrets\n \n random.random()\n-random.getrandbits(1)\n+secrets.SystemRandom().getrandbits(1)\n",
1312
]
14-
# fmt: off
15-
expected_diff = (
16-
"""--- \n"""
17-
"""+++ \n"""
18-
"""@@ -1,4 +1,4 @@\n"""
19-
"""-import random\n"""
20-
"""+import secrets\n"""
21-
""" \n"""
22-
"""-random.random()\n"""
23-
"""-random.getrandbits(1)\n"""
24-
"""+secrets.SystemRandom().random()\n"""
25-
"""+secrets.SystemRandom().getrandbits(1)\n""")
26-
# fmt: on
27-
expected_line_change = "3"
13+
14+
expected_lines_changed = [3, 4]
2815
change_description = SecureRandomTransformer.change_description
2916
num_changes = 2
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
from codemodder.codemods.test import BaseIntegrationTest
1+
from codemodder.codemods.test.integration_utils import BaseRemediationIntegrationTest
22
from core_codemods.harden_ruamel import HardenRuamel
33

44

5-
class TestHardenRuamel(BaseIntegrationTest):
5+
class TestHardenRuamel(BaseRemediationIntegrationTest):
66
codemod = HardenRuamel
77
original_code = """
88
from ruamel.yaml import YAML
99
1010
serializer = YAML(typ="unsafe")
1111
serializer = YAML(typ="base")
1212
"""
13-
replacement_lines = [
14-
(3, 'serializer = YAML(typ="safe")\n'),
15-
(4, 'serializer = YAML(typ="safe")\n'),
13+
expected_diff_per_change = [
14+
'--- \n+++ \n@@ -1,4 +1,4 @@\n from ruamel.yaml import YAML\n \n-serializer = YAML(typ="unsafe")\n+serializer = YAML(typ="safe")\n serializer = YAML(typ="base")',
15+
'--- \n+++ \n@@ -1,4 +1,4 @@\n from ruamel.yaml import YAML\n \n serializer = YAML(typ="unsafe")\n-serializer = YAML(typ="base")\n+serializer = YAML(typ="safe")',
1616
]
17-
expected_diff = '--- \n+++ \n@@ -1,4 +1,4 @@\n from ruamel.yaml import YAML\n \n-serializer = YAML(typ="unsafe")\n-serializer = YAML(typ="base")\n+serializer = YAML(typ="safe")\n+serializer = YAML(typ="safe")\n'
18-
expected_line_change = "3"
17+
18+
expected_lines_changed = [3, 4]
1919
num_changes = 2
2020
change_description = HardenRuamel.change_description
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
1-
from codemodder.codemods.test import BaseIntegrationTest
1+
from codemodder.codemods.test.integration_utils import BaseRemediationIntegrationTest
22
from core_codemods.enable_jinja2_autoescape import (
33
EnableJinja2Autoescape,
44
EnableJinja2AutoescapeTransformer,
55
)
66

77

8-
class TestEnableJinja2Autoescape(BaseIntegrationTest):
8+
class TestEnableJinja2Autoescape(BaseRemediationIntegrationTest):
99
codemod = EnableJinja2Autoescape
1010
original_code = """
1111
from jinja2 import Environment
1212
1313
env = Environment()
1414
env = Environment(autoescape=False)
1515
"""
16-
replacement_lines = [
17-
(3, "env = Environment(autoescape=True)\n"),
18-
(4, "env = Environment(autoescape=True)\n"),
16+
17+
expected_diff_per_change = [
18+
"--- \n+++ \n@@ -1,4 +1,4 @@\n from jinja2 import Environment\n \n-env = Environment()\n+env = Environment(autoescape=True)\n env = Environment(autoescape=False)",
19+
"--- \n+++ \n@@ -1,4 +1,4 @@\n from jinja2 import Environment\n \n env = Environment()\n-env = Environment(autoescape=False)\n+env = Environment(autoescape=True)",
1920
]
20-
expected_diff = "--- \n+++ \n@@ -1,4 +1,4 @@\n from jinja2 import Environment\n \n-env = Environment()\n-env = Environment(autoescape=False)\n+env = Environment(autoescape=True)\n+env = Environment(autoescape=True)\n"
21-
expected_line_change = "3"
21+
22+
expected_lines_changed = [3, 4]
2223
num_changes = 2
2324
change_description = EnableJinja2AutoescapeTransformer.change_description
Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,20 @@
1-
from codemodder.codemods.test import BaseIntegrationTest
1+
from codemodder.codemods.test.integration_utils import BaseRemediationIntegrationTest
22
from core_codemods.lazy_logging import LazyLogging
33

44

5-
class TestLazyLogging(BaseIntegrationTest):
5+
class TestLazyLogging(BaseRemediationIntegrationTest):
66
codemod = LazyLogging
77
original_code = """
88
import logging
99
e = "Some error"
1010
logging.error("Error occurred: %s" % e)
1111
logging.error("Error occurred: " + e)
1212
"""
13-
replacement_lines = [
14-
(3, """logging.error("Error occurred: %s", e)\n"""),
15-
(4, """logging.error("Error occurred: %s", e)\n"""),
13+
expected_diff_per_change = [
14+
'--- \n+++ \n@@ -1,4 +1,4 @@\n import logging\n e = "Some error"\n-logging.error("Error occurred: %s" % e)\n+logging.error("Error occurred: %s", e)\n logging.error("Error occurred: " + e)',
15+
'--- \n+++ \n@@ -1,4 +1,4 @@\n import logging\n e = "Some error"\n logging.error("Error occurred: %s" % e)\n-logging.error("Error occurred: " + e)\n+logging.error("Error occurred: %s", e)',
1616
]
17-
# fmt: off
18-
expected_diff = (
19-
"""--- \n"""
20-
"""+++ \n"""
21-
"""@@ -1,4 +1,4 @@\n"""
22-
""" import logging\n"""
23-
""" e = "Some error"\n"""
24-
"""-logging.error("Error occurred: %s" % e)\n"""
25-
"""-logging.error("Error occurred: " + e)\n"""
26-
"""+logging.error("Error occurred: %s", e)\n"""
27-
"""+logging.error("Error occurred: %s", e)\n""")
28-
# fmt: on
2917

30-
expected_line_change = "3"
18+
expected_lines_changed = [3, 4]
3119
change_description = LazyLogging.change_description
3220
num_changes = 2
Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,19 @@
1-
from codemodder.codemods.test import BaseIntegrationTest
1+
from codemodder.codemods.test.integration_utils import BaseRemediationIntegrationTest
22
from core_codemods.lxml_safe_parsing import LxmlSafeParsing
33

44

5-
class TestLxmlSafeParsing(BaseIntegrationTest):
5+
class TestLxmlSafeParsing(BaseRemediationIntegrationTest):
66
codemod = LxmlSafeParsing
77
original_code = """
88
import lxml.etree
99
lxml.etree.parse("path_to_file")
1010
lxml.etree.fromstring("xml_str")
1111
"""
12-
replacement_lines = [
13-
(
14-
2,
15-
'lxml.etree.parse("path_to_file", parser=lxml.etree.XMLParser(resolve_entities=False))\n',
16-
),
17-
(
18-
3,
19-
'lxml.etree.fromstring("xml_str", parser=lxml.etree.XMLParser(resolve_entities=False))\n',
20-
),
12+
expected_lines_changed = [2, 3]
13+
expected_diff_per_change = [
14+
'--- \n+++ \n@@ -1,3 +1,3 @@\n import lxml.etree\n-lxml.etree.parse("path_to_file")\n+lxml.etree.parse("path_to_file", parser=lxml.etree.XMLParser(resolve_entities=False))\n lxml.etree.fromstring("xml_str")',
15+
'--- \n+++ \n@@ -1,3 +1,3 @@\n import lxml.etree\n lxml.etree.parse("path_to_file")\n-lxml.etree.fromstring("xml_str")\n+lxml.etree.fromstring("xml_str", parser=lxml.etree.XMLParser(resolve_entities=False))',
2116
]
22-
expected_diff = '--- \n+++ \n@@ -1,3 +1,3 @@\n import lxml.etree\n-lxml.etree.parse("path_to_file")\n-lxml.etree.fromstring("xml_str")\n+lxml.etree.parse("path_to_file", parser=lxml.etree.XMLParser(resolve_entities=False))\n+lxml.etree.fromstring("xml_str", parser=lxml.etree.XMLParser(resolve_entities=False))\n'
23-
expected_line_change = "2"
2417
num_changes = 2
2518
change_description = LxmlSafeParsing.change_description
2619
allowed_exceptions = (OSError,)

integration_tests/test_process_sandbox.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
from codemodder.codemods.test import BaseIntegrationTest
1+
from codemodder.codemods.test.integration_utils import BaseRemediationIntegrationTest
22
from codemodder.dependency import Security
33
from core_codemods.process_creation_sandbox import ProcessSandbox
44

55

6-
class TestProcessSandbox(BaseIntegrationTest):
6+
class TestProcessSandbox(BaseRemediationIntegrationTest):
77
codemod = ProcessSandbox
88
original_code = """
99
import subprocess
@@ -22,17 +22,15 @@ class TestProcessSandbox(BaseIntegrationTest):
2222
2323
var = "hello"
2424
"""
25-
replacement_lines = [
26-
(2, """from security import safe_command\n\n"""),
27-
(5, """safe_command.run(subprocess.run, cmd, shell=True)\n"""),
28-
(6, """safe_command.run(subprocess.run, [cmd, "-l"])\n"""),
29-
(8, """safe_command.run(subprocess.call, cmd, shell=True)\n"""),
30-
(9, """safe_command.run(subprocess.call, [cmd, "-l"])\n"""),
25+
expected_diff_per_change = [
26+
'--- \n+++ \n@@ -1,8 +1,9 @@\n import subprocess\n+from security import safe_command\n \n cmd = " ".join(["ls"])\n \n-subprocess.run(cmd, shell=True)\n+safe_command.run(subprocess.run, cmd, shell=True)\n subprocess.run([cmd, "-l"])\n \n subprocess.call(cmd, shell=True)\n',
27+
'--- \n+++ \n@@ -1,9 +1,10 @@\n import subprocess\n+from security import safe_command\n \n cmd = " ".join(["ls"])\n \n subprocess.run(cmd, shell=True)\n-subprocess.run([cmd, "-l"])\n+safe_command.run(subprocess.run, [cmd, "-l"])\n \n subprocess.call(cmd, shell=True)\n subprocess.call([cmd, "-l"])\n',
28+
'--- \n+++ \n@@ -1,11 +1,12 @@\n import subprocess\n+from security import safe_command\n \n cmd = " ".join(["ls"])\n \n subprocess.run(cmd, shell=True)\n subprocess.run([cmd, "-l"])\n \n-subprocess.call(cmd, shell=True)\n+safe_command.run(subprocess.call, cmd, shell=True)\n subprocess.call([cmd, "-l"])\n \n subprocess.check_output([cmd, "-l"])\n',
29+
'--- \n+++ \n@@ -1,4 +1,5 @@\n import subprocess\n+from security import safe_command\n \n cmd = " ".join(["ls"])\n \n@@ -6,7 +7,7 @@\n subprocess.run([cmd, "-l"])\n \n subprocess.call(cmd, shell=True)\n-subprocess.call([cmd, "-l"])\n+safe_command.run(subprocess.call, [cmd, "-l"])\n \n subprocess.check_output([cmd, "-l"])\n \n',
3130
]
32-
expected_diff = '--- \n+++ \n@@ -1,12 +1,13 @@\n import subprocess\n+from security import safe_command\n \n cmd = " ".join(["ls"])\n \n-subprocess.run(cmd, shell=True)\n-subprocess.run([cmd, "-l"])\n+safe_command.run(subprocess.run, cmd, shell=True)\n+safe_command.run(subprocess.run, [cmd, "-l"])\n \n-subprocess.call(cmd, shell=True)\n-subprocess.call([cmd, "-l"])\n+safe_command.run(subprocess.call, cmd, shell=True)\n+safe_command.run(subprocess.call, [cmd, "-l"])\n \n subprocess.check_output([cmd, "-l"])\n \n'
33-
expected_line_change = "5"
31+
32+
expected_lines_changed = [5, 6, 8, 9]
3433
num_changes = 4
35-
num_changed_files = 2
3634
change_description = ProcessSandbox.change_description
3735

3836
requirements_file_name = "requirements.txt"

src/codemodder/codemods/test/integration_utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ def _assert_results_fields(self, results, output_path):
139139

140140
assert len(changes) == self.num_changes
141141
lines_changed = [c["changes"][0]["lineNumber"] for c in changes]
142+
print(lines_changed)
142143
assert lines_changed == self.expected_lines_changed
143144
assert {c["changes"][0]["description"] for c in changes} == {
144145
self.change_description

0 commit comments

Comments
 (0)