Skip to content

Commit 4c9aee2

Browse files
committed
Add query suite tests for swift with shared logic
1 parent 432435f commit 4c9aee2

File tree

8 files changed

+163
-18
lines changed

8 files changed

+163
-18
lines changed
Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,23 @@
1-
import os
21
import runs_on
32
import pytest
3+
import sys
4+
5+
def get_test_module(semmle_code_dir):
6+
import importlib.util
7+
spec = importlib.util.spec_from_file_location('test-module', semmle_code_dir / 'ql' / 'misc' / 'pytest' / 'lib' / 'query-suite-test.py')
8+
mod = importlib.util.module_from_spec(spec)
9+
sys.modules["test-module"] = mod
10+
spec.loader.exec_module(mod)
11+
return mod
412

513
well_known_query_suites = ['java-code-quality.qls', 'java-security-and-quality.qls', 'java-security-extended.qls', 'java-code-scanning.qls']
614

715
@runs_on.posix
816
@pytest.mark.parametrize("query_suite", well_known_query_suites)
917
def test(codeql, java, cwd, expected_files, semmle_code_dir, query_suite):
10-
actual = codeql.resolve.queries(query_suite, _capture=True).strip()
11-
actual = sorted(actual.splitlines())
12-
actual = [os.path.relpath(q, semmle_code_dir) for q in actual]
13-
actual_file_name = query_suite + '.actual'
14-
expected_files.add(actual_file_name)
15-
(cwd / actual_file_name).write_text('\n'.join(actual)+'\n')
18+
get_test_module(semmle_code_dir).test(codeql, cwd, expected_files, semmle_code_dir, query_suite)
19+
1620

1721
@runs_on.posix
1822
def test_not_included_queries(codeql, java, cwd, expected_files, semmle_code_dir):
19-
all_queries = codeql.resolve.queries(semmle_code_dir / 'ql' / 'java' / 'ql' / 'src', _capture=True).strip().splitlines()
20-
21-
included_in_qls = set()
22-
for query_suite in well_known_query_suites:
23-
included_in_qls |= set(codeql.resolve.queries(query_suite, _capture=True).strip().splitlines())
24-
25-
not_included = sorted(set(all_queries) - included_in_qls)
26-
not_included = [os.path.relpath(q, semmle_code_dir) for q in not_included]
27-
not_included_file_name = 'not_included_in_qls.actual'
28-
expected_files.add(not_included_file_name)
29-
(cwd / not_included_file_name).write_text('\n'.join(not_included)+'\n')
23+
get_test_module(semmle_code_dir).test_not_included_queries(codeql, 'java', cwd, expected_files, semmle_code_dir, well_known_query_suites)

