/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * 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: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>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.apereo.portal.security.provider.cas; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apereo.portal.security.IAdditionalDescriptor; import org.apereo.portal.security.IOpaqueCredentials; import org.apereo.portal.security.IPrincipal; import org.apereo.portal.security.ISecurityContext; import org.apereo.portal.security.PortalSecurityException; /** * A mock-object CAS security context. This mock object can be configured to mock-out most CAS * security context behaviors and is useful for testing CasConnectionContext (and potentially other * components making use of ICasSecurityContexts). * * <p>This mock object is not threadsafe. */ public class CasSecurityContextMock implements ISecurityContext, ICasSecurityContext { private static final long serialVersionUID = 1L; private boolean authenticated = false; /** * A List of String service tokens and/or CasProxyTicketAcquisitionExceptions and/or * RuntimeExceptions which programs the behavior of this object's response to * getCasServiceToken(). For any call of getCasServiceToken(), this object will respond by * returning the first object in this List if it is a String or null, or throwing the first * object in this list if it is a CasProxyTicketAcquisitionException or a RuntimeException. This * object will then remove the first item in this list and append it to vendedServiceTokens. If * this list is empty, this object will treat it as if it had contained null. */ private List serviceTokensToVend = new ArrayList(); /** A List of responses from getCasServiceToken(), in the order given. */ private final List vendedServiceTokens = new ArrayList(); /** A List of the String targets for which service tokens were requested. */ private final List serviceTokenTargets = new ArrayList(); /** Map from subcontext name to ISecurityContext value. */ private Map subcontexts = new HashMap(); public String getCasServiceToken(String target) throws CasProxyTicketAcquisitionException { // record the target this.serviceTokenTargets.add(target); // return or throw the first item in serviceTokensToVend. Object toVend = null; if (!serviceTokensToVend.isEmpty()) { toVend = this.serviceTokensToVend.get(0); this.serviceTokensToVend.remove(0); } // if the list was empty, toVend is still null, as desired. // add the response to the end of the list this.vendedServiceTokens.add(toVend); // return or throw the response if (toVend == null) { return null; } else if (toVend instanceof CasProxyTicketAcquisitionException) { throw (CasProxyTicketAcquisitionException) toVend; } else if (toVend instanceof RuntimeException) { throw (RuntimeException) toVend; } else if (toVend instanceof String) { return (String) toVend; } else { throw new IllegalStateException("Unexpected type: " + toVend); } } public int getAuthType() { return ICasSecurityContext.CAS_AUTHTYPE; } public IPrincipal getPrincipalInstance() { // TODO Auto-generated method stub return null; } public IOpaqueCredentials getOpaqueCredentialsInstance() { // TODO Auto-generated method stub return null; } public void authenticate() throws PortalSecurityException { // TODO Auto-generated method stub } public IPrincipal getPrincipal() { // TODO Auto-generated method stub return null; } public IOpaqueCredentials getOpaqueCredentials() { // TODO Auto-generated method stub return null; } public IAdditionalDescriptor getAdditionalDescriptor() { // TODO Auto-generated method stub return null; } public boolean isAuthenticated() { return this.authenticated; } public ISecurityContext getSubContext(String ctx) throws PortalSecurityException { // TODO Auto-generated method stub return null; } public Enumeration getSubContexts() { return Collections.enumeration(this.subcontexts.values()); } public Enumeration getSubContextNames() { return Collections.enumeration(this.subcontexts.keySet()); } public void addSubContext(String name, ISecurityContext ctx) throws PortalSecurityException { this.subcontexts.put(name, ctx); } public List getServiceTokensToVend() { return serviceTokensToVend; } public void setServiceTokensToVend(List serviceTokensToVendArg) { List defensiveCopy = new ArrayList(); defensiveCopy.addAll(serviceTokensToVendArg); this.serviceTokensToVend = defensiveCopy; } public List getVendedServiceTokens() { return vendedServiceTokens; } public void setAuthenticated(boolean authenticated) { this.authenticated = authenticated; } public List getServiceTokenTargets() { return serviceTokenTargets; } }