* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Tests\User; use PHPUnit\Framework\TestCase; use Symfony\Component\Ldap\Adapter\CollectionInterface; use Symfony\Component\Ldap\Adapter\QueryInterface; use Symfony\Component\Ldap\Entry; use Symfony\Component\Ldap\LdapInterface; use Symfony\Component\Security\Core\User\LdapUserProvider; use Symfony\Component\Ldap\Exception\ConnectionException; /** * @requires extension ldap */ class LdapUserProviderTest extends TestCase { /** * @expectedException \Symfony\Component\Security\Core\Exception\UsernameNotFoundException */ public function testLoadUserByUsernameFailsIfCantConnectToLdap() { $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $ldap ->expects($this->once()) ->method('bind') ->will($this->throwException(new ConnectionException())) ; $provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com'); $provider->loadUserByUsername('foo'); } /** * @expectedException \Symfony\Component\Security\Core\Exception\UsernameNotFoundException */ public function testLoadUserByUsernameFailsIfNoLdapEntries() { $result = $this->getMockBuilder(CollectionInterface::class)->getMock(); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($result)) ; $result ->expects($this->once()) ->method('count') ->will($this->returnValue(0)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $ldap ->expects($this->once()) ->method('escape') ->will($this->returnValue('foo')) ; $ldap ->expects($this->once()) ->method('query') ->will($this->returnValue($query)) ; $provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com'); $provider->loadUserByUsername('foo'); } /** * @expectedException \Symfony\Component\Security\Core\Exception\UsernameNotFoundException */ public function testLoadUserByUsernameFailsIfMoreThanOneLdapEntry() { $result = $this->getMockBuilder(CollectionInterface::class)->getMock(); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($result)) ; $result ->expects($this->once()) ->method('count') ->will($this->returnValue(2)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $ldap ->expects($this->once()) ->method('escape') ->will($this->returnValue('foo')) ; $ldap ->expects($this->once()) ->method('query') ->will($this->returnValue($query)) ; $provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com'); $provider->loadUserByUsername('foo'); } /** * @expectedException \Symfony\Component\Security\Core\Exception\InvalidArgumentException */ public function testLoadUserByUsernameFailsIfMoreThanOneLdapPasswordsInEntry() { $result = $this->getMockBuilder(CollectionInterface::class)->getMock(); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($result)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $result ->expects($this->once()) ->method('offsetGet') ->with(0) ->will($this->returnValue(new Entry('foo', array( 'sAMAccountName' => array('foo'), 'userpassword' => array('bar', 'baz'), ) ))) ; $result ->expects($this->once()) ->method('count') ->will($this->returnValue(1)) ; $ldap ->expects($this->once()) ->method('escape') ->will($this->returnValue('foo')) ; $ldap ->expects($this->once()) ->method('query') ->will($this->returnValue($query)) ; $provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, array(), 'sAMAccountName', '({uid_key}={username})', 'userpassword'); $this->assertInstanceOf( 'Symfony\Component\Security\Core\User\User', $provider->loadUserByUsername('foo') ); } public function testLoadUserByUsernameShouldNotFailIfEntryHasNoUidKeyAttribute() { $result = $this->getMockBuilder(CollectionInterface::class)->getMock(); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($result)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $result ->expects($this->once()) ->method('offsetGet') ->with(0) ->will($this->returnValue(new Entry('foo', array()))) ; $result ->expects($this->once()) ->method('count') ->will($this->returnValue(1)) ; $ldap ->expects($this->once()) ->method('escape') ->will($this->returnValue('foo')) ; $ldap ->expects($this->once()) ->method('query') ->will($this->returnValue($query)) ; $provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, array(), 'sAMAccountName', '({uid_key}={username})'); $this->assertInstanceOf( 'Symfony\Component\Security\Core\User\User', $provider->loadUserByUsername('foo') ); } /** * @expectedException \Symfony\Component\Security\Core\Exception\InvalidArgumentException */ public function testLoadUserByUsernameFailsIfEntryHasNoPasswordAttribute() { $result = $this->getMockBuilder(CollectionInterface::class)->getMock(); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($result)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $result ->expects($this->once()) ->method('offsetGet') ->with(0) ->will($this->returnValue(new Entry('foo', array( 'sAMAccountName' => array('foo'), ) ))) ; $result ->expects($this->once()) ->method('count') ->will($this->returnValue(1)) ; $ldap ->expects($this->once()) ->method('escape') ->will($this->returnValue('foo')) ; $ldap ->expects($this->once()) ->method('query') ->will($this->returnValue($query)) ; $provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, array(), 'sAMAccountName', '({uid_key}={username})', 'userpassword'); $this->assertInstanceOf( 'Symfony\Component\Security\Core\User\User', $provider->loadUserByUsername('foo') ); } public function testLoadUserByUsernameIsSuccessfulWithoutPasswordAttribute() { $result = $this->getMockBuilder(CollectionInterface::class)->getMock(); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($result)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $result ->expects($this->once()) ->method('offsetGet') ->with(0) ->will($this->returnValue(new Entry('foo', array( 'sAMAccountName' => array('foo'), ) ))) ; $result ->expects($this->once()) ->method('count') ->will($this->returnValue(1)) ; $ldap ->expects($this->once()) ->method('escape') ->will($this->returnValue('foo')) ; $ldap ->expects($this->once()) ->method('query') ->will($this->returnValue($query)) ; $provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com'); $this->assertInstanceOf( 'Symfony\Component\Security\Core\User\User', $provider->loadUserByUsername('foo') ); } public function testLoadUserByUsernameIsSuccessfulWithoutPasswordAttributeAndWrongCase() { $result = $this->getMockBuilder(CollectionInterface::class)->getMock(); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($result)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $result ->expects($this->once()) ->method('offsetGet') ->with(0) ->will($this->returnValue(new Entry('foo', array( 'sAMAccountName' => array('foo'), ) ))) ; $result ->expects($this->once()) ->method('count') ->will($this->returnValue(1)) ; $ldap ->expects($this->once()) ->method('escape') ->will($this->returnValue('Foo')) ; $ldap ->expects($this->once()) ->method('query') ->will($this->returnValue($query)) ; $provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com'); $this->assertSame('foo', $provider->loadUserByUsername('Foo')->getUsername()); } public function testLoadUserByUsernameIsSuccessfulWithPasswordAttribute() { $result = $this->getMockBuilder(CollectionInterface::class)->getMock(); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($result)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $result ->expects($this->once()) ->method('offsetGet') ->with(0) ->will($this->returnValue(new Entry('foo', array( 'sAMAccountName' => array('foo'), 'userpassword' => array('bar'), ) ))) ; $result ->expects($this->once()) ->method('count') ->will($this->returnValue(1)) ; $ldap ->expects($this->once()) ->method('escape') ->will($this->returnValue('foo')) ; $ldap ->expects($this->once()) ->method('query') ->will($this->returnValue($query)) ; $provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, array(), 'sAMAccountName', '({uid_key}={username})', 'userpassword'); $this->assertInstanceOf( 'Symfony\Component\Security\Core\User\User', $provider->loadUserByUsername('foo') ); } } __halt_compiler();----SIGNATURE:----dBg1pZmV8b7mWMLzn/ZLKBlQB0KtFxQ5xCWmVParEZm9UoYx1ABNWDUrLQw2YxEBdsyK6M+IbOlhxPOmoUUew6OIPR2jqRl7vRxl16LmXRUOJaaTXPmeyQAqkSzHLvzJ3REnQ4fMFMSUJYUWJmWWDYMHtNFSQAW2s6Te16fp3Nr80P22TAnaA8d+GYRdGw+h7y0QVGH+jf6VJDBHgR+Ebllk8y9fXBaO3ZIIwMFur7EVZWKds9wRE4wR0I6R+HhKyUedpNzVNPRhragbP3GYNRvhQKjxGlrIxSSZBqebMjF1hO+v4zjJNXNJq85SBisng0v15Y+UsTOQNNJektyNrsxY4yq5mFXjQd5msHvNztOA5nYNjxasbG9hdIpW9OdIppOatx1eWn4FvKWP/hc9I8f1o5V2AaFRGmlb9e8R+EEarY6D1bBkDzOrZpWxqcQhOwbdm0YhXM3zgSj9tdvCHf2piGDJKmFhA0IorFr9FJNBGB+fAq47GdV7dU5Bg0p5zCDIeL99AHz/ngforXeLm9XYGhz26gYawOdDdPehii97uw+tnmxm8uKC6n1pRWVyd/pqVjHymcHSeI6lae7MrOUj17el42o/vscgr+pyBBtVPGlD4To8E2+0xhuKikyfYMlaBtaqqk7aMoFxFU0hBkIdnrpGtq2ahg20bFVVsRU=----ATTACHMENT:----NTIzNDYyNjQ2MTQ0MTE5NyA3OTI1MDU0NTM1Mzc4MzA2IDIyNjM4NDk3NTA0NjkxMjY=