/*
* See LICENSE for licensing and NOTICE for copyright.
*/
package net.shibboleth.idp.cas.ticket;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
/**
* Unit test for {@link TicketIdentifierGenerationStrategy}.
*
* @author Marvin S. Addison
*/
public class TicketIdentifierGenerationStrategyTest {
private static final Pattern TICKET_REGEX = Pattern.compile("(.+)-(\\d+)-([A-Za-z0-9]+)(-(.+))?");
@DataProvider(name = "generators")
public Object[][] provideGenerators() {
final TicketIdentifierGenerationStrategy gen1 = new TicketIdentifierGenerationStrategy(30, "ST");
gen1.setSuffix("node_1-1");
final TicketIdentifierGenerationStrategy gen2 = new TicketIdentifierGenerationStrategy(30, "PT");
gen2.setSuffix("host1.example.com");
final TicketIdentifierGenerationStrategy gen3 = new TicketIdentifierGenerationStrategy(50, "PGT");
return new Object[][] {
{ gen1 , "ST", 30, "node_1-1"},
{ gen2 , "PT", 30, "host1.example.com" },
{ gen3, "PGT", 50, null },
};
}
@DataProvider(name = "url-safety")
public Object[][] provideBadPrefixSuffix() {
return new Object[][] {
{"<ST>", "host"},
{"PGT", "http://host.example.com/"},
};
}
@Test(dataProvider = "generators")
public void testGenerate(
final TicketIdentifierGenerationStrategy generator,
final String expectedPrefix,
final int expectedRandomLength,
final String expectedSuffix) throws Exception {
final long now = System.currentTimeMillis();
final String id = generator.generateIdentifier();
final Matcher m = TICKET_REGEX.matcher(id);
assertTrue(m.matches());
assertEquals(m.group(1), expectedPrefix);
assertEquals(Long.parseLong(m.group(2)) / now, 1);
assertEquals(m.group(3).length(), expectedRandomLength);
if (expectedSuffix != null) {
assertEquals(m.group(5), expectedSuffix);
}
}
@Test(dataProvider = "url-safety",
expectedExceptions = IllegalArgumentException.class)
public void testUrlSafety(final String prefix, final String suffix) {
new TicketIdentifierGenerationStrategy(10, prefix).setSuffix(suffix);
}
}