Commit 18da13d6 authored by Alinga Yeung's avatar Alinga Yeung
Browse files

Story 1869. Further simplified the ModifyPasswordServlet unit tests.

parent 5d36c54d
Loading
Loading
Loading
Loading
+24 −55
Original line number Original line Diff line number Diff line
@@ -70,6 +70,7 @@ package ca.nrc.cadc.ac.server.web;


import ca.nrc.cadc.ac.server.UserPersistence;
import ca.nrc.cadc.ac.server.UserPersistence;
import ca.nrc.cadc.auth.HttpPrincipal;
import ca.nrc.cadc.auth.HttpPrincipal;
import ca.nrc.cadc.util.StringUtil;


import org.junit.Test;
import org.junit.Test;


@@ -80,13 +81,16 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponse;


import java.security.PrivilegedExceptionAction;
import java.security.PrivilegedExceptionAction;
import java.util.Set;


import static org.easymock.EasyMock.*;
import static org.easymock.EasyMock.*;




public class ModifyPasswordServletTest
public class ModifyPasswordServletTest
{
{
    public void testUnauthorizedSubject(final Subject subject) throws Exception
    
    public void testSubjectAndPasswords(final Subject subject, final String oldPassword, 
            final String newPassword, int responseStatus) throws Exception
    {
    {
        @SuppressWarnings("serial")
        @SuppressWarnings("serial")
        final ModifyPasswordServlet testSubject = new ModifyPasswordServlet()
        final ModifyPasswordServlet testSubject = new ModifyPasswordServlet()
@@ -107,7 +111,13 @@ public class ModifyPasswordServletTest
        expect(mockRequest.getMethod()).andReturn("POST").once();
        expect(mockRequest.getMethod()).andReturn("POST").once();
        expect(mockRequest.getRemoteAddr()).andReturn("mysite.com").once();
        expect(mockRequest.getRemoteAddr()).andReturn("mysite.com").once();
        
        
        mockResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        if (!StringUtil.hasText(oldPassword) || !StringUtil.hasText(newPassword))
        {
            expect(mockRequest.getParameter("old_password")).andReturn(oldPassword).once();
            expect(mockRequest.getParameter("new_password")).andReturn(newPassword).once();
        }
        
        mockResponse.setStatus(responseStatus);
        expectLastCall().once();
        expectLastCall().once();
    
    
        replay(mockRequest, mockResponse);
        replay(mockRequest, mockResponse);
@@ -129,71 +139,30 @@ public class ModifyPasswordServletTest
    public void testModifyPasswordWithNullSubject() throws Exception
    public void testModifyPasswordWithNullSubject() throws Exception
    {
    {
        final Subject subject = null;
        final Subject subject = null;
        testUnauthorizedSubject(subject);
        testSubjectAndPasswords(subject, "oldPass", "newPass", HttpServletResponse.SC_UNAUTHORIZED);
    }
    }
        
        
    @Test
    @Test
    public void testModifyPasswordWithEmptySubject() throws Exception
    public void testModifyPasswordWithEmptySubject() throws Exception
    {
    {
        final Subject subject = new Subject();;
        final Subject subject = new Subject();;
        testUnauthorizedSubject(subject);
        testSubjectAndPasswords(subject, "oldPass", "newPass", HttpServletResponse.SC_UNAUTHORIZED);
    }
    
    public void testModifyPasswordWithMissingPassword(final String oldPassword, 
            final String newPassword, int responseStatus) throws Exception
    {
        final Subject subject = new Subject();
        subject.getPrincipals().add(new HttpPrincipal("CADCtest"));
    
        @SuppressWarnings("serial")
        final ModifyPasswordServlet testSubject = new ModifyPasswordServlet()
        {
            @Override
            Subject getSubject(final HttpServletRequest request)
            {
                return subject;
            }
        };
        
        final HttpServletRequest mockRequest =
                createMock(HttpServletRequest.class);
        final HttpServletResponse mockResponse =
                createMock(HttpServletResponse.class);
        
        expect(mockRequest.getPathInfo()).andReturn("users/CADCtest").once();
        expect(mockRequest.getMethod()).andReturn("POST").once();
        expect(mockRequest.getRemoteAddr()).andReturn("mysite.com").once();
        expect(mockRequest.getParameter("old_password")).andReturn(oldPassword).once();
        expect(mockRequest.getParameter("new_password")).andReturn(newPassword).once();
    
        mockResponse.setStatus(responseStatus);
        expectLastCall().once();
    
        replay(mockRequest, mockResponse);
    
        Subject.doAs(subject, new PrivilegedExceptionAction<Void>()
        {
            @Override
            public Void run() throws Exception
            {
                testSubject.doPost(mockRequest, mockResponse);
                return null;
            }
        });
    
        verify(mockRequest, mockResponse);
    }
    }
       
       
    @Test
    @Test
    public void testModifyPasswordWithMissingOldPassword() throws Exception
    public void testModifyPasswordWithMissingOldPassword() throws Exception
    {
    {
        testModifyPasswordWithMissingPassword("", "newPass", HttpServletResponse.SC_BAD_REQUEST);
        final Subject subject = new Subject();;
        subject.getPrincipals().add(new HttpPrincipal("CADCtest"));
        testSubjectAndPasswords(subject, "", "newPass", HttpServletResponse.SC_BAD_REQUEST);
    }
    }
    
    
    @Test
    @Test
    public void testModifyPasswordWithMissingNewPassword() throws Exception
    public void testModifyPasswordWithMissingNewPassword() throws Exception
    {
    {
        testModifyPasswordWithMissingPassword("oldPass", "", HttpServletResponse.SC_BAD_REQUEST);
        final Subject subject = new Subject();;
        subject.getPrincipals().add(new HttpPrincipal("CADCtest"));
        testSubjectAndPasswords(subject, "oldPass", "", HttpServletResponse.SC_BAD_REQUEST);
    }
    }
    
    
    public void testModifyPassword(final boolean hasInternalServerError) throws Exception
    public void testModifyPassword(final boolean hasInternalServerError) throws Exception