Skip to content

Commit

Permalink
Fix tests using root cause for exception messages
Browse files Browse the repository at this point in the history
Closes gh-11372
  • Loading branch information
sjohnr committed Jun 14, 2022
1 parent d98dab5 commit c7df39a
Show file tree
Hide file tree
Showing 12 changed files with 30 additions and 18 deletions.
Expand Up @@ -77,7 +77,7 @@ public void contextSourceFactoryBeanWhenCustomManagerDnThenAuthenticates() throw
public void contextSourceFactoryBeanWhenManagerDnAndNoPasswordThenException() {
assertThatExceptionOfType(UnsatisfiedDependencyException.class)
.isThrownBy(() -> this.spring.register(CustomManagerDnNoPasswordConfig.class).autowire())
.withRootCauseInstanceOf(IllegalStateException.class)
.havingRootCause().isInstanceOf(IllegalStateException.class)
.withMessageContaining("managerPassword is required if managerDn is supplied");
}

Expand Down
Expand Up @@ -98,7 +98,7 @@ public void filterNoClassDefFoundError() throws Exception {
expectClassUtilsForNameThrowsNoClassDefFoundError(className);
assertThatExceptionOfType(BeanDefinitionParsingException.class)
.isThrownBy(() -> new InMemoryXmlApplicationContext(XML_AUTHENTICATION_MANAGER + XML_HTTP_BLOCK))
.withMessageContaining("NoClassDefFoundError: " + className);
.havingRootCause().isInstanceOf(NoClassDefFoundError.class).withMessage(className);
}

@Test
Expand All @@ -115,7 +115,7 @@ public void filterChainProxyClassNotFoundException() throws Exception {
expectClassUtilsForNameThrowsClassNotFoundException(className);
assertThatExceptionOfType(BeanDefinitionParsingException.class)
.isThrownBy(() -> new InMemoryXmlApplicationContext(XML_AUTHENTICATION_MANAGER + XML_HTTP_BLOCK))
.withMessageContaining("ClassNotFoundException: " + className);
.havingRootCause().isInstanceOf(ClassNotFoundException.class).withMessage(className);
}

@Test
Expand Down
Expand Up @@ -152,7 +152,7 @@ public void loadConfigWhenSecurityFilterChainsHaveOrderOnBeanDefinitionsThenFilt
@Test
public void loadConfigWhenWebSecurityConfigurersHaveSameOrderThenThrowBeanCreationException() {
assertThatExceptionOfType(BeanCreationException.class)
.isThrownBy(() -> this.spring.register(DuplicateOrderConfig.class).autowire())
.isThrownBy(() -> this.spring.register(DuplicateOrderConfig.class).autowire()).havingRootCause()
.withMessageContaining("@Order on WebSecurityConfigurers must be unique")
.withMessageContaining(DuplicateOrderConfig.WebConfigurer1.class.getName())
.withMessageContaining(DuplicateOrderConfig.WebConfigurer2.class.getName());
Expand Down
Expand Up @@ -56,8 +56,14 @@ public class AccessDeniedConfigTests {
@Test
public void configureWhenAccessDeniedHandlerIsMissingLeadingSlashThenException() {
SpringTestContext context = this.spring.configLocations(this.xml("NoLeadingSlash"));
assertThatExceptionOfType(BeanCreationException.class).isThrownBy(() -> context.autowire())
.withMessageContaining("errorPage must begin with '/'");
/*
* NOTE: Original error message "errorPage must begin with '/'" no longer shows up
* in stack trace as of Spring Framework 6.x.
*
* See https://github.com/spring-projects/spring-framework/issues/25162.
*/
assertThatExceptionOfType(BeanCreationException.class).isThrownBy(() -> context.autowire()).havingRootCause()
.withMessageContaining("Property 'errorPage' threw exception");
}

@Test
Expand Down
Expand Up @@ -61,7 +61,7 @@ public class HttpCorsConfigTests {
@Test
public void autowireWhenMissingMvcThenGivesInformativeError() {
assertThatExceptionOfType(BeanCreationException.class)
.isThrownBy(() -> this.spring.configLocations(this.xml("RequiresMvc")).autowire())
.isThrownBy(() -> this.spring.configLocations(this.xml("RequiresMvc")).autowire()).havingRootCause()
.withMessageContaining(
"Please ensure Spring Security & Spring MVC are configured in a shared ApplicationContext");
}
Expand Down
Expand Up @@ -386,10 +386,16 @@ public void requestWhenDisablingXssProtectionThenDefaultsToZero() throws Excepti

@Test
public void configureWhenXssProtectionDisabledAndBlockSetThenAutowireFails() {
/*
* NOTE: Original error message "Cannot set block to true with enabled false" no
* longer shows up in stack trace as of Spring Framework 6.x.
*
* See https://github.com/spring-projects/spring-framework/issues/25162.
*/
assertThatExceptionOfType(BeanCreationException.class)
.isThrownBy(() -> this.spring
.configLocations(this.xml("DefaultsDisabledWithXssProtectionDisabledAndBlockSet")).autowire())
.withMessageContaining("Cannot set block to true with enabled false");
.havingRootCause().withMessageContaining("Property 'block' threw exception");
}

@Test
Expand Down Expand Up @@ -445,14 +451,14 @@ public void insecureRequestWhenUsingCustomHstsRequestMatcherThenIncludesHstsHead
public void configureWhenUsingHpkpWithoutPinsThenAutowireFails() {
assertThatExceptionOfType(XmlBeanDefinitionStoreException.class)
.isThrownBy(() -> this.spring.configLocations(this.xml("DefaultsDisabledWithEmptyHpkp")).autowire())
.withMessageContaining("The content of element 'hpkp' is not complete");
.havingRootCause().withMessageContaining("The content of element 'hpkp' is not complete");
}

@Test
public void configureWhenUsingHpkpWithEmptyPinsThenAutowireFails() {
assertThatExceptionOfType(XmlBeanDefinitionStoreException.class)
.isThrownBy(() -> this.spring.configLocations(this.xml("DefaultsDisabledWithEmptyPins")).autowire())
.withMessageContaining("The content of element 'pins' is not complete");
.havingRootCause().withMessageContaining("The content of element 'pins' is not complete");
}

@Test
Expand Down
Expand Up @@ -43,7 +43,7 @@ public void closeAppContext() {
public void apacheDirectoryServerIsStartedByDefault() {
assertThatExceptionOfType(BeanDefinitionStoreException.class)
.isThrownBy(() -> this.context = new ClassPathXmlApplicationContext("applicationContext-security.xml"))
.withMessageContaining("Embedded LDAP server is not provided");
.havingRootCause().withMessageContaining("Embedded LDAP server is not provided");
}

}
Expand Up @@ -258,7 +258,7 @@ public void getTokenResponseWhenSuccessResponseAndNotBearerTokenTypeThenThrowOAu
.getTokenResponse(authorizationCodeGrantRequest(this.clientRegistration.build())))
.withMessageContaining(
"[invalid_token_response] An error occurred while attempting to retrieve the OAuth 2.0 Access Token Response")
.withMessageContaining("tokenType cannot be null");
.havingRootCause().withMessageContaining("tokenType cannot be null");
}

@Test
Expand All @@ -274,7 +274,7 @@ public void getTokenResponseWhenSuccessResponseAndMissingTokenTypeParameterThenT
.getTokenResponse(authorizationCodeGrantRequest(this.clientRegistration.build())))
.withMessageContaining(
"[invalid_token_response] An error occurred while attempting to retrieve the OAuth 2.0 Access Token Response")
.withMessageContaining("tokenType cannot be null");
.havingRootCause().withMessageContaining("tokenType cannot be null");
}

