function SessionTest::testSessionWrite in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/system/src/Tests/Session/SessionTest.php \Drupal\system\Tests\Session\SessionTest::testSessionWrite()
Test that sessions are only saved when necessary.
File
- core/
modules/ system/ src/ Tests/ Session/ SessionTest.php, line 218 - Contains \Drupal\system\Tests\Session\SessionTest.
Class
- SessionTest
- Drupal session handling tests.
Namespace
Drupal\system\Tests\SessionCode
function testSessionWrite() {
$user = $this
->drupalCreateUser(array());
$this
->drupalLogin($user);
$sql = 'SELECT u.access, s.timestamp FROM {users_field_data} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE u.uid = :uid';
$times1 = db_query($sql, array(
':uid' => $user
->id(),
))
->fetchObject();
// Before every request we sleep one second to make sure that if the session
// is saved, its timestamp will change.
// Modify the session.
sleep(1);
$this
->drupalGet('session-test/set/foo');
$times2 = db_query($sql, array(
':uid' => $user
->id(),
))
->fetchObject();
$this
->assertEqual($times2->access, $times1->access, 'Users table was not updated.');
$this
->assertNotEqual($times2->timestamp, $times1->timestamp, 'Sessions table was updated.');
// Write the same value again, i.e. do not modify the session.
sleep(1);
$this
->drupalGet('session-test/set/foo');
$times3 = db_query($sql, array(
':uid' => $user
->id(),
))
->fetchObject();
$this
->assertEqual($times3->access, $times1->access, 'Users table was not updated.');
$this
->assertEqual($times3->timestamp, $times2->timestamp, 'Sessions table was not updated.');
// Do not change the session.
sleep(1);
$this
->drupalGet('');
$times4 = db_query($sql, array(
':uid' => $user
->id(),
))
->fetchObject();
$this
->assertEqual($times4->access, $times3->access, 'Users table was not updated.');
$this
->assertEqual($times4->timestamp, $times3->timestamp, 'Sessions table was not updated.');
// Force updating of users and sessions table once per second.
$this
->settingsSet('session_write_interval', 0);
// Write that value also into the test settings.php file.
$settings['settings']['session_write_interval'] = (object) array(
'value' => 0,
'required' => TRUE,
);
$this
->writeSettings($settings);
$this
->drupalGet('');
$times5 = db_query($sql, array(
':uid' => $user
->id(),
))
->fetchObject();
$this
->assertNotEqual($times5->access, $times4->access, 'Users table was updated.');
$this
->assertNotEqual($times5->timestamp, $times4->timestamp, 'Sessions table was updated.');
}