Esempio n. 1
0
 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);
     }
 }