Unit Testing Coursesites
ContextPublicHomePageRedirectorpublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//on request to the site / or index.html redirect to the servlet//we only want to hit on /HttpServletRequesthttpRequest = (HttpServletRequest)request;HttpServletResponsehttpResponse = (HttpServletResponse)response;String serverName = httpRequest.getHeader("Host");intfirstperiodIndex = serverName.indexOf('.');intlastperiodIndex = serverName.lastIndexOf('.');/*  * so for wayank12teacher2.coursesites-stage.com  * hostHeader will be wayank12teacher2 setting the stage to check whether  * to forward to homepage.jsp or redirects to pages/index.html as in the past */String hostHeader = serverName.substring(0, firstperiodIndex).toLowerCase();
“No class is an island …”PublicHomePageRedirectorcollaborates with (depends on)ServletRequestServletResponseFilterChain
Context..(2)/* taking care of missing www in the request  * aka coursesites-stage.com, coursesites.com  * making sure that redirects from OpenID login through Facebook or Twitter  * happen flawlessly * */if (!serverName.startsWith("www") && (firstperiodIndex == lastperiodIndex)) {String responseUrlPath = "https://" + "www." + serverName + "/webapps/Bb-sites-course-creation-BBLEARN/pages/index.html";httpResponse.sendRedirect(responseUrlPath);return;}
Context…(3)else if (serverName.equalsIgnoreCase("coursesites.blackboard.com")){serverName = "coursesites.com";String responseUrlPath = "https://" + "www." + serverName + "/webapps/Bb-sites-course-creation-BBLEARN/pages/index.html";httpResponse.sendRedirect(responseUrlPath);return;}
Scenario(s)Request with missing www (1)Request from coursesites.blackboard.com (2)
Unit TestJunit (command line through Ant)Mock (for collaborators  ServletRequest, ServletResponse, Chain)
TestCase(s)public class CourseSitesFilterTest {	@Test	public void testMissingWWW() throws Exception{ … }	@Test	public void testBlackBoardDomain() throws Exception{…}
Scenario 1public void testMissingWWW() throws Exception{			MockHttpServletRequest request = new MockHttpServletRequest();        		MockHttpServletResponse response = new MockHttpServletResponse();				//request.setMethod("GET");request.addHeader("Host","coursesites.com");				//MockHttpServletRequest request = new 				FilterChain chain = Mockito.mock(FilterChain.class);				CourseSitesFilter filter = new CourseSitesFilter();		filter.doFilter(request, response, chain);				//System.out.println(request.getAttribute("hello"));		//System.out.println(request.getRequestURI());				//System.out.println(response.getForwardedUrl());		System.out.println("Output: " + response.getRedirectedUrl());	assertTrue("Redirects to index.html", response.getRedirectedUrl().contains("index.html"));			}
Scenario 2	public void testBlackBoardDomain() throws Exception{			MockHttpServletRequest request = new MockHttpServletRequest();        		MockHttpServletResponse response = new MockHttpServletResponse();			//request.setMethod("GET");		request.addHeader("Host","coursesites.blackboard.com");				//MockHttpServletRequest request = new MockHttpServletRequest("GET", "/invoiceView.app");				FilterChain chain = Mockito.mock(FilterChain.class);				CourseSitesFilter filter = new CourseSitesFilter();		filter.doFilter(request, response, chain);					//System.out.println(request.getRequestURI());			//System.out.println(response.getForwardedUrl());		System.out.println("Output: " + response.getRedirectedUrl());				assertTrue("Redirects to index.html", response.getRedirectedUrl().contains("index.html"));	}
Junit/Ant <target name="junit" depends="compile">        <mkdir dir="${report.dir}"/>        <junitprintsummary="yes" haltonfailure="yes" showoutput="yes">            <classpath>                <path refid="classpath"/>                <path location="${build.dest}"/>				<path location="${build.test.dest}"/>            </classpath>            <formatter type="xml"/>            <batchtest fork="yes">                <fileset dir="${test.dir}" includes="**/*Test.java"/>            </batchtest>        </junit>    </target>
Results

Unit testing CourseSites Apache Filter

  • 1.
  • 2.
    ContextPublicHomePageRedirectorpublic void doFilter(ServletRequestrequest, ServletResponse response, FilterChain chain) throws IOException, ServletException {//on request to the site / or index.html redirect to the servlet//we only want to hit on /HttpServletRequesthttpRequest = (HttpServletRequest)request;HttpServletResponsehttpResponse = (HttpServletResponse)response;String serverName = httpRequest.getHeader("Host");intfirstperiodIndex = serverName.indexOf('.');intlastperiodIndex = serverName.lastIndexOf('.');/* * so for wayank12teacher2.coursesites-stage.com * hostHeader will be wayank12teacher2 setting the stage to check whether * to forward to homepage.jsp or redirects to pages/index.html as in the past */String hostHeader = serverName.substring(0, firstperiodIndex).toLowerCase();
  • 3.
    “No class isan island …”PublicHomePageRedirectorcollaborates with (depends on)ServletRequestServletResponseFilterChain
  • 4.
    Context..(2)/* taking careof missing www in the request * aka coursesites-stage.com, coursesites.com * making sure that redirects from OpenID login through Facebook or Twitter * happen flawlessly * */if (!serverName.startsWith("www") && (firstperiodIndex == lastperiodIndex)) {String responseUrlPath = "https://" + "www." + serverName + "/webapps/Bb-sites-course-creation-BBLEARN/pages/index.html";httpResponse.sendRedirect(responseUrlPath);return;}
  • 5.
    Context…(3)else if (serverName.equalsIgnoreCase("coursesites.blackboard.com")){serverName= "coursesites.com";String responseUrlPath = "https://" + "www." + serverName + "/webapps/Bb-sites-course-creation-BBLEARN/pages/index.html";httpResponse.sendRedirect(responseUrlPath);return;}
  • 6.
    Scenario(s)Request with missingwww (1)Request from coursesites.blackboard.com (2)
  • 7.
    Unit TestJunit (commandline through Ant)Mock (for collaborators  ServletRequest, ServletResponse, Chain)
  • 8.
    TestCase(s)public class CourseSitesFilterTest{ @Test public void testMissingWWW() throws Exception{ … } @Test public void testBlackBoardDomain() throws Exception{…}
  • 9.
    Scenario 1public voidtestMissingWWW() throws Exception{ MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); //request.setMethod("GET");request.addHeader("Host","coursesites.com"); //MockHttpServletRequest request = new FilterChain chain = Mockito.mock(FilterChain.class); CourseSitesFilter filter = new CourseSitesFilter(); filter.doFilter(request, response, chain); //System.out.println(request.getAttribute("hello")); //System.out.println(request.getRequestURI()); //System.out.println(response.getForwardedUrl()); System.out.println("Output: " + response.getRedirectedUrl()); assertTrue("Redirects to index.html", response.getRedirectedUrl().contains("index.html")); }
  • 10.
    Scenario 2 public voidtestBlackBoardDomain() throws Exception{ MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); //request.setMethod("GET"); request.addHeader("Host","coursesites.blackboard.com"); //MockHttpServletRequest request = new MockHttpServletRequest("GET", "/invoiceView.app"); FilterChain chain = Mockito.mock(FilterChain.class); CourseSitesFilter filter = new CourseSitesFilter(); filter.doFilter(request, response, chain); //System.out.println(request.getRequestURI()); //System.out.println(response.getForwardedUrl()); System.out.println("Output: " + response.getRedirectedUrl()); assertTrue("Redirects to index.html", response.getRedirectedUrl().contains("index.html")); }
  • 11.
    Junit/Ant <target name="junit"depends="compile"> <mkdir dir="${report.dir}"/> <junitprintsummary="yes" haltonfailure="yes" showoutput="yes"> <classpath> <path refid="classpath"/> <path location="${build.dest}"/> <path location="${build.test.dest}"/> </classpath> <formatter type="xml"/> <batchtest fork="yes"> <fileset dir="${test.dir}" includes="**/*Test.java"/> </batchtest> </junit> </target>
  • 12.