Spaces:
Build error
Build error
| package com.dalab.discovery.common.util; | |
| import static org.assertj.core.api.Assertions.*; | |
| import static org.springframework.security.oauth2.core.oidc.endpoint.OidcParameterNames.*; | |
| import java.time.Instant; | |
| import java.util.ArrayList; | |
| import java.util.Arrays; | |
| import java.util.Collection; | |
| import java.util.HashMap; | |
| import java.util.List; | |
| import java.util.Map; | |
| import java.util.Optional; | |
| import org.junit.jupiter.api.AfterEach; | |
| import org.junit.jupiter.api.BeforeEach; | |
| import org.junit.jupiter.api.Test; | |
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | |
| import org.springframework.security.core.GrantedAuthority; | |
| import org.springframework.security.core.authority.SimpleGrantedAuthority; | |
| import org.springframework.security.core.context.SecurityContext; | |
| import org.springframework.security.core.context.SecurityContextHolder; | |
| import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; | |
| import org.springframework.security.oauth2.core.oidc.OidcIdToken; | |
| import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser; | |
| import org.springframework.security.oauth2.core.oidc.user.OidcUser; | |
| import com.dalab.discovery.common.service.AuthoritiesConstants; | |
| /** | |
| * Test class for the {@link SecurityUtils} utility class. | |
| */ | |
| class SecurityUtilsUnitTest { | |
| void cleanup() { | |
| SecurityContextHolder.clearContext(); | |
| } | |
| void testGetCurrentUserLogin() { | |
| SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); | |
| securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); | |
| SecurityContextHolder.setContext(securityContext); | |
| Optional<String> login = SecurityUtils.getCurrentUserLogin(); | |
| assertThat(login).contains("admin"); | |
| } | |
| void testGetCurrentUserLoginForOAuth2() { | |
| SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); | |
| Map<String, Object> claims = new HashMap<>(); | |
| claims.put("groups", AuthoritiesConstants.USER); | |
| claims.put("sub", 123); | |
| claims.put("preferred_username", "admin"); | |
| OidcIdToken idToken = new OidcIdToken(ID_TOKEN, Instant.now(), Instant.now().plusSeconds(60), claims); | |
| Collection<GrantedAuthority> authorities = new ArrayList<>(); | |
| authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); | |
| OidcUser user = new DefaultOidcUser(authorities, idToken); | |
| OAuth2AuthenticationToken auth2AuthenticationToken = new OAuth2AuthenticationToken(user, authorities, "oidc"); | |
| securityContext.setAuthentication(auth2AuthenticationToken); | |
| SecurityContextHolder.setContext(securityContext); | |
| Optional<String> login = SecurityUtils.getCurrentUserLogin(); | |
| assertThat(login).contains("admin"); | |
| } | |
| void testExtractAuthorityFromClaims() { | |
| Map<String, Object> claims = new HashMap<>(); | |
| claims.put("groups", Arrays.asList(AuthoritiesConstants.ADMIN, AuthoritiesConstants.USER)); | |
| List<GrantedAuthority> expectedAuthorities = Arrays.asList( | |
| new SimpleGrantedAuthority(AuthoritiesConstants.ADMIN), | |
| new SimpleGrantedAuthority(AuthoritiesConstants.USER)); | |
| List<GrantedAuthority> authorities = SecurityUtils.extractAuthorityFromClaims(claims); | |
| assertThat(authorities).isNotNull().isNotEmpty().hasSize(2).containsAll(expectedAuthorities); | |
| } | |
| void testExtractAuthorityFromClaims_NamespacedRoles() { | |
| Map<String, Object> claims = new HashMap<>(); | |
| claims.put(SecurityUtils.CLAIMS_NAMESPACE + "roles", | |
| Arrays.asList(AuthoritiesConstants.ADMIN, AuthoritiesConstants.USER)); | |
| List<GrantedAuthority> expectedAuthorities = Arrays.asList( | |
| new SimpleGrantedAuthority(AuthoritiesConstants.ADMIN), | |
| new SimpleGrantedAuthority(AuthoritiesConstants.USER)); | |
| List<GrantedAuthority> authorities = SecurityUtils.extractAuthorityFromClaims(claims); | |
| assertThat(authorities).isNotNull().isNotEmpty().hasSize(2).containsAll(expectedAuthorities); | |
| } | |
| void testIsAuthenticated() { | |
| SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); | |
| securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); | |
| SecurityContextHolder.setContext(securityContext); | |
| boolean isAuthenticated = SecurityUtils.isAuthenticated(); | |
| assertThat(isAuthenticated).isTrue(); | |
| } | |
| void testAnonymousIsNotAuthenticated() { | |
| SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); | |
| Collection<GrantedAuthority> authorities = new ArrayList<>(); | |
| authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); | |
| securityContext | |
| .setAuthentication(new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities)); | |
| SecurityContextHolder.setContext(securityContext); | |
| boolean isAuthenticated = SecurityUtils.isAuthenticated(); | |
| assertThat(isAuthenticated).isFalse(); | |
| } | |
| void testHasCurrentUserThisAuthority() { | |
| SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); | |
| Collection<GrantedAuthority> authorities = new ArrayList<>(); | |
| authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); | |
| securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); | |
| SecurityContextHolder.setContext(securityContext); | |
| assertThat(SecurityUtils.hasCurrentUserThisAuthority(AuthoritiesConstants.USER)).isTrue(); | |
| assertThat(SecurityUtils.hasCurrentUserThisAuthority(AuthoritiesConstants.ADMIN)).isFalse(); | |
| } | |
| void testHasCurrentUserAnyOfAuthorities() { | |
| SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); | |
| Collection<GrantedAuthority> authorities = new ArrayList<>(); | |
| authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); | |
| securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); | |
| SecurityContextHolder.setContext(securityContext); | |
| assertThat(SecurityUtils.hasCurrentUserAnyOfAuthorities(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN)) | |
| .isTrue(); | |
| assertThat(SecurityUtils.hasCurrentUserAnyOfAuthorities(AuthoritiesConstants.ANONYMOUS, | |
| AuthoritiesConstants.ADMIN)).isFalse(); | |
| } | |
| void testHasCurrentUserNoneOfAuthorities() { | |
| SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); | |
| Collection<GrantedAuthority> authorities = new ArrayList<>(); | |
| authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); | |
| securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); | |
| SecurityContextHolder.setContext(securityContext); | |
| assertThat(SecurityUtils.hasCurrentUserNoneOfAuthorities(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN)) | |
| .isFalse(); | |
| assertThat(SecurityUtils.hasCurrentUserNoneOfAuthorities(AuthoritiesConstants.ANONYMOUS, | |
| AuthoritiesConstants.ADMIN)).isTrue(); | |
| } | |
| } | |