@@ -117,6 +117,19 @@ public void testCheckSPSettingsAllErrors() throws IOException, Error {
117117 assertThat (settingsErrors , hasItem ("contact_type_invalid" ));
118118 assertThat (settingsErrors , hasItem ("contact_not_enough_data" ));
119119 assertThat (settingsErrors , hasItem ("organization_not_enough_data" ));
120+
121+ Saml2Settings settings2 = new SettingsBuilder ().fromFile ("config/config.sperrors_multi_attribute_consuming_services.properties" ).build ();
122+ List <String > settings2Errors = settings2 .checkSPSettings ();
123+ assertFalse (settings2Errors .isEmpty ());
124+ assertThat (settings2Errors , hasItem ("sp_entityId_not_found" ));
125+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_data" ));
126+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_no_requested_attribute" ));
127+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_multiple_defaults" ));
128+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_requested_attribute_data" ));
129+ assertThat (settings2Errors , hasItem ("sp_cert_not_found_and_required" ));
130+ assertThat (settings2Errors , hasItem ("contact_type_invalid" ));
131+ assertThat (settings2Errors , hasItem ("contact_not_enough_data" ));
132+ assertThat (settings2Errors , hasItem ("organization_not_enough_data" ));
120133 }
121134
122135 /**
@@ -133,6 +146,15 @@ public void testCheckSPSettingsOk() throws IOException, Error {
133146 Saml2Settings settings = new SettingsBuilder ().fromFile ("config/config.all.properties" ).build ();
134147 List <String > settingsErrors = settings .checkSPSettings ();
135148 assertTrue (settingsErrors .isEmpty ());
149+
150+ Saml2Settings settings2 = new SettingsBuilder ().fromFile ("config/config.all_multi_attribute_consuming_services.properties" ).build ();
151+ List <String > settings2Errors = settings2 .checkSPSettings ();
152+ assertTrue (settings2Errors .isEmpty ());
153+
154+ // no attribute consuming services at all
155+ Saml2Settings settings3 = new SettingsBuilder ().fromFile ("config/config.min.properties" ).build ();
156+ List <String > settings3Errors = settings3 .checkSPSettings ();
157+ assertTrue (settings3Errors .isEmpty ());
136158 }
137159
138160 /**
@@ -159,6 +181,23 @@ public void testCheckSettingsAllErrors() throws IOException, Error {
159181 assertThat (settingsErrors , hasItem ("idp_sso_url_invalid" ));
160182 assertThat (settingsErrors , hasItem ("idp_cert_or_fingerprint_not_found_and_required" ));
161183 assertThat (settingsErrors , hasItem ("idp_cert_not_found_and_required" ));
184+
185+ Saml2Settings settings2 = new SettingsBuilder ().fromFile ("config/config.allerrors_multi_attribute_consuming_services.properties" ).build ();
186+ List <String > settings2Errors = settings2 .checkSettings ();
187+ assertFalse (settings2Errors .isEmpty ());
188+ assertThat (settings2Errors , hasItem ("sp_entityId_not_found" ));
189+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_data" ));
190+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_no_requested_attribute" ));
191+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_multiple_defaults" ));
192+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_requested_attribute_data" ));
193+ assertThat (settings2Errors , hasItem ("sp_cert_not_found_and_required" ));
194+ assertThat (settings2Errors , hasItem ("contact_type_invalid" ));
195+ assertThat (settings2Errors , hasItem ("contact_not_enough_data" ));
196+ assertThat (settings2Errors , hasItem ("organization_not_enough_data" ));
197+ assertThat (settings2Errors , hasItem ("idp_entityId_not_found" ));
198+ assertThat (settings2Errors , hasItem ("idp_sso_url_invalid" ));
199+ assertThat (settings2Errors , hasItem ("idp_cert_or_fingerprint_not_found_and_required" ));
200+ assertThat (settings2Errors , hasItem ("idp_cert_not_found_and_required" ));
162201 }
163202
164203 /**
@@ -287,6 +326,49 @@ public void testGetSPMetadataUnsigned() throws Exception {
287326 assertThat (metadataStr , containsString ("<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>" ));
288327 }
289328
329+ /**
330+ * Tests the getSPMetadata method of the Saml2Settings
331+ * <p>
332+ * Case Unsigned metadata with multiple Attribute Consuming Services
333+ *
334+ * @throws Exception
335+ *
336+ * @see com.onelogin.saml2.settings.Saml2Settings#getSPMetadata
337+ */
338+ @ Test
339+ public void testGetSPMetadataUnsignedMultiAttributeConsumingServices () throws Exception {
340+ Saml2Settings settings = new SettingsBuilder ().fromFile ("config/config.min_multi_attribute_consuming_services.properties" ).build ();
341+
342+ String metadataStr = settings .getSPMetadata ();
343+
344+ Document metadataDoc = Util .loadXML (metadataStr );
345+ assertTrue (metadataDoc instanceof Document );
346+
347+ assertEquals ("md:EntityDescriptor" , metadataDoc .getDocumentElement ().getNodeName ());
348+ assertEquals ("md:SPSSODescriptor" , metadataDoc .getDocumentElement ().getFirstChild ().getNodeName ());
349+
350+ assertTrue (Util .validateXML (metadataDoc , SchemaFactory .SAML_SCHEMA_METADATA_2_0 ));
351+
352+ assertThat (metadataStr , containsString ("<md:SPSSODescriptor" ));
353+ assertThat (metadataStr , containsString ("entityID=\" http://localhost:8080/java-saml-jspsample/metadata.jsp\" " ));
354+ assertThat (metadataStr , containsString ("AuthnRequestsSigned=\" false\" " ));
355+ assertThat (metadataStr , containsString ("WantAssertionsSigned=\" false\" " ));
356+ assertThat (metadataStr , not (containsString ("<md:KeyDescriptor use=\" signing\" >" )));
357+ assertThat (metadataStr , containsString ("<md:AssertionConsumerService Binding=\" urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\" http://localhost:8080/java-saml-jspsample/acs.jsp\" index=\" 1\" />" ));
358+ assertThat (metadataStr , containsString ("<md:SingleLogoutService Binding=\" urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\" http://localhost:8080/java-saml-jspsample/sls.jsp\" />" ));
359+ assertThat (metadataStr , containsString ("<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>" ));
360+ assertThat (metadataStr , containsString ("<md:AttributeConsumingService index=\" 0\" >" ));
361+ assertThat (metadataStr , containsString ("<md:ServiceName xml:lang=\" en\" >Just e-mail</md:ServiceName>" ));
362+ assertThat (metadataStr , containsString ("<md:RequestedAttribute Name=\" Email\" NameFormat=\" urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\" FriendlyName=\" E-mail address\" isRequired=\" true\" >" ));
363+ assertThat (
metadataStr ,
containsString (
"<saml:AttributeValue xmlns:saml=\" urn:oasis:names:tc:SAML:2.0:assertion\" >[email protected] </saml:AttributeValue>" ));
364+ assertThat (
metadataStr ,
containsString (
"<saml:AttributeValue xmlns:saml=\" urn:oasis:names:tc:SAML:2.0:assertion\" >[email protected] </saml:AttributeValue>" ));
365+ assertThat (metadataStr , containsString ("<md:AttributeConsumingService index=\" 1\" isDefault=\" true\" >" ));
366+ assertThat (metadataStr , containsString ("<md:ServiceName xml:lang=\" it\" >Anagrafica</md:ServiceName>" ));
367+ assertThat (metadataStr , containsString ("<md:ServiceDescription xml:lang=\" it\" >Servizio completo</md:ServiceDescription>" ));
368+ assertThat (metadataStr , containsString ("<md:RequestedAttribute Name=\" FirstName\" />" ));
369+ assertThat (metadataStr , containsString ("<md:RequestedAttribute Name=\" LastName\" isRequired=\" true\" />" ));
370+ }
371+
290372 /**
291373 * Tests the getSPMetadata method of the Saml2Settings
292374 * * Case Unsigned metadata No SLS
0 commit comments