OTelHttpClientFactory not configured properly when tracing enabled

Closes #38740

Signed-off-by: Martin Bartoš <mabartos@redhat.com>
This commit is contained in:
Martin Bartoš 2025-04-08 18:04:23 +01:00 committed by GitHub
parent 602258d935
commit 83001e4024
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 62 additions and 1 deletions

View File

@ -60,7 +60,7 @@ public class OTelHttpClientFactory extends DefaultHttpClientFactory implements E
@Override
public void init(Config.Scope config) {
super.init(config.scope("connectionsHttpClient", "default"));
super.init(Config.scope("connectionsHttpClient", "default"));
}
@Override

View File

@ -364,4 +364,8 @@ public class DefaultHttpClientFactory implements HttpClientFactory {
return value;
}
// For testing purposes
public Config.Scope getConfig() {
return config;
}
}

View File

@ -0,0 +1,57 @@
package org.keycloak.tests.admin.tracing;
import org.junit.jupiter.api.Test;
import org.keycloak.connections.httpclient.DefaultHttpClientFactory;
import org.keycloak.connections.httpclient.HttpClientProvider;
import org.keycloak.quarkus.runtime.tracing.OTelHttpClientFactory;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.remote.runonserver.InjectRunOnServer;
import org.keycloak.testframework.remote.runonserver.RunOnServerClient;
import org.keycloak.testframework.server.KeycloakServerConfig;
import org.keycloak.testframework.server.KeycloakServerConfigBuilder;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
@KeycloakIntegrationTest(config = TracingTest.ServerConfigWithTracing.class)
public class TracingTest {
@InjectRunOnServer
RunOnServerClient runOnServer;
@Test
public void defaultSettingsIsUsed() {
runOnServer.run(session -> {
var defaultFactory = session.getKeycloakSessionFactory().getProviderFactory(HttpClientProvider.class, "default");
assertThat(defaultFactory, notNullValue());
assertThat(defaultFactory instanceof OTelHttpClientFactory, is(false));
assertThat(defaultFactory instanceof DefaultHttpClientFactory, is(true));
var defaultConfig = ((DefaultHttpClientFactory) defaultFactory).getConfig();
assertThat(defaultConfig, notNullValue());
assertThat(defaultConfig.get("connection-ttl-millis"), is("1"));
assertThat(defaultConfig.get("socket-timeout-millis"), is("2222"));
var otelFactory = session.getKeycloakSessionFactory().getProviderFactory(HttpClientProvider.class);
assertThat(otelFactory, notNullValue());
assertThat(otelFactory instanceof OTelHttpClientFactory, is(true));
var otelConfig = ((OTelHttpClientFactory) otelFactory).getConfig();
assertThat(otelConfig.get("connection-ttl-millis"), is("1"));
assertThat(otelConfig.get("socket-timeout-millis"), is("2222"));
});
}
public static class ServerConfigWithTracing implements KeycloakServerConfig {
@Override
public KeycloakServerConfigBuilder configure(KeycloakServerConfigBuilder config) {
return config.option("tracing-enabled", "true")
.option("spi-connections-http-client-default-connection-ttl-millis", "1")
.option("spi-connections-http-client-default-socket-timeout-millis", "2222")
.option("spi-connections-http-client-opentelemetry-connection-ttl-millis", "2") // not accepted
.option("spi-connections-http-client-opentelemetry-socket-timeout-millis", "3333"); // not accepted
}
}
}