package de.superx.servlet; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; import java.util.Locale; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; public class SuperXServletHelperTest extends BaseServletTest { private CustomHttpServletResponse customHttpServletResponse= new CustomHttpServletResponse(); private final String HOST_NAME = "host_name"; private final String SESSION_ID_COOKIE_PATH = "/superx"; private final String SSO_COOKIE_PATH = "/"; private final Cookie SESSION_ID_COOKIE = new Cookie("JSESSIONID", "1234567890"); private final Cookie SIGNLE_SIGN_ON_COOKIE = new Cookie("JSESSIONIDSSO", "1234567890"); @Before public void prepareMocks() { when(this.request.getCookies()).thenReturn(new Cookie[] { this.SESSION_ID_COOKIE, this.SIGNLE_SIGN_ON_COOKIE }); when(this.request.getHeader("host")).thenReturn("." + this.HOST_NAME); } @Test public void testRemoveCookie() { when(this.request.getScheme()).thenReturn("https"); SuperXServletHelper.removeCookie(this.request, this.customHttpServletResponse); Collection cookieList = this.customHttpServletResponse.getCookies(); for (Cookie responseCookie : cookieList) { if (responseCookie.getName().equals("JSESSIONID")) { assertEquals("path has been set to", this.SESSION_ID_COOKIE_PATH, responseCookie.getPath()); } if (responseCookie.getName().equals("JSESSIONIDSSO")) { assertEquals("path has been set to", this.SSO_COOKIE_PATH, responseCookie.getPath()); } assertEquals("domain has been set", this.HOST_NAME, responseCookie.getDomain()); assertTrue("security has been set to true", responseCookie.getSecure()); } } @Test public void testRemoveCookieSetSecurityToFalse() { when(this.request.getScheme()).thenReturn("http"); CustomHttpServletResponse customHttpServletResponse = new CustomHttpServletResponse(); SuperXServletHelper.removeCookie(this.request, customHttpServletResponse); Collection cookieList = customHttpServletResponse.getCookies(); for (Cookie responseCookie : cookieList) { if (responseCookie.getName().equals("JSESSIONID")) { assertEquals("path has been set to", this.SESSION_ID_COOKIE_PATH, responseCookie.getPath()); } if (responseCookie.getName().equals("JSESSIONIDSSO")) { assertEquals("path has been set to", this.SSO_COOKIE_PATH, responseCookie.getPath()); } assertEquals("domain has been set", this.HOST_NAME, responseCookie.getDomain()); assertFalse("security has been set to false", responseCookie.getSecure()); } } @Test public void testRemoveCookieWithOtherCookies() { Cookie cookie = new Cookie("cookie", "cookie"); when(this.request.getCookies()).thenReturn(new Cookie[] { cookie }); CustomHttpServletResponse customHttpServletResponse = new CustomHttpServletResponse(); SuperXServletHelper.removeCookie(this.request, customHttpServletResponse); assertNull("path has not been set", cookie.getPath()); assertNull("domain has not been set", cookie.getDomain()); assertFalse("security has been set to false", cookie.getSecure()); } } /** * Wrapper class to make cookies available for testing * * @author hiber * */ @Ignore // to avoid error message 'No runnable methods' class CustomHttpServletResponse implements HttpServletResponse { private Collection cookies = new ArrayList(); public CustomHttpServletResponse() { // empty constructor } @Override public void flushBuffer() throws IOException { // TODO Auto-generated method stub } @Override public int getBufferSize() { // TODO Auto-generated method stub return 0; } @Override public String getCharacterEncoding() { // TODO Auto-generated method stub return null; } @Override public String getContentType() { // TODO Auto-generated method stub return null; } @Override public Locale getLocale() { // TODO Auto-generated method stub return null; } @Override public ServletOutputStream getOutputStream() throws IOException { // TODO Auto-generated method stub return null; } @Override public PrintWriter getWriter() throws IOException { // TODO Auto-generated method stub return null; } @Override public boolean isCommitted() { // TODO Auto-generated method stub return false; } @Override public void reset() { // TODO Auto-generated method stub } @Override public void resetBuffer() { // TODO Auto-generated method stub } @Override public void setBufferSize(int arg0) { // TODO Auto-generated method stub } @Override public void setCharacterEncoding(String arg0) { // TODO Auto-generated method stub } @Override public void setContentLength(int arg0) { // TODO Auto-generated method stub } @Override public void setContentType(String arg0) { // TODO Auto-generated method stub } @Override public void setLocale(Locale arg0) { // TODO Auto-generated method stub } @Override public void addCookie(Cookie cookie) { this.cookies.add(cookie); } public Collection getCookies() { return this.cookies; } @Override public void addDateHeader(String arg0, long arg1) { // TODO Auto-generated method stub } @Override public void addHeader(String arg0, String arg1) { // TODO Auto-generated method stub } @Override public void addIntHeader(String arg0, int arg1) { // TODO Auto-generated method stub } @Override public boolean containsHeader(String arg0) { // TODO Auto-generated method stub return false; } @Override public String encodeRedirectURL(String arg0) { // TODO Auto-generated method stub return null; } @Override public String encodeURL(String arg0) { // TODO Auto-generated method stub return null; } @Override public String getHeader(String arg0) { // TODO Auto-generated method stub return null; } @Override public Collection getHeaderNames() { // TODO Auto-generated method stub return null; } @Override public Collection getHeaders(String arg0) { // TODO Auto-generated method stub return null; } @Override public int getStatus() { // TODO Auto-generated method stub return 0; } @Override public void sendError(int arg0) throws IOException { // TODO Auto-generated method stub } @Override public void sendError(int arg0, String arg1) throws IOException { // TODO Auto-generated method stub } @Override public void sendRedirect(String arg0) throws IOException { // TODO Auto-generated method stub } @Override public void setDateHeader(String arg0, long arg1) { // TODO Auto-generated method stub } @Override public void setHeader(String arg0, String arg1) { // TODO Auto-generated method stub } @Override public void setIntHeader(String arg0, int arg1) { // TODO Auto-generated method stub } @Override public void setStatus(int arg0) { // TODO Auto-generated method stub } @Override public void setContentLengthLong(long arg0) { // TODO Auto-generated method stub } }