package edu.harvard.iq.dataverse.authorization.providers.shib; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Map; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServletRequest; import org.junit.After; import org.junit.AfterClass; import static org.junit.Assert.*; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.mockito.Mockito.mock; public class ShibUtilTest { private HttpServletRequest request = mock(HttpServletRequest.class); public ShibUtilTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() { } /** * Test of getDisplayNameFromDiscoFeed method, of class ShibUtil. */ @Test public void testGetDisplayNameFromDiscoFeed() { // System.out.println("getDisplayNameFromDiscoFeed"); String discoFeedExample = null; try { discoFeedExample = new String(Files.readAllBytes(Paths.get("src/main/webapp/resources/dev/sample-shib-identities.json"))); } catch (IOException ex) { Logger.getLogger(ShibUtilTest.class.getName()).log(Level.SEVERE, null, ex); } ShibUtil shibUtil = new ShibUtil(); String testShib = shibUtil.getDisplayNameFromDiscoFeed("https://idp.testshib.org/idp/shibboleth", discoFeedExample); assertEquals("TestShib Test IdP", testShib); String harvardStage = shibUtil.getDisplayNameFromDiscoFeed("https://stage.fed.huit.harvard.edu/idp/shibboleth", discoFeedExample); assertEquals("Harvard Test IdP", harvardStage); String minimal = shibUtil.getDisplayNameFromDiscoFeed("https://minimal.com/shibboleth", discoFeedExample); assertEquals(null, minimal); String unknown = shibUtil.getDisplayNameFromDiscoFeed("https://nosuchdomain.com/idp/shibboleth", discoFeedExample); assertEquals(null, unknown); String searchForNull = shibUtil.getDisplayNameFromDiscoFeed(null, discoFeedExample); assertEquals(null, searchForNull); /** * @todo Is it an error to pass a null discoFeed? */ // String nullDiscoFeed = shibUtil.getDisplayNameFromDiscoFeed("https://idp.testshib.org/idp/shibboleth", null); // assertEquals(null, nullDiscoFeed); /** * @todo Is it an error to pass junk (non-JSON) as a discoFeed? */ // String unparseAbleDiscoFeed = shibUtil.getDisplayNameFromDiscoFeed("https://idp.testshib.org/idp/shibboleth", "unparseAbleAsJson"); // assertEquals(null, unparseAbleDiscoFeed); } @Test public void testFindBestFirstAndLastName() { ShibUserNameFields expected1 = new ShibUserNameFields("John", "Harvard"); ShibUserNameFields actual1 = ShibUtil.findBestFirstAndLastName("John", "Harvard", null); assertEquals(expected1.getFirstName(), actual1.getFirstName()); assertEquals(expected1.getLastName(), actual1.getLastName()); ShibUserNameFields expected2 = new ShibUserNameFields("Guido", "van Rossum"); ShibUserNameFields actual2 = ShibUtil.findBestFirstAndLastName("Guido", "van Rossum", null); assertEquals(expected2.getFirstName(), actual2.getFirstName()); assertEquals(expected2.getLastName(), actual2.getLastName()); ShibUserNameFields expected3 = new ShibUserNameFields("Philip Seymour", "Hoffman"); ShibUserNameFields actual3 = ShibUtil.findBestFirstAndLastName("Philip Seymour", "Hoffman", "Philip Seymour Hoffman"); assertEquals(expected3.getFirstName(), actual3.getFirstName()); assertEquals(expected3.getLastName(), actual3.getLastName()); ShibUserNameFields expected4 = new ShibUserNameFields("Edward", "Cummings"); ShibUserNameFields actual4 = ShibUtil.findBestFirstAndLastName("Edward;e e", "Cummings", null); assertEquals(expected4.getFirstName(), actual4.getFirstName()); assertEquals(expected4.getLastName(), actual4.getLastName()); ShibUserNameFields expected5 = new ShibUserNameFields("Edward", "Cummings"); ShibUserNameFields actual5 = ShibUtil.findBestFirstAndLastName("Edward;e e", "Cummings", "e e cummings"); assertEquals(expected5.getFirstName(), actual5.getFirstName()); assertEquals(expected5.getLastName(), actual5.getLastName()); ShibUserNameFields expected6 = new ShibUserNameFields("Anthony", "Stark"); ShibUserNameFields actual6 = ShibUtil.findBestFirstAndLastName("Tony;Anthony", "Stark", null); assertEquals(expected6.getFirstName(), actual6.getFirstName()); assertEquals(expected6.getLastName(), actual6.getLastName()); ShibUserNameFields expected7 = new ShibUserNameFields("Anthony", "Stark"); ShibUserNameFields actual7 = ShibUtil.findBestFirstAndLastName("Anthony;Tony", "Stark", null); assertEquals(expected7.getFirstName(), actual7.getFirstName()); assertEquals(expected7.getLastName(), actual7.getLastName()); ShibUserNameFields expected8 = new ShibUserNameFields("Antoni", "Gaudí"); ShibUserNameFields actual8 = ShibUtil.findBestFirstAndLastName("Antoni", "Gaudí i Cornet;Gaudí", null); assertEquals(expected8.getFirstName(), actual8.getFirstName()); assertEquals(expected8.getLastName(), actual8.getLastName()); } @Test public void testFindSingleValue() { assertEquals(null, ShibUtil.findSingleValue(null)); assertEquals("foo", ShibUtil.findSingleValue("foo")); assertEquals("bar", ShibUtil.findSingleValue("foo;bar")); } @Test public void testGenerateFriendlyLookingUserIdentifer() { int lengthOfUuid = UUID.randomUUID().toString().length(); assertEquals("uid1", ShibUtil.generateFriendlyLookingUserIdentifer("uid1", null)); assertEquals(" leadingWhiteSpace", ShibUtil.generateFriendlyLookingUserIdentifer(" leadingWhiteSpace", null)); assertEquals("uid1", ShibUtil.generateFriendlyLookingUserIdentifer("uid1", "email1@example.com")); assertEquals("email1", ShibUtil.generateFriendlyLookingUserIdentifer(null, "email1@example.com")); assertEquals(lengthOfUuid, ShibUtil.generateFriendlyLookingUserIdentifer(null, null).length()); assertEquals(lengthOfUuid, ShibUtil.generateFriendlyLookingUserIdentifer(null, "").length()); assertEquals(lengthOfUuid, ShibUtil.generateFriendlyLookingUserIdentifer("", null).length()); assertEquals(lengthOfUuid, ShibUtil.generateFriendlyLookingUserIdentifer(null, "junkEmailAddress").length()); } @Test public void testDevMutations() { ShibUtil.mutateRequestForDevConstantHarvard1(request); ShibUtil.mutateRequestForDevConstantHarvard2(request); ShibUtil.mutateRequestForDevConstantInvalidEmail(request); ShibUtil.mutateRequestForDevConstantMissingRequiredAttributes(request); ShibUtil.mutateRequestForDevConstantTestShib1(request); ShibUtil.mutateRequestForDevConstantTwoEmails(request); ShibUtil.printAttributes(request); ShibUtil.printAttributes(null); } @Test public void testGetRandomUserStatic() { Map<String, String> randomUser = ShibUtil.getRandomUserStatic(); assertEquals(8, randomUser.get("firstName").length()); } }