@Override @Nullable public HttpSession getSession() { return getSession(true); }
protected final Map<String, Object> getSessionAttributes(MockHttpServletRequest request) { HttpSession session = request.getSession(false); if (session != null) { Enumeration<String> attrNames = session.getAttributeNames(); if (attrNames != null) { return Collections.list(attrNames).stream(). collect(Collectors.toMap(n -> n, session::getAttribute)); } } return Collections.emptyMap(); }
/** * Assert a session attribute value with the given Hamcrest {@link Matcher}. */ @SuppressWarnings("unchecked") public <T> ResultMatcher sessionAttribute(final String name, final Matcher<T> matcher) { return result -> { HttpSession session = result.getRequest().getSession(); Assert.state(session != null, "No HttpSession"); T value = (T) session.getAttribute(name); assertThat("Session attribute '" + name + "'", value, matcher); }; }
/** * Assert a session attribute value. */ public <T> ResultMatcher sessionAttribute(final String name, final Object value) { return result -> { HttpSession session = result.getRequest().getSession(); Assert.state(session != null, "No HttpSession"); assertEquals("Session attribute '" + name + "'", value, session.getAttribute(name)); }; }
@Override public void afterConfigurerAdded(ConfigurableMockMvcBuilder<?> builder) { builder.alwaysDo(result -> this.session = result.getRequest().getSession(false)); }
@Override public HttpSession getSession(boolean create) { HttpSession session = super.getSession(false); if (session == null && create) { HtmlUnitMockHttpSession newSession = new HtmlUnitMockHttpSession(this); setSession(newSession); newSession.setNew(true); String sessionid = newSession.getId(); synchronized (HtmlUnitRequestBuilder.this.sessions) { HtmlUnitRequestBuilder.this.sessions.put(sessionid, newSession); } addSessionCookie(this, sessionid); session = newSession; } return session; } }
@Test public void sessionAttributes() { Map<String, Object> map = new HashMap<>(); map.put("foo", "bar"); this.builder.sessionAttrs(map); MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); assertEquals("bar", request.getSession().getAttribute("foo")); }
@Test public void buildRequestSessionTrue() throws Exception { MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext); HttpSession session = actualRequest.getSession(true); assertThat(session, notNullValue()); }
@Test public void buildRequestSessionFalseIsNull() throws Exception { MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext); HttpSession session = actualRequest.getSession(false); assertThat(session, nullValue()); }
@Test public void session() { MockHttpSession session = new MockHttpSession(this.servletContext); session.setAttribute("foo", "bar"); this.builder.session(session); this.builder.sessionAttr("baz", "qux"); MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); assertEquals(session, request.getSession()); assertEquals("bar", request.getSession().getAttribute("foo")); assertEquals("qux", request.getSession().getAttribute("baz")); }
@Test public void buildRequestSessionWithExistingSession() throws Exception { String sessionId = "session-id"; webRequest.setAdditionalHeader("Cookie", "JSESSIONID=" + sessionId); MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext); HttpSession session = actualRequest.getSession(); assertThat(session.getId(), equalTo(sessionId)); assertSingleSessionCookie("JSESSIONID=" + session.getId() + "; Path=/test; Domain=example.com"); requestBuilder = new HtmlUnitRequestBuilder(sessions, webClient, webRequest); actualRequest = requestBuilder.buildRequest(servletContext); assertThat(actualRequest.getSession(), equalTo(session)); webRequest.setAdditionalHeader("Cookie", "JSESSIONID=" + sessionId + "NEW"); actualRequest = requestBuilder.buildRequest(servletContext); assertThat(actualRequest.getSession(), not(equalTo(session))); assertSingleSessionCookie("JSESSIONID=" + actualRequest.getSession().getId() + "; Path=/test; Domain=example.com"); }
@Test public void buildRequestSessionInvalidate() throws Exception { String sessionId = "session-id"; webRequest.setAdditionalHeader("Cookie", "JSESSIONID=" + sessionId); MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext); HttpSession sessionToRemove = actualRequest.getSession(); sessionToRemove.invalidate(); assertThat(sessions.containsKey(sessionToRemove.getId()), equalTo(false)); assertSingleSessionCookie("JSESSIONID=" + sessionToRemove.getId() + "; Expires=Thu, 01-Jan-1970 00:00:01 GMT; Path=/test; Domain=example.com"); webRequest.removeAdditionalHeader("Cookie"); requestBuilder = new HtmlUnitRequestBuilder(sessions, webClient, webRequest); actualRequest = requestBuilder.buildRequest(servletContext); assertThat(actualRequest.getSession().isNew(), equalTo(true)); assertThat(sessions.containsKey(sessionToRemove.getId()), equalTo(false)); }
@Test public void buildRequestSession() throws Exception { MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext); HttpSession newSession = actualRequest.getSession(); assertThat(newSession, notNullValue()); assertSingleSessionCookie( "JSESSIONID=" + newSession.getId() + "; Path=/test; Domain=example.com"); webRequest.setAdditionalHeader("Cookie", "JSESSIONID=" + newSession.getId()); requestBuilder = new HtmlUnitRequestBuilder(sessions, webClient, webRequest); actualRequest = requestBuilder.buildRequest(servletContext); assertThat(actualRequest.getSession(), sameInstance(newSession)); }
@Test public void buildRequestSessionFalseWithExistingSession() throws Exception { String sessionId = "session-id"; webRequest.setAdditionalHeader("Cookie", "JSESSIONID=" + sessionId); MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext); HttpSession session = actualRequest.getSession(false); assertThat(session, notNullValue()); }
@Test public void buildRequestSessionIsNew() throws Exception { MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext); assertThat(actualRequest.getSession().isNew(), equalTo(true)); }
@Test public void sessionAttribute() { this.builder.sessionAttr("foo", "bar"); MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); assertEquals("bar", request.getSession().getAttribute("foo")); }
@Test public void buildRequestSessionIsNewFalse() throws Exception { String sessionId = "session-id"; webRequest.setAdditionalHeader("Cookie", "JSESSIONID=" + sessionId); MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext); assertThat(actualRequest.getSession().isNew(), equalTo(false)); }
@Test public void mergeSession() throws Exception { String attrName = "PARENT"; String attrValue = "VALUE"; MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()) .defaultRequest(get("/").sessionAttr(attrName, attrValue)) .build(); assertThat(mockMvc.perform(requestBuilder).andReturn().getRequest().getSession().getAttribute(attrName), equalTo(attrValue)); }
@Test public void mergeSessionNotInitialized() throws Exception { MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()) .defaultRequest(get("/")) .build(); assertThat(mockMvc.perform(requestBuilder).andReturn().getRequest().getSession(false), nullValue()); }
@Test public void noHttpSession() throws Exception { MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new TestController()) .apply(sharedHttpSession()) .build(); String url = "/no-session"; MvcResult result = mockMvc.perform(get(url)).andExpect(status().isOk()).andReturn(); HttpSession session = result.getRequest().getSession(false); assertNull(session); result = mockMvc.perform(get(url)).andExpect(status().isOk()).andReturn(); session = result.getRequest().getSession(false); assertNull(session); url = "/session"; result = mockMvc.perform(get(url)).andExpect(status().isOk()).andReturn(); session = result.getRequest().getSession(false); assertNotNull(session); assertEquals(1, session.getAttribute("counter")); }