001: package com.ecyrd.jspwiki.auth.login;
002:
003: import java.util.Properties;
004: import java.util.Set;
005:
006: import javax.security.auth.Subject;
007: import javax.security.auth.callback.CallbackHandler;
008: import javax.security.auth.login.LoginContext;
009: import javax.security.auth.login.LoginException;
010:
011: import junit.framework.TestCase;
012:
013: import com.ecyrd.jspwiki.NoRequiredPropertyException;
014: import com.ecyrd.jspwiki.TestAuthorizer;
015: import com.ecyrd.jspwiki.TestEngine;
016: import com.ecyrd.jspwiki.TestHttpServletRequest;
017: import com.ecyrd.jspwiki.WikiEngine;
018: import com.ecyrd.jspwiki.auth.Authorizer;
019: import com.ecyrd.jspwiki.auth.WikiPrincipal;
020: import com.ecyrd.jspwiki.auth.authorize.Role;
021: import com.ecyrd.jspwiki.auth.user.UserDatabase;
022: import com.ecyrd.jspwiki.auth.user.XMLUserDatabase;
023:
024: /**
025: * @author Andrew R. Jaquith
026: */
027: public class AnonymousLoginModuleTest extends TestCase {
028: Authorizer authorizer;
029:
030: UserDatabase db;
031:
032: Subject subject;
033:
034: private WikiEngine m_engine;
035:
036: public final void testLogin() {
037: TestHttpServletRequest request = new TestHttpServletRequest();
038: request.setRemoteAddr("53.33.128.9");
039: try {
040: // Test using IP address (AnonymousLoginModule succeeds)
041: CallbackHandler handler = new WebContainerCallbackHandler(
042: m_engine, request, authorizer);
043: LoginContext context = new LoginContext(
044: "JSPWiki-container", subject, handler);
045: context.login();
046: Set principals = subject.getPrincipals();
047: assertEquals(3, principals.size());
048: assertTrue(principals.contains(new WikiPrincipal(
049: "53.33.128.9")));
050: assertTrue(principals.contains(Role.ANONYMOUS));
051: assertTrue(principals.contains(Role.ALL));
052: } catch (LoginException e) {
053: System.err.println(e.getMessage());
054: assertTrue(false);
055: }
056: }
057:
058: public final void testLogout() {
059: TestHttpServletRequest request = new TestHttpServletRequest();
060: request.setRemoteAddr("53.33.128.9");
061: try {
062: CallbackHandler handler = new WebContainerCallbackHandler(
063: m_engine, request, authorizer);
064: LoginContext context = new LoginContext(
065: "JSPWiki-container", subject, handler);
066: context.login();
067: Set principals = subject.getPrincipals();
068: assertEquals(3, principals.size());
069: assertTrue(principals.contains(new WikiPrincipal(
070: "53.33.128.9")));
071: assertTrue(principals.contains(Role.ANONYMOUS));
072: assertTrue(principals.contains(Role.ALL));
073: context.logout();
074: assertEquals(0, principals.size());
075: } catch (LoginException e) {
076: System.err.println(e.getMessage());
077: assertTrue(false);
078: }
079: }
080:
081: /**
082: * @see junit.framework.TestCase#setUp()
083: */
084: protected void setUp() throws Exception {
085: Properties props = new Properties();
086: props.load(TestEngine.findTestProperties());
087: props.put(XMLUserDatabase.PROP_USERDATABASE,
088: "tests/etc/userdatabase.xml");
089: m_engine = new TestEngine(props);
090: authorizer = new TestAuthorizer();
091: authorizer.initialize(m_engine, props);
092: db = new XMLUserDatabase();
093: subject = new Subject();
094: try {
095: db.initialize(m_engine, props);
096: } catch (NoRequiredPropertyException e) {
097: System.err.println(e.getMessage());
098: assertTrue(false);
099: }
100: }
101:
102: }
|