package
com.geeksforgeeks;
import
java.util.ArrayList;
import
java.util.List;
import
org.junit.BeforeClass;
import
org.junit.Test;
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
import
org.springframework.security.access.AccessDeniedException;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import
org.springframework.security.core.Authentication;
import
org.springframework.security.core.GrantedAuthority;
import
org.springframework.security.core.authority.GrantedAuthorityImpl;
import
org.springframework.security.core.context.SecurityContextHolder;
import
org.springframework.security.core.userdetails.UserDetails;
import
org.springframework.security.core.userdetails.memory.InMemoryDaoImpl;
public
class
TestDemoService {
static
ApplicationContext applicationContext =
null
;
static
InMemoryDaoImpl userDetailsService =
null
;
@BeforeClass
public
static
void
setup()
{
applicationContext
=
new
ClassPathXmlApplicationContext(
"application-security.xml"
);
userDetailsService = applicationContext.getBean(
InMemoryDaoImpl.
class
);
}
@Test
public
void
testValidRole()
{
UserDetails userDetails
= userDetailsService.loadUserByUsername(
"geeksforgeeks"
);
Authentication authToken
=
new
UsernamePasswordAuthenticationToken(
userDetails.getUsername(),
userDetails.getPassword(),
userDetails.getAuthorities());
SecurityContextHolder.getContext()
.setAuthentication(authToken);
DemoService service
= (DemoService)applicationContext.getBean(
"demoService"
);
service.method();
}
@Test
(expected = AccessDeniedException.
class
)
public
void
testInvalidRole()
{
UserDetails userDetails
= userDetailsService.loadUserByUsername(
"geeksforgeeks"
);
List<GrantedAuthority> authorities
=
new
ArrayList<GrantedAuthority>();
authorities.add(
new
GrantedAuthorityImpl(
"ROLE_INVALID"
));
Authentication authToken
=
new
UsernamePasswordAuthenticationToken(
userDetails.getUsername(),
userDetails.getPassword(), authorities);
SecurityContextHolder.getContext()
.setAuthentication(authToken);
DemoService service
= (DemoService)applicationContext.getBean(
"demoService"
);
service.method();
}
@Test
(expected = AccessDeniedException.
class
)
public
void
testInvalidUser()
{
UserDetails userDetails
= userDetailsService.loadUserByUsername(
"geeksforgeeks2"
);
List<GrantedAuthority> authorities
=
new
ArrayList<GrantedAuthority>();
authorities.add(
new
GrantedAuthorityImpl(
"ROLE_INVALID"
));
Authentication authToken
=
new
UsernamePasswordAuthenticationToken(
userDetails.getUsername(),
userDetails.getPassword(), authorities);
SecurityContextHolder.getContext()
.setAuthentication(authToken);
DemoService service
= (DemoService)applicationContext.getBean(
"demoService"
);
service.method();
}
}