From 59d308d090a7a853bee949ecc6f818bd9283b62f Mon Sep 17 00:00:00 2001 From: asjervanasten Date: Wed, 3 Jan 2024 17:52:51 +0100 Subject: [PATCH] First check annotation, then check RestAssured Signed-off-by: asjervanasten --- .../testing/jwt/JwtConfigExtension.java | 89 ++++++++++--------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/core/src/main/java/org/microshed/testing/jwt/JwtConfigExtension.java b/core/src/main/java/org/microshed/testing/jwt/JwtConfigExtension.java index 8f700fbd..55484135 100644 --- a/core/src/main/java/org/microshed/testing/jwt/JwtConfigExtension.java +++ b/core/src/main/java/org/microshed/testing/jwt/JwtConfigExtension.java @@ -1,6 +1,9 @@ package org.microshed.testing.jwt; -import org.junit.jupiter.api.extension.*; +import org.junit.jupiter.api.extension.AfterTestExecutionCallback; +import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; +import org.junit.jupiter.api.extension.ExtensionConfigurationException; +import org.junit.jupiter.api.extension.ExtensionContext; import org.microshed.testing.internal.InternalLogger; import org.microshed.testing.jupiter.MicroShedTestExtension; @@ -31,59 +34,59 @@ private void configureJwt(ExtensionContext context) throws Exception { Class restAssuredClass = tryLoad("io.restassured.RestAssured"); if (restAssuredClass == null) { LOG.debug("RESTAssured not found!"); - return; - } - - LOG.debug("RESTAssured found!"); - - JwtConfig jwtConfig = testMethod.getAnnotation(JwtConfig.class); - if (jwtConfig != null) { - // Configure RestAssured with the values from @JwtConfig for each test method - LOG.info("JWTConfig on method: " + testMethod.getName()); - // Get the RequestSpecBuilder class - Class requestSpecBuilderClass = Class.forName("io.restassured.builder.RequestSpecBuilder"); - // Create an instance of RequestSpecBuilder - Object requestSpecBuilder = requestSpecBuilderClass.newInstance(); - // Get the requestSpecification field - Field requestSpecificationField = restAssuredClass.getDeclaredField("requestSpecification"); - requestSpecificationField.setAccessible(true); - - // Get the header method of RequestSpecBuilder - Method headerMethod = requestSpecBuilderClass.getDeclaredMethod("addHeader", String.class, String.class); - - try { - String jwt = JwtBuilder.buildJwt(jwtConfig.subject(), jwtConfig.issuer(), jwtConfig.claims()); - headerMethod.invoke(requestSpecBuilder, "Authorization", "Bearer " + jwt); - LOG.debug("Using provided JWT auth header: " + jwt); - } catch (Exception e) { - throw new ExtensionConfigurationException("Error while building JWT for method " + testMethod.getName() + " with JwtConfig: " + jwtConfig, e); + } else { + + LOG.debug("RESTAssured found!"); + + JwtConfig jwtConfig = testMethod.getAnnotation(JwtConfig.class); + if (jwtConfig != null) { + // Configure RestAssured with the values from @JwtConfig for each test method + LOG.info("JWTConfig on method: " + testMethod.getName()); + // Get the RequestSpecBuilder class + Class requestSpecBuilderClass = Class.forName("io.restassured.builder.RequestSpecBuilder"); + // Create an instance of RequestSpecBuilder + Object requestSpecBuilder = requestSpecBuilderClass.newInstance(); + // Get the requestSpecification field + Field requestSpecificationField = restAssuredClass.getDeclaredField("requestSpecification"); + requestSpecificationField.setAccessible(true); + + // Get the header method of RequestSpecBuilder + Method headerMethod = requestSpecBuilderClass.getDeclaredMethod("addHeader", String.class, String.class); + + try { + String jwt = JwtBuilder.buildJwt(jwtConfig.subject(), jwtConfig.issuer(), jwtConfig.claims()); + headerMethod.invoke(requestSpecBuilder, "Authorization", "Bearer " + jwt); + LOG.debug("Using provided JWT auth header: " + jwt); + } catch (Exception e) { + throw new ExtensionConfigurationException("Error while building JWT for method " + testMethod.getName() + " with JwtConfig: " + jwtConfig, e); + } + + // Set the updated requestSpecification + requestSpecificationField.set(null, requestSpecBuilderClass.getMethod("build").invoke(requestSpecBuilder)); } - - // Set the updated requestSpecification - requestSpecificationField.set(null, requestSpecBuilderClass.getMethod("build").invoke(requestSpecBuilder)); } } } private void removeJwt(ExtensionContext context) throws Exception { - // Check if RestAssured is being used - Class restAssuredClass = tryLoad("io.restassured.RestAssured"); - if (restAssuredClass == null) { - LOG.debug("RESTAssured not found!"); - return; - } - // Check if the test method has the @JwtConfig annotation Method testMethod = context.getTestMethod().orElse(null); if (testMethod != null) { - LOG.debug("Method was annotated with: " + testMethod.getName()); - // Get the requestSpecification field - Field requestSpecificationField = restAssuredClass.getDeclaredField("requestSpecification"); - requestSpecificationField.setAccessible(true); - // Removes all requestSpec - requestSpecificationField.set(null, null); + + // Check if RestAssured is being used + Class restAssuredClass = tryLoad("io.restassured.RestAssured"); + if (restAssuredClass == null) { + LOG.debug("RESTAssured not found!"); + } else { + // Get the requestSpecification field + Field requestSpecificationField = restAssuredClass.getDeclaredField("requestSpecification"); + requestSpecificationField.setAccessible(true); + + // Removes all requestSpec + requestSpecificationField.set(null, null); + } } }