Auf Thema antworten

Hi, also das Video, war eigentlich genau das, was ich gebraucht habe, also danke dafür. Dennoch habe ich noch Probleme, da er das dort mit Quarkus umsetzt und ich Spring Boot verwende.

Ich habe meinen Test jetzt so aufgebaut:


[CODE=java]@ContextConfiguration(classes = KeycloakResource.class)

@SpringBootTest

@ActiveProfiles("test")

class FolderControllerTest{



    @Value("${spring.oidc.auth-server-url}")

    String keycloakAuthServerUrl;



    @Test

    void testProtectedEndpoint() throws Exception {

        System.out.println(keycloakAuthServerUrl + "/protocol/openid-connect/token");


        String accessToken = given()

                .contentType("application/x-www-form-urlencoded")

                .formParams(Map.of(

                        "username", "username",

                        "password", "password",

                        "grant_type", "password",

                        "client_id","test-rest-api",

                        "client_secret", "secret"

                ))

                .post( keycloakAuthServerUrl + "/realms/realm/protocol/openid-connect/token")

                .then().assertThat().statusCode(200)

                .extract().path("access_token");

        System.out.println(accessToken);[/CODE]


Ich versuche derzeit nur den access Token korrekt zu erhalten (Den eigentlichen Endpoint habe ich hier jetzt mal weggelassen)


Dann habe ich wie im Video gezeigt wurde so eine KeycloakResource file erstellt, die vor dem Test ausgeführt wird und die url in der application-test.properties überschreiben soll (Ja ich habe für Testzwecke jetzt einfach mal auf eine .properties Datei gesetzt). Dort vermute ich liegt der Fehler, da es mir nicht gelungen ist den Code des Videos auf Spring Boot abzuändern.

Das Ganze sieht so aus:

[CODE]@ActiveProfiles("test")

@ContextConfiguration()

public class KeycloakResource {


    @Container

    public static GenericContainer<?> keycloakContainer = new GenericContainer<>("jboss/keycloak");


    public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

        @Override

        public void initialize(ConfigurableApplicationContext applicationContext) {

            TestPropertyValues.of(

                    "spring.oidc.auth-server-url" + keycloakContainer.getHost() + ":" + keycloakContainer.getFirstMappedPort() + "/auth/realms/realm"

            ).applyTo(applicationContext.getEnvironment());

        }

    }

}[/CODE]



Wie vorhin erwähnt habe ich jetzt einfach aus Testzwecken eine application-test.properties Datei gewählt, welche so aussieht:

[CODE]spring.oidc.auth-server-url=http://localhost:8080/auth/realms/realm[/CODE]



Wenn ich den Test jetzt ausführe, und mir die url printen lasse, dann steht dort genau die url drinnen, die als Standartwert gesetzt wurde, also:

http://localhost:8080/auth/realms/realm. Es ist also ziemlich klar, dass der Code in der KeycloakResources File die url nicht überschreibt.

Wie gesagt konnte ich für Spring Boot jetzt nicht wirklich etwas finden und der Code sieht mir ehrlich gesagt eh recht suspekt aus. Also vielleicht hat ja jemand von euch noch eine Idee.



Oben