Files
codeql/java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/test.py
2024-08-19 11:33:24 +02:00

60 lines
1.9 KiB
Python

from build_fixture import build_fixture
import sys
import commands
import os
import pathlib
import re
import runs_on
def say(s):
print(s)
sys.stdout.flush()
@build_fixture
def build():
say("Doing normal compilation")
# This is a normal intercepted compilation
commands.run("kotlinc normal.kt")
say("Identifying extractor jar")
# Find the extractor jar that is being used
trapDir = pathlib.Path(os.environ["CODEQL_EXTRACTOR_JAVA_TRAP_DIR"])
invocationTrapDir = trapDir / "invocations"
invocationTraps = list(invocationTrapDir.iterdir())
assert len(invocationTraps) == 1, "Expected to find 1 invocation TRAP, but found " + str(
invocationTraps
)
invocationTrap = os.path.join(invocationTrapDir, invocationTraps[0])
with open(invocationTrap, "r") as f:
content = f.read()
m = re.search("^// Using extractor: (.*)$", content, flags=re.MULTILINE)
extractorJar = m.group(1)
def getManualFlags(invocationTrapName):
return [
f"-Xplugin={extractorJar}",
"-P",
f"plugin:kotlin-extractor:invocationTrapFile={trapDir / "invocations" / invocationTrapName}.trap",
]
# This is both normally intercepted, and it has the extractor flags manually added
say("Doing double-interception compilation")
commands.run(["kotlinc", "doubleIntercepted.kt"] + getManualFlags("doubleIntercepted"))
os.environ["CODEQL_EXTRACTOR_JAVA_AGENT_DISABLE_KOTLIN"] = "true"
# We don't see this compilation at all
say("Doing unseen compilation")
commands.run("kotlinc notSeen.kt")
# This is extracted as it has the extractor flags manually added
say("Doing manual compilation")
commands.run(["kotlinc", "manual.kt"] + getManualFlags("manual"))
@runs_on.posix
def test(codeql, java_full, build):
codeql.database.create(command=build, source_root="code")