Skip to content

Commit 92f5225

Browse files
Merge branch 'master' into alexeyk/wait-port-open-debug
2 parents 90e70be + 023e525 commit 92f5225

File tree

11 files changed

+109
-28
lines changed

11 files changed

+109
-28
lines changed

dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/util/WellKnownClasses.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ public class WellKnownClasses {
107107
"java.time.LocalDate",
108108
"java.time.LocalDateTime",
109109
"java.util.UUID",
110+
"java.net.URI",
110111
"java.io.File",
111112
"sun.nio.fs.UnixPath",
112113
"sun.nio.fs.WindowsPath"));

dd-java-agent/agent-debugger/debugger-el/src/main/java/com/datadog/debugger/el/expressions/SubStringExpression.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,29 @@ public SubStringExpression(ValueExpression<?> source, int startIndex, int endInd
2020
@Override
2121
public Value<String> evaluate(ValueReferenceResolver valueRefResolver) {
2222
Value<?> sourceValue = source != null ? source.evaluate(valueRefResolver) : Value.nullValue();
23+
if (sourceValue.isUndefined()) {
24+
throw new EvaluationException(
25+
"Cannot evaluate the expression for undefined value", PrettyPrintVisitor.print(this));
26+
}
27+
if (sourceValue.isNull()) {
28+
throw new EvaluationException(
29+
"Cannot evaluate the expression for null value", PrettyPrintVisitor.print(this));
30+
}
2331
if (sourceValue.getValue() instanceof String) {
2432
String sourceStr = (String) sourceValue.getValue();
25-
try {
26-
return (Value<String>) Value.of(sourceStr.substring(startIndex, endIndex));
27-
} catch (StringIndexOutOfBoundsException ex) {
28-
throw new EvaluationException(ex.getMessage(), PrettyPrintVisitor.print(this), ex);
29-
}
33+
return internalEvaluate(sourceStr);
3034
}
3135
return Value.undefined();
3236
}
3337

38+
private Value<String> internalEvaluate(String sourceStr) {
39+
try {
40+
return (Value<String>) Value.of(sourceStr.substring(startIndex, endIndex));
41+
} catch (StringIndexOutOfBoundsException ex) {
42+
throw new EvaluationException(ex.getMessage(), PrettyPrintVisitor.print(this), ex);
43+
}
44+
}
45+
3446
@Override
3547
public <R> R accept(Visitor<R> visitor) {
3648
return visitor.visit(this);

dd-java-agent/agent-debugger/debugger-el/src/test/java/com/datadog/debugger/el/expressions/EndsWithExpressionTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@
1212
import com.datadog.debugger.el.values.StringValue;
1313
import datadog.trace.bootstrap.debugger.el.ValueReferenceResolver;
1414
import datadog.trace.bootstrap.debugger.el.Values;
15+
import java.net.URI;
1516
import org.junit.jupiter.api.Test;
1617

1718
class EndsWithExpressionTest {
1819
private final ValueReferenceResolver resolver = RefResolverHelper.createResolver(this);
20+
// used to ref lookup
21+
URI uri = URI.create("https://www.datadoghq.com");
1922

2023
@Test
2124
void nullExpression() {
@@ -46,4 +49,11 @@ void stringExpression() {
4649
assertFalse(expression.evaluate(resolver));
4750
assertEquals("endsWith(\"abc\", \"ab\")", print(expression));
4851
}
52+
53+
@Test
54+
void stringPrimitives() {
55+
EndsWithExpression expression = new EndsWithExpression(DSL.ref("uri"), new StringValue(".com"));
56+
assertTrue(expression.evaluate(resolver));
57+
assertEquals("endsWith(uri, \".com\")", print(expression));
58+
}
4959
}

dd-java-agent/agent-debugger/debugger-el/src/test/java/com/datadog/debugger/el/expressions/MatchesExpressionTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
import com.datadog.debugger.el.values.StringValue;
1010
import datadog.trace.bootstrap.debugger.el.ValueReferenceResolver;
1111
import datadog.trace.bootstrap.debugger.el.Values;
12+
import java.net.URI;
1213
import org.junit.jupiter.api.Test;
1314

1415
class MatchesExpressionTest {
1516
private final ValueReferenceResolver resolver = RefResolverHelper.createResolver(this);
17+
// used to ref lookup
18+
URI uri = URI.create("https://www.datadoghq.com");
1619

1720
@Test
1821
void nullExpression() {
@@ -49,4 +52,12 @@ void stringExpression() {
4952
assertFalse(expression.evaluate(resolver));
5053
assertEquals("matches(\"abc\", \"[def]+\")", print(expression));
5154
}
55+
56+
@Test
57+
void stringPrimitives() {
58+
MatchesExpression expression =
59+
new MatchesExpression(DSL.ref("uri"), new StringValue("^https?://w{3}\\.datadoghq\\.com$"));
60+
assertTrue(expression.evaluate(resolver));
61+
assertEquals("matches(uri, \"^https?://w{3}\\.datadoghq\\.com$\")", print(expression));
62+
}
5263
}

dd-java-agent/agent-debugger/debugger-el/src/test/java/com/datadog/debugger/el/expressions/StartsWithExpressionTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
import com.datadog.debugger.el.values.StringValue;
1010
import datadog.trace.bootstrap.debugger.el.ValueReferenceResolver;
1111
import datadog.trace.bootstrap.debugger.el.Values;
12+
import java.net.URI;
1213
import org.junit.jupiter.api.Test;
1314

1415
class StartsWithExpressionTest {
1516
private final ValueReferenceResolver resolver = RefResolverHelper.createResolver(this);
17+
// used to ref lookup
18+
URI uri = URI.create("https://www.datadoghq.com");
1619

1720
@Test
1821
void nullExpression() {
@@ -44,4 +47,12 @@ void stringExpression() {
4447
assertFalse(expression.evaluate(resolver));
4548
assertEquals("startsWith(\"abc\", \"bc\")", print(expression));
4649
}
50+
51+
@Test
52+
void stringPrimitives() {
53+
StartsWithExpression expression =
54+
new StartsWithExpression(DSL.ref("uri"), new StringValue("https"));
55+
assertTrue(expression.evaluate(resolver));
56+
assertEquals("startsWith(uri, \"https\")", print(expression));
57+
}
4758
}

dd-java-agent/agent-debugger/debugger-el/src/test/java/com/datadog/debugger/el/expressions/SubStringExpressionTest.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,40 @@
33
import static com.datadog.debugger.el.PrettyPrintVisitor.print;
44
import static org.junit.jupiter.api.Assertions.assertEquals;
55
import static org.junit.jupiter.api.Assertions.assertThrows;
6-
import static org.junit.jupiter.api.Assertions.assertTrue;
76

87
import com.datadog.debugger.el.DSL;
98
import com.datadog.debugger.el.EvaluationException;
109
import com.datadog.debugger.el.RefResolverHelper;
1110
import datadog.trace.bootstrap.debugger.el.ValueReferenceResolver;
1211
import datadog.trace.bootstrap.debugger.el.Values;
12+
import java.net.URI;
1313
import org.junit.jupiter.api.Test;
1414

1515
public class SubStringExpressionTest {
1616
private final ValueReferenceResolver resolver = RefResolverHelper.createResolver(this);
17+
// used to ref lookup
18+
URI uri = URI.create("https://www.datadoghq.com");
19+
Object nullValue = null;
1720

1821
@Test
1922
void nullExpression() {
20-
SubStringExpression expression = new SubStringExpression(null, 0, 0);
21-
assertTrue(expression.evaluate(resolver).isUndefined());
22-
assertEquals("substring(null, 0, 0)", print(expression));
23+
SubStringExpression expression1 = new SubStringExpression(null, 0, 0);
24+
EvaluationException evaluationException =
25+
assertThrows(EvaluationException.class, () -> expression1.evaluate(resolver));
26+
assertEquals("substring(null, 0, 0)", evaluationException.getExpr());
27+
SubStringExpression expression2 = new SubStringExpression(DSL.ref("nullValue"), 0, 0);
28+
evaluationException =
29+
assertThrows(EvaluationException.class, () -> expression2.evaluate(resolver));
30+
assertEquals("substring(nullValue, 0, 0)", evaluationException.getExpr());
2331
}
2432

2533
@Test
2634
void undefinedExpression() {
2735
SubStringExpression expression =
2836
new SubStringExpression(DSL.value(Values.UNDEFINED_OBJECT), 0, 0);
29-
assertTrue(expression.evaluate(resolver).isUndefined());
30-
assertEquals("substring(UNDEFINED, 0, 0)", print(expression));
37+
EvaluationException evaluationException =
38+
assertThrows(EvaluationException.class, () -> expression.evaluate(resolver));
39+
assertEquals("substring(UNDEFINED, 0, 0)", evaluationException.getExpr());
3140
}
3241

3342
@Test
@@ -44,4 +53,11 @@ void stringOutOfBoundsExpression() {
4453
assertThrows(EvaluationException.class, () -> expression.evaluate(resolver));
4554
assertEquals("substring(\"abc\", 0, 10)", evaluationException.getExpr());
4655
}
56+
57+
@Test
58+
void stringPrimitives() {
59+
SubStringExpression expression = new SubStringExpression(DSL.ref("uri"), 0, 5);
60+
assertEquals("https", expression.evaluate(resolver).getValue());
61+
assertEquals("substring(uri, 0, 5)", print(expression));
62+
}
4763
}

dd-smoke-tests/gradle/src/test/groovy/datadog/smoketest/AbstractGradleTest.groovy

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ class AbstractGradleTest extends CiVisibilitySmokeTest {
3434
private static final String GRADLE_TEST_RESOURCE_EXTENSION = ".gradleTest"
3535
private static final String GRADLE_REGULAR_EXTENSION = ".gradle"
3636

37+
private static final ComparableVersion GRADLE_9 = new ComparableVersion("9.0.0")
38+
3739
@TempDir
3840
protected Path projectFolder
3941

@@ -105,23 +107,23 @@ class AbstractGradleTest extends CiVisibilitySmokeTest {
105107
} else if (Jvm.current.java17) {
106108
return gradleVersion.compareTo(new ComparableVersion("7.3")) >= 0
107109
} else if (Jvm.current.java16) {
108-
return gradleVersion.compareTo(new ComparableVersion("7.0")) >= 0
110+
return gradleVersion.isWithin(new ComparableVersion("7.0"), GRADLE_9)
109111
} else if (Jvm.current.java15) {
110-
return gradleVersion.compareTo(new ComparableVersion("6.7")) >= 0
112+
return gradleVersion.isWithin(new ComparableVersion("6.7"), GRADLE_9)
111113
} else if (Jvm.current.java14) {
112-
return gradleVersion.compareTo(new ComparableVersion("6.3")) >= 0
114+
return gradleVersion.isWithin(new ComparableVersion("6.3"), GRADLE_9)
113115
} else if (Jvm.current.java13) {
114-
return gradleVersion.compareTo(new ComparableVersion("6.0")) >= 0
116+
return gradleVersion.isWithin(new ComparableVersion("6.0"), GRADLE_9)
115117
} else if (Jvm.current.java12) {
116-
return gradleVersion.compareTo(new ComparableVersion("5.4")) >= 0
118+
return gradleVersion.isWithin(new ComparableVersion("5.4"), GRADLE_9)
117119
} else if (Jvm.current.java11) {
118-
return gradleVersion.compareTo(new ComparableVersion("5.0")) >= 0
120+
return gradleVersion.isWithin(new ComparableVersion("5.0"), GRADLE_9)
119121
} else if (Jvm.current.java10) {
120-
return gradleVersion.compareTo(new ComparableVersion("4.7")) >= 0
122+
return gradleVersion.isWithin(new ComparableVersion("4.7"), GRADLE_9)
121123
} else if (Jvm.current.java9) {
122-
return gradleVersion.compareTo(new ComparableVersion("4.3")) >= 0
124+
return gradleVersion.isWithin(new ComparableVersion("4.3"), GRADLE_9)
123125
} else if (Jvm.current.java8) {
124-
return gradleVersion.compareTo(new ComparableVersion("2.0")) >= 0
126+
return gradleVersion.isWithin(new ComparableVersion("2.0"), GRADLE_9)
125127
}
126128
return false
127129
}

dd-smoke-tests/gradle/src/test/groovy/datadog/smoketest/GradleLauncherSmokeTest.groovy

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package datadog.smoketest
22

33
import datadog.communication.util.IOUtils
44
import datadog.trace.civisibility.utils.ShellCommandExecutor
5+
import spock.util.environment.Jvm
56

67
/**
78
* This test runs Gradle Launcher with the Java Tracer injected
@@ -12,6 +13,7 @@ class GradleLauncherSmokeTest extends AbstractGradleTest {
1213
private static final int GRADLE_BUILD_TIMEOUT_MILLIS = 90_000
1314

1415
private static final String AGENT_JAR = System.getProperty("datadog.smoketest.agent.shadowJar.path")
16+
private static final String JAVA_HOME = buildJavaHome()
1517

1618
def "test Gradle Launcher injects tracer into Gradle Daemon: v#gradleVersion, cmd line - #gradleDaemonCmdLineParams"() {
1719
given:
@@ -45,18 +47,19 @@ class GradleLauncherSmokeTest extends AbstractGradleTest {
4547
}
4648

4749
private void givenGradleWrapper(String gradleVersion) {
48-
def shellCommandExecutor = new ShellCommandExecutor(projectFolder.toFile(), GRADLE_BUILD_TIMEOUT_MILLIS)
50+
def shellCommandExecutor = new ShellCommandExecutor(projectFolder.toFile(), GRADLE_BUILD_TIMEOUT_MILLIS, ["JAVA_HOME": JAVA_HOME])
4951
shellCommandExecutor.executeCommand(IOUtils::readFully, "./gradlew", "wrapper", "--gradle-version", gradleVersion)
5052
}
5153

5254
private String whenRunningGradleLauncherWithJavaTracerInjected(String gradleDaemonCmdLineParams) {
5355
def shellCommandExecutor = new ShellCommandExecutor(projectFolder.toFile(), GRADLE_BUILD_TIMEOUT_MILLIS, [
54-
"GRADLE_OPTS" : "-javaagent:${AGENT_JAR}".toString(),
55-
"DD_CIVISIBILITY_ENABLED" : "true",
56-
"DD_CIVISIBILITY_AGENTLESS_ENABLED" : "true",
57-
"DD_CIVISIBILITY_AGENTLESS_URL" : "${mockBackend.intakeUrl}".toString(),
58-
"DD_CIVISIBILITY_GIT_UPLOAD_ENABLED" : "false",
59-
"DD_API_KEY" : "dummy"
56+
"JAVA_HOME" : JAVA_HOME,
57+
"GRADLE_OPTS" : "-javaagent:${AGENT_JAR}".toString(),
58+
"DD_CIVISIBILITY_ENABLED" : "true",
59+
"DD_CIVISIBILITY_AGENTLESS_ENABLED" : "true",
60+
"DD_CIVISIBILITY_AGENTLESS_URL" : "${mockBackend.intakeUrl}".toString(),
61+
"DD_CIVISIBILITY_GIT_UPLOAD_ENABLED": "false",
62+
"DD_API_KEY" : "dummy"
6063
])
6164
String[] command = ["./gradlew", "--no-daemon", "--info"]
6265
if (gradleDaemonCmdLineParams) {
@@ -74,4 +77,12 @@ class GradleLauncherSmokeTest extends AbstractGradleTest {
7477
}
7578
return true
7679
}
80+
81+
private static String buildJavaHome() {
82+
if (Jvm.current.isJava8()) {
83+
return System.getenv("JAVA_8_HOME")
84+
} else {
85+
return System.getenv("JAVA_" + Jvm.current.getJavaSpecificationVersion() + "_HOME")
86+
}
87+
}
7788
}

dd-smoke-tests/gradle/src/test/resources/test-succeed-gradle-plugin-test/build.gradleTest

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ repositories {
3030
dependencies {
3131
testImplementation gradleTestKit()
3232

33+
testImplementation 'org.junit.platform:junit-platform-launcher'
3334
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.10.2'
3435
}
3536

dd-smoke-tests/gradle/src/test/resources/test-succeed-junit-5/build.gradleTest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ repositories {
1919
testing {
2020
suites {
2121
test {
22-
useJUnitJupiter()
22+
useJUnitJupiter('5.9.3')
2323

2424
dependencies {
2525
implementation 'org.junit.platform:junit-platform-launcher:1.9.3'

0 commit comments

Comments
 (0)