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 21
21
import static datadog .remoteconfig .Capabilities .CAPABILITY_ASM_TRUSTED_IPS ;
22
22
import static datadog .remoteconfig .Capabilities .CAPABILITY_ASM_USER_BLOCKING ;
23
23
import static datadog .remoteconfig .Capabilities .CAPABILITY_ENDPOINT_FINGERPRINT ;
24
+ import static datadog .trace .api .config .AppSecConfig .APPSEC_ENABLED ;
24
25
25
26
import com .datadog .appsec .AppSecModule ;
26
27
import com .datadog .appsec .AppSecSystem ;
45
46
import datadog .remoteconfig .state .ConfigKey ;
46
47
import datadog .remoteconfig .state .ProductListener ;
47
48
import datadog .trace .api .Config ;
49
+ import datadog .trace .api .ConfigCollector ;
50
+ import datadog .trace .api .ConfigOrigin ;
48
51
import datadog .trace .api .ProductActivation ;
49
52
import datadog .trace .api .UserIdCollectionMode ;
50
53
import datadog .trace .api .telemetry .LogCollector ;
@@ -517,6 +520,8 @@ private void setAppSecActivation(final AppSecFeatures.Asm asm) {
517
520
newState = tracerConfig .getAppSecActivation () == ProductActivation .FULLY_ENABLED ;
518
521
} else {
519
522
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 );
520
525
}
521
526
if (AppSecSystem .isActive () != newState ) {
522
527
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