Newer
Older
package ca.nrc.cadc.ac.server.web;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import java.util.List;
import javax.security.auth.Subject;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.easymock.EasyMock;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import ca.nrc.cadc.ac.server.PluginFactory;
import ca.nrc.cadc.db.StandaloneContextFactory;
import ca.nrc.cadc.util.Log4jInit;
import ca.nrc.cadc.util.PropertiesReader;
private static final Logger log = Logger.getLogger(UserServletTest.class);
public UserServletTest()
{
Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO);
}
@BeforeClass
public static void setupClass()
{
System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/resources");
}
@AfterClass
public static void teardownClass()
{
System.clearProperty(PropertiesReader.class.getName() + ".dir");
}
@Test
public void getAcceptedContentTypeJSON() throws Exception
{
final HttpServletRequest mockRequest =
createMock(HttpServletRequest.class);
expect(mockRequest.getHeader("Accept")).
andReturn("application/json").once();
replay(mockRequest);
assertEquals("Wrong content type.", "application/json",
testSubject.getAcceptedContentType(mockRequest));
verify(mockRequest);
}
@Test
public void getAcceptedContentTypeDefault() throws Exception
{
final HttpServletRequest mockRequest =
createMock(HttpServletRequest.class);
expect(mockRequest.getHeader("Accept")).andReturn(null).once();
replay(mockRequest);
assertEquals("Wrong content type.", "text/xml",
testSubject.getAcceptedContentType(mockRequest));
verify(mockRequest);
}
@Test
public void testPrivilegedUsers1()
{
try
{
final PluginFactory piMock = EasyMock.createMock(PluginFactory.class);
EasyMock.expect(piMock.createUserPersistence()).andReturn(null).once();
StandaloneContextFactory.initJNDI();
UserServlet userServlet = new UserServlet(){
@Override
public PluginFactory getPluginFactory()
{
return piMock;
}
};
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
StandaloneContextFactory.initJNDI();
ServletConfig config = EasyMock.createMock(ServletConfig.class);
EasyMock.expect(config.getInitParameter(
UserServlet.class.getName() + ".PrivilegedX500Principals")).
andReturn("cn=user1,ou=cadc,o=hia,c=ca cn=user2,ou=cadc,o=hia,c=ca");
EasyMock.expect(config.getInitParameter(
UserServlet.class.getName() + ".PrivilegedHttpPrincipals")).
andReturn("user1 user2");
EasyMock.replay(config);
userServlet.init(config);
List<Subject> subjects = userServlet.privilegedSubjects;
Assert.assertTrue(subjects.size() == 2);
EasyMock.verify(config);
}
catch (Exception e)
{
log.error("Unexpected", e);
Assert.fail(e.getMessage());
}
}
@Test
public void testPrivilegedUsers2()
{
try
{
final PluginFactory piMock = EasyMock.createMock(PluginFactory.class);
EasyMock.expect(piMock.createUserPersistence()).andReturn(null).once();
StandaloneContextFactory.initJNDI();
UserServlet userServlet = new UserServlet(){
@Override
public PluginFactory getPluginFactory()
{
return piMock;
}
};
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
StandaloneContextFactory.initJNDI();
ServletConfig config = EasyMock.createMock(ServletConfig.class);
EasyMock.expect(config.getInitParameter(
UserServlet.class.getName() + ".PrivilegedX500Principals")).
andReturn("\"cn=user1, ou=cadc, o=hia,c=ca\" \"cn=user2, ou=cadc,o=hia,c=ca\"");
EasyMock.expect(config.getInitParameter(
UserServlet.class.getName() + ".PrivilegedHttpPrincipals")).
andReturn("user1 \"user2\"");
EasyMock.replay(config);
userServlet.init(config);
List<Subject> subjects = userServlet.privilegedSubjects;
Assert.assertTrue(subjects.size() == 2);
EasyMock.verify(config);
}
catch (Exception e)
{
log.error("Unexpected", e);
Assert.fail(e.getMessage());
}
}
@Test
public void testPrivilegedUsers3()
{
try
{
final PluginFactory piMock = EasyMock.createMock(PluginFactory.class);
EasyMock.expect(piMock.createUserPersistence()).andReturn(null).once();
StandaloneContextFactory.initJNDI();
UserServlet userServlet = new UserServlet(){
@Override
public PluginFactory getPluginFactory()
{
return piMock;
}
};
ServletConfig config = EasyMock.createMock(ServletConfig.class);
EasyMock.expect(config.getInitParameter(
UserServlet.class.getName() + ".PrivilegedX500Principals")).
andReturn("\"cn=user1, ou=cadc, o=hia,c=ca\"");
EasyMock.expect(config.getInitParameter(
UserServlet.class.getName() + ".PrivilegedHttpPrincipals")).
andReturn("user1");
userServlet.init(config);
List<Subject> subjects = userServlet.privilegedSubjects;
Assert.assertTrue(subjects.size() == 1);
EasyMock.verify(config);
}
catch (Exception e)
{
log.error("Unexpected", e);
Assert.fail(e.getMessage());
}
}
@Test
public void testPrivilegedUsers4()
{
try
{
StandaloneContextFactory.initJNDI();
final PluginFactory piMock = EasyMock.createMock(PluginFactory.class);
EasyMock.expect(piMock.createUserPersistence()).andReturn(null).once();
StandaloneContextFactory.initJNDI();
UserServlet userServlet = new UserServlet(){
@Override
public PluginFactory getPluginFactory()
{
return piMock;
}
};
ServletConfig config = EasyMock.createMock(ServletConfig.class);
EasyMock.expect(config.getInitParameter(
UserServlet.class.getName() + ".PrivilegedX500Principals")).
andReturn("\"cn=user1, ou=cadc, o=hia,c=ca\" \"cn=user2, ou=cadc,o=hia,c=ca\"");
EasyMock.expect(config.getInitParameter(
UserServlet.class.getName() + ".PrivilegedHttpPrincipals")).
andReturn("user1 \"user2\" user3");
EasyMock.replay(config);
try
{
userServlet.init(config);
Assert.fail("Should have thrown an error");
}
catch (ExceptionInInitializerError e)
{
// expected
}
}
catch (Exception e)
{
log.error("Unexpected", e);
Assert.fail(e.getMessage());
}
}