package com.duosecurity.integrations; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import org.junit.Test; import java.lang.reflect.*; import org.junit.*; import static org.junit.Assert.*; public class DuoShibbolethTest { DuoShibboleth duoShibboleth; @Before public void setUp() { duoShibboleth = DuoShibboleth.instance("DIXXXXXXXXXXXXXXXXXX", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "useacustomerprovidedapplicationsecretkey", "fakeurl", "testuser"); } @Test public void testNoPublicConstructors() throws ClassNotFoundException { Class duoShibbolethClass = Class.forName("com.duosecurity.integrations.DuoShibboleth"); assertEquals(0, duoShibbolethClass.getConstructors().length); } @Test public void testNotSingleton() { DuoShibboleth otherDuoShibboleth = DuoShibboleth.instance("DIXXXXXXXXXXXXXXXXXX", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "useacustomerprovidedapplicationsecretkey", "fakeurl", "testuser"); assertFalse(duoShibboleth==otherDuoShibboleth); } @Test public void testPerformPreauth_whenFailmodeSecure() { try { assertEquals("auth", duoShibboleth.performPreauth("secure")); } catch (Exception e) { fail("Unexpected exception thrown."); } } @Test public void testPerformPreauth_whenFailmodeInvalid() { try { duoShibboleth.performPreauth("bad"); fail("Expected IllegalArgumentException."); } catch (Exception e) { } } @Test public void testPerformPreauth_whenFailmodeSafeAndDuoUnreachable() { try { assertEquals("allow", duoShibboleth.performPreauth("safe")); } catch (Exception e) { fail("Unexpected exception thrown."); } } @Test public void testSignRequest() { assertNotNull(duoShibboleth.signRequest()); } @Test public void testverifyResponseEqualsUsername_whenResponseValid() { String request_sig = duoShibboleth.signRequest(); String[] sigs = request_sig.split(":"); String app_sig = sigs[1]; String response = "AUTH|dGVzdHVzZXJ8RElYWFhYWFhYWFhYWFhYWFhYWFh8MTYxNTcyNzI0Mw==|d20ad0d1e62d84b00a3e74ec201a5917e77b6aef:" + app_sig; assertTrue(duoShibboleth.verifyResponseEqualsUsername(response)); } @Test public void testverifyResponseEqualsUsername_whenResponseValidAndConfigHasWhitespace() { duoShibboleth = DuoShibboleth.instance(" DIXXXXXXXXXXXXXXXXXX ", "\tdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\t \t", " useacustomerprovidedapplicationsecretkey ", " fakeurl ", "testuser"); String request_sig = duoShibboleth.signRequest(); String[] sigs = request_sig.split(":"); String app_sig = sigs[1]; String response = "AUTH|dGVzdHVzZXJ8RElYWFhYWFhYWFhYWFhYWFhYWFh8MTYxNTcyNzI0Mw==|d20ad0d1e62d84b00a3e74ec201a5917e77b6aef:" + app_sig; assertTrue(duoShibboleth.verifyResponseEqualsUsername(response)); } @Test public void testverifyResponseEqualsUsername_whenResponseForAnotherUser() { String request_sig = duoShibboleth.signRequest(); String[] sigs = request_sig.split(":"); String app_sig = sigs[1]; String response = "AUTH|dGVzdHVzZXJ8RElYWFhYWFhYWFhYWFhYWFhYWFh8MTYxNTcyNzI0Mw==|d20ad0d1e62d84b00a3e74ec201a5917e77b6aef:" + app_sig; DuoShibboleth otherDuoShibboleth = DuoShibboleth.instance("DIXXXXXXXXXXXXXXXXXX", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "useacustomerprovidedapplicationsecretkey", "fakeurl", "usertoauthenticate"); assertFalse(otherDuoShibboleth.verifyResponseEqualsUsername(response)); } @Test public void testverifyResponseEqualsUsername_whenResponseBad() { String response = "junkresponse"; assertFalse(duoShibboleth.verifyResponseEqualsUsername(response)); } @Test public void testverifyResponseEqualsUsername_whenResponseEmpty() { String response = ""; assertFalse(duoShibboleth.verifyResponseEqualsUsername(response)); } }