/*
* See LICENSE for licensing and NOTICE for copyright.
*/
package net.shibboleth.idp.cas.flow;
import net.shibboleth.idp.cas.protocol.ProtocolError;
import net.shibboleth.idp.cas.protocol.TicketValidationRequest;
import net.shibboleth.idp.cas.ticket.ProxyGrantingTicket;
import net.shibboleth.idp.cas.ticket.ProxyTicket;
import net.shibboleth.idp.cas.ticket.ServiceTicket;
import net.shibboleth.idp.cas.ticket.TicketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.webflow.execution.RequestContext;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
import static org.testng.Assert.assertEquals;
/**
* Unit test for {@link net.shibboleth.idp.cas.flow.ValidateRenewAction}.
*
* @author Marvin S. Addison
*/
public class ValidateRenewActionTest extends AbstractProfileActionTest {
private static final String TEST_SERVICE = "https://example.com/widget";
@Autowired
private ValidateRenewAction action;
@Autowired
private TicketService ticketService;
@Test
public void testTicketNotFromRenew() throws Exception {
final ServiceTicket ticket = ticketService.createServiceTicket(TEST_SESSION_ID, TEST_SERVICE, true);
final RequestContext context = createTicketContext(ticket);
final TicketValidationRequest request = new TicketValidationRequest(TEST_SERVICE, ticket.getId());
FlowStateSupport.setTicketValidationRequest(context, request);
assertEquals(action.execute(context).getId(), ProtocolError.TicketNotFromRenew.id());
}
@Test
public void testRenewIncompatibleWithProxy() throws Exception {
final ServiceTicket st = ticketService.createServiceTicket(TEST_SESSION_ID, TEST_SERVICE, false);
final ProxyGrantingTicket pgt = ticketService.createProxyGrantingTicket(st, "PGT-12345");
final ProxyTicket pt = ticketService.createProxyTicket(pgt, "https://foo.example.org");
final RequestContext context = createTicketContext(pt);
final TicketValidationRequest request = new TicketValidationRequest(TEST_SERVICE, pt.getId());
request.setRenew(true);
FlowStateSupport.setTicketValidationRequest(context, request);
assertEquals(action.execute(context).getId(), ProtocolError.RenewIncompatibleWithProxy.id());
}
@Test
public void testSuccessWithRenewAndServiceTicket() throws Exception {
final ServiceTicket ticket = ticketService.createServiceTicket(TEST_SESSION_ID, TEST_SERVICE, true);
final RequestContext context = createTicketContext(ticket);
final TicketValidationRequest request = new TicketValidationRequest(TEST_SERVICE, ticket.getId());
request.setRenew(true);
FlowStateSupport.setTicketValidationRequest(context, request);
assertEquals(action.execute(context).getId(), Events.Success.id());
}
@Test
public void testSuccessWithoutRenewAndProxyTicket() throws Exception {
final ServiceTicket st = ticketService.createServiceTicket(TEST_SESSION_ID, TEST_SERVICE, false);
final ProxyGrantingTicket pgt = ticketService.createProxyGrantingTicket(st, "PGT-98765");
final ProxyTicket pt = ticketService.createProxyTicket(pgt, "https://foo.example.org");
final RequestContext context = createTicketContext(pt);
final TicketValidationRequest request = new TicketValidationRequest(TEST_SERVICE, pt.getId());
FlowStateSupport.setTicketValidationRequest(context, request);
assertEquals(action.execute(context).getId(), Events.Success.id());
}
}