Java tutorial
/* * LICENCE : CloudUnit is available under the Affero Gnu Public License GPL V3 : https://www.gnu.org/licenses/agpl-3.0.html * but CloudUnit is licensed too under a standard commercial license. * Please contact our sales team if you would like to discuss the specifics of our Enterprise license. * If you are not sure whether the GPL is right for you, * you can always test our software under the GPL and inspect the source code before you contact us * about purchasing a commercial license. * * LEGAL TERMS : "CloudUnit" is a registered trademark of Treeptik and can't be used to endorse * or promote products derived from this project without prior written permission from Treeptik. * Products or services derived from this software may not be called "CloudUnit" * nor may "Treeptik" or similar confusing terms appear in their names without prior written permission. * For any questions, contact us : contact@treeptik.fr */ package cn.org.once.cstack.users; import cn.org.once.cstack.initializer.CloudUnitApplicationContext; import cn.org.once.cstack.model.User; import cn.org.once.cstack.exception.ServiceException; import cn.org.once.cstack.service.UserService; import org.apache.http.HttpStatus; import org.junit.*; import org.junit.runner.RunWith; import org.junit.runners.MethodSorters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.mock.web.MockHttpSession; import org.springframework.mock.web.MockServletContext; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.context.HttpSessionSecurityContextRepository; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import javax.inject.Inject; import javax.servlet.Filter; import javax.servlet.http.HttpSession; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(classes = { CloudUnitApplicationContext.class, MockServletContext.class }) @FixMethodOrder(MethodSorters.NAME_ASCENDING) @ActiveProfiles("integration") public class UserControllerTestIT { private static String SEC_CONTEXT_ATTR = HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY; private final Logger logger = LoggerFactory.getLogger(UserControllerTestIT.class); @Autowired private WebApplicationContext context; private MockMvc mockMvc; @Inject private AuthenticationManager authenticationManager; @Autowired private Filter springSecurityFilterChain; @Inject private UserService userService; private MockHttpSession session; @Before public void setup() { logger.info("setup"); this.mockMvc = MockMvcBuilders.webAppContextSetup(context).addFilters(springSecurityFilterChain).build(); User user = null; try { user = userService.findByLogin("johndoe"); } catch (ServiceException e) { logger.error(e.getLocalizedMessage()); } Authentication authentication = null; if (user != null) { authentication = new UsernamePasswordAuthenticationToken(user.getLogin(), user.getPassword()); } Authentication result = authenticationManager.authenticate(authentication); SecurityContext securityContext = SecurityContextHolder.getContext(); securityContext.setAuthentication(result); session = new MockHttpSession(); session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, securityContext); } @After public void teardown() { logger.info("teardown"); SecurityContextHolder.clearContext(); session.invalidate(); } @Test public void test00_userAuthenticatesSuccess() throws Exception { logger.info("test00_userAuthenticates"); final String username = "johndoe"; mockMvc.perform(post("/user/authentication").param("j_username", username).param("j_password", "abc2015")) .andExpect(mvcResult -> { HttpSession session1 = mvcResult.getRequest().getSession(); SecurityContext securityContext = (SecurityContext) session1.getAttribute(SEC_CONTEXT_ATTR); Assert.assertEquals(securityContext.getAuthentication().getName(), username); }); } @Test public void test01_userAuthenticatesFail() throws Exception { logger.info("test00_userAuthenticates"); final String username = "johndoe"; mockMvc.perform(post("/user/authentication").param("j_username", username).param("j_password", "XXXXXX")) .andExpect(status().is(HttpStatus.SC_BAD_REQUEST)); } @Test public void test10_userCreation() throws Exception { User user = null; try { user = userService.findByLogin("johndoe"); } catch (ServiceException e) { logger.error(e.getLocalizedMessage()); } Authentication authentication = null; if (user != null) { authentication = new UsernamePasswordAuthenticationToken(user.getLogin(), user.getPassword()); } Authentication result = authenticationManager.authenticate(authentication); SecurityContext securityContext = SecurityContextHolder.getContext(); securityContext.setAuthentication(result); session = new MockHttpSession(); session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, securityContext); final String login = "user10"; final String password = "123456"; final String email = "user10@gmail.com"; final String firstName = "user"; final String lastName = "user"; final String organization = "treeptik"; String jsonString = "{\"login\":\"" + login + "\", \"password\":\"" + password + "\", \"email\":\"" + email + "\", \"firstName\":\"" + firstName + "\", \"lastName\":\"" + lastName + "\", \"organization\":\"" + organization + "\" }"; mockMvc.perform( post("/user/signin").session(session).contentType(MediaType.APPLICATION_JSON).content(jsonString)) .andDo(print()).andExpect(status().is2xxSuccessful()); } }