Files
trailofbits-buttercup/program-model/tests/java/test_bc.py
Dan Guido 42691e50b4 style: apply ruff auto-fixes and formatting across entire codebase (#309)
* style: apply ruff auto-fixes and formatting across entire codebase

Applied safe auto-fixes from ruff v0.12.9 with --select ALL to improve code quality:
- Reorder imports (stdlib → third-party → local)
- Use modern type hints (collections.abc.Generator instead of typing.Generator)
- Add trailing commas for better diffs
- Format multi-line function parameters for readability
- Add strict=False to zip() calls for explicit behavior
- Simplify redundant elif to if after return statements
- Consistent code formatting with ruff format

These are all mechanical, non-controversial changes that improve code consistency
without altering functionality. Changes affect 180 files across all modules:
common, fuzzer, orchestrator, patcher, program-model, and seed-gen.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* re-applt ruff after merge

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Michael D Brown <michael.brown@trailofbits.com>
2025-08-22 10:30:12 -04:00

218 lines
5.8 KiB
Python

"""CodeQuery primitives testing"""
import pytest
from buttercup.common.challenge_task import ChallengeTask
from buttercup.program_model.codequery import CodeQuery
from ..common import (
TestCalleeInfo,
TestCallerInfo,
TestFunctionInfo,
TestTypeDefinitionInfo,
TestTypeUsageInfo,
TypeDefinitionType,
common_test_get_callees,
common_test_get_callers,
common_test_get_functions,
common_test_get_type_definitions,
common_test_get_type_usages,
)
@pytest.mark.parametrize(
"function_name,file_path,function_info",
[
(
"doGenerate",
"/src/bc-java/pkix/src/main/java/org/bouncycastle/cms/CMSAuthEnvelopedDataGenerator.java",
TestFunctionInfo(
num_bodies=1,
body_excerpts=[
"""ASN1EncodableVector recipientInfos = new ASN1EncodableVector();
AlgorithmIdentifier encAlgId;
ASN1OctetString encContent;
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
ASN1Set authenticatedAttrSet = null;""",
],
),
),
],
)
@pytest.mark.integration
def test_get_functions(
bc_oss_fuzz_task: ChallengeTask,
bc_oss_fuzz_cq: CodeQuery,
function_name,
file_path,
function_info,
):
"""Test that we can get functions in challenge task code"""
common_test_get_functions(bc_oss_fuzz_cq, function_name, file_path, function_info)
@pytest.mark.parametrize(
"function_name,file_path,line_number,fuzzy,expected_callers,num_callers",
[
(
"doGenerate",
"/src/bc-java/pkix/src/main/java/org/bouncycastle/cms/CMSAuthEnvelopedDataGenerator.java",
None,
False,
[
TestCallerInfo(
name="generate",
file_path="/src/bc-java/pkix/src/main/java/org/bouncycastle/cms/CMSAuthEnvelopedDataGenerator.java",
start_line=117,
),
],
5,
),
],
)
@pytest.mark.integration
def test_get_callers(
bc_oss_fuzz_task: ChallengeTask,
bc_oss_fuzz_cq: CodeQuery,
function_name,
file_path,
line_number,
fuzzy,
expected_callers,
num_callers,
):
"""Test that we can get function callers"""
common_test_get_callers(
bc_oss_fuzz_task,
bc_oss_fuzz_cq,
function_name,
file_path,
line_number,
fuzzy,
expected_callers,
num_callers,
)
@pytest.mark.parametrize(
"function_name,file_path,line_number,fuzzy,expected_callees,num_callees",
[
(
"doGenerate",
"/src/bc-java/pkix/src/main/java/org/bouncycastle/cms/CMSAuthEnvelopedDataGenerator.java",
None,
False,
[
TestCalleeInfo(
name="getAttributes",
file_path="/src/bc-java/pkix/src/main/java/org/bouncycastle/cms/CMSAuthEnvelopedDataGenerator.java",
start_line=55,
),
],
2,
),
],
)
@pytest.mark.skip(reason="Skipping callee test for now. It's not working because it gets filtered out from imports.")
@pytest.mark.integration
def test_get_callees(
bc_oss_fuzz_task: ChallengeTask,
bc_oss_fuzz_cq: CodeQuery,
function_name,
file_path,
line_number,
fuzzy,
expected_callees,
num_callees,
):
"""Test that we can get function callees."""
common_test_get_callees(
bc_oss_fuzz_task,
bc_oss_fuzz_cq,
function_name,
file_path,
line_number,
fuzzy,
expected_callees,
num_callees,
)
@pytest.mark.parametrize(
"type_name,file_path,fuzzy,type_definition_info",
[
(
"CMSAuthEnvelopedDataGenerator",
None,
False,
TestTypeDefinitionInfo(
name="CMSAuthEnvelopedDataGenerator",
type=TypeDefinitionType.CLASS,
definition="public class CMSAuthEnvelopedDataGenerator",
definition_line=26,
file_path="/src/bc-java/pkix/src/main/java/org/bouncycastle/cms/CMSAuthEnvelopedDataGenerator.java",
),
),
],
)
@pytest.mark.integration
def test_get_type_definitions(
bc_oss_fuzz_task: ChallengeTask,
bc_oss_fuzz_cq: CodeQuery,
type_name,
file_path,
fuzzy,
type_definition_info,
):
"""Test that we can get type defs"""
common_test_get_type_definitions(
bc_oss_fuzz_task,
bc_oss_fuzz_cq,
type_name,
file_path,
fuzzy,
type_definition_info,
)
# From: https://github.com/bcgit/bc-java/blob/8b4326f24738ad6f6ab360089436a8a93c6a5424/mail/src/main/java/org/bouncycastle/mail/smime/SMIMEAuthEnvelopedGenerator.java#L41
@pytest.mark.parametrize(
"type_name,file_path,fuzzy,type_usage_infos,num_type_usages",
[
(
"CMSAuthEnvelopedDataGenerator",
"/src/bc-java/pkix/src/main/java/org/bouncycastle/cms/CMSAuthEnvelopedDataGenerator.java",
False,
[
TestTypeUsageInfo(
file_path="/src/bc-java/mail/src/main/java/org/bouncycastle/mail/smime/SMIMEAuthEnvelopedGenerator.java",
line_number=41,
),
],
6,
),
],
)
@pytest.mark.skip(reason="Skipping type usage test for now. Class is directly imported and used.")
@pytest.mark.integration
def test_get_type_usages(
bc_oss_fuzz_task: ChallengeTask,
bc_oss_fuzz_cq: CodeQuery,
type_name,
file_path,
fuzzy,
type_usage_infos,
num_type_usages,
):
"""Test that we can get type usages"""
common_test_get_type_usages(
bc_oss_fuzz_task,
bc_oss_fuzz_cq,
type_name,
file_path,
fuzzy,
type_usage_infos,
num_type_usages,
)