DelegatingOAuth2TokenValidator Varargs Constructor

Fixes: gh-5889
This commit is contained in:
Josh Cummings 2018-09-20 10:45:51 -06:00
parent 8a49c431c3
commit 77fa495860
No known key found for this signature in database
GPG Key ID: 49EF60DD7FF83443
2 changed files with 47 additions and 10 deletions

View File

@ -17,6 +17,7 @@
package org.springframework.security.oauth2.core; package org.springframework.security.oauth2.core;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@ -34,12 +35,27 @@ public final class DelegatingOAuth2TokenValidator<T extends AbstractOAuth2Token>
private final Collection<OAuth2TokenValidator<T>> tokenValidators; private final Collection<OAuth2TokenValidator<T>> tokenValidators;
/**
* Constructs a {@code DelegatingOAuth2TokenValidator} using the provided validators.
*
* @param tokenValidators the {@link Collection} of {@link OAuth2TokenValidator}s to use
*/
public DelegatingOAuth2TokenValidator(Collection<OAuth2TokenValidator<T>> tokenValidators) { public DelegatingOAuth2TokenValidator(Collection<OAuth2TokenValidator<T>> tokenValidators) {
Assert.notNull(tokenValidators, "tokenValidators cannot be null"); Assert.notNull(tokenValidators, "tokenValidators cannot be null");
this.tokenValidators = new ArrayList<>(tokenValidators); this.tokenValidators = new ArrayList<>(tokenValidators);
} }
/**
* Constructs a {@code DelegatingOAuth2TokenValidator} using the provided validators.
*
* @param tokenValidators the collection of {@link OAuth2TokenValidator}s to use
*/
@SafeVarargs
public DelegatingOAuth2TokenValidator(OAuth2TokenValidator<T>... tokenValidators) {
this(Arrays.asList(tokenValidators));
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */

View File

@ -16,20 +16,16 @@
package org.springframework.security.oauth2.core; package org.springframework.security.oauth2.core;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collection;
import org.junit.Test; import org.junit.Test;
import org.springframework.security.oauth2.core.AbstractOAuth2Token;
import org.springframework.security.oauth2.core.DelegatingOAuth2TokenValidator;
import org.springframework.security.oauth2.core.OAuth2Error;
import org.springframework.security.oauth2.core.OAuth2TokenValidator;
import org.springframework.security.oauth2.core.OAuth2TokenValidatorResult;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatCode;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
/** /**
@ -44,7 +40,7 @@ public class DelegatingOAuth2TokenValidatorTests {
@Test @Test
public void validateWhenNoValidatorsConfiguredThenReturnsSuccessfulResult() { public void validateWhenNoValidatorsConfiguredThenReturnsSuccessfulResult() {
DelegatingOAuth2TokenValidator<AbstractOAuth2Token> tokenValidator = DelegatingOAuth2TokenValidator<AbstractOAuth2Token> tokenValidator =
new DelegatingOAuth2TokenValidator<>(Collections.emptyList()); new DelegatingOAuth2TokenValidator<>();
AbstractOAuth2Token token = mock(AbstractOAuth2Token.class); AbstractOAuth2Token token = mock(AbstractOAuth2Token.class);
assertThat(tokenValidator.validate(token).hasErrors()).isFalse(); assertThat(tokenValidator.validate(token).hasErrors()).isFalse();
@ -84,7 +80,7 @@ public class DelegatingOAuth2TokenValidatorTests {
.thenReturn(OAuth2TokenValidatorResult.failure(otherDetail)); .thenReturn(OAuth2TokenValidatorResult.failure(otherDetail));
DelegatingOAuth2TokenValidator<AbstractOAuth2Token> tokenValidator = DelegatingOAuth2TokenValidator<AbstractOAuth2Token> tokenValidator =
new DelegatingOAuth2TokenValidator<>(Arrays.asList(firstFailure, secondFailure)); new DelegatingOAuth2TokenValidator<>(firstFailure, secondFailure);
AbstractOAuth2Token token = mock(AbstractOAuth2Token.class); AbstractOAuth2Token token = mock(AbstractOAuth2Token.class);
OAuth2TokenValidatorResult result = OAuth2TokenValidatorResult result =
@ -117,7 +113,32 @@ public class DelegatingOAuth2TokenValidatorTests {
@Test @Test
public void constructorWhenInvokedWithNullValidatorListThenThrowsIllegalArgumentException() { public void constructorWhenInvokedWithNullValidatorListThenThrowsIllegalArgumentException() {
assertThatCode(() -> new DelegatingOAuth2TokenValidator<>(null)) assertThatCode(() -> new DelegatingOAuth2TokenValidator<>
((Collection<OAuth2TokenValidator<AbstractOAuth2Token>>) null))
.isInstanceOf(IllegalArgumentException.class); .isInstanceOf(IllegalArgumentException.class);
} }
@Test
public void constructorsWhenInvokedWithSameInputsThenResultInSameOutputs() {
OAuth2TokenValidator<AbstractOAuth2Token> firstSuccess = mock(OAuth2TokenValidator.class);
OAuth2TokenValidator<AbstractOAuth2Token> secondSuccess = mock(OAuth2TokenValidator.class);
when(firstSuccess.validate(any(AbstractOAuth2Token.class)))
.thenReturn(OAuth2TokenValidatorResult.success());
when(secondSuccess.validate(any(AbstractOAuth2Token.class)))
.thenReturn(OAuth2TokenValidatorResult.success());
DelegatingOAuth2TokenValidator<AbstractOAuth2Token> firstValidator =
new DelegatingOAuth2TokenValidator<>(Arrays.asList(firstSuccess, secondSuccess));
DelegatingOAuth2TokenValidator<AbstractOAuth2Token> secondValidator =
new DelegatingOAuth2TokenValidator<>(firstSuccess, secondSuccess);
AbstractOAuth2Token token = mock(AbstractOAuth2Token.class);
firstValidator.validate(token);
secondValidator.validate(token);
verify(firstSuccess, times(2)).validate(token);
verify(secondSuccess, times(2)).validate(token);
}
} }