1212
1313import io .opentelemetry .api .incubator .ExtendedOpenTelemetry ;
1414import io .opentelemetry .api .incubator .config .DeclarativeConfigProperties ;
15+ import java .lang .reflect .Field ;
16+ import java .util .ArrayList ;
17+ import java .util .List ;
18+ import java .util .Set ;
19+ import java .util .logging .Handler ;
20+ import java .util .logging .LogRecord ;
21+ import java .util .logging .Logger ;
1522import org .junit .jupiter .api .Test ;
1623
1724class DbConfigTest {
@@ -72,6 +79,43 @@ void commonSqlCommenterPropertyIsUsedAsFallback() {
7279 assertThat (DbConfig .isSqlCommenterEnabled (openTelemetry , "jdbc" )).isTrue ();
7380 }
7481
82+ @ Test
83+ void deprecatedCommonSqlCommenterConfigWarningUsesFutureVersionMessage () throws Exception {
84+ ExtendedOpenTelemetry openTelemetry = mock (ExtendedOpenTelemetry .class );
85+ DeclarativeConfigProperties commonConfig =
86+ mock (DeclarativeConfigProperties .class , RETURNS_DEEP_STUBS );
87+ DeclarativeConfigProperties instrumentationConfig =
88+ mock (DeclarativeConfigProperties .class , RETURNS_DEEP_STUBS );
89+ when (openTelemetry .getInstrumentationConfig ("common" )).thenReturn (commonConfig );
90+ when (openTelemetry .getInstrumentationConfig ("jdbc" )).thenReturn (instrumentationConfig );
91+ when (instrumentationConfig .get ("sqlcommenter/development" ).getBoolean ("enabled" ))
92+ .thenReturn (null );
93+ when (commonConfig .get ("db" ).get ("sqlcommenter/development" ).getBoolean ("enabled" ))
94+ .thenReturn (null );
95+ when (commonConfig .get ("database" ).get ("sqlcommenter/development" ).getBoolean ("enabled" ))
96+ .thenReturn (true );
97+
98+ clearDeprecatedWarnings ();
99+ Logger logger = Logger .getLogger (DbConfig .class .getName ());
100+ TestHandler handler = new TestHandler ();
101+ logger .addHandler (handler );
102+ try {
103+ assertThat (DbConfig .isSqlCommenterEnabled (openTelemetry , "jdbc" )).isTrue ();
104+
105+ assertThat (handler .records ).hasSize (1 );
106+ assertThat (handler .records .get (0 ).getMessage ())
107+ .isEqualTo (
108+ "The 'instrumentation/development: java: common: database:"
109+ + " sqlcommenter/development: enabled' declarative configuration is"
110+ + " deprecated and will be removed in a future version. Use"
111+ + " 'instrumentation/development: java: common: db:"
112+ + " sqlcommenter/development: enabled' instead." );
113+ } finally {
114+ logger .removeHandler (handler );
115+ clearDeprecatedWarnings ();
116+ }
117+ }
118+
75119 @ Test
76120 void newInstrumentationQuerySanitizationTakesPrecedenceOverDeprecatedConfig () {
77121 ExtendedOpenTelemetry openTelemetry = mock (ExtendedOpenTelemetry .class );
@@ -94,4 +138,57 @@ void deprecatedInstrumentationQuerySanitizationConfigIsUsedAsFallback() {
94138
95139 assertThat (DbConfig .isQuerySanitizationEnabled (openTelemetry , "jdbc" )).isFalse ();
96140 }
141+
142+ @ Test
143+ void deprecatedCommonStatementSanitizerConfigWarningUsesFutureVersionMessage () throws Exception {
144+ ExtendedOpenTelemetry openTelemetry = mock (ExtendedOpenTelemetry .class );
145+ DeclarativeConfigProperties commonConfig =
146+ mock (DeclarativeConfigProperties .class , RETURNS_DEEP_STUBS );
147+ when (openTelemetry .getInstrumentationConfig ("common" )).thenReturn (commonConfig );
148+ when (commonConfig .get ("db" ).get ("query_sanitization" ).getBoolean ("enabled" )).thenReturn (null );
149+ when (commonConfig .get ("database" ).get ("statement_sanitizer" ).getBoolean ("enabled" ))
150+ .thenReturn (false );
151+
152+ clearDeprecatedWarnings ();
153+ Logger logger = Logger .getLogger (DbConfig .class .getName ());
154+ TestHandler handler = new TestHandler ();
155+ logger .addHandler (handler );
156+ try {
157+ assertThat (DbConfig .isCommonQuerySanitizationEnabled (openTelemetry )).isFalse ();
158+
159+ assertThat (handler .records ).hasSize (1 );
160+ assertThat (handler .records .get (0 ).getMessage ())
161+ .isEqualTo (
162+ "The 'instrumentation/development: java: common: database:"
163+ + " statement_sanitizer: enabled' declarative configuration is"
164+ + " deprecated and will be removed in a future version. Use"
165+ + " 'instrumentation/development: java: common: db: query_sanitization:"
166+ + " enabled' instead." );
167+ } finally {
168+ logger .removeHandler (handler );
169+ clearDeprecatedWarnings ();
170+ }
171+ }
172+
173+ private static void clearDeprecatedWarnings () throws Exception {
174+ Field warnedDeprecatedPropertiesField =
175+ DbConfig .class .getDeclaredField ("warnedDeprecatedProperties" );
176+ warnedDeprecatedPropertiesField .setAccessible (true );
177+ ((Set <?>) warnedDeprecatedPropertiesField .get (null )).clear ();
178+ }
179+
180+ private static final class TestHandler extends Handler {
181+ private final List <LogRecord > records = new ArrayList <>();
182+
183+ @ Override
184+ public void publish (LogRecord record ) {
185+ records .add (record );
186+ }
187+
188+ @ Override
189+ public void flush () {}
190+
191+ @ Override
192+ public void close () {}
193+ }
97194}
0 commit comments