webauthnWhenConfiguredMessageConverter uses mock

Issue gh-16397
This commit is contained in:
Rob Winch 2025-01-17 18:29:07 -06:00
parent 0d4f786484
commit 5462b4c358
No known key found for this signature in database

View File

@ -16,7 +16,7 @@
package org.springframework.security.config.annotation.web.configurers; package org.springframework.security.config.annotation.web.configurers;
import java.io.IOException; import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -25,12 +25,8 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage; import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.security.authentication.TestingAuthenticationToken; import org.springframework.security.authentication.TestingAuthenticationToken;
import org.springframework.security.config.Customizer; import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@ -53,6 +49,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.containsString;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.willAnswer;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
@ -153,29 +150,19 @@ public class WebAuthnConfigurerTests {
WebAuthnRelyingPartyOperations rpOperations = mock(WebAuthnRelyingPartyOperations.class); WebAuthnRelyingPartyOperations rpOperations = mock(WebAuthnRelyingPartyOperations.class);
ConfigMessageConverter.rpOperations = rpOperations; ConfigMessageConverter.rpOperations = rpOperations;
given(rpOperations.createPublicKeyCredentialCreationOptions(any())).willReturn(options); given(rpOperations.createPublicKeyCredentialCreationOptions(any())).willReturn(options);
HttpMessageConverter<Object> converter = new AbstractHttpMessageConverter<>() { HttpMessageConverter<Object> converter = mock(HttpMessageConverter.class);
@Override given(converter.canWrite(any(), any())).willReturn(true);
protected boolean supports(Class<?> clazz) { String expectedBody = "123";
return true; willAnswer((args) -> {
} HttpOutputMessage out = (HttpOutputMessage) args.getArguments()[2];
out.getBody().write(expectedBody.getBytes(StandardCharsets.UTF_8));
@Override return null;
protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) }).given(converter).write(any(), any(), any());
throws IOException, HttpMessageNotReadableException {
return null;
}
@Override
protected void writeInternal(Object o, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException {
outputMessage.getBody().write("123".getBytes());
}
};
ConfigMessageConverter.converter = converter; ConfigMessageConverter.converter = converter;
this.spring.register(ConfigMessageConverter.class).autowire(); this.spring.register(ConfigMessageConverter.class).autowire();
this.mvc.perform(post("/webauthn/register/options")) this.mvc.perform(post("/webauthn/register/options"))
.andExpect(status().isOk()) .andExpect(status().isOk())
.andExpect(content().string("123")); .andExpect(content().string(expectedBody));
} }
@Configuration @Configuration