19 declare(strict_types=1);
28 protected function setUp(): void
32 $this->dic_backup =
$DIC;
40 $this->createMock(ilDBInterface::class)
66 $DIC[$name] =
static function (
Container $c) use ($name) {
71 public function testBasicSessionBehaviour():
void 77 $this->getMockBuilder(ilIniFile::class)->disableOriginalConstructor()->getMock()
81 $settings = $this->getMockBuilder(ilSetting::class)->getMock();
82 $settings->method(
'get')->willReturnCallback(
84 if ($arg ===
'session_statistics') {
88 throw new \RuntimeException($arg);
98 $ilDB->method(
'update')->
99 with(
'usr_session')->willReturn(1);
102 $consecutive_quote = [
106 'e10adc3949ba59abbe56e057f20f883e',
108 'e10adc3949ba59abbe56e057f20f883e',
109 'e10adc3949ba59abbe56e057f20f883e',
114 'e10adc3949ba59abbe56e057f20f883e',
116 'e10adc3949ba59abbe56e057f20f883e' 118 $ilDB->method(
'quote')->with(
119 $this->callback(
function ($value) use (&$consecutive_quote) {
120 if (count($consecutive_quote) === 4) {
121 $this->assertGreaterThan(array_shift($consecutive_quote), $value);
123 $this->assertSame(array_shift($consecutive_quote), $value);
127 )->willReturnOnConsecutiveCalls(
131 'e10adc3949ba59abbe56e057f20f883e',
132 'e10adc3949ba59abbe56e057f20f883e',
134 'e10adc3949ba59abbe56e057f20f883e',
135 'e10adc3949ba59abbe56e057f20f883e',
140 'e10adc3949ba59abbe56e057f20f883e',
142 'e10adc3949ba59abbe56e057f20f883e' 144 $ilDB->expects($this->exactly(6))->method(
'numRows')->willReturn(1, 1, 1, 0, 1, 0);
146 $consecutive_select = [
147 'SELECT 1 FROM usr_session WHERE session_id = 123456',
148 'SELECT 1 FROM usr_session WHERE session_id = 123456',
149 'SELECT data FROM usr_session WHERE session_id = 123456',
150 'SELECT * FROM usr_session WHERE session_id = e10adc3949ba59abbe56e057f20f883e',
151 'SELECT * FROM usr_session WHERE session_id = e10adc3949ba59abbe56e057f20f883e',
152 'SELECT 1 FROM usr_session WHERE session_id = 123456',
153 'SELECT data FROM usr_session WHERE session_id = e10adc3949ba59abbe56e057f20f883e',
154 'SELECT 1 FROM usr_session WHERE session_id = 123456',
155 'SELECT session_id, expires FROM usr_session WHERE expires < 123456',
156 'SELECT 1 FROM usr_session WHERE session_id = ',
157 'SELECT 1 FROM usr_session WHERE session_id = 17' 159 $ilDB->method(
'query')->with(
160 $this->callback(
function ($value) use (&$consecutive_select) {
161 if (count($consecutive_select) === 2) {
162 $this->assertStringStartsWith(array_shift($consecutive_select), $value);
164 $this->assertSame(array_shift($consecutive_select), $value);
168 )->willReturnOnConsecutiveCalls(
169 $this->createMock(ilDBStatement::class),
170 $this->createMock(ilDBStatement::class),
171 $this->createMock(ilDBStatement::class),
172 $this->createMock(ilDBStatement::class),
173 $this->createMock(ilDBStatement::class),
174 $this->createMock(ilDBStatement::class),
175 $this->createMock(ilDBStatement::class),
176 $this->createMock(ilDBStatement::class),
177 $this->createMock(ilDBStatement::class),
178 $this->createMock(ilDBStatement::class),
179 $this->createMock(ilDBStatement::class)
181 $ilDB->expects($this->exactly(4))->method(
'fetchAssoc')->willReturn(
182 [
'data' =>
'Testdata'],
184 [
'data' =>
'Testdata'],
187 $ilDB->expects($this->once())->method(
'fetchObject')->willReturn(
193 $consecutive_delete = [
194 'DELETE FROM usr_sess_istorage WHERE session_id = 123456',
195 'DELETE FROM usr_session WHERE session_id = e10adc3949ba59abbe56e057f20f883e',
196 'DELETE FROM usr_session WHERE user_id = e10adc3949ba59abbe56e057f20f883e' 198 $ilDB->method(
'manipulate')->with(
199 $this->callback(
function ($value) use (&$consecutive_delete) {
200 $this->assertSame(array_shift($consecutive_delete), $value);
203 )->willReturnOnConsecutiveCalls(
209 $cron_manager = $this->createMock(\
ILIAS\Cron\Job\JobManager::class);
210 $cron_manager->method(
'isJobActive')->with($this->isType(
'string'))->willReturn(
true);
217 ilSession::_writeData(
'123456',
'Testdata');
219 $result .=
'exists-';
222 $result .=
'write-get-';
226 $result .=
'duplicate-';
230 $result .=
'destroy-';
234 $result .=
'destroyExp-';
239 $result .=
'destroyByUser-';
242 $this->assertEquals(
'exists-write-get-duplicate-destroy-destroyExp-destroyByUser-', $result);
251 $sqlite =
new PDO(
'sqlite::memory:');
252 $create_table = <<<SQL
253 create table usr_pwassist
255 pwassist_id
char(180)
default '' not
null primary key,
256 expires
int default 0 not
null,
257 ctime
int default 0 not null,
258 user_id
int default 0 not null,
264 $sqlite->query($create_table);
266 $this->markTestIncomplete(
267 'Cannot test the password assistance session storage because of missing sqlite: ' . $e->getMessage()
271 $db = $this->createMock(ilDBInterface::class);
272 $db->method(
'quote')->willReturnCallback(
static function ($value, ?
string $type =
null) use ($sqlite):
string {
273 if ($value ===
null) {
277 $pdo_type = PDO::PARAM_STR;
285 if ($value ===
'NOW()') {
288 $value = (string) $value;
291 return (
string) (
int) $value;
293 $pdo_type = PDO::PARAM_INT;
294 $value = (string) $value;
298 $value = (string) $value;
299 $pdo_type = PDO::PARAM_STR;
303 return $sqlite->quote((
string) $value, $pdo_type);
305 $db->method(
'query')->willReturnCallback(
static function (
string $query) use ($sqlite):
ilDBStatement {
308 $db->method(
'manipulate')->willReturnCallback(
static function (
string $query) use ($sqlite):
int {
309 return (
int) $sqlite->exec($query);
311 $db->method(
'manipulateF')->willReturnCallback(
static function (...$args) use ($db):
int {
315 foreach ($args[1] as $k => $t) {
316 $quoted_values[] = $db->quote($args[2][$k], $t);
318 $query = vsprintf($query, $quoted_values);
320 return $db->manipulate($query);
322 $db->method(
'fetchAssoc')->willReturnCallback(
static function (
ilDBStatement $statement): ?array {
323 $res = $statement->
fetch(PDO::FETCH_ASSOC);
325 $statement->closeCursor();
333 $pwa_repository = new \ILIAS\Init\PasswordAssitance\Repository\PasswordAssistanceDbRepository(
335 (
new \
ILIAS\
Data\Factory())->clock()->system()
338 $hash = new \ILIAS\Init\PasswordAssitance\ValueObject\PasswordAssistanceHash(
339 'ae869e66007cc9812f1752f7a3a59f07d3e28bed8361827d0a05563e5c2f4b11' 341 $session = $pwa_repository->createSession(
343 (
new \
ILIAS\
Data\Factory())->objId($usr_id)
346 $result = $pwa_repository->getSessionByUsrId($session->usrId());
347 if ($result->value()->hash()->value() === $session->hash()->value()) {
351 $result = $pwa_repository->getSessionByHash($session->hash());
352 if ($result->value()->usrId()->toInt() === $usr_id) {
356 $pwa_repository->deleteSession($session);
357 $result = $pwa_repository->getSessionByHash($session->hash());
358 if ($result->isError()) {
359 $actual .=
'destroy-';
362 $this->assertEquals(
'find-read-destroy-', $actual);
setGlobalVariable(string $name, $value)
static _duplicate(string $a_session_id)
Duplicate session.
static _destroyByUserId(int $a_user_id)
Destroy session.
static _getData(string $a_session_id)
Get session data from table.
Class ilPDOStatement is a Wrapper Class for PDOStatement.
static _exists(string $a_session_id)
Check whether session exists.
Interface Observer Contains several chained tasks and infos about them.
static _destroyExpiredSessions()
Destroy expired sessions.
Customizing of pimple-DIC for ILIAS.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
fetch(int $fetch_mode=ilDBConstants::FETCHMODE_ASSOC)
static _destroy($a_session_id, ?int $a_closing_context=null, $a_expired_at=null)
Destroy session.
testPasswordAssisstanceSession()