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: import javax.servlet.http.Cookie;
011:
012: import junit.framework.TestCase;
013:
014: import com.ecyrd.jspwiki.NoRequiredPropertyException;
015: import com.ecyrd.jspwiki.TestAuthorizer;
016: import com.ecyrd.jspwiki.TestEngine;
017: import com.ecyrd.jspwiki.TestHttpServletRequest;
018: import com.ecyrd.jspwiki.WikiEngine;
019: import com.ecyrd.jspwiki.auth.AuthenticationManager;
020: import com.ecyrd.jspwiki.auth.Authorizer;
021: import com.ecyrd.jspwiki.auth.WikiPrincipal;
022: import com.ecyrd.jspwiki.auth.authorize.Role;
023: import com.ecyrd.jspwiki.auth.user.UserDatabase;
024: import com.ecyrd.jspwiki.auth.user.XMLUserDatabase;
025:
026: /**
027: * @author Andrew R. Jaquith
028: */
029: public class CookieAssertionLoginModuleTest extends TestCase {
030: Authorizer authorizer;
031:
032: UserDatabase db;
033:
034: Subject subject;
035:
036: private WikiEngine m_engine;
037:
038: public final void testLogin() {
039: TestHttpServletRequest request = new TestHttpServletRequest();
040: request.setRemoteAddr("53.33.128.9");
041: try {
042: // We can use cookies right?
043: assertTrue(AuthenticationManager.allowsCookieAssertions());
044:
045: // Test using Cookie and IP address (AnonymousLoginModule succeeds)
046: Cookie cookie = new Cookie(
047: CookieAssertionLoginModule.PREFS_COOKIE_NAME,
048: "Bullwinkle");
049: request.setCookies(new Cookie[] { cookie });
050: subject = new Subject();
051: CallbackHandler handler = new WebContainerCallbackHandler(
052: m_engine, request, authorizer);
053: LoginContext context = new LoginContext(
054: "JSPWiki-container", subject, handler);
055: context.login();
056: Set principals = subject.getPrincipals();
057: assertEquals(3, principals.size());
058: assertTrue(principals.contains(new WikiPrincipal(
059: "Bullwinkle")));
060: assertTrue(principals.contains(Role.ASSERTED));
061: assertTrue(principals.contains(Role.ALL));
062: } catch (LoginException e) {
063: System.err.println(e.getMessage());
064: assertTrue(false);
065: }
066: }
067:
068: public final void testLogout() {
069: TestHttpServletRequest request = new TestHttpServletRequest();
070: request.setRemoteAddr("53.33.128.9");
071: try {
072: CallbackHandler handler = new WebContainerCallbackHandler(
073: m_engine, request, authorizer);
074: LoginContext context = new LoginContext(
075: "JSPWiki-container", subject, handler);
076: context.login();
077: Set principals = subject.getPrincipals();
078: assertEquals(3, principals.size());
079: assertTrue(principals.contains(new WikiPrincipal(
080: "53.33.128.9")));
081: assertTrue(principals.contains(Role.ANONYMOUS));
082: assertTrue(principals.contains(Role.ALL));
083: context.logout();
084: assertEquals(0, principals.size());
085: } catch (LoginException e) {
086: System.err.println(e.getMessage());
087: assertTrue(false);
088: }
089: }
090:
091: /**
092: * @see junit.framework.TestCase#setUp()
093: */
094: protected void setUp() throws Exception {
095: Properties props = new Properties();
096: props.load(TestEngine.findTestProperties());
097: props.put(XMLUserDatabase.PROP_USERDATABASE,
098: "tests/etc/userdatabase.xml");
099: m_engine = new TestEngine(props);
100: authorizer = new TestAuthorizer();
101: authorizer.initialize(m_engine, props);
102: db = new XMLUserDatabase();
103: subject = new Subject();
104: try {
105: db.initialize(m_engine, props);
106: } catch (NoRequiredPropertyException e) {
107: System.err.println(e.getMessage());
108: assertTrue(false);
109: }
110: }
111:
112: }
|