* * 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:----GMzBaMKD7RBKWTUwfQ+QT9xxC43bvI/ZWCXm5Q8EuG524ExmKNjrEJDir+Zs8rxdLPgixebgAx8hxONKbprfNH7tDWGy1R5xMH1XcxdIG5TVKUx3T7Gn8hz9tZlcfjdeFcXKpzUMKk8Ty12QAFhDxyoL6oPNhxQygOvl9kU3yjskokm60pLBJlb944pnRBVnZxyJa7Bs/f/6jwv0C8F7bA5wobd4ZMC3uRKqFommSG1gAYeHrZR6fYis+j9iOf5/YYYSbLsrorV0f7AMP419jA9hxMd3D6U2/k5EepbVj94ZUseEkT5NVz+KHvkhvMRfY0llGaTP5A0quzKqfPLRpv8/obuc+j19hNW5OfrfeLzV11KlAlkSgk2CKBB5CiJofn4KAa2JkTOenMh8K1i/E2WrKKvGnkAYEWcfA8oJtGIY9RW6WbrKopImBamu9bDXy5tjPQkv8Jl3LZRvuCmdiXdEkszu18rSWgGCZ3cv5C5SucUuQRAvXLL6YiUzG0ofBTmCuz9L/LL9NgZVtqh1kSB/C+z6gckwHQkNI0MN+h/UDwzqtALZUexmm0wLCap4VQrMivgeJ9obRk49+T44/eeRHxDJwqejc+BRrOvOiz7mW27WpGRjPbiznM5tprHU/qL+wyuflMgzt7eHzYlZieZBcP+m5WIv8PDmKkPuHz0=----ATTACHMENT:----NTkxMjg1NDU5Njk5MjM0NSA0NTY0MDM0MTkwNjY0NDk5IDkzMjc0NzgxNDc4MDM4ODg=