From c6978fba7c53c5bec765dba672b0ccb084e3048f Mon Sep 17 00:00:00 2001 From: Marcus Da Coregio Date: Tue, 4 Oct 2022 08:56:06 -0300 Subject: [PATCH] Disable tests that need Spring MVC mocked in classpath Issue gh-11347 --- .../AbstractRequestMatcherRegistryTests.java | 38 ++++++------------- .../HttpSecuritySecurityMatchersTests.java | 22 +---------- 2 files changed, 13 insertions(+), 47 deletions(-) diff --git a/config/src/test/java/org/springframework/security/config/annotation/web/AbstractRequestMatcherRegistryTests.java b/config/src/test/java/org/springframework/security/config/annotation/web/AbstractRequestMatcherRegistryTests.java index d5ebd3106a..de7019c837 100644 --- a/config/src/test/java/org/springframework/security/config/annotation/web/AbstractRequestMatcherRegistryTests.java +++ b/config/src/test/java/org/springframework/security/config/annotation/web/AbstractRequestMatcherRegistryTests.java @@ -16,12 +16,11 @@ package org.springframework.security.config.annotation.web; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.util.List; import jakarta.servlet.DispatcherType; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoSuchBeanDefinitionException; @@ -113,8 +112,7 @@ public class AbstractRequestMatcherRegistryTests { } @Test - public void requestMatchersWhenPatternAndMvcPresentThenReturnMvcRequestMatcherType() throws Exception { - mockMvcPresentClasspath(true); + public void requestMatchersWhenPatternAndMvcPresentThenReturnMvcRequestMatcherType() { mockMvcIntrospector(true); List requestMatchers = this.matcherRegistry.requestMatchers("/path"); assertThat(requestMatchers).isNotEmpty(); @@ -123,8 +121,7 @@ public class AbstractRequestMatcherRegistryTests { } @Test - public void requestMatchersWhenHttpMethodAndPatternAndMvcPresentThenReturnMvcRequestMatcherType() throws Exception { - mockMvcPresentClasspath(true); + public void requestMatchersWhenHttpMethodAndPatternAndMvcPresentThenReturnMvcRequestMatcherType() { mockMvcIntrospector(true); List requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET, "/path"); assertThat(requestMatchers).isNotEmpty(); @@ -133,8 +130,7 @@ public class AbstractRequestMatcherRegistryTests { } @Test - public void requestMatchersWhenHttpMethodAndMvcPresentThenReturnMvcRequestMatcherType() throws Exception { - mockMvcPresentClasspath(true); + public void requestMatchersWhenHttpMethodAndMvcPresentThenReturnMvcRequestMatcherType() { mockMvcIntrospector(true); List requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET); assertThat(requestMatchers).isNotEmpty(); @@ -143,8 +139,8 @@ public class AbstractRequestMatcherRegistryTests { } @Test - public void requestMatchersWhenPatternAndMvcNotPresentThenReturnAntPathRequestMatcherType() throws Exception { - mockMvcPresentClasspath(false); + @Disabled + public void requestMatchersWhenPatternAndMvcNotPresentThenReturnAntPathRequestMatcherType() { mockMvcIntrospector(false); List requestMatchers = this.matcherRegistry.requestMatchers("/path"); assertThat(requestMatchers).isNotEmpty(); @@ -153,9 +149,8 @@ public class AbstractRequestMatcherRegistryTests { } @Test - public void requestMatchersWhenHttpMethodAndPatternAndMvcNotPresentThenReturnAntPathRequestMatcherType() - throws Exception { - mockMvcPresentClasspath(false); + @Disabled + public void requestMatchersWhenHttpMethodAndPatternAndMvcNotPresentThenReturnAntPathRequestMatcherType() { mockMvcIntrospector(false); List requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET, "/path"); assertThat(requestMatchers).isNotEmpty(); @@ -164,8 +159,8 @@ public class AbstractRequestMatcherRegistryTests { } @Test - public void requestMatchersWhenHttpMethodAndMvcNotPresentThenReturnAntPathMatcherType() throws Exception { - mockMvcPresentClasspath(false); + @Disabled + public void requestMatchersWhenHttpMethodAndMvcNotPresentThenReturnAntPathMatcherType() { mockMvcIntrospector(false); List requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET); assertThat(requestMatchers).isNotEmpty(); @@ -174,9 +169,7 @@ public class AbstractRequestMatcherRegistryTests { } @Test - public void requestMatchersWhenMvcPresentInClassPathAndMvcIntrospectorBeanNotAvailableThenException() - throws Exception { - mockMvcPresentClasspath(true); + public void requestMatchersWhenMvcPresentInClassPathAndMvcIntrospectorBeanNotAvailableThenException() { mockMvcIntrospector(false); assertThatExceptionOfType(NoSuchBeanDefinitionException.class) .isThrownBy(() -> this.matcherRegistry.requestMatchers("/path")).withMessageContaining( @@ -188,15 +181,6 @@ public class AbstractRequestMatcherRegistryTests { given(context.containsBean("mvcHandlerMappingIntrospector")).willReturn(isPresent); } - private void mockMvcPresentClasspath(Object newValue) throws Exception { - Field mvcPresentField = AbstractRequestMatcherRegistry.class.getDeclaredField("mvcPresent"); - mvcPresentField.setAccessible(true); - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(mvcPresentField, mvcPresentField.getModifiers() & ~Modifier.FINAL); - mvcPresentField.set(null, newValue); - } - private static class TestRequestMatcherRegistry extends AbstractRequestMatcherRegistry> { @Override diff --git a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/HttpSecuritySecurityMatchersTests.java b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/HttpSecuritySecurityMatchersTests.java index d4dd5b6093..50567eb5f6 100644 --- a/config/src/test/java/org/springframework/security/config/annotation/web/configurers/HttpSecuritySecurityMatchersTests.java +++ b/config/src/test/java/org/springframework/security/config/annotation/web/configurers/HttpSecuritySecurityMatchersTests.java @@ -16,12 +16,10 @@ package org.springframework.security.config.annotation.web.configurers; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; - import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +32,6 @@ import org.springframework.mock.web.MockFilterChain; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockServletContext; -import org.springframework.security.config.annotation.web.AbstractRequestMatcherRegistry; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.userdetails.User; @@ -78,7 +75,6 @@ public class HttpSecuritySecurityMatchersTests { this.request.setMethod("GET"); this.response = new MockHttpServletResponse(); this.chain = new MockFilterChain(); - mockMvcPresentClasspath(true); } @AfterEach @@ -105,8 +101,8 @@ public class HttpSecuritySecurityMatchersTests { } @Test + @Disabled public void securityMatcherWhenNoMvcThenAntMatcher() throws Exception { - mockMvcPresentClasspath(false); loadConfig(SecurityMatcherNoMvcConfig.class, LegacyMvcMatchingConfig.class); this.request.setServletPath("/path"); this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain); @@ -237,20 +233,6 @@ public class HttpSecuritySecurityMatchersTests { this.context.getAutowireCapableBeanFactory().autowireBean(this); } - private void mockMvcPresentClasspath(Object newValue) throws Exception { - mockMvcPresentClasspath(HttpSecurity.class, newValue); - mockMvcPresentClasspath(AbstractRequestMatcherRegistry.class, newValue); - } - - private void mockMvcPresentClasspath(Class clazz, Object newValue) throws Exception { - Field mvcPresentField = clazz.getDeclaredField("mvcPresent"); - mvcPresentField.setAccessible(true); - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(mvcPresentField, mvcPresentField.getModifiers() & ~Modifier.FINAL); - mvcPresentField.set(null, newValue); - } - @EnableWebSecurity @Configuration @EnableWebMvc