4 require_once
'Services/User/classes/class.ilUserPasswordManager.php';
5 require_once
'Services/User/classes/class.ilUserPasswordEncoderFactory.php';
6 require_once
'Services/Password/classes/class.ilBasePasswordEncoder.php';
7 require_once
'Services/Utilities/classes/class.ilUtil.php';
8 require_once
'Services/User/classes/class.ilObjUser.php';
33 if(!defined(
'CLIENT_DATA_DIR'))
35 define(
'CLIENT_DATA_DIR',
'/tmp');
56 'password_encoder' =>
'md5' 68 'password_encoder' =>
'md5',
69 'encoder_factory' =>
'test' 79 $factory_mock = $this->getMockBuilder(
'ilUserPasswordEncoderFactory')->disableOriginalConstructor()->getMock();
80 $factory_mock->expects($this->exactly(2))->method(
'getSupportedEncoderNames')->will($this->onConsecutiveCalls(
82 'mockencoder',
'second_mockencoder' 91 'password_encoder' =>
'md5',
92 'encoder_factory' => $factory_mock
95 $this->assertInstanceOf(
'ilUserPasswordManager', $password_manager);
96 $this->assertEquals(
'md5', $password_manager->getEncoderName());
97 $this->assertEquals($factory_mock, $password_manager->getEncoderFactory());
99 $this->assertTrue($password_manager->isEncodingTypeSupported(
'second_mockencoder'));
100 $this->assertFalse($password_manager->isEncodingTypeSupported(
'second_mockencoder'));
108 $user_mock = $this->getMockBuilder(
'ilObjUser')->disableOriginalConstructor()->getMock();
109 $encoder = $this->getMockBuilder(
'ilBasePasswordEncoder')->disableOriginalConstructor()->getMock();
110 $factory_mock = $this->getMockBuilder(
'ilUserPasswordEncoderFactory')->disableOriginalConstructor()->getMock();
112 $user_mock->expects($this->once())->method(
'setPasswordSalt')->with($this->isType(
'string'));
113 $user_mock->expects($this->once())->method(
'getPasswordSalt')->will($this->returnValue(
'asuperrandomsalt'));
114 $user_mock->expects($this->once())->method(
'setPasswordEncodingType')->with($this->equalTo(
'mockencoder'));
115 $user_mock->expects($this->once())->method(
'setPasswd')->with($this->equalTo(self::ENCODED_PASSWORD), $this->equalTo(
IL_PASSWD_CRYPTED));
117 $encoder->expects($this->once())->method(
'getName')->will($this->returnValue(
'mockencoder'));
118 $encoder->expects($this->once())->method(
'requiresSalt')->will($this->returnValue(
true));
119 $encoder->expects($this->once())->method(
'encodePassword')->with($this->equalTo(self::PASSWORD), $this->isType(
'string'))->will($this->returnValue(self::ENCODED_PASSWORD));
121 $factory_mock->expects($this->once())->method(
'getEncoderByName')->will($this->returnValue($encoder));
125 'password_encoder' =>
'mockencoder',
126 'encoder_factory' => $factory_mock
130 $password_manager->encodePassword($user_mock, self::PASSWORD);
138 $user_mock = $this->getMockBuilder(
'ilObjUser')->disableOriginalConstructor()->getMock();
139 $encoder = $this->getMockBuilder(
'ilBasePasswordEncoder')->disableOriginalConstructor()->getMock();
140 $factory_mock = $this->getMockBuilder(
'ilUserPasswordEncoderFactory')->disableOriginalConstructor()->getMock();
142 $user_mock->expects($this->once())->method(
'setPasswordSalt')->with($this->equalTo(null));
143 $user_mock->expects($this->once())->method(
'getPasswordSalt')->will($this->returnValue(null));
144 $user_mock->expects($this->once())->method(
'setPasswordEncodingType')->with($this->equalTo(
'mockencoder'));
145 $user_mock->expects($this->once())->method(
'setPasswd')->with($this->equalTo(self::ENCODED_PASSWORD), $this->equalTo(
IL_PASSWD_CRYPTED));
147 $encoder->expects($this->once())->method(
'getName')->will($this->returnValue(
'mockencoder'));
148 $encoder->expects($this->once())->method(
'requiresSalt')->will($this->returnValue(
false));
149 $encoder->expects($this->once())->method(
'encodePassword')->with($this->equalTo(self::PASSWORD), $this->equalTo(null))->will($this->returnValue(self::ENCODED_PASSWORD));
151 $factory_mock->expects($this->once())->method(
'getEncoderByName')->will($this->returnValue($encoder));
155 'password_encoder' =>
'mockencoder',
156 'encoder_factory' => $factory_mock
160 $password_manager->encodePassword($user_mock, self::PASSWORD);
168 $user_mock = $this->getMockBuilder(
'ilObjUser')->disableOriginalConstructor()->getMock();
169 $encoder = $this->getMockBuilder(
'ilBasePasswordEncoder')->disableOriginalConstructor()->getMock();
170 $factory_mock = $this->getMockBuilder(
'ilUserPasswordEncoderFactory')->disableOriginalConstructor()->getMock();
172 $user_mock->expects($this->once())->method(
'getPasswordSalt')->will($this->returnValue(
'asuperrandomsalt'));
173 $user_mock->expects($this->once())->method(
'getPasswordEncodingType')->will($this->returnValue(
'mockencoder'));
174 $user_mock->expects($this->once())->method(
'getPasswd')->will($this->returnValue(self::ENCODED_PASSWORD));
176 $encoder->expects($this->once())->method(
'getName')->will($this->returnValue(
'mockencoder'));
177 $encoder->expects($this->once())->method(
'isPasswordValid')->with($this->equalTo(self::ENCODED_PASSWORD), $this->equalTo(self::PASSWORD), $this->isType(
'string'))->will($this->returnValue(
true));
179 $factory_mock->expects($this->once())->method(
'getEncoderByName')->will($this->returnValue($encoder));
183 'password_encoder' =>
'mockencoder',
184 'encoder_factory' => $factory_mock
188 $this->assertTrue($password_manager->verifyPassword($user_mock, self::PASSWORD));
196 $user_mock = $this->getMockBuilder(
'ilObjUser')->disableOriginalConstructor()->getMock();
197 $encoder = $this->getMockBuilder(
'ilBasePasswordEncoder')->disableOriginalConstructor()->getMock();
198 $factory_mock = $this->getMockBuilder(
'ilUserPasswordEncoderFactory')->disableOriginalConstructor()->getMock();
200 $user_mock->expects($this->once())->method(
'getPasswordSalt')->will($this->returnValue(
'asuperrandomsalt'));
201 $user_mock->expects($this->once())->method(
'getPasswordEncodingType')->will($this->returnValue(
'second_mockencoder'));
202 $user_mock->expects($this->once())->method(
'getPasswd')->will($this->returnValue(self::ENCODED_PASSWORD));
203 $user_mock->expects($this->once())->method(
'resetPassword')->with($this->equalTo(self::PASSWORD), $this->equalTo(self::PASSWORD));
205 $encoder->expects($this->once())->method(
'getName')->will($this->returnValue(
'second_mockencoder'));
206 $encoder->expects($this->once())->method(
'isPasswordValid')->with($this->equalTo(self::ENCODED_PASSWORD), $this->equalTo(self::PASSWORD), $this->isType(
'string'))->will($this->returnValue(
true));
208 $factory_mock->expects($this->once())->method(
'getEncoderByName')->will($this->returnValue($encoder));
212 'password_encoder' =>
'mockencoder',
213 'encoder_factory' => $factory_mock
217 $this->assertTrue($password_manager->verifyPassword($user_mock, self::PASSWORD));
225 $user_mock = $this->getMockBuilder(
'ilObjUser')->disableOriginalConstructor()->getMock();
226 $encoder = $this->getMockBuilder(
'ilBasePasswordEncoder')->disableOriginalConstructor()->getMock();
227 $factory_mock = $this->getMockBuilder(
'ilUserPasswordEncoderFactory')->disableOriginalConstructor()->getMock();
229 $user_mock->expects($this->once())->method(
'getPasswordSalt')->will($this->returnValue(
'asuperrandomsalt'));
230 $user_mock->expects($this->once())->method(
'getPasswordEncodingType')->will($this->returnValue(
'second_mockencoder'));
231 $user_mock->expects($this->once())->method(
'getPasswd')->will($this->returnValue(self::ENCODED_PASSWORD));
232 $user_mock->expects($this->never())->method(
'resetPassword');
234 $encoder->expects($this->once())->method(
'getName')->will($this->returnValue(
'second_mockencoder'));
235 $encoder->expects($this->once())->method(
'isPasswordValid')->with($this->equalTo(self::ENCODED_PASSWORD), $this->equalTo(self::PASSWORD), $this->isType(
'string'))->will($this->returnValue(
false));
237 $factory_mock->expects($this->once())->method(
'getEncoderByName')->will($this->returnValue($encoder));
241 'password_encoder' =>
'mockencoder',
242 'encoder_factory' => $factory_mock
246 $this->assertFalse($password_manager->verifyPassword($user_mock, self::PASSWORD));
255 $this->assertInstanceOf(
'ilUserPasswordEncoderFactory', $factory);
264 $this->assertEquals(
'md5', $factory->getDefaultEncoder());
266 $encoder = $this->getMockBuilder(
'ilBasePasswordEncoder')->disableOriginalConstructor()->getMock();
267 $encoder->expects($this->atLeastOnce())->method(
'getName')->will($this->returnValue(
'mockencoder'));
269 $second_mockencoder = $this->getMockBuilder(
'ilBasePasswordEncoder')->disableOriginalConstructor()->getMock();
270 $second_mockencoder->expects($this->atLeastOnce())->method(
'getName')->will($this->returnValue(
'second_mockencoder'));
272 $factory->setEncoders(array($encoder, $second_mockencoder));
273 $this->assertCount(2, $factory->getEncoders());
274 $this->assertCount(2, $factory->getSupportedEncoderNames());
275 $this->assertCount(0, array_diff(array(
'mockencoder',
'second_mockencoder'), $factory->getSupportedEncoderNames()));
276 $this->assertCount(0, array_diff($factory->getSupportedEncoderNames(), array(
'mockencoder',
'second_mockencoder')));
285 $factory->setEncoders(array(
'phpunit'));
294 $factory->getEncoderByName(
'phpunit');
303 $factory->getEncoderByName(
'phpunit',
true);
312 $factory->getEncoderByName(
'phpunit',
true);
320 $encoder = $this->getMockBuilder(
'ilBasePasswordEncoder')->disableOriginalConstructor()->getMock();
321 $encoder->expects($this->atLeastOnce())->method(
'getName')->will($this->returnValue(
'mockencoder'));
324 $factory->setEncoders(array($encoder));
325 $this->assertEquals($encoder, $factory->getEncoderByName(
'phpunit',
true));
333 $encoder = $this->getMockBuilder(
'ilBasePasswordEncoder')->disableOriginalConstructor()->getMock();
334 $encoder->expects($this->atLeastOnce())->method(
'getName')->will($this->returnValue(
'mockencoder'));
337 $factory->setEncoders(array($encoder));
338 $this->assertEquals($encoder, $factory->getEncoderByName(
'mockencoder',
true));
testPasswordManagerEncodesRawPasswordWithoutSalt()
testPasswordManagerNeverMigratesPasswordOnFailedVerificationWithVariantEncoders()
testExceptionIsRaisedIfPasswordManagerIsCreatedWithoutValidFactory()
PHPUnit_Framework_Error
testFactoryReturnsTheDefaultEncoderIfAnUnsupportedEncoderIsRequestedAndASupportedDefaultEncoderWasSpecifiedInFallbackMode()
setUp()
Sets up the fixture, for example, open a network connection.
testFactoryRaisesAnExceptionIfAnUnsupportedEncoderWasInjected()
ilUserException
testExceptionIsRaisedIfAnUnsupportedEncoderIsRequestedFromFactory()
ilUserException
testPasswordManagerVerifiesPassword()
testExceptionIsRaisedIfPasswordManagerIsCreatedWithoutEncoderInformation()
ilUserException
testInstanceCanBeCreated()
testPasswordManagerEncodesRawPasswordWithSalt()
testFactoryReturnsCorrectEncoderIfAMatchingEncoderWasFound()
testFactoryCanBeCreated()
testFactoryRaisesAnExceptionIfAnUnsupportedEncoderIsRequestedAndNoDefaultEncoderWasSpecifiedInFallbackMode()
ilUserException
testFactoryRaisesAnExceptionIfAnUnsupportedEncoderIsRequestedAndTheDefaultEncoderDoesNotMatchOneOfTheSupportedEncodersInFallbackMode()
ilUserException
testPasswordManagerMigratesPasswordOnVerificationWithVariantEncoders()
testExceptionIsRaisedIfPasswordManagerIsCreatedWithoutFactory()
ilUserException
testGettersOfFactoryShouldReturnWhatWasSetBySetters()