/**
  * test a whole call cycle - start, connect, disconnect
  * 
  */
 public function testWholeCall()
 {
     // start call
     $call = $this->_backend->callStarted($this->_objects['call']);
     $this->assertEquals($this->_objects['call']->destination, $call->destination);
     $this->assertTrue(Tinebase_DateTime::now()->sub($call->start)->getTimestamp() >= 0);
     // sleep for 2 secs (ringing...)
     sleep(2);
     // connect call
     $call = $this->_backend->getCall($this->_objects['call']->getId());
     $ringing = $call->ringing;
     $connectedCall = $this->_backend->callConnected($call);
     $this->assertEquals($this->_objects['call']->destination, $connectedCall->destination);
     $this->assertEquals(-1, $call->start->compare($call->connected));
     // sleep for 5 secs (talking...)
     sleep(5);
     // disconnect call
     $call = $this->_backend->getCall($this->_objects['call']->getId());
     $duration = $call->duration;
     $disconnectedCall = $this->_backend->callDisconnected($call);
     $this->assertGreaterThan($duration, $disconnectedCall->duration);
     $this->assertLessThan(10, $disconnectedCall->ringing, 'wrong ringing duration');
     $this->assertLessThan(15, $disconnectedCall->duration, 'wrong duration');
     $this->assertEquals(-1, $disconnectedCall->connected->compare($disconnectedCall->disconnected));
 }
 /**
  * test disconnect
  * 
  */
 public function testDisconnected()
 {
     $call = $this->_backend->getCall($this->_objects['call']->getId());
     $duration = $call->duration;
     $disconnectedCall = $this->_backend->callDisconnected($call);
     $this->assertGreaterThan($duration, $disconnectedCall->duration);
     $this->assertLessThan(4, $disconnectedCall->ringing);
     $this->assertLessThan(7, $disconnectedCall->duration);
     $this->assertEquals(-1, $disconnectedCall->connected->compare($disconnectedCall->disconnected));
 }