Skip to content

Commit d2992f6

Browse files
Fix more tests
1 parent 1f33dd2 commit d2992f6

File tree

4 files changed

+25
-11
lines changed

4 files changed

+25
-11
lines changed

dd-java-agent/appsec/src/main/java/com/datadog/appsec/api/security/ApiSecurityDownstreamSamplerImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@
66
public class ApiSecurityDownstreamSamplerImpl implements ApiSecurityDownstreamSampler {
77

88
private static final long KNUTH_FACTOR = 1111111111111111111L;
9-
private static final double SAMPLING_MAX = Math.pow(2, 64) - 1;
10-
11-
private final AtomicLong globalRequestCount = new AtomicLong(0);
9+
private final AtomicLong globalRequestCount;
1210
private final double threshold;
1311

1412
public ApiSecurityDownstreamSamplerImpl(double rate) {
1513
threshold = samplingCutoff(rate < 0.0 ? 0 : (rate > 1.0 ? 1 : rate));
14+
globalRequestCount = new AtomicLong(0);
1615
}
1716

1817
private static double samplingCutoff(double rate) {
18+
final double max = Math.pow(2, 64) - 1;
1919
if (rate < 0.5) {
20-
return (long) (rate * SAMPLING_MAX) + Long.MIN_VALUE;
20+
return (long) (rate * max) + Long.MIN_VALUE;
2121
}
2222
if (rate < 1.0) {
23-
return (long) ((rate * SAMPLING_MAX) + Long.MIN_VALUE);
23+
return (long) ((rate * max) + Long.MIN_VALUE);
2424
}
2525
return Long.MAX_VALUE;
2626
}

dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,8 @@ public void increaseRaspTimeouts() {
238238
RASP_TIMEOUTS_UPDATER.incrementAndGet(this);
239239
}
240240

241-
public void increaseHttpClientRequestCount() {
242-
httpClientRequestCount.incrementAndGet();
243-
}
244-
245241
public boolean sampleHttpClientRequest(final long id) {
242+
httpClientRequestCount.incrementAndGet();
246243
synchronized (sampledHttpClientRequests) {
247244
if (sampledHttpClientRequests.size()
248245
< Config.get().getApiSecurityMaxDownstreamRequestBodyAnalysis()) {

dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/GatewayBridge.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,8 @@ private Flow<Void> onRequestSession(final RequestContext ctx_, final String sess
329329
private Flow<Boolean> onHttpClientSampling(RequestContext ctx_, final long requestId) {
330330
AppSecRequestContext ctx = ctx_.getData(RequestContextSlot.APPSEC);
331331
if (ctx == null) {
332-
return new Flow.ResultFlow<>(null);
332+
return new Flow.ResultFlow<>(false);
333333
}
334-
ctx.increaseHttpClientRequestCount();
335334
final ApiSecurityDownstreamSampler sampler = downstreamSamplerSupplier.get();
336335
return new Flow.ResultFlow<>(sampler.sampleHttpClientRequest(ctx, requestId));
337336
}

dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/gateway/AppSecRequestContextSpecification.groovy

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.datadog.ddwaf.WafContext
1010
import com.squareup.moshi.JsonAdapter
1111
import com.squareup.moshi.Moshi
1212
import com.squareup.moshi.Types
13+
import datadog.trace.api.Config
1314
import datadog.trace.api.telemetry.LogCollector
1415
import datadog.trace.test.logging.TestLogCollector
1516
import datadog.trace.test.util.DDSpecification
@@ -433,4 +434,21 @@ class AppSecRequestContextSpecification extends DDSpecification {
433434
then:
434435
keys.size() == 0 // No attributes should be added for invalid key paths
435436
}
437+
438+
void 'test sampling of requests'() {
439+
given:
440+
final maxRequests = Config.get().apiSecurityMaxDownstreamRequestBodyAnalysis
441+
final context = new AppSecRequestContext()
442+
final random = new Random()
443+
final requestIds = (0..maxRequests).collect { random.nextLong() }
444+
445+
when:
446+
final map = requestIds.collectEntries{ [(it) : context.sampleHttpClientRequest(it)] }
447+
448+
then:
449+
map.values().count { it } == maxRequests
450+
map.each { requestId, sampled ->
451+
assert context.isHttpClientRequestSampled(requestId) == sampled
452+
}
453+
}
436454
}

0 commit comments

Comments
 (0)