Skip to content

Commit 64539d1

Browse files
authored
[Java] Enable TestSamplingByRouteMethodCount test (#4894)
Motivation Enable TestSamplingByRouteMethodCount test for java Changes Endpoints and enable test in java.yml
1 parent 2c4903c commit 64539d1

File tree

14 files changed

+692
-4
lines changed

14 files changed

+692
-4
lines changed

manifests/java.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,12 @@ tests/:
724724
vertx3: missing_feature
725725
vertx4: missing_feature
726726
test_sampling_by_route_method_count.py:
727-
TestSamplingByRouteMethodCount: missing_feature
727+
TestSamplingByRouteMethodCount:
728+
'*': v1.51.0-SNAPSHOT
729+
akka-http: bug (APPSEC-57926)
730+
play: bug (APPSEC-57926)
731+
ratpack: bug (APPSEC-58210)
732+
spring-boot-3-native: missing_feature (GraalVM. Tracing support only)
728733
test_security_controls.py:
729734
TestSecurityControls:
730735
'*': v1.46.0

utils/build/docker/java/akka-http/src/main/scala/com/datadoghq/akka_http/IastRoutes.scala

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,76 @@ object IastRoutes {
282282
}
283283
}
284284
}
285+
} ~
286+
path("sampling-by-route-method-count" / Segment) { id =>
287+
get {
288+
try {
289+
java.security.MessageDigest.getInstance("SHA1").digest("hash1".getBytes(java.nio.charset.StandardCharsets.UTF_8))
290+
java.security.MessageDigest.getInstance("SHA1").digest("hash2".getBytes(java.nio.charset.StandardCharsets.UTF_8))
291+
java.security.MessageDigest.getInstance("SHA1").digest("hash3".getBytes(java.nio.charset.StandardCharsets.UTF_8))
292+
java.security.MessageDigest.getInstance("SHA1").digest("hash4".getBytes(java.nio.charset.StandardCharsets.UTF_8))
293+
java.security.MessageDigest.getInstance("SHA1").digest("hash5".getBytes(java.nio.charset.StandardCharsets.UTF_8))
294+
java.security.MessageDigest.getInstance("SHA1").digest("hash6".getBytes(java.nio.charset.StandardCharsets.UTF_8))
295+
java.security.MessageDigest.getInstance("SHA1").digest("hash7".getBytes(java.nio.charset.StandardCharsets.UTF_8))
296+
java.security.MessageDigest.getInstance("SHA1").digest("hash8".getBytes(java.nio.charset.StandardCharsets.UTF_8))
297+
java.security.MessageDigest.getInstance("SHA1").digest("hash9".getBytes(java.nio.charset.StandardCharsets.UTF_8))
298+
java.security.MessageDigest.getInstance("SHA1").digest("hash10".getBytes(java.nio.charset.StandardCharsets.UTF_8))
299+
java.security.MessageDigest.getInstance("SHA1").digest("hash11".getBytes(java.nio.charset.StandardCharsets.UTF_8))
300+
java.security.MessageDigest.getInstance("SHA1").digest("hash12".getBytes(java.nio.charset.StandardCharsets.UTF_8))
301+
java.security.MessageDigest.getInstance("SHA1").digest("hash13".getBytes(java.nio.charset.StandardCharsets.UTF_8))
302+
java.security.MessageDigest.getInstance("SHA1").digest("hash14".getBytes(java.nio.charset.StandardCharsets.UTF_8))
303+
java.security.MessageDigest.getInstance("SHA1").digest("hash15".getBytes(java.nio.charset.StandardCharsets.UTF_8))
304+
complete("ok")
305+
} catch {
306+
case e: Exception => complete(StatusCodes.InternalServerError, e.getMessage)
307+
}
308+
} ~
309+
post {
310+
try {
311+
java.security.MessageDigest.getInstance("SHA1").digest("hash1".getBytes(java.nio.charset.StandardCharsets.UTF_8))
312+
java.security.MessageDigest.getInstance("SHA1").digest("hash2".getBytes(java.nio.charset.StandardCharsets.UTF_8))
313+
java.security.MessageDigest.getInstance("SHA1").digest("hash3".getBytes(java.nio.charset.StandardCharsets.UTF_8))
314+
java.security.MessageDigest.getInstance("SHA1").digest("hash4".getBytes(java.nio.charset.StandardCharsets.UTF_8))
315+
java.security.MessageDigest.getInstance("SHA1").digest("hash5".getBytes(java.nio.charset.StandardCharsets.UTF_8))
316+
java.security.MessageDigest.getInstance("SHA1").digest("hash6".getBytes(java.nio.charset.StandardCharsets.UTF_8))
317+
java.security.MessageDigest.getInstance("SHA1").digest("hash7".getBytes(java.nio.charset.StandardCharsets.UTF_8))
318+
java.security.MessageDigest.getInstance("SHA1").digest("hash8".getBytes(java.nio.charset.StandardCharsets.UTF_8))
319+
java.security.MessageDigest.getInstance("SHA1").digest("hash9".getBytes(java.nio.charset.StandardCharsets.UTF_8))
320+
java.security.MessageDigest.getInstance("SHA1").digest("hash10".getBytes(java.nio.charset.StandardCharsets.UTF_8))
321+
java.security.MessageDigest.getInstance("SHA1").digest("hash11".getBytes(java.nio.charset.StandardCharsets.UTF_8))
322+
java.security.MessageDigest.getInstance("SHA1").digest("hash12".getBytes(java.nio.charset.StandardCharsets.UTF_8))
323+
java.security.MessageDigest.getInstance("SHA1").digest("hash13".getBytes(java.nio.charset.StandardCharsets.UTF_8))
324+
java.security.MessageDigest.getInstance("SHA1").digest("hash14".getBytes(java.nio.charset.StandardCharsets.UTF_8))
325+
java.security.MessageDigest.getInstance("SHA1").digest("hash15".getBytes(java.nio.charset.StandardCharsets.UTF_8))
326+
complete("ok")
327+
} catch {
328+
case e: Exception => complete(StatusCodes.InternalServerError, e.getMessage)
329+
}
330+
}
331+
} ~
332+
path("sampling-by-route-method-count-2" / Segment) { id =>
333+
get {
334+
try {
335+
java.security.MessageDigest.getInstance("SHA1").digest("hash1".getBytes(java.nio.charset.StandardCharsets.UTF_8))
336+
java.security.MessageDigest.getInstance("SHA1").digest("hash2".getBytes(java.nio.charset.StandardCharsets.UTF_8))
337+
java.security.MessageDigest.getInstance("SHA1").digest("hash3".getBytes(java.nio.charset.StandardCharsets.UTF_8))
338+
java.security.MessageDigest.getInstance("SHA1").digest("hash4".getBytes(java.nio.charset.StandardCharsets.UTF_8))
339+
java.security.MessageDigest.getInstance("SHA1").digest("hash5".getBytes(java.nio.charset.StandardCharsets.UTF_8))
340+
java.security.MessageDigest.getInstance("SHA1").digest("hash6".getBytes(java.nio.charset.StandardCharsets.UTF_8))
341+
java.security.MessageDigest.getInstance("SHA1").digest("hash7".getBytes(java.nio.charset.StandardCharsets.UTF_8))
342+
java.security.MessageDigest.getInstance("SHA1").digest("hash8".getBytes(java.nio.charset.StandardCharsets.UTF_8))
343+
java.security.MessageDigest.getInstance("SHA1").digest("hash9".getBytes(java.nio.charset.StandardCharsets.UTF_8))
344+
java.security.MessageDigest.getInstance("SHA1").digest("hash10".getBytes(java.nio.charset.StandardCharsets.UTF_8))
345+
java.security.MessageDigest.getInstance("SHA1").digest("hash11".getBytes(java.nio.charset.StandardCharsets.UTF_8))
346+
java.security.MessageDigest.getInstance("SHA1").digest("hash12".getBytes(java.nio.charset.StandardCharsets.UTF_8))
347+
java.security.MessageDigest.getInstance("SHA1").digest("hash13".getBytes(java.nio.charset.StandardCharsets.UTF_8))
348+
java.security.MessageDigest.getInstance("SHA1").digest("hash14".getBytes(java.nio.charset.StandardCharsets.UTF_8))
349+
java.security.MessageDigest.getInstance("SHA1").digest("hash15".getBytes(java.nio.charset.StandardCharsets.UTF_8))
350+
complete("ok")
351+
} catch {
352+
case e: Exception => complete(StatusCodes.InternalServerError, e.getMessage)
353+
}
354+
}
285355
}
286356
}
287357

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.datadoghq.jersey;
2+
3+
import jakarta.ws.rs.*;
4+
import jakarta.ws.rs.core.MediaType;
5+
import java.security.MessageDigest;
6+
import java.nio.charset.StandardCharsets;
7+
8+
@Path("/iast")
9+
public class IastSamplingResource {
10+
@GET
11+
@Path("/sampling-by-route-method-count/{id}")
12+
@Produces(MediaType.TEXT_PLAIN)
13+
public String getSamplingByRouteMethodCount(@PathParam("id") String id) {
14+
try {
15+
MessageDigest.getInstance("SHA1").digest("hash1".getBytes(StandardCharsets.UTF_8));
16+
MessageDigest.getInstance("SHA1").digest("hash2".getBytes(StandardCharsets.UTF_8));
17+
MessageDigest.getInstance("SHA1").digest("hash3".getBytes(StandardCharsets.UTF_8));
18+
MessageDigest.getInstance("SHA1").digest("hash4".getBytes(StandardCharsets.UTF_8));
19+
MessageDigest.getInstance("SHA1").digest("hash5".getBytes(StandardCharsets.UTF_8));
20+
MessageDigest.getInstance("SHA1").digest("hash6".getBytes(StandardCharsets.UTF_8));
21+
MessageDigest.getInstance("SHA1").digest("hash7".getBytes(StandardCharsets.UTF_8));
22+
MessageDigest.getInstance("SHA1").digest("hash8".getBytes(StandardCharsets.UTF_8));
23+
MessageDigest.getInstance("SHA1").digest("hash9".getBytes(StandardCharsets.UTF_8));
24+
MessageDigest.getInstance("SHA1").digest("hash10".getBytes(StandardCharsets.UTF_8));
25+
MessageDigest.getInstance("SHA1").digest("hash11".getBytes(StandardCharsets.UTF_8));
26+
MessageDigest.getInstance("SHA1").digest("hash12".getBytes(StandardCharsets.UTF_8));
27+
MessageDigest.getInstance("SHA1").digest("hash13".getBytes(StandardCharsets.UTF_8));
28+
MessageDigest.getInstance("SHA1").digest("hash14".getBytes(StandardCharsets.UTF_8));
29+
MessageDigest.getInstance("SHA1").digest("hash15".getBytes(StandardCharsets.UTF_8));
30+
return "ok";
31+
} catch (Exception e) {
32+
throw new WebApplicationException(e.getMessage(), 500);
33+
}
34+
}
35+
36+
@POST
37+
@Path("/sampling-by-route-method-count/{id}")
38+
@Produces(MediaType.TEXT_PLAIN)
39+
public String postSamplingByRouteMethodCount(@PathParam("id") String id) {
40+
try {
41+
MessageDigest.getInstance("SHA1").digest("hash1".getBytes(StandardCharsets.UTF_8));
42+
MessageDigest.getInstance("SHA1").digest("hash2".getBytes(StandardCharsets.UTF_8));
43+
MessageDigest.getInstance("SHA1").digest("hash3".getBytes(StandardCharsets.UTF_8));
44+
MessageDigest.getInstance("SHA1").digest("hash4".getBytes(StandardCharsets.UTF_8));
45+
MessageDigest.getInstance("SHA1").digest("hash5".getBytes(StandardCharsets.UTF_8));
46+
MessageDigest.getInstance("SHA1").digest("hash6".getBytes(StandardCharsets.UTF_8));
47+
MessageDigest.getInstance("SHA1").digest("hash7".getBytes(StandardCharsets.UTF_8));
48+
MessageDigest.getInstance("SHA1").digest("hash8".getBytes(StandardCharsets.UTF_8));
49+
MessageDigest.getInstance("SHA1").digest("hash9".getBytes(StandardCharsets.UTF_8));
50+
MessageDigest.getInstance("SHA1").digest("hash10".getBytes(StandardCharsets.UTF_8));
51+
MessageDigest.getInstance("SHA1").digest("hash11".getBytes(StandardCharsets.UTF_8));
52+
MessageDigest.getInstance("SHA1").digest("hash12".getBytes(StandardCharsets.UTF_8));
53+
MessageDigest.getInstance("SHA1").digest("hash13".getBytes(StandardCharsets.UTF_8));
54+
MessageDigest.getInstance("SHA1").digest("hash14".getBytes(StandardCharsets.UTF_8));
55+
MessageDigest.getInstance("SHA1").digest("hash15".getBytes(StandardCharsets.UTF_8));
56+
return "ok";
57+
} catch (Exception e) {
58+
throw new WebApplicationException(e.getMessage(), 500);
59+
}
60+
}
61+
62+
@GET
63+
@Path("/sampling-by-route-method-count-2/{id}")
64+
@Produces(MediaType.TEXT_PLAIN)
65+
public String getSamplingByRouteMethodCount2(@PathParam("id") String id) {
66+
try {
67+
MessageDigest.getInstance("SHA1").digest("hash1".getBytes(StandardCharsets.UTF_8));
68+
MessageDigest.getInstance("SHA1").digest("hash2".getBytes(StandardCharsets.UTF_8));
69+
MessageDigest.getInstance("SHA1").digest("hash3".getBytes(StandardCharsets.UTF_8));
70+
MessageDigest.getInstance("SHA1").digest("hash4".getBytes(StandardCharsets.UTF_8));
71+
MessageDigest.getInstance("SHA1").digest("hash5".getBytes(StandardCharsets.UTF_8));
72+
MessageDigest.getInstance("SHA1").digest("hash6".getBytes(StandardCharsets.UTF_8));
73+
MessageDigest.getInstance("SHA1").digest("hash7".getBytes(StandardCharsets.UTF_8));
74+
MessageDigest.getInstance("SHA1").digest("hash8".getBytes(StandardCharsets.UTF_8));
75+
MessageDigest.getInstance("SHA1").digest("hash9".getBytes(StandardCharsets.UTF_8));
76+
MessageDigest.getInstance("SHA1").digest("hash10".getBytes(StandardCharsets.UTF_8));
77+
MessageDigest.getInstance("SHA1").digest("hash11".getBytes(StandardCharsets.UTF_8));
78+
MessageDigest.getInstance("SHA1").digest("hash12".getBytes(StandardCharsets.UTF_8));
79+
MessageDigest.getInstance("SHA1").digest("hash13".getBytes(StandardCharsets.UTF_8));
80+
MessageDigest.getInstance("SHA1").digest("hash14".getBytes(StandardCharsets.UTF_8));
81+
MessageDigest.getInstance("SHA1").digest("hash15".getBytes(StandardCharsets.UTF_8));
82+
return "ok";
83+
} catch (Exception e) {
84+
throw new WebApplicationException(e.getMessage(), 500);
85+
}
86+
}
87+
}

