/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.framework.util; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.TimeZone; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import junit.framework.TestCase; import com.enonic.esl.util.DigestUtil; public class HttpServletUtilTest extends TestCase { public void testSetDateHeader() { GregorianCalendar cal = new GregorianCalendar( TimeZone.getTimeZone( "GMT" ) ); cal.set( 1994, Calendar.DECEMBER, 1, 16, 0, 0 ); MockHttpServletResponse mockResponse = new MockHttpServletResponse(); HttpServletUtil.setDateHeader( mockResponse, cal.getTime() ); assertEquals( "Thu, 01 Dec 1994 16:00:00 GMT", mockResponse.getHeader( "Date" ) ); } public void testSetExpiresHeader() { GregorianCalendar cal = new GregorianCalendar( TimeZone.getTimeZone( "GMT" ) ); cal.set( 1994, Calendar.DECEMBER, 1, 16, 0, 0 ); MockHttpServletResponse mockResponse = new MockHttpServletResponse(); HttpServletUtil.setExpiresHeader( mockResponse, cal.getTime() ); assertEquals( "Thu, 01 Dec 1994 16:00:00 GMT", mockResponse.getHeader( "Expires" ) ); } public void testSetExpiresHeaderConvertsLocalTimeToGMT() { GregorianCalendar cal = new GregorianCalendar( TimeZone.getTimeZone( "Europe/Oslo" ) ); cal.set( 1994, Calendar.DECEMBER, 1, 16, 0, 0 ); MockHttpServletResponse mockResponse = new MockHttpServletResponse(); HttpServletUtil.setExpiresHeader( mockResponse, cal.getTime() ); assertEquals( "Thu, 01 Dec 1994 15:00:00 GMT", mockResponse.getHeader( "Expires" ) ); } public void testIsContentModifiedAccordingToIfNoneMatchHeader() { String etagFor123 = DigestUtil.generateSHA( "123" ); String etagFor321 = DigestUtil.generateSHA( "321" ); MockHttpServletRequest mockRequest = new MockHttpServletRequest(); mockRequest.addHeader( "If-None-Match", etagFor123 ); assertFalse( HttpServletUtil.isContentModifiedAccordingToIfNoneMatchHeader( mockRequest, etagFor123 ) ); assertTrue( HttpServletUtil.isContentModifiedAccordingToIfNoneMatchHeader( mockRequest, etagFor321 ) ); } public void testSchemeUsingForwardedHeader() { MockHttpServletRequest mockRequest = new MockHttpServletRequest( ); mockRequest.addHeader( "Forwarded", "for=192.0.2.60;proto=https;by=203.0.113.43" ); mockRequest.addHeader( "X-Forwarded-Proto", "smtp" ); mockRequest.setScheme( "http" ); assertEquals( "https", HttpServletUtil.getScheme( mockRequest )); } public void testSchemeUsingXForwardedProtoHeader() { MockHttpServletRequest mockRequest = new MockHttpServletRequest( ); mockRequest.addHeader( "X-Forwarded-Proto", "https" ); mockRequest.setScheme( "http" ); assertEquals( "https", HttpServletUtil.getScheme( mockRequest )); } /* * If Forwarded is used, X-Forwarded-Proto should be ignored, even if proto is not set for Forwarded. */ public void testSchemeWithoutAnyForwardedHeader() { MockHttpServletRequest mockRequest = new MockHttpServletRequest( ); mockRequest.addHeader( "Forwarded", "for=192.0.2.43, for=198.51.100.17" ); mockRequest.addHeader( "X-Forwarded-Proto", "smtp" ); mockRequest.setScheme( "http" ); assertEquals( "http", HttpServletUtil.getScheme( mockRequest )); } }