1<?php 2/** 3 * Prepare the test setup. 4 */ 5require_once dirname(__FILE__) . '/Base.php'; 6 7/** 8 * Copyright 2012-2017 Horde LLC (http://www.horde.org/) 9 * 10 * @author Jan Schneider <jan@horde.org> 11 * @category Horde 12 * @package Horde_SessionHandler 13 * @subpackage UnitTests 14 * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 15 */ 16class Horde_SessionHandler_Storage_BuiltinTest extends Horde_SessionHandler_Storage_Base 17{ 18 public function testWrite() 19 { 20 session_name('sessionname'); 21 session_id('sessionid'); 22 session_start(); 23 $this->assertEmpty($_SESSION); 24 $_SESSION['sessiondata'] = 'foo'; 25 session_write_close(); 26 } 27 28 /** 29 * @depends testWrite 30 */ 31 public function testRead() 32 { 33 $this->assertEquals('sessiondata|s:3:"foo";', self::$handler->read('sessionid')); 34 } 35 36 /** 37 * @depends testWrite 38 */ 39 public function testReopen() 40 { 41 session_write_close(); 42 session_name('sessionname'); 43 session_id('sessionid'); 44 session_start(); 45 $this->assertEquals('foo', $_SESSION['sessiondata']); 46 session_write_close(); 47 } 48 49 /** 50 * @depends testWrite 51 */ 52 public function testList() 53 { 54 session_write_close(); 55 session_name('sessionname'); 56 session_id('sessionid2'); 57 session_start(); 58 $_SESSION['sessiondata2'] = 'foo'; 59 /* List while session is active. */ 60 $ids = self::$handler->getSessionIDs(); 61 sort($ids); 62 $this->assertEquals(array('sessionid', 'sessionid2'), $ids); 63 session_write_close(); 64 65 /* List while session is inactive. */ 66 $ids = self::$handler->getSessionIDs(); 67 sort($ids); 68 $this->assertEquals(array('sessionid', 'sessionid2'), $ids); 69 } 70 71 /** 72 * @depends testList 73 */ 74 public function testDestroy() 75 { 76 session_name('sessionname'); 77 session_id('sessionid2'); 78 session_start(); 79 $sessionIds = self::$handler->getSessionIDs(); 80 sort($sessionIds); 81 $this->assertEquals(array('sessionid', 'sessionid2'), 82 $sessionIds); 83 session_destroy(); 84 $this->assertEquals(array('sessionid'), 85 self::$handler->getSessionIDs()); 86 } 87 88 /** 89 * @depends testDestroy 90 */ 91 public function testGc() 92 { 93 $this->probability = ini_get('session.gc_probability'); 94 $this->divisor = ini_get('session.gc_divisor'); 95 $this->maxlifetime = ini_get('session.gc_maxlifetime'); 96 ini_set('session.gc_probability', 100); 97 ini_set('session.gc_divisor', 1); 98 ini_set('session.gc_maxlifetime', -1); 99 session_name('sessionname'); 100 session_start(); 101 $this->assertEquals(array(), 102 self::$handler->getSessionIDs()); 103 } 104 105 public static function setUpBeforeClass() 106 { 107 parent::setUpBeforeClass(); 108 session_cache_limiter(''); 109 ini_set('session.use_cookies', 0); 110 ini_set('session.save_path', self::$dir); 111 self::$handler = new Horde_SessionHandler_Storage_Builtin(array('path' => self::$dir)); 112 } 113 114 public function tearDown() 115 { 116 if (isset($this->probability)) { 117 ini_set('session.gc_probability', $this->probability); 118 ini_set('session.gc_divisor', $this->divisor); 119 ini_set('session.gc_maxlifetime', $this->maxlifetime); 120 } 121 } 122 123 /** 124 * @todo Rely on session_status() in H6. 125 */ 126 public static function tearDownAfterClass() 127 { 128 parent::tearDownAfterClass(); 129 unset($_SESSION); 130 if ((function_exists('session_status') && 131 session_status() == PHP_SESSION_ACTIVE) || 132 (!function_exists('session_status') && 133 session_id())) { 134 session_destroy(); 135 } 136 session_name(ini_get('session.name')); 137 } 138 139} 140