/* * Licensed to Jasig under one or more contributor license * agreements. See the NOTICE file distributed with this work * for additional information regarding copyright ownership. * Jasig licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a * copy of the License at the following location: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.jasig.cas.login; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; /** * * @author Scott Battaglia * @author Drew Mazurek * @since 3.0 * */ public class LoginAsCredentialsAcceptorCompatibilityTests extends AbstractLoginCompatibilityTests { public LoginAsCredentialsAcceptorCompatibilityTests() throws IOException { super(); } public LoginAsCredentialsAcceptorCompatibilityTests(final String name) throws IOException { super(name); } public void testSingleSignOn() { beginAt("/login"); setFormElement(FORM_USERNAME, getUsername()); setFormElement(FORM_PASSWORD, getGoodPassword()); submit(); assertCookiePresent(COOKIE_TGC_ID); assertFormNotPresent(); // TODO test logging in to another service } public void testValidCredentialsAuthenticationWithWarn() throws IOException { final String service = "http://www.yale.edu"; beginAt("/login?service=" + URLEncoder.encode(service, "UTF-8")); setFormElement(FORM_USERNAME, getUsername()); setFormElement(FORM_PASSWORD, getGoodPassword()); getDialog().getForm().setCheckbox("warn", true); submit(); final String anotherService = "https://secure.its.yale.edu/cas"; final String anotherServiceEncoded = URLEncoder.encode(anotherService, "UTF-8"); beginAt("/login?service=" + anotherServiceEncoded); // since warn was set, CAS should not redirect us immediately to the service, // but should rather interpose a warning screen. assertTextPresent(anotherService); } public void testValidCredentialsAuthenticationWithoutWarn() throws UnsupportedEncodingException { final String service = "http://www.cnn.com"; beginAt("/login?service=" + URLEncoder.encode(service, "UTF-8")); setFormElement(FORM_USERNAME, getUsername()); setFormElement(FORM_PASSWORD, getGoodPassword()); submit(); // TODO testValidCredentialsAuthenticationWithoutWarn } /* * jWebUnit doesn't allow you to change pre-populated hidden form values. * public void testBadLoginTicket() { setFormElement(FORM_USERNAME, "test"); setFormElement(FORM_PASSWORD, "test"); setFormElement(WebConstants.LOGIN_TOKEN, "test"); submit(); assertFormElementPresent(FORM_USERNAME); } public void testNoLoginTicket() { setFormElement(FORM_USERNAME, "test"); setFormElement(FORM_PASSWORD, "test"); setFormElement(WebConstants.LOGIN_TOKEN, ""); submit(); assertFormElementPresent(FORM_USERNAME); } public void testDoubleLoginTicket() { //TODO covered by badLoginTicket? } * */ public void testPassBadCredentials() { beginAt("/login"); setFormElement(FORM_USERNAME, getUsername()); setFormElement(FORM_PASSWORD, getBadPassword()); submit(); assertFormElementPresent(FORM_USERNAME); } public void testPassEmptyCredentials() { beginAt("/login"); submit(); assertFormElementPresent(FORM_USERNAME); } /** * Test that logging in as someone else destroys the TGT and outstanding * service tickets for the previously authenticated user. * @throws IOException */ public void testLoginAsSomeoneElse() throws IOException { String encodedService = URLEncoder.encode(getServiceUrl(), "UTF-8"); // establish SSO session as the first user beginAt("/login?service=" + encodedService); setFormElement(FORM_USERNAME, getUsername()); setFormElement(FORM_PASSWORD, getGoodPassword()); submit(); // get the service ticket String firstServiceTicket = LoginHelper.serviceTicketFromResponse(getDialog().getResponse()); // now login via renew as someone else beginAt("/login?renew=true&service=" + encodedService); setFormElement(FORM_USERNAME, getAlternateUsername()); setFormElement(FORM_PASSWORD, getAlternatePassword()); submit(); // get the service ticket String secondServiceTicket = LoginHelper.serviceTicketFromResponse(getDialog().getResponse()); // validate the second service ticket beginAt("/serviceValidate?ticket=" + secondServiceTicket + "&service=" + encodedService); assertTextPresent("<cas:user>" + getAlternateUsername() + "</cas:user>"); // okay, now attempt to validate the original service ticket // and see that it has been invalidated beginAt("/serviceValidate?ticket=" + firstServiceTicket + "&service=" + encodedService); assertTextPresent("<cas:authenticationFailure"); } }