@@ -117,6 +117,18 @@ 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_not_enough_data" ));
131+ assertThat (settings2Errors , hasItem ("organization_not_enough_data" ));
120132 }
121133
122134 /**
@@ -133,6 +145,15 @@ public void testCheckSPSettingsOk() throws IOException, Error {
133145 Saml2Settings settings = new SettingsBuilder ().fromFile ("config/config.all.properties" ).build ();
134146 List <String > settingsErrors = settings .checkSPSettings ();
135147 assertTrue (settingsErrors .isEmpty ());
148+
149+ Saml2Settings settings2 = new SettingsBuilder ().fromFile ("config/config.all_multi_attribute_consuming_services.properties" ).build ();
150+ List <String > settings2Errors = settings2 .checkSPSettings ();
151+ assertTrue (settings2Errors .isEmpty ());
152+
153+ // no attribute consuming services at all
154+ Saml2Settings settings3 = new SettingsBuilder ().fromFile ("config/config.min.properties" ).build ();
155+ List <String > settings3Errors = settings3 .checkSPSettings ();
156+ assertTrue (settings3Errors .isEmpty ());
136157 }
137158
138159 /**
@@ -159,6 +180,22 @@ public void testCheckSettingsAllErrors() throws IOException, Error {
159180 assertThat (settingsErrors , hasItem ("idp_sso_url_invalid" ));
160181 assertThat (settingsErrors , hasItem ("idp_cert_or_fingerprint_not_found_and_required" ));
161182 assertThat (settingsErrors , hasItem ("idp_cert_not_found_and_required" ));
183+
184+ Saml2Settings settings2 = new SettingsBuilder ().fromFile ("config/config.allerrors_multi_attribute_consuming_services.properties" ).build ();
185+ List <String > settings2Errors = settings2 .checkSettings ();
186+ assertFalse (settings2Errors .isEmpty ());
187+ assertThat (settings2Errors , hasItem ("sp_entityId_not_found" ));
188+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_data" ));
189+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_no_requested_attribute" ));
190+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_multiple_defaults" ));
191+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_requested_attribute_data" ));
192+ assertThat (settings2Errors , hasItem ("sp_cert_not_found_and_required" ));
193+ assertThat (settings2Errors , hasItem ("contact_not_enough_data" ));
194+ assertThat (settings2Errors , hasItem ("organization_not_enough_data" ));
195+ assertThat (settings2Errors , hasItem ("idp_entityId_not_found" ));
196+ assertThat (settings2Errors , hasItem ("idp_sso_url_invalid" ));
197+ assertThat (settings2Errors , hasItem ("idp_cert_or_fingerprint_not_found_and_required" ));
198+ assertThat (settings2Errors , hasItem ("idp_cert_not_found_and_required" ));
162199 }
163200
164201 /**
@@ -287,6 +324,49 @@ public void testGetSPMetadataUnsigned() throws Exception {
287324 assertThat (metadataStr , containsString ("<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>" ));
288325 }
289326
327+ /**
328+ * Tests the getSPMetadata method of the Saml2Settings
329+ * <p>
330+ * Case Unsigned metadata with multiple Attribute Consuming Services
331+ *
332+ * @throws Exception
333+ *
334+ * @see com.onelogin.saml2.settings.Saml2Settings#getSPMetadata
335+ */
336+ @ Test
337+ public void testGetSPMetadataUnsignedMultiAttributeConsumingServices () throws Exception {
338+ Saml2Settings settings = new SettingsBuilder ().fromFile ("config/config.min_multi_attribute_consuming_services.properties" ).build ();
339+
340+ String metadataStr = settings .getSPMetadata ();
341+
342+ Document metadataDoc = Util .loadXML (metadataStr );
343+ assertTrue (metadataDoc instanceof Document );
344+
345+ assertEquals ("md:EntityDescriptor" , metadataDoc .getDocumentElement ().getNodeName ());
346+ assertEquals ("md:SPSSODescriptor" , metadataDoc .getDocumentElement ().getFirstChild ().getNodeName ());
347+
348+ assertTrue (Util .validateXML (metadataDoc , SchemaFactory .SAML_SCHEMA_METADATA_2_0 ));
349+
350+ assertThat (metadataStr , containsString ("<md:SPSSODescriptor" ));
351+ assertThat (metadataStr , containsString ("entityID=\" http://localhost:8080/java-saml-jspsample/metadata.jsp\" " ));
352+ assertThat (metadataStr , containsString ("AuthnRequestsSigned=\" false\" " ));
353+ assertThat (metadataStr , containsString ("WantAssertionsSigned=\" false\" " ));
354+ assertThat (metadataStr , not (containsString ("<md:KeyDescriptor use=\" signing\" >" )));
355+ 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\" />" ));
356+ 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\" />" ));
357+ assertThat (metadataStr , containsString ("<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>" ));
358+ assertThat (metadataStr , containsString ("<md:AttributeConsumingService index=\" 0\" >" ));
359+ assertThat (metadataStr , containsString ("<md:ServiceName xml:lang=\" en\" >Just e-mail</md:ServiceName>" ));
360+ assertThat (metadataStr , containsString ("<md:RequestedAttribute Name=\" Email\" NameFormat=\" urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\" FriendlyName=\" E-mail address\" isRequired=\" true\" >" ));
361+ assertThat (metadataStr , containsString ("<saml:AttributeValue xmlns:saml=\" urn:oasis:names:tc:SAML:2.0:assertion\" >foo@example.org</saml:AttributeValue>" ));
362+ assertThat (metadataStr , containsString ("<saml:AttributeValue xmlns:saml=\" urn:oasis:names:tc:SAML:2.0:assertion\" >bar@example.org</saml:AttributeValue>" ));
363+ assertThat (metadataStr , containsString ("<md:AttributeConsumingService index=\" 1\" isDefault=\" true\" >" ));
364+ assertThat (metadataStr , containsString ("<md:ServiceName xml:lang=\" it\" >Anagrafica</md:ServiceName>" ));
365+ assertThat (metadataStr , containsString ("<md:ServiceDescription xml:lang=\" it\" >Servizio completo</md:ServiceDescription>" ));
366+ assertThat (metadataStr , containsString ("<md:RequestedAttribute Name=\" FirstName\" />" ));
367+ assertThat (metadataStr , containsString ("<md:RequestedAttribute Name=\" LastName\" isRequired=\" true\" />" ));
368+ }
369+
290370 /**
291371 * Tests the getSPMetadata method of the Saml2Settings
292372 * * Case Unsigned metadata No SLS
0 commit comments