1212import org .elasticsearch .cluster .service .ClusterService ;
1313import org .elasticsearch .common .settings .ClusterSettings ;
1414import org .elasticsearch .common .settings .Settings ;
15+ import org .elasticsearch .core .SuppressForbidden ;
1516import org .elasticsearch .test .ESTestCase ;
17+ import org .junit .After ;
1618import org .mockito .Mockito ;
1719
1820import java .util .List ;
1921import java .util .Set ;
2022
23+ import static org .elasticsearch .telemetry .TelemetryProvider .OTEL_METRICS_ENABLED_SYSTEM_PROPERTY ;
2124import static org .elasticsearch .telemetry .apm .internal .APMAgentSettings .APM_AGENT_SETTINGS ;
2225import static org .elasticsearch .telemetry .apm .internal .APMAgentSettings .TELEMETRY_METRICS_ENABLED_SETTING ;
2326import static org .elasticsearch .telemetry .apm .internal .APMAgentSettings .TELEMETRY_TRACING_ENABLED_SETTING ;
3336import static org .mockito .Mockito .verify ;
3437import static org .mockito .Mockito .when ;
3538
39+ @ SuppressForbidden (reason = "Need to change value of system property to cover all the scenarios" )
3640public class APMAgentSettingsTests extends ESTestCase {
41+ private final String otelMetricsEnabled = System .getProperty (OTEL_METRICS_ENABLED_SYSTEM_PROPERTY );
3742 APMAgentSettings apmAgentSettings = spy (new APMAgentSettings ());
3843 APMTelemetryProvider apmTelemetryProvider = mock (Mockito .RETURNS_DEEP_STUBS );
3944
45+ @ After
46+ public void restoreSystemProperty () {
47+ restoreSystemProperty (otelMetricsEnabled , OTEL_METRICS_ENABLED_SYSTEM_PROPERTY );
48+ }
49+
4050 /**
4151 * Check that when the tracer is enabled, it also sets the APM agent's recording system property to true.
4252 */
@@ -61,6 +71,8 @@ public void testEnableTracing() {
6171 }
6272
6373 public void testEnableMetrics () {
74+ System .setProperty (OTEL_METRICS_ENABLED_SYSTEM_PROPERTY , "false" );
75+
6476 for (boolean tracingEnabled : List .of (true , false )) {
6577 clearInvocations (apmAgentSettings , apmTelemetryProvider .getMeterService ());
6678
@@ -84,6 +96,8 @@ public void testEnableMetrics() {
8496 * Check that when the tracer is disabled, it also sets the APM agent's recording system property to false unless metrics are enabled.
8597 */
8698 public void testDisableTracing () {
99+ System .setProperty (OTEL_METRICS_ENABLED_SYSTEM_PROPERTY , "false" );
100+
87101 for (boolean metricsEnabled : List .of (true , false )) {
88102 clearInvocations (apmAgentSettings , apmTelemetryProvider .getTracer ());
89103
@@ -103,6 +117,44 @@ public void testDisableTracing() {
103117 }
104118 }
105119
120+ public void testTracingEnablesRecordingWhenOTelMetricsEnabled () {
121+ System .setProperty (OTEL_METRICS_ENABLED_SYSTEM_PROPERTY , "true" );
122+
123+ Settings initial = Settings .builder ()
124+ .put (TELEMETRY_TRACING_ENABLED_SETTING .getKey (), false )
125+ .put (TELEMETRY_METRICS_ENABLED_SETTING .getKey (), true )
126+ .build ();
127+ apmAgentSettings .initAgentSystemProperties (initial );
128+
129+ verify (apmAgentSettings ).setAgentSetting ("recording" , "false" );
130+ clearInvocations (apmAgentSettings , apmTelemetryProvider .getTracer ());
131+
132+ Settings update = Settings .builder ().put (initial ).put (TELEMETRY_TRACING_ENABLED_SETTING .getKey (), true ).build ();
133+ triggerUpdateConsumer (initial , update );
134+
135+ verify (apmAgentSettings ).setAgentSetting ("recording" , "true" );
136+ verify (apmTelemetryProvider .getTracer ()).setEnabled (true );
137+ }
138+
139+ public void testMetricsDisabledWhenOTelMetricsEnabled () {
140+ System .setProperty (OTEL_METRICS_ENABLED_SYSTEM_PROPERTY , "true" );
141+
142+ Settings initial = Settings .builder ()
143+ .put (TELEMETRY_TRACING_ENABLED_SETTING .getKey (), false )
144+ .put (TELEMETRY_METRICS_ENABLED_SETTING .getKey (), false )
145+ .build ();
146+ apmAgentSettings .initAgentSystemProperties (initial );
147+
148+ verify (apmAgentSettings ).setAgentSetting ("recording" , "false" );
149+ clearInvocations (apmAgentSettings , apmTelemetryProvider .getMeterService ());
150+
151+ Settings update = Settings .builder ().put (initial ).put (TELEMETRY_METRICS_ENABLED_SETTING .getKey (), true ).build ();
152+ triggerUpdateConsumer (initial , update );
153+
154+ verify (apmAgentSettings ).setAgentSetting ("recording" , "false" );
155+ verify (apmTelemetryProvider .getMeterService ()).setEnabled (true );
156+ }
157+
106158 public void testDisableMetrics () {
107159 for (boolean tracingEnabled : List .of (true , false )) {
108160 clearInvocations (apmAgentSettings , apmTelemetryProvider .getMeterService ());
@@ -183,4 +235,13 @@ public void testRejectUnknownSettingResemblingAnAllowedOne() {
183235 Exception exception = expectThrows (IllegalArgumentException .class , () -> APM_AGENT_SETTINGS .getAsMap (settings ));
184236 assertThat (exception .getMessage (), containsString ("[telemetry.agent.unknown.service_name]" ));
185237 }
238+
239+ @ SuppressForbidden (reason = "Uses System.setProperty" )
240+ private void restoreSystemProperty (String value , String key ) {
241+ if (value == null ) {
242+ System .clearProperty (key );
243+ } else {
244+ System .setProperty (key , value );
245+ }
246+ }
186247}
0 commit comments