Changes in Release 2.2.0
=============================================
+[SIDP-397] - Remove any unit test that won't be fixed in the 2.X branch, fix the rest
[SIDP-388] - Add eduPersonAssurance attribute to attribute-resolver.xml config example
[SIDP-384] - Incorrect error message set for expired request in Shibboleth SSO Profile Handler
[SIDP-382] - Less verbose logging for failed attribute queries due to missing name-id
Levels: OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL
-->
<!-- Logs IdP, but not OpenSAML, messages -->
- <logger name="edu.internet2.middleware.shibboleth">
- <level value="INFO" />
- </logger>
+ <logger name="edu.internet2.middleware.shibboleth" level="INFO" />
<!-- Logs OpenSAML, but not IdP, messages -->
- <logger name="org.opensaml">
- <level value="WARN" />
- </logger>
+ <logger name="org.opensaml" level="WARN" />
<!-- Logs LDAP related messages -->
- <logger name="edu.vt.middleware.ldap">
- <level value="WARN"/>
- </logger>
+ <logger name="edu.vt.middleware.ldap" level="WARN" />
<!-- Logs inbound and outbound protocols messages at DEBUG level -->
<!--
- <logger name="PROTOCOL_MESSAGE">
- <level value="DEBUG" />
- </logger>
+ <logger name="PROTOCOL_MESSAGE" level="DEBUG" />
-->
<!--
<FileNamePattern>$IDP_HOME$/logs/idp-access-%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
- <layout class="ch.qos.logback.classic.PatternLayout">
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <charset>UTF-8</charset>
<Pattern>%msg%n</Pattern>
- </layout>
+ </encoder>
</appender>
<appender name="IDP_AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
<FileNamePattern>$IDP_HOME$/logs/idp-audit-%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
- <layout class="ch.qos.logback.classic.PatternLayout">
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <charset>UTF-8</charset>
<Pattern>%msg%n</Pattern>
- </layout>
+ </encoder>
</appender>
<appender name="IDP_PROCESS" class="ch.qos.logback.core.rolling.RollingFileAppender">
<FileNamePattern>$IDP_HOME$/logs/idp-process-%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
- <layout class="ch.qos.logback.classic.PatternLayout">
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <charset>UTF-8</charset>
<!-- General logging pattern -->
<Pattern>%date{HH:mm:ss.SSS} - %level [%logger:%line] - %msg%n</Pattern>
<Pattern>%date{HH:mm:ss.SSS} - %level [%logger:%line] - [%t:%mdc{principalName}] - %msg%n</Pattern>
-->
- </layout>
+ </encoder>
</appender>
- <logger name="Shibboleth-Access">
- <level value="ALL" />
+ <logger name="Shibboleth-Access" level="ALL">
<appender-ref ref="IDP_ACCESS" />
</logger>
- <logger name="Shibboleth-Audit">
- <level value="ALL" />
+ <logger name="Shibboleth-Audit" level="ALL">
<appender-ref ref="IDP_AUDIT" />
</logger>
- <logger name="org.springframework">
- <level value="OFF" />
- </logger>
+ <logger name="org.springframework" level="OFF" />
- <logger name="org.apache.catalina">
- <level value="ERROR" />
- </logger>
+ <logger name="org.apache.catalina" level="ERROR" />
- <root>
- <level value="ERROR" />
+ <root level="ERROR">
<appender-ref ref="IDP_PROCESS" />
</root>
/**
* Base unit test case for Spring configuration tests.
*/
-public class BaseTestCase extends XMLTestCase {
+public abstract class TestCaseBase extends XMLTestCase {
/** Parser manager used to parse XML. */
protected static BasicParserPool parser;
protected UnmarshallerFactory unmarshallerFactory;
/** Class logger. */
- private static Logger log = LoggerFactory.getLogger(BaseTestCase.class);
+ private static Logger log = LoggerFactory.getLogger(TestCaseBase.class);
/** Configuration resources to be loaded for all unit tests. */
private List<Resource> configResources;
*/
protected XMLObject unmarshallElement(String elementFile) {
try {
- Document doc = parser.parse(BaseTestCase.class.getResourceAsStream(elementFile));
+ Document doc = parser.parse(TestCaseBase.class.getResourceAsStream(elementFile));
Element samlElement = doc.getDocumentElement();
Unmarshaller unmarshaller = Configuration.getUnmarshallerFactory().getUnmarshaller(samlElement);
import org.springframework.context.ApplicationContext;
-import edu.internet2.middleware.shibboleth.idp.BaseTestCase;
+import edu.internet2.middleware.shibboleth.idp.TestCaseBase;
/**
* Base unit test case for Spring configuration tests.
*/
-public class BaseConf1TestCase extends BaseTestCase {
+public abstract class BaseConf1TestCase extends TestCaseBase {
/** Application context containing the loaded IdP configuration. */
private ApplicationContext appCtx;
handler.processRequest(profileRequest, profileResponse);
String response = servletResponse.getContentAsString();
- assertTrue(response.contains("samlp:Success"));
- assertTrue(response.contains("saml:Assertion"));
+ assertTrue(response.contains("saml1p:Success"));
+ assertTrue(response.contains("saml1:Assertion"));
}
public void testWithoutConfiguration() throws Exception {
handler.processRequest(profileRequest, profileResponse);
String response = servletResponse.getContentAsString();
- assertTrue(response.contains("samlp:Success"));
- assertTrue(response.contains("samlp:RequestDenied"));
+ assertTrue(response.contains("saml1p:Success"));
+ assertTrue(response.contains("saml1p:RequestDenied"));
}
@SuppressWarnings("unchecked")
handler.processRequest(profileRequest, profileResponse);
String response = servletResponse.getContentAsString();
- assertTrue(response.contains("samlp:Success"));
+ assertTrue(response.contains("saml1p:Success"));
assertTrue(response.contains("AttributeName=\"urn:mace:dir:attribute-def:eduPersonEntitlement\""));
assertTrue(response.contains("urn:example.org:entitlement:entitlement1"));
}
handler.processRequest(profileRequest, profileResponse);
String response = servletResponse.getContentAsString();
- assertTrue(response.contains("samlp:Responder"));
- assertTrue(response.contains("samlp:RequestDenied"));
+ assertTrue(response.contains("saml1p:Responder"));
+ assertTrue(response.contains("saml1p:RequestDenied"));
}
/**
handler.processRequest(profileRequest, profileResponse);
String response = servletResponse.getContentAsString();
- assertTrue(response.contains("samlp:ArtifactResponse"));
+ assertTrue(response.contains("saml2p:ArtifactResponse"));
assertTrue(response.contains("urn:oasis:names:tc:SAML:2.0:status:Success"));
- assertTrue(response.contains("saml:Assertion"));
+ assertTrue(response.contains("saml2:Assertion"));
}
public void testWithoutConfiguration() throws Exception{
import edu.internet2.middleware.shibboleth.idp.authn.UsernamePrincipal;
import edu.internet2.middleware.shibboleth.idp.session.AuthenticationMethodInformation;
import edu.internet2.middleware.shibboleth.idp.session.impl.AuthenticationMethodInformationImpl;
+import edu.internet2.middleware.shibboleth.idp.util.HttpServletHelper;
/**
*
/** Tests initial leg of the SSO request where request is decoded and sent to the authentication engine. */
public void testFirstAuthenticationLeg() throws Exception {
MockHttpServletRequest servletRequest = buildServletRequest("urn:example.org:sp1");
- servletRequest.setMethod("POST");
MockHttpServletResponse servletResponse = new MockHttpServletResponse();
ProfileHandlerManager handlerManager = (ProfileHandlerManager) getApplicationContext().getBean(
HTTPOutTransport profileResponse = new HttpServletResponseAdapter(servletResponse, false);
handler.processRequest(profileRequest, profileResponse);
- Saml2LoginContext loginContext = (Saml2LoginContext) servletRequest
- .getAttribute(Saml2LoginContext.LOGIN_CONTEXT_KEY);
+ Saml2LoginContext loginContext = (Saml2LoginContext) HttpServletHelper.getLoginContext(servletRequest);
assertNotNull(loginContext);
assertEquals(false, loginContext.getAuthenticationAttempted());
MockHttpServletRequest servletRequest = buildServletRequest("urn:example.org:sp1");
MockHttpServletResponse servletResponse = new MockHttpServletResponse();
- servletRequest.setAttribute(Saml2LoginContext.LOGIN_CONTEXT_KEY, buildLoginContext("urn:example.org:sp1"));
+ HttpServletHelper.bindLoginContext(buildLoginContext("urn:example.org:sp1"), servletRequest);
ProfileHandlerManager handlerManager = (ProfileHandlerManager) getApplicationContext().getBean(
"shibboleth.HandlerManager");
String authnRequestString = getSamlRequestString(authnRequest);
MockHttpServletRequest servletRequest = new MockHttpServletRequest();
+ servletRequest.setMethod("POST");
servletRequest.setPathInfo("/saml2/POST/SSO");
servletRequest.setParameter("SAMLRequest", Base64.encodeBytes(authnRequestString.getBytes()));
import edu.internet2.middleware.shibboleth.idp.authn.UsernamePrincipal;
import edu.internet2.middleware.shibboleth.idp.session.AuthenticationMethodInformation;
import edu.internet2.middleware.shibboleth.idp.session.impl.AuthenticationMethodInformationImpl;
+import edu.internet2.middleware.shibboleth.idp.util.HttpServletHelper;
/**
* Unit test for Shibboleth SSO requests.
HTTPOutTransport profileResponse = new HttpServletResponseAdapter(servletResponse, false);
handler.processRequest(profileRequest, profileResponse);
- ShibbolethSSOLoginContext loginContext = (ShibbolethSSOLoginContext) servletRequest
- .getAttribute(ShibbolethSSOLoginContext.LOGIN_CONTEXT_KEY);
+ ShibbolethSSOLoginContext loginContext = (ShibbolethSSOLoginContext) HttpServletHelper
+ .getLoginContext(servletRequest);
assertNotNull(loginContext);
assertEquals(false, loginContext.getAuthenticationAttempted());
MockHttpServletRequest servletRequest = buildServletRequest();
MockHttpServletResponse servletResponse = new MockHttpServletResponse();
- servletRequest.setAttribute(ShibbolethSSOLoginContext.LOGIN_CONTEXT_KEY, buildLoginContext());
+ HttpServletHelper.bindLoginContext(buildLoginContext(), servletRequest);
ProfileHandlerManager handlerManager = (ProfileHandlerManager) getApplicationContext().getBean(
"shibboleth.HandlerManager");
<constructor-arg value="true" type="boolean" />
</bean>
- <bean id="shibboleth.LogbackLogging" class="edu.internet2.middleware.shibboleth.common.log.LogbackLoggingService" depends-on="shibboleth.TaskTimer">
- <constructor-arg ref="shibboleth.TaskTimer" />
- <constructor-arg value="$IDP_HOME$/conf/logging.xml" />
- <constructor-arg value="600000" />
- </bean>
+ <!-- Nothing ever checks the type of this object and the logging config is loaded from the classpath for the test suite. -->
+ <bean id="shibboleth.LogbackLogging" class="java.lang.Object" depends-on="shibboleth.TaskTimer" />
<!-- Spring configuration file that bootstraps OpenSAML -->
<bean id="shibboleth.OpensamlConfig" class="edu.internet2.middleware.shibboleth.common.config.OpensamlConfigBean" depends-on="shibboleth.LogbackLogging">
<configuration>
- <logger name="edu.internet2.middleware.shibboleth">
- <level value="DEBUG" />
- </logger>
+ <logger name="edu.internet2.middleware.shibboleth" level="DEBUG" />
- <logger name="org.opensaml">
- <level value="WARN" />
- </logger>
+ <logger name="org.opensaml" level="WARN" />
<!--
- <logger name="PROTOCOL_MESSAGE">
- <level value="DEBUG" />
- </logger>
+ <logger name="PROTOCOL_MESSAGE" level="DEBUG" />
-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%date{HH:mm:ss.SSS} - %level [%logger:%line] - %msg%n</Pattern>
- </layout>
+ <charset>UTF-8</charset>
+ </encoder>
</appender>
- <root>
- <level value="warn" />
+ <root level="WARN" >
<appender-ref ref="STDOUT" />
</root>