@Test
Expand Down
Expand Up @@ -269,7 +269,7 @@ public void getTokenResponseWhenSuccessResponseAndNotBearerTokenTypeThenThrowOAu
.isThrownBy(() -> this.tokenResponseClient.getTokenResponse(clientCredentialsGrantRequest))
.withMessageContaining(
"[invalid_token_response] An error occurred while attempting to retrieve the OAuth 2.0 Access Token Response")
.withMessageContaining("tokenType cannot be null");
.havingRootCause().withMessageContaining("tokenType cannot be null");
}

@Test
Expand All @@ -282,7 +282,7 @@ public void getTokenResponseWhenSuccessResponseAndMissingTokenTypeParameterThenT
.isThrownBy(() -> this.tokenResponseClient.getTokenResponse(clientCredentialsGrantRequest))
.withMessageContaining(
"[invalid_token_response] An error occurred while attempting to retrieve the OAuth 2.0 Access Token Response")
.withMessageContaining("tokenType cannot be null");
.havingRootCause().withMessageContaining("tokenType cannot be null");
}

@Test
Expand Down
Expand Up @@ -182,7 +182,7 @@ public void getTokenResponseWhenSuccessResponseAndNotBearerTokenTypeThenThrowOAu
.isThrownBy(() -> this.tokenResponseClient.getTokenResponse(jwtBearerGrantRequest))
.withMessageContaining(
"[invalid_token_response] An error occurred while attempting to retrieve the OAuth 2.0 Access Token Response")
.withMessageContaining("tokenType cannot be null");
.havingRootCause().withMessageContaining("tokenType cannot be null");
}

@Test
Expand Down
Expand Up @@ -245,7 +245,7 @@ public void getTokenResponseWhenSuccessResponseAndNotBearerTokenTypeThenThrowOAu
.isThrownBy(() -> this.tokenResponseClient.getTokenResponse(passwordGrantRequest))
.withMessageContaining(
"[invalid_token_response] An error occurred while attempting to retrieve the OAuth 2.0 Access Token Response")
.withMessageContaining("tokenType cannot be null");
.havingRootCause().withMessageContaining("tokenType cannot be null");
}

@Test
Expand Down
Expand Up @@ -246,7 +246,7 @@ public void getTokenResponseWhenSuccessResponseAndNotBearerTokenTypeThenThrowOAu
.isThrownBy(() -> this.tokenResponseClient.getTokenResponse(refreshTokenGrantRequest))
.withMessageContaining("[invalid_token_response] An error occurred while attempting to "
+ "retrieve the OAuth 2.0 Access Token Response")
.withMessageContaining("tokenType cannot be null");
.havingRootCause().withMessageContaining("tokenType cannot be null");
}

@Test
Expand Down

0 comments on commit c7df39a

Please sign in to comment.