SecurityExtensionTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection;
  11. use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
  12. use Symfony\Bundle\FrameworkBundle\DependencyInjection\SecurityExtension;
  13. use Symfony\Component\DependencyInjection\ContainerBuilder;
  14. abstract class SecurityExtensionTest extends TestCase
  15. {
  16. abstract protected function loadFromFile(ContainerBuilder $container, $file);
  17. public function testRolesHierarchy()
  18. {
  19. $container = $this->getContainer('hierarchy');
  20. $this->assertEquals(array(
  21. 'ROLE_ADMIN' => array('ROLE_USER'),
  22. 'ROLE_SUPER_ADMIN' => array('ROLE_USER', 'ROLE_ADMIN', 'ROLE_ALLOWED_TO_SWITCH'),
  23. 'ROLE_REMOTE' => array('ROLE_USER', 'ROLE_ADMIN'),
  24. ), $container->getParameter('security.role_hierarchy.roles'));
  25. }
  26. public function testUserProviders()
  27. {
  28. $container = $this->getContainer('provider');
  29. $providers = array_values(array_filter($container->getServiceIds(), function ($key) { return 0 === strpos($key, 'security.authentication.provider.'); }));
  30. $this->assertEquals(array(
  31. 'security.authentication.provider.digest',
  32. 'security.authentication.provider.digest_0ff1b54f2a4b7f71b2b9d6604fcca4b8',
  33. 'security.authentication.provider.basic',
  34. 'security.authentication.provider.basic_b7f0cf21802ffc8b22cadbb255f07213',
  35. 'security.authentication.provider.basic_98e44377704554700e68c22094b51ca4',
  36. 'security.authentication.provider.doctrine',
  37. 'security.authentication.provider.service',
  38. ), $providers);
  39. }
  40. public function testFirewalls()
  41. {
  42. $container = $this->getContainer('firewall');
  43. $listeners = array();
  44. foreach ($container->getDefinition('security.firewall.map')->getMethodCalls() as $call) {
  45. if ($call[0] == 'add') {
  46. $listeners[] = array_map(function ($ref) { return preg_replace('/\.[a-f0-9]+$/', '', (string) $ref); }, $call[1][1]);
  47. }
  48. }
  49. $this->assertEquals(array(
  50. array(),
  51. array(
  52. 'security.channel_listener',
  53. 'security.logout_listener',
  54. 'security.authentication.listener.x509',
  55. 'security.authentication.listener.form',
  56. 'security.authentication.listener.basic',
  57. 'security.authentication.listener.digest',
  58. 'security.authentication.listener.anonymous',
  59. 'security.access_listener',
  60. 'security.authentication.switchuser_listener',
  61. ),
  62. ), $listeners);
  63. }
  64. public function testAccess()
  65. {
  66. $container = $this->getContainer('access');
  67. $rules = array();
  68. foreach ($container->getDefinition('security.access_map')->getMethodCalls() as $call) {
  69. if ($call[0] == 'add') {
  70. $rules[] = array((string) $call[1][0], $call[1][1], $call[1][2]);
  71. }
  72. }
  73. $this->assertEquals(array(
  74. array('security.matcher.url.0', array('ROLE_USER'), 'https'),
  75. array('security.matcher.url.1', array('IS_AUTHENTICATED_ANONYMOUSLY'), null),
  76. ), $rules);
  77. }
  78. protected function getContainer($file)
  79. {
  80. $container = new ContainerBuilder();
  81. $security = new SecurityExtension();
  82. $container->registerExtension($security);
  83. $this->loadFromFile($container, $file);
  84. $container->getCompilerPassConfig()->setOptimizationPasses(array());
  85. $container->getCompilerPassConfig()->setRemovingPasses(array());
  86. $container->freeze();
  87. return $container;
  88. }
  89. }