From 4ce1d2ed892aebacc39d05afb74e6fcfe3c43b04 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Thu, 17 Oct 2019 09:26:36 +0200 Subject: [PATCH] add unit tests for anonymous realm --- .../sonia/scm/security/AnonymousRealm.java | 6 ++- .../scm/security/AnonymousRealmTest.java | 54 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 scm-webapp/src/test/java/sonia/scm/security/AnonymousRealmTest.java diff --git a/scm-webapp/src/main/java/sonia/scm/security/AnonymousRealm.java b/scm-webapp/src/main/java/sonia/scm/security/AnonymousRealm.java index eb68c47027..17a14cce73 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/AnonymousRealm.java +++ b/scm-webapp/src/main/java/sonia/scm/security/AnonymousRealm.java @@ -2,7 +2,6 @@ package sonia.scm.security; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; -import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.credential.AllowAllCredentialsMatcher; @@ -12,6 +11,8 @@ import sonia.scm.plugin.Extension; import javax.inject.Singleton; +import static com.google.common.base.Preconditions.checkArgument; + @Singleton @Extension public class AnonymousRealm extends AuthenticatingRealm { @@ -36,7 +37,8 @@ public class AnonymousRealm extends AuthenticatingRealm { } @Override - protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) { + checkArgument(authenticationToken instanceof AnonymousToken, "%s is required", AnonymousToken.class); return helper.authenticationInfoBuilder(SCMContext.USER_ANONYMOUS).build(); } } diff --git a/scm-webapp/src/test/java/sonia/scm/security/AnonymousRealmTest.java b/scm-webapp/src/test/java/sonia/scm/security/AnonymousRealmTest.java new file mode 100644 index 0000000000..769d7406ca --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/security/AnonymousRealmTest.java @@ -0,0 +1,54 @@ +package sonia.scm.security; + +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.SCMContext; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class AnonymousRealmTest { + + @Mock + private DAORealmHelperFactory realmHelperFactory; + + @Mock + private DAORealmHelper realmHelper; + + @Mock + private DAORealmHelper.AuthenticationInfoBuilder builder; + + @InjectMocks + private AnonymousRealm realm; + + @Mock + private AuthenticationInfo authenticationInfo; + + @BeforeEach + void prepareObjectUnderTest() { + when(realmHelperFactory.create(AnonymousRealm.REALM)).thenReturn(realmHelper); + realm = new AnonymousRealm(realmHelperFactory); + } + + @Test + void shouldDoGetAuthentication() { + when(realmHelper.authenticationInfoBuilder(SCMContext.USER_ANONYMOUS)).thenReturn(builder); + when(builder.build()).thenReturn(authenticationInfo); + + AuthenticationInfo result = realm.doGetAuthenticationInfo(new AnonymousToken()); + assertThat(result).isSameAs(authenticationInfo); + } + + @Test + void shouldThrowIllegalArgumentExceptionForWrongTypeOfToken() { + assertThrows(IllegalArgumentException.class, () -> realm.doGetAuthenticationInfo(new UsernamePasswordToken())); + } +}