Skip to content

Commit

Permalink
[java] Check Java logs
Browse files Browse the repository at this point in the history
  • Loading branch information
smola committed Feb 10, 2025
1 parent 4e32064 commit 966f717
Showing 1 changed file with 52 additions and 1 deletion.
53 changes: 52 additions & 1 deletion tests/test_library_logs.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,69 @@
# Copyright 2021 Datadog, Inc.

from utils import context, interfaces, irrelevant, features
import itertools
import re
from typing import Pattern


def matches_any(patterns: list[Pattern], string: str):
for pattern in patterns:
if re.fullmatch(pattern, string):
return True
return False


@features.not_reported
class Test_NoExceptions:
"""There is not exception in dotnet-tracer-managed log files"""
"""No unexpected exceptions or errors."""

@irrelevant(context.library != "dotnet", reason="only for .NET")
def test_dotnet(self):
"""There is not exception in dotnet-tracer-managed log files"""
interfaces.library_dotnet_managed.assert_absence(
pattern=r"[A-Za-z]+\.[A-Za-z]*Exception",
allowed_patterns=[
r"System.DllNotFoundException: Unable to load shared library 'Datadog.AutoInstrumentation.Profiler.Native.x64'", # pylint: disable=line-too-long
r"Logger retrieved for: Datadog.Trace.Debugger.ExceptionAutoInstrumentation.ExceptionDebugging", # pylint: disable=line-too-long
],
)

@irrelevant(context.library != "java", reason="only for Java")
def test_java_logs(self):
"""Test Java logs for unexpected errors."""
java_allowed_patterns: list[Pattern] | list[str] = [
r".*"
+ re.escape(
"Skipped authentication, auth=org.springframework.security.authentication.AnonymousAuthenticationToken"
),
# APPSEC-56726:
r".*" + re.escape("Attempt to replace context value for Address{key='usr.login'}"),
# APPSEC-56727:
r".*org.hsqldb.HsqlException.*",
# APPSEC-56728:
r".*getWriter.* has already been called for this response.*",
# APPSEC-56729:
r".*java.lang.NullPointerException: null.*at com.datadoghq.system_tests.iast.utils.SqlExamples.fetchUsers.*",
]
java_allowed_patterns = [re.compile(p, re.MULTILINE | re.DOTALL) for p in java_allowed_patterns]
logs = list(interfaces.library_stdout.get_data())
logs = list({l["raw"] for l in logs})
logs = [l for l in logs if "ERROR" in l]
logs = [l for l in logs if not matches_any(java_allowed_patterns, l)]
assert not logs

@irrelevant(context.library != "java", reason="only for Java")
def test_java_telemetry_logs(self):
"""Test Java telemetry logs for unexpected errors."""
java_allowed_patterns: list[Pattern] | list[str] = [
re.escape("Skipped authentication, auth={}"),
# APPSEC-56726
re.escape("Attempt to replace context value for {}"),
]
java_allowed_patterns = [re.compile(p, re.MULTILINE | re.DOTALL) for p in java_allowed_patterns]
data = interfaces.library.get_telemetry_data()
data = [d["request"]["content"] for d in data]
data = [d["payload"]["logs"] for d in data if d.get("request_type") == "logs"]
data = list(itertools.chain(*data))
data = [d for d in data if not matches_any(java_allowed_patterns, d["message"])]
assert not data

0 comments on commit 966f717

Please sign in to comment.