@@ -116,6 +116,18 @@ public void testCheckSPSettingsAllErrors() throws IOException, Error {
116116 assertThat (settingsErrors , hasItem ("sp_cert_not_found_and_required" ));
117117 assertThat (settingsErrors , hasItem ("contact_not_enough_data" ));
118118 assertThat (settingsErrors , hasItem ("organization_not_enough_data" ));
119+
120+ Saml2Settings settings2 = new SettingsBuilder ().fromFile ("config/config.sperrors_multi_attribute_consuming_services.properties" ).build ();
121+ List <String > settings2Errors = settings2 .checkSPSettings ();
122+ assertFalse (settings2Errors .isEmpty ());
123+ assertThat (settings2Errors , hasItem ("sp_entityId_not_found" ));
124+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_data" ));
125+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_no_requested_attribute" ));
126+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_multiple_defaults" ));
127+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_requested_attribute_data" ));
128+ assertThat (settings2Errors , hasItem ("sp_cert_not_found_and_required" ));
129+ assertThat (settings2Errors , hasItem ("contact_not_enough_data" ));
130+ assertThat (settings2Errors , hasItem ("organization_not_enough_data" ));
119131 }
120132
121133 /**
@@ -132,6 +144,15 @@ public void testCheckSPSettingsOk() throws IOException, Error {
132144 Saml2Settings settings = new SettingsBuilder ().fromFile ("config/config.all.properties" ).build ();
133145 List <String > settingsErrors = settings .checkSPSettings ();
134146 assertTrue (settingsErrors .isEmpty ());
147+
148+ Saml2Settings settings2 = new SettingsBuilder ().fromFile ("config/config.all_multi_attribute_consuming_services.properties" ).build ();
149+ List <String > settings2Errors = settings2 .checkSPSettings ();
150+ assertTrue (settings2Errors .isEmpty ());
151+
152+ // no attribute consuming services at all
153+ Saml2Settings settings3 = new SettingsBuilder ().fromFile ("config/config.min.properties" ).build ();
154+ List <String > settings3Errors = settings3 .checkSPSettings ();
155+ assertTrue (settings3Errors .isEmpty ());
135156 }
136157
137158 /**
@@ -157,6 +178,22 @@ public void testCheckSettingsAllErrors() throws IOException, Error {
157178 assertThat (settingsErrors , hasItem ("idp_sso_url_invalid" ));
158179 assertThat (settingsErrors , hasItem ("idp_cert_or_fingerprint_not_found_and_required" ));
159180 assertThat (settingsErrors , hasItem ("idp_cert_not_found_and_required" ));
181+
182+ Saml2Settings settings2 = new SettingsBuilder ().fromFile ("config/config.allerrors_multi_attribute_consuming_services.properties" ).build ();
183+ List <String > settings2Errors = settings2 .checkSettings ();
184+ assertFalse (settings2Errors .isEmpty ());
185+ assertThat (settings2Errors , hasItem ("sp_entityId_not_found" ));
186+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_data" ));
187+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_no_requested_attribute" ));
188+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_multiple_defaults" ));
189+ assertThat (settings2Errors , hasItem ("sp_attribute_consuming_service_not_enough_requested_attribute_data" ));
190+ assertThat (settings2Errors , hasItem ("sp_cert_not_found_and_required" ));
191+ assertThat (settings2Errors , hasItem ("contact_not_enough_data" ));
192+ assertThat (settings2Errors , hasItem ("organization_not_enough_data" ));
193+ assertThat (settings2Errors , hasItem ("idp_entityId_not_found" ));
194+ assertThat (settings2Errors , hasItem ("idp_sso_url_invalid" ));
195+ assertThat (settings2Errors , hasItem ("idp_cert_or_fingerprint_not_found_and_required" ));
196+ assertThat (settings2Errors , hasItem ("idp_cert_not_found_and_required" ));
160197 }
161198
162199 /**
@@ -285,6 +322,49 @@ public void testGetSPMetadataUnsigned() throws Exception {
285322 assertThat (metadataStr , containsString ("<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>" ));
286323 }
287324
325+ /**
326+ * Tests the getSPMetadata method of the Saml2Settings
327+ * <p>
328+ * Case Unsigned metadata with multiple Attribute Consuming Services
329+ *
330+ * @throws Exception
331+ *
332+ * @see com.onelogin.saml2.settings.Saml2Settings#getSPMetadata
333+ */
334+ @ Test
335+ public void testGetSPMetadataUnsignedMultiAttributeConsumingServices () throws Exception {
336+ Saml2Settings settings = new SettingsBuilder ().fromFile ("config/config.min_multi_attribute_consuming_services.properties" ).build ();
337+
338+ String metadataStr = settings .getSPMetadata ();
339+
340+ Document metadataDoc = Util .loadXML (metadataStr );
341+ assertTrue (metadataDoc instanceof Document );
342+
343+ assertEquals ("md:EntityDescriptor" , metadataDoc .getDocumentElement ().getNodeName ());
344+ assertEquals ("md:SPSSODescriptor" , metadataDoc .getDocumentElement ().getFirstChild ().getNodeName ());
345+
346+ assertTrue (Util .validateXML (metadataDoc , SchemaFactory .SAML_SCHEMA_METADATA_2_0 ));
347+
348+ assertThat (metadataStr , containsString ("<md:SPSSODescriptor" ));
349+ assertThat (metadataStr , containsString ("entityID=\" http://localhost:8080/java-saml-jspsample/metadata.jsp\" " ));
350+ assertThat (metadataStr , containsString ("AuthnRequestsSigned=\" false\" " ));
351+ assertThat (metadataStr , containsString ("WantAssertionsSigned=\" false\" " ));
352+ assertThat (metadataStr , not (containsString ("<md:KeyDescriptor use=\" signing\" >" )));
353+ 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\" />" ));
354+ 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\" />" ));
355+ assertThat (metadataStr , containsString ("<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>" ));
356+ assertThat (metadataStr , containsString ("<md:AttributeConsumingService index=\" 0\" >" ));
357+ assertThat (metadataStr , containsString ("<md:ServiceName xml:lang=\" en\" >Just e-mail</md:ServiceName>" ));
358+ assertThat (metadataStr , containsString ("<md:RequestedAttribute Name=\" Email\" NameFormat=\" urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\" FriendlyName=\" E-mail address\" isRequired=\" true\" >" ));
359+ assertThat (
metadataStr ,
containsString (
"<saml:AttributeValue xmlns:saml=\" urn:oasis:names:tc:SAML:2.0:assertion\" >[email protected] </saml:AttributeValue>" ));
360+ assertThat (
metadataStr ,
containsString (
"<saml:AttributeValue xmlns:saml=\" urn:oasis:names:tc:SAML:2.0:assertion\" >[email protected] </saml:AttributeValue>" ));
361+ assertThat (metadataStr , containsString ("<md:AttributeConsumingService index=\" 1\" isDefault=\" true\" >" ));
362+ assertThat (metadataStr , containsString ("<md:ServiceName xml:lang=\" it\" >Anagrafica</md:ServiceName>" ));
363+ assertThat (metadataStr , containsString ("<md:ServiceDescription xml:lang=\" it\" >Servizio completo</md:ServiceDescription>" ));
364+ assertThat (metadataStr , containsString ("<md:RequestedAttribute Name=\" FirstName\" />" ));
365+ assertThat (metadataStr , containsString ("<md:RequestedAttribute Name=\" LastName\" isRequired=\" true\" />" ));
366+ }
367+
288368 /**
289369 * Tests the getSPMetadata method of the Saml2Settings
290370 * * Case Unsigned metadata No SLS
0 commit comments