PageRenderTime 71ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/Symfony/vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php

https://bitbucket.org/vvanuytven/php_auto
PHP | 200 lines | 160 code | 31 blank | 9 comment | 3 complexity | d0d438735534667b08309de826836b11 MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.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\SecurityBundle\Tests\DependencyInjection;
  11. use Symfony\Component\DependencyInjection\Reference;
  12. use Symfony\Component\DependencyInjection\Parameter;
  13. use Symfony\Bundle\SecurityBundle\SecurityBundle;
  14. use Symfony\Bundle\SecurityBundle\DependencyInjection\SecurityExtension;
  15. use Symfony\Component\DependencyInjection\ContainerBuilder;
  16. abstract class SecurityExtensionTest extends \PHPUnit_Framework_TestCase
  17. {
  18. abstract protected function loadFromFile(ContainerBuilder $container, $file);
  19. public function testRolesHierarchy()
  20. {
  21. $container = $this->getContainer('container1');
  22. $this->assertEquals(array(
  23. 'ROLE_ADMIN' => array('ROLE_USER'),
  24. 'ROLE_SUPER_ADMIN' => array('ROLE_USER', 'ROLE_ADMIN', 'ROLE_ALLOWED_TO_SWITCH'),
  25. 'ROLE_REMOTE' => array('ROLE_USER', 'ROLE_ADMIN'),
  26. ), $container->getParameter('security.role_hierarchy.roles'));
  27. }
  28. public function testUserProviders()
  29. {
  30. $container = $this->getContainer('container1');
  31. $providers = array_values(array_filter($container->getServiceIds(), function ($key) { return 0 === strpos($key, 'security.user.provider.concrete'); }));
  32. $expectedProviders = array(
  33. 'security.user.provider.concrete.default',
  34. 'security.user.provider.concrete.default_foo',
  35. 'security.user.provider.concrete.digest',
  36. 'security.user.provider.concrete.digest_foo',
  37. 'security.user.provider.concrete.basic',
  38. 'security.user.provider.concrete.basic_foo',
  39. 'security.user.provider.concrete.basic_bar',
  40. 'security.user.provider.concrete.service',
  41. 'security.user.provider.concrete.chain',
  42. );
  43. $this->assertEquals(array(), array_diff($expectedProviders, $providers));
  44. $this->assertEquals(array(), array_diff($providers, $expectedProviders));
  45. // chain provider
  46. $this->assertEquals(array(array(
  47. new Reference('security.user.provider.concrete.service'),
  48. new Reference('security.user.provider.concrete.basic'),
  49. )), $container->getDefinition('security.user.provider.concrete.chain')->getArguments());
  50. }
  51. public function testFirewalls()
  52. {
  53. $container = $this->getContainer('container1');
  54. $arguments = $container->getDefinition('security.firewall.map')->getArguments();
  55. $listeners = array();
  56. foreach (array_keys($arguments[1]) as $contextId) {
  57. $contextDef = $container->getDefinition($contextId);
  58. $arguments = $contextDef->getArguments();
  59. $listeners[] = array_map(function ($ref) { return (string) $ref; }, $arguments['index_0']);
  60. }
  61. $this->assertEquals(array(
  62. array(),
  63. array(
  64. 'security.channel_listener',
  65. 'security.logout_listener.secure',
  66. 'security.authentication.listener.x509.secure',
  67. 'security.authentication.listener.form.secure',
  68. 'security.authentication.listener.basic.secure',
  69. 'security.authentication.listener.digest.secure',
  70. 'security.authentication.listener.anonymous.secure',
  71. 'security.access_listener',
  72. 'security.authentication.switchuser_listener.secure',
  73. ),
  74. ), $listeners);
  75. }
  76. public function testAccess()
  77. {
  78. $container = $this->getContainer('container1');
  79. $rules = array();
  80. foreach ($container->getDefinition('security.access_map')->getMethodCalls() as $call) {
  81. if ($call[0] == 'add') {
  82. $rules[] = array((string) $call[1][0], $call[1][1], $call[1][2]);
  83. }
  84. }
  85. $matcherIds = array();
  86. foreach ($rules as $rule) {
  87. list($matcherId, $roles, $channel) = $rule;
  88. $requestMatcher = $container->getDefinition($matcherId);
  89. $this->assertFalse(isset($matcherIds[$matcherId]));
  90. $matcherIds[$matcherId] = true;
  91. $i = count($matcherIds);
  92. if (1 === $i) {
  93. $this->assertEquals(array('ROLE_USER'), $roles);
  94. $this->assertEquals('https', $channel);
  95. $this->assertEquals(
  96. array('/blog/524', null, array('GET', 'POST')),
  97. $requestMatcher->getArguments()
  98. );
  99. } elseif (2 === $i) {
  100. $this->assertEquals(array('IS_AUTHENTICATED_ANONYMOUSLY'), $roles);
  101. $this->assertNull($channel);
  102. $this->assertEquals(
  103. array('/blog/.*'),
  104. $requestMatcher->getArguments()
  105. );
  106. }
  107. }
  108. }
  109. public function testMerge()
  110. {
  111. $container = $this->getContainer('merge');
  112. $this->assertEquals(array(
  113. 'FOO' => array('MOO'),
  114. 'ADMIN' => array('USER'),
  115. ), $container->getParameter('security.role_hierarchy.roles'));
  116. }
  117. public function testEncoders()
  118. {
  119. $container = $this->getContainer('container1');
  120. $this->assertEquals(array(array(
  121. 'JMS\FooBundle\Entity\User1' => array(
  122. 'class' => new Parameter('security.encoder.plain.class'),
  123. 'arguments' => array(false),
  124. ),
  125. 'JMS\FooBundle\Entity\User2' => array(
  126. 'class' => new Parameter('security.encoder.digest.class'),
  127. 'arguments' => array('sha1', false, 5),
  128. ),
  129. 'JMS\FooBundle\Entity\User3' => array(
  130. 'class' => new Parameter('security.encoder.digest.class'),
  131. 'arguments' => array('md5', true, 5000),
  132. ),
  133. 'JMS\FooBundle\Entity\User4' => new Reference('security.encoder.foo'),
  134. 'JMS\FooBundle\Entity\User5' => array(
  135. 'class' => new Parameter('security.encoder.pbkdf2.class'),
  136. 'arguments' => array('sha1', false, 5, 30),
  137. ),
  138. 'JMS\FooBundle\Entity\User6' => array(
  139. 'class' => new Parameter('security.encoder.bcrypt.class'),
  140. 'arguments' => array(15),
  141. ),
  142. )), $container->getDefinition('security.encoder_factory.generic')->getArguments());
  143. }
  144. public function testAcl()
  145. {
  146. $container = $this->getContainer('container1');
  147. $this->assertTrue($container->hasDefinition('security.acl.dbal.provider'));
  148. $this->assertEquals('security.acl.dbal.provider', (string) $container->getAlias('security.acl.provider'));
  149. }
  150. public function testCustomAclProvider()
  151. {
  152. $container = $this->getContainer('custom_acl_provider');
  153. $this->assertFalse($container->hasDefinition('security.acl.dbal.provider'));
  154. $this->assertEquals('foo', (string) $container->getAlias('security.acl.provider'));
  155. }
  156. protected function getContainer($file)
  157. {
  158. $container = new ContainerBuilder();
  159. $security = new SecurityExtension();
  160. $container->registerExtension($security);
  161. $bundle = new SecurityBundle();
  162. $bundle->build($container); // Attach all default factories
  163. $this->loadFromFile($container, $file);
  164. $container->getCompilerPassConfig()->setOptimizationPasses(array());
  165. $container->getCompilerPassConfig()->setRemovingPasses(array());
  166. $container->compile();
  167. return $container;
  168. }
  169. }