File tree Expand file tree Collapse file tree 3 files changed +61
-0
lines changed
dd-java-agent/appsec/src/main/java/com/datadog/appsec/config
dd-smoke-tests/dynamic-config/src
main/java/datadog/smoketest/dynamicconfig
test/groovy/datadog/smoketest Expand file tree Collapse file tree 3 files changed +61
-0
lines changed Original file line number Diff line number Diff line change 2121import static datadog .remoteconfig .Capabilities .CAPABILITY_ASM_TRUSTED_IPS ;
2222import static datadog .remoteconfig .Capabilities .CAPABILITY_ASM_USER_BLOCKING ;
2323import static datadog .remoteconfig .Capabilities .CAPABILITY_ENDPOINT_FINGERPRINT ;
24+ import static datadog .trace .api .config .AppSecConfig .APPSEC_ENABLED ;
2425
2526import com .datadog .appsec .AppSecModule ;
2627import com .datadog .appsec .AppSecSystem ;
4546import datadog .remoteconfig .state .ConfigKey ;
4647import datadog .remoteconfig .state .ProductListener ;
4748import datadog .trace .api .Config ;
49+ import datadog .trace .api .ConfigCollector ;
50+ import datadog .trace .api .ConfigOrigin ;
4851import datadog .trace .api .ProductActivation ;
4952import datadog .trace .api .UserIdCollectionMode ;
5053import datadog .trace .api .telemetry .LogCollector ;
@@ -517,6 +520,8 @@ private void setAppSecActivation(final AppSecFeatures.Asm asm) {
517520 newState = tracerConfig .getAppSecActivation () == ProductActivation .FULLY_ENABLED ;
518521 } else {
519522 newState = asm .enabled ;
523+ // Report AppSec activation change via telemetry when modified via remote config
524+ ConfigCollector .get ().put (APPSEC_ENABLED , asm .enabled , ConfigOrigin .REMOTE );
520525 }
521526 if (AppSecSystem .isActive () != newState ) {
522527 log .info ("AppSec {} (runtime)" , newState ? "enabled" : "disabled" );
Original file line number Diff line number Diff line change 1+ package datadog .smoketest .dynamicconfig ;
2+
3+ import java .util .concurrent .TimeUnit ;
4+
5+ public class AppSecApplication {
6+
7+ public static final long TIMEOUT_IN_SECONDS = 10 ;
8+
9+ public static void main (String [] args ) throws InterruptedException {
10+ // just wait as we want to test RC payloads
11+ Thread .sleep (TimeUnit .SECONDS .toMillis (TIMEOUT_IN_SECONDS ));
12+ System .exit (0 );
13+ }
14+ }
Original file line number Diff line number Diff line change 1+ package datadog.smoketest
2+
3+ import datadog.smoketest.dynamicconfig.AppSecApplication
4+
5+ class AppSecActivationSmokeTest extends AbstractSmokeTest {
6+
7+ @Override
8+ ProcessBuilder createProcessBuilder () {
9+ def command = [javaPath()]
10+ command + = defaultJavaProperties. toList()
11+ command + = [
12+ ' -Ddd.remote_config.enabled=true' ,
13+ " -Ddd.remote_config.url=http://localhost:${ server.address.port} /v0.7/config" . toString(),
14+ ' -Ddd.remote_config.poll_interval.seconds=1' ,
15+ ' -Ddd.profiling.enabled=false' ,
16+ ' -cp' ,
17+ System . getProperty(' datadog.smoketest.shadowJar.path' ),
18+ AppSecApplication . name
19+ ]
20+
21+ final processBuilder = new ProcessBuilder (command)
22+ processBuilder. directory(new File (buildDirectory))
23+ }
24+
25+ void ' test activation config change is sent via RC' () {
26+ when :
27+ setRemoteConfig(' datadog/2/ASM_FEATURES/asm_features_activation/config' , ' {"asm":{"enabled":true}}' )
28+
29+ then :
30+ waitForTelemetryFlat {
31+ if (it[' request_type' ] != ' app-client-configuration-change' ) {
32+ return false
33+ }
34+ final configurations = (List<Map<String , Object > > ) it?. payload?. configuration ?: []
35+ final enabledConfig = configurations. find { it. name == ' appsec_enabled' }
36+ if (! enabledConfig) {
37+ return false
38+ }
39+ return enabledConfig. value == ' true' && enabledConfig .origin == ' remote_config'
40+ }
41+ }
42+ }
You can’t perform that action at this time.
0 commit comments