public function testPersistence() { $session = new CM_Session(); $sessionId = $session->getId(); unset($session); try { new CM_Session($sessionId); $this->fail('Empty Session stored in db.'); } catch (CM_Exception_Nonexistent $ex) { $this->assertTrue(true); } $session = new CM_Session(); $sessionId = $session->getId(); $session->set('foo', 'bar'); unset($session); $session = new CM_Session($sessionId); $session->set('bar', array('foo', 'bar')); $session->set('foobar', 'foobar'); $expiration = $session->getExpiration(); $sessionId = $session->getId(); CMTest_TH::timeForward(10); unset($session); try { $session = new CM_Session($sessionId); $this->assertTrue(true); } catch (CM_Exception_Nonexistent $ex) { $this->fail('Session not persistent.'); } $this->assertEquals('bar', $session->get('foo')); $this->assertEquals(array('foo', 'bar'), $session->get('bar')); $this->assertEquals($expiration + 10, $session->getExpiration(), null, 1); //test that session is only persisted when data changed CM_Db_Db::update('cm_session', array('data' => serialize(array('foo' => 'foo', 'foobar' => 'foobar'))), array('sessionId' => $session->getId())); CMTest_TH::clearCache(); unset($session); $session = new CM_Session($sessionId); $this->assertEquals('foo', $session->get('foo')); $session->delete('foobar'); unset($session); $session = new CM_Session($sessionId); $this->assertNull($session->get('foobar')); //caching $session->set('foo', 'foo'); $sessionId = $session->getId(); unset($session); $session = new CM_Session($sessionId); unset($session); CM_Db_Db::update('cm_session', array('data' => serialize(array('foo' => 'bar'))), array('sessionId' => $sessionId)); $session = new CM_Session($sessionId); $this->assertEquals('foo', $session->get('foo')); $session->delete('foo'); $this->assertTrue($session->isEmpty()); unset($session); try { $session = new CM_Session($sessionId); $this->fail('Session not deleted.'); } catch (CM_Exception_Nonexistent $ex) { $this->assertTrue(true); } }