package org.jenkinsci.plugins.rolestrategy;
import hudson.model.User;
import hudson.security.AbstractPasswordBasedSecurityRealm;
import hudson.security.GroupDetails;
import hudson.security.Permission;
import junit.framework.Assert;
import org.acegisecurity.Authentication;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.context.SecurityContext;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.recipes.LocalData;
import org.springframework.dao.DataAccessException;
public class UserAuthoritiesAsRolesTest {
@Rule public JenkinsRule j = new JenkinsRule();
@Before
public void enableUserAuthorities() {
Settings.TREAT_USER_AUTHORITIES_AS_ROLES = true;
}
@After
public void disableUserAuthorities() {
Settings.TREAT_USER_AUTHORITIES_AS_ROLES = false;
}
@LocalData
@Test public void testRoleAuthority() throws Exception {
j.jenkins.setSecurityRealm(new AbstractPasswordBasedSecurityRealm() {
@Override
protected UserDetails authenticate(String username, String password) throws AuthenticationException {
throw new UnsupportedOperationException();
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
return new org.acegisecurity.userdetails.User(username, "", true, true, true, true, new GrantedAuthority[] {new GrantedAuthorityImpl("USERS")});
}
@Override
public GroupDetails loadGroupByGroupname(String groupname) throws UsernameNotFoundException, DataAccessException {
throw new UnsupportedOperationException();
}
});
SecurityContext seccon = SecurityContextHolder.getContext();
Authentication orig = seccon.getAuthentication();
seccon.setAuthentication(User.get("alice").impersonate());
try {
Assert.assertTrue(j.jenkins.hasPermission(Permission.READ));
} finally {
seccon.setAuthentication(orig);
}
}
}