@@ -263,4 +263,54 @@ public function testAddX509KeyDescriptors()
263263 $ this ->assertContains ('Error parsing metadata ' , $ e ->getMessage ());
264264 }
265265 }
266+
267+ /**
268+ * Tests the addX509KeyDescriptors method of the OneLogin_Saml2_Metadata
269+ * Case: Execute 2 addX509KeyDescriptors calls
270+ *
271+ * @covers OneLogin_Saml2_Metadata::addX509KeyDescriptors
272+ */
273+ public function testAddX509KeyDescriptors2Times ()
274+ {
275+ $ settingsDir = TEST_ROOT .'/settings/ ' ;
276+ include $ settingsDir .'settings1.php ' ;
277+
278+ $ settings = new OneLogin_Saml2_Settings ($ settingsInfo );
279+ $ spData = $ settings ->getSPData ();
280+
281+ $ metadata = OneLogin_Saml2_Metadata::builder ($ spData );
282+
283+ $ this ->assertNotContains ('<md:KeyDescriptor use="signing" ' , $ metadata );
284+ $ this ->assertNotContains ('<md:KeyDescriptor use="encryption" ' , $ metadata );
285+
286+ $ certPath = $ settings ->getCertPath ();
287+ $ cert = file_get_contents ($ certPath .'sp.crt ' );
288+
289+ $ metadata = OneLogin_Saml2_Metadata::addX509KeyDescriptors ($ metadata , $ cert , false );
290+
291+ $ this ->assertEquals (1 , substr_count ($ metadata , "<md:KeyDescriptor " ));
292+
293+ $ metadata = OneLogin_Saml2_Metadata::addX509KeyDescriptors ($ metadata , $ cert , false );
294+
295+ $ this ->assertEquals (2 , substr_count ($ metadata , "<md:KeyDescriptor " ));
296+
297+
298+ $ metadata2 = OneLogin_Saml2_Metadata::builder ($ spData );
299+
300+ $ metadata2 = OneLogin_Saml2_Metadata::addX509KeyDescriptors ($ metadata2 , $ cert );
301+
302+ $ this ->assertEquals (2 , substr_count ($ metadata2 , "<md:KeyDescriptor " ));
303+
304+ $ this ->assertEquals (1 , substr_count ($ metadata2 , '<md:KeyDescriptor use="signing" ' ));
305+
306+ $ this ->assertEquals (1 , substr_count ($ metadata2 , '<md:KeyDescriptor use="encryption" ' ));
307+
308+ $ metadata2 = OneLogin_Saml2_Metadata::addX509KeyDescriptors ($ metadata2 , $ cert );
309+
310+ $ this ->assertEquals (4 , substr_count ($ metadata2 , "<md:KeyDescriptor " ));
311+
312+ $ this ->assertEquals (2 , substr_count ($ metadata2 , '<md:KeyDescriptor use="signing" ' ));
313+
314+ $ this ->assertEquals (2 , substr_count ($ metadata2 , '<md:KeyDescriptor use="encryption" ' ));
315+ }
266316}
0 commit comments