utils/build/docker/java/jersey-grizzly2/src/main/java/com/datadoghq/jersey/Main.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ public static HttpServer startServer() {
4242
// in com.datadoghq.jersey package
4343
final ResourceConfig rc = new ResourceConfig().packages("com.datadoghq.jersey");
4444

45+
// Register resources
46+
rc.register(MyResource.class);
47+
rc.register(RaspResource.class);
48+
rc.register(IastSinkResource.class);
49+
rc.register(IastSourceResource.class);
50+
rc.register(IastSamplingResource.class);
51+
4552
// create and start a new instance of grizzly http server
4653
// exposing the Jersey application at BASE_URI
4754
return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package controllers;
2+
3+
import play.mvc.*;
4+
import java.security.MessageDigest;
5+
import java.nio.charset.StandardCharsets;
6+
7+
public class IastSamplingController extends Controller {
8+
public Result getSamplingByRouteMethodCount(String id) {
9+
try {
10+
MessageDigest.getInstance("SHA1").digest("hash1".getBytes(StandardCharsets.UTF_8));
11+
MessageDigest.getInstance("SHA1").digest("hash2".getBytes(StandardCharsets.UTF_8));
12+
MessageDigest.getInstance("SHA1").digest("hash3".getBytes(StandardCharsets.UTF_8));
13+
MessageDigest.getInstance("SHA1").digest("hash4".getBytes(StandardCharsets.UTF_8));
14+
MessageDigest.getInstance("SHA1").digest("hash5".getBytes(StandardCharsets.UTF_8));
15+
MessageDigest.getInstance("SHA1").digest("hash6".getBytes(StandardCharsets.UTF_8));
16+
MessageDigest.getInstance("SHA1").digest("hash7".getBytes(StandardCharsets.UTF_8));
17+
MessageDigest.getInstance("SHA1").digest("hash8".getBytes(StandardCharsets.UTF_8));
18+
MessageDigest.getInstance("SHA1").digest("hash9".getBytes(StandardCharsets.UTF_8));
19+
MessageDigest.getInstance("SHA1").digest("hash10".getBytes(StandardCharsets.UTF_8));
20+
MessageDigest.getInstance("SHA1").digest("hash11".getBytes(StandardCharsets.UTF_8));
21+
MessageDigest.getInstance("SHA1").digest("hash12".getBytes(StandardCharsets.UTF_8));
22+
MessageDigest.getInstance("SHA1").digest("hash13".getBytes(StandardCharsets.UTF_8));
23+
MessageDigest.getInstance("SHA1").digest("hash14".getBytes(StandardCharsets.UTF_8));
24+
MessageDigest.getInstance("SHA1").digest("hash15".getBytes(StandardCharsets.UTF_8));
25+
return ok("ok");
26+
} catch (Exception e) {
27+
return internalServerError(e.getMessage());
28+
}
29+
}
30+
31+
public Result postSamplingByRouteMethodCount(String id) {
32+
try {
33+
MessageDigest.getInstance("SHA1").digest("hash1".getBytes(StandardCharsets.UTF_8));
34+
MessageDigest.getInstance("SHA1").digest("hash2".getBytes(StandardCharsets.UTF_8));
35+
MessageDigest.getInstance("SHA1").digest("hash3".getBytes(StandardCharsets.UTF_8));
36+
MessageDigest.getInstance("SHA1").digest("hash4".getBytes(StandardCharsets.UTF_8));
37+
MessageDigest.getInstance("SHA1").digest("hash5".getBytes(StandardCharsets.UTF_8));
38+
MessageDigest.getInstance("SHA1").digest("hash6".getBytes(StandardCharsets.UTF_8));
39+
MessageDigest.getInstance("SHA1").digest("hash7".getBytes(StandardCharsets.UTF_8));
40+
MessageDigest.getInstance("SHA1").digest("hash8".getBytes(StandardCharsets.UTF_8));
41+
MessageDigest.getInstance("SHA1").digest("hash9".getBytes(StandardCharsets.UTF_8));
42+
MessageDigest.getInstance("SHA1").digest("hash10".getBytes(StandardCharsets.UTF_8));
43+
MessageDigest.getInstance("SHA1").digest("hash11".getBytes(StandardCharsets.UTF_8));
44+
MessageDigest.getInstance("SHA1").digest("hash12".getBytes(StandardCharsets.UTF_8));
45+
MessageDigest.getInstance("SHA1").digest("hash13".getBytes(StandardCharsets.UTF_8));
46+
MessageDigest.getInstance("SHA1").digest("hash14".getBytes(StandardCharsets.UTF_8));
47+
MessageDigest.getInstance("SHA1").digest("hash15".getBytes(StandardCharsets.UTF_8));
48+
return ok("ok");
49+
} catch (Exception e) {
50+
return internalServerError(e.getMessage());
51+
}
52+
}
53+
54+
public Result getSamplingByRouteMethodCount2(String id) {
55+
try {
56+
MessageDigest.getInstance("SHA1").digest("hash1".getBytes(StandardCharsets.UTF_8));
57+
MessageDigest.getInstance("SHA1").digest("hash2".getBytes(StandardCharsets.UTF_8));
58+
MessageDigest.getInstance("SHA1").digest("hash3".getBytes(StandardCharsets.UTF_8));
59+
MessageDigest.getInstance("SHA1").digest("hash4".getBytes(StandardCharsets.UTF_8));
60+
MessageDigest.getInstance("SHA1").digest("hash5".getBytes(StandardCharsets.UTF_8));
61+
MessageDigest.getInstance("SHA1").digest("hash6".getBytes(StandardCharsets.UTF_8));
62+
MessageDigest.getInstance("SHA1").digest("hash7".getBytes(StandardCharsets.UTF_8));
63+
MessageDigest.getInstance("SHA1").digest("hash8".getBytes(StandardCharsets.UTF_8));
64+
MessageDigest.getInstance("SHA1").digest("hash9".getBytes(StandardCharsets.UTF_8));
65+
MessageDigest.getInstance("SHA1").digest("hash10".getBytes(StandardCharsets.UTF_8));
66+
MessageDigest.getInstance("SHA1").digest("hash11".getBytes(StandardCharsets.UTF_8));
67+
MessageDigest.getInstance("SHA1").digest("hash12".getBytes(StandardCharsets.UTF_8));
68+
MessageDigest.getInstance("SHA1").digest("hash13".getBytes(StandardCharsets.UTF_8));
69+
MessageDigest.getInstance("SHA1").digest("hash14".getBytes(StandardCharsets.UTF_8));
70+
MessageDigest.getInstance("SHA1").digest("hash15".getBytes(StandardCharsets.UTF_8));
71+
return ok("ok");
72+
} catch (Exception e) {
73+
return internalServerError(e.getMessage());
74+
}
75+
}
76+
}

utils/build/docker/java/play/conf/routes

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,8 @@ GET /returnheaders controllers.AppSecController.returnheaders
3737
GET /createextraservice controllers.AppSecController.createextraservice(serviceName: String)
3838
GET /customResponseHeaders controllers.AppSecController.customResponseHeaders
3939
GET /exceedResponseHeaders controllers.AppSecController.exceedResponseHeaders
40+
41+
# IAST Sampling endpoints
42+
GET /iast/sampling-by-route-method-count/:id controllers.IastSamplingController.getSamplingByRouteMethodCount(id: String)
43+
POST /iast/sampling-by-route-method-count/:id controllers.IastSamplingController.postSamplingByRouteMethodCount(id: String)
44+
GET /iast/sampling-by-route-method-count-2/:id controllers.IastSamplingController.getSamplingByRouteMethodCount2(id: String)

0 commit comments

Comments
 (0)