misc/pytest/lib/query-suite-test.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
import os
3+
4+
def test(codeql, cwd, expected_files, semmle_code_dir, query_suite):
5+
actual = codeql.resolve.queries(query_suite, _capture=True).strip()
6+
actual = sorted(actual.splitlines())
7+
actual = [os.path.relpath(q, semmle_code_dir) for q in actual]
8+
actual_file_name = query_suite + '.actual'
9+
expected_files.add(actual_file_name)
10+
(cwd / actual_file_name).write_text('\n'.join(actual)+'\n')
11+
12+
def test_not_included_queries(codeql, lang_folder_name, cwd, expected_files, semmle_code_dir, query_suites):
13+
all_queries = codeql.resolve.queries(semmle_code_dir / 'ql' / lang_folder_name / 'ql' / 'src', _capture=True).strip().splitlines()
14+
15+
included_in_qls = set()
16+
for query_suite in query_suites:
17+
included_in_qls |= set(codeql.resolve.queries(query_suite, _capture=True).strip().splitlines())
18+
19+
not_included = sorted(set(all_queries) - included_in_qls)
20+
not_included = [os.path.relpath(q, semmle_code_dir) for q in not_included]
21+
not_included_file_name = 'not_included_in_qls.actual'
22+
expected_files.add(not_included_file_name)
23+
(cwd / not_included_file_name).write_text('\n'.join(not_included)+'\n')
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
ql/swift/ql/src/AlertSuppression.ql
2+
ql/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql
3+
ql/swift/ql/src/queries/Summary/FlowSources.ql
4+
ql/swift/ql/src/queries/Summary/QuerySinks.ql
5+
ql/swift/ql/src/queries/Summary/RegexEvals.ql
6+
ql/swift/ql/src/queries/Summary/SensitiveExprs.ql
7+
ql/swift/ql/src/queries/Summary/SummaryStats.ql
8+
ql/swift/ql/src/queries/Summary/TaintReach.ql
9+
ql/swift/ql/src/queries/ide-contextual-queries/printAst.ql
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
ql/swift/ql/src/diagnostics/ExtractedFiles.ql
2+
ql/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql
3+
ql/swift/ql/src/diagnostics/internal/AstNodes.ql
4+
ql/swift/ql/src/diagnostics/internal/ExtractionErrors.ql
5+
ql/swift/ql/src/diagnostics/internal/UnresolvedAstNodes.ql
6+
ql/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.ql
7+
ql/swift/ql/src/queries/Security/CWE-020/MissingRegexAnchor.ql
8+
ql/swift/ql/src/queries/Security/CWE-022/PathInjection.ql
9+
ql/swift/ql/src/queries/Security/CWE-078/CommandInjection.ql
10+
ql/swift/ql/src/queries/Security/CWE-079/UnsafeWebViewFetch.ql
11+
ql/swift/ql/src/queries/Security/CWE-089/SqlInjection.ql
12+
ql/swift/ql/src/queries/Security/CWE-116/BadTagFilter.ql
13+
ql/swift/ql/src/queries/Security/CWE-1204/StaticInitializationVector.ql
14+
ql/swift/ql/src/queries/Security/CWE-1333/ReDoS.ql
15+
ql/swift/ql/src/queries/Security/CWE-134/UncontrolledFormatString.ql
16+
ql/swift/ql/src/queries/Security/CWE-135/StringLengthConflation.ql
17+
ql/swift/ql/src/queries/Security/CWE-259/ConstantPassword.ql
18+
ql/swift/ql/src/queries/Security/CWE-311/CleartextStorageDatabase.ql
19+
ql/swift/ql/src/queries/Security/CWE-311/CleartextTransmission.ql
20+
ql/swift/ql/src/queries/Security/CWE-312/CleartextLogging.ql
21+
ql/swift/ql/src/queries/Security/CWE-312/CleartextStoragePreferences.ql
22+
ql/swift/ql/src/queries/Security/CWE-321/HardcodedEncryptionKey.ql
23+
ql/swift/ql/src/queries/Security/CWE-327/ECBEncryption.ql
24+
ql/swift/ql/src/queries/Security/CWE-328/WeakPasswordHashing.ql
25+
ql/swift/ql/src/queries/Security/CWE-328/WeakSensitiveDataHashing.ql
26+
ql/swift/ql/src/queries/Security/CWE-611/XXE.ql
27+
ql/swift/ql/src/queries/Security/CWE-730/RegexInjection.ql
28+
ql/swift/ql/src/queries/Security/CWE-757/InsecureTLS.ql
29+
ql/swift/ql/src/queries/Security/CWE-760/ConstantSalt.ql
30+
ql/swift/ql/src/queries/Security/CWE-916/InsufficientHashIterations.ql
31+
ql/swift/ql/src/queries/Security/CWE-943/PredicateInjection.ql
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
ql/swift/ql/src/diagnostics/ExtractedFiles.ql
2+
ql/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql
3+
ql/swift/ql/src/diagnostics/internal/AstNodes.ql
4+
ql/swift/ql/src/diagnostics/internal/ExtractionErrors.ql
5+
ql/swift/ql/src/diagnostics/internal/UnresolvedAstNodes.ql
6+
ql/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.ql
7+
ql/swift/ql/src/queries/Security/CWE-020/MissingRegexAnchor.ql
8+
ql/swift/ql/src/queries/Security/CWE-022/PathInjection.ql
9+
ql/swift/ql/src/queries/Security/CWE-078/CommandInjection.ql
10+
ql/swift/ql/src/queries/Security/CWE-079/UnsafeWebViewFetch.ql
11+
ql/swift/ql/src/queries/Security/CWE-089/SqlInjection.ql
12+
ql/swift/ql/src/queries/Security/CWE-094/UnsafeJsEval.ql
13+
ql/swift/ql/src/queries/Security/CWE-116/BadTagFilter.ql
14+
ql/swift/ql/src/queries/Security/CWE-1204/StaticInitializationVector.ql
15+
ql/swift/ql/src/queries/Security/CWE-1333/ReDoS.ql
16+
ql/swift/ql/src/queries/Security/CWE-134/UncontrolledFormatString.ql
17+
ql/swift/ql/src/queries/Security/CWE-135/StringLengthConflation.ql
18+
ql/swift/ql/src/queries/Security/CWE-259/ConstantPassword.ql
19+
ql/swift/ql/src/queries/Security/CWE-311/CleartextStorageDatabase.ql
20+
ql/swift/ql/src/queries/Security/CWE-311/CleartextTransmission.ql
21+
ql/swift/ql/src/queries/Security/CWE-312/CleartextLogging.ql
22+
ql/swift/ql/src/queries/Security/CWE-312/CleartextStoragePreferences.ql
23+
ql/swift/ql/src/queries/Security/CWE-321/HardcodedEncryptionKey.ql
24+
ql/swift/ql/src/queries/Security/CWE-327/ECBEncryption.ql
25+
ql/swift/ql/src/queries/Security/CWE-328/WeakPasswordHashing.ql
26+
ql/swift/ql/src/queries/Security/CWE-328/WeakSensitiveDataHashing.ql
27+
ql/swift/ql/src/queries/Security/CWE-611/XXE.ql
28+
ql/swift/ql/src/queries/Security/CWE-730/RegexInjection.ql
29+
ql/swift/ql/src/queries/Security/CWE-757/InsecureTLS.ql
30+
ql/swift/ql/src/queries/Security/CWE-760/ConstantSalt.ql
31+
ql/swift/ql/src/queries/Security/CWE-916/InsufficientHashIterations.ql
32+
ql/swift/ql/src/queries/Security/CWE-943/PredicateInjection.ql
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
ql/swift/ql/src/diagnostics/ExtractedFiles.ql
2+
ql/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql
3+
ql/swift/ql/src/diagnostics/internal/AstNodes.ql
4+
ql/swift/ql/src/diagnostics/internal/ExtractionErrors.ql
5+
ql/swift/ql/src/diagnostics/internal/UnresolvedAstNodes.ql
6+
ql/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.ql
7+
ql/swift/ql/src/queries/Security/CWE-020/MissingRegexAnchor.ql
8+
ql/swift/ql/src/queries/Security/CWE-022/PathInjection.ql
9+
ql/swift/ql/src/queries/Security/CWE-078/CommandInjection.ql
10+
ql/swift/ql/src/queries/Security/CWE-079/UnsafeWebViewFetch.ql
11+
ql/swift/ql/src/queries/Security/CWE-089/SqlInjection.ql
12+
ql/swift/ql/src/queries/Security/CWE-094/UnsafeJsEval.ql
13+
ql/swift/ql/src/queries/Security/CWE-116/BadTagFilter.ql
14+
ql/swift/ql/src/queries/Security/CWE-1204/StaticInitializationVector.ql
15+
ql/swift/ql/src/queries/Security/CWE-1333/ReDoS.ql
16+
ql/swift/ql/src/queries/Security/CWE-134/UncontrolledFormatString.ql
17+
ql/swift/ql/src/queries/Security/CWE-135/StringLengthConflation.ql
18+
ql/swift/ql/src/queries/Security/CWE-259/ConstantPassword.ql
19+
ql/swift/ql/src/queries/Security/CWE-311/CleartextStorageDatabase.ql
20+
ql/swift/ql/src/queries/Security/CWE-311/CleartextTransmission.ql
21+
ql/swift/ql/src/queries/Security/CWE-312/CleartextLogging.ql
22+
ql/swift/ql/src/queries/Security/CWE-312/CleartextStoragePreferences.ql
23+
ql/swift/ql/src/queries/Security/CWE-321/HardcodedEncryptionKey.ql
24+
ql/swift/ql/src/queries/Security/CWE-327/ECBEncryption.ql
25+
ql/swift/ql/src/queries/Security/CWE-328/WeakPasswordHashing.ql
26+
ql/swift/ql/src/queries/Security/CWE-328/WeakSensitiveDataHashing.ql
27+
ql/swift/ql/src/queries/Security/CWE-611/XXE.ql
28+
ql/swift/ql/src/queries/Security/CWE-730/RegexInjection.ql
29+
ql/swift/ql/src/queries/Security/CWE-757/InsecureTLS.ql
30+
ql/swift/ql/src/queries/Security/CWE-760/ConstantSalt.ql
31+
ql/swift/ql/src/queries/Security/CWE-916/InsufficientHashIterations.ql
32+
ql/swift/ql/src/queries/Security/CWE-943/PredicateInjection.ql
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import runs_on
2+
import pytest
3+
import sys
4+
5+
def get_test_module(semmle_code_dir):
6+
import importlib.util
7+
spec = importlib.util.spec_from_file_location('test-module', semmle_code_dir / 'ql' / 'misc' / 'pytest' / 'lib' / 'query-suite-test.py')
8+
mod = importlib.util.module_from_spec(spec)
9+
sys.modules["test-module"] = mod
10+
spec.loader.exec_module(mod)
11+
return mod
12+
13+
14+
well_known_query_suites = ['swift-code-quality.qls', 'swift-security-and-quality.qls', 'swift-security-extended.qls', 'swift-code-scanning.qls']
15+
16+
@runs_on.posix
17+
@pytest.mark.parametrize("query_suite", well_known_query_suites)
18+
def test(codeql, swift, cwd, expected_files, semmle_code_dir, query_suite):
19+
get_test_module(semmle_code_dir).test(codeql, cwd, expected_files, semmle_code_dir, query_suite)
20+
21+
@runs_on.posix
22+
def test_not_included_queries(codeql, swift, cwd, expected_files, semmle_code_dir):
23+
get_test_module(semmle_code_dir).test_not_included_queries(codeql, 'swift', cwd, expected_files, semmle_code_dir, well_known_query_suites)

0 commit comments

Comments
 (0)