/** * @test */ public function can_get_logger() { global $standardAGIStart; setFgetsMock($standardAGIStart, array()); $client = \PAGI\Client\Impl\ClientImpl::getInstance($this->_properties); $logger = $client->getAsteriskLogger(); $logger = $client->getAsteriskLogger(); // should return the same instance. }
/** * @test */ public function can_app() { global $standardAGIStart; setFgetsMock($standardAGIStart, array()); $this->_properties['pagiClient'] = \PAGI\Client\Impl\ClientImpl::getInstance($this->_properties); $application = new MyPAGIApplication($this->_properties); $refObject = new \ReflectionObject($application); $refMethod = $refObject->getMethod('getAgi'); $refMethod->setAccessible(true); $agi = $refMethod->invoke($application); $this->assertTrue($agi instanceof \PAGI\Client\Impl\ClientImpl); }
private function _start(array $write, \PAMI\Message\Action\ActionMessage $action) { global $mock_stream_socket_client; global $mock_stream_set_blocking; global $mockTime; global $standardAMIStart; $mock_stream_socket_client = true; $mock_stream_set_blocking = true; $options = array('log4php.properties' => RESOURCES_DIR . DIRECTORY_SEPARATOR . 'log4php.properties', 'host' => '2.3.4.5', 'scheme' => 'tcp://', 'port' => 9999, 'username' => 'asd', 'secret' => 'asd', 'connect_timeout' => 10, 'read_timeout' => 10); $writeLogin = array("action: Login\r\nactionid: 1432.123\r\nusername: asd\r\nsecret: asd\r\n"); setFgetsMock($standardAMIStart, $writeLogin); $client = new \PAMI\Client\Impl\ClientImpl($options); $client->open(); if ($action instanceof \PAMI\Message\Action\DBGetAction) { $event = array('Response: Success', 'EventList: start', 'ActionID: 1432.123', '', 'Event: DBGetResponse', 'ActionID: 1432.123', ''); } else { $event = array('Response: Success', 'ActionID: 1432.123', ''); } setFgetsMock($event, $write); $result = $client->send($action); $this->assertTrue($result instanceof \PAMI\Message\Response\ResponseMessage); return $client; }
/** * @test */ public function can_set_callerid() { global $standardAGIStart; setFgetsMock($standardAGIStart, array()); $client = \PAGI\Client\Impl\ClientImpl::getInstance($this->_properties); $clid = $client->getCallerId(); $callerIdW = array('GET FULL VARIABLE "${CALLERID(name)}"', 'SET VARIABLE "CALLERID(num)" "666"', 'SET VARIABLE "CALLERID(all)" "pepe zamora<666>"', 'GET FULL VARIABLE "${CALLERID(num)}"', 'SET VARIABLE "CALLERID(name)" "pepe zamora"', 'SET VARIABLE "CALLERID(all)" "pepe zamora<666>"', 'SET VARIABLE "CALLERID(ani)" "222"', 'SET VARIABLE "CALLERID(rdnis)" "333"', 'SET VARIABLE "CALLERID(dnid)" "555"'); $callerIdR = array('200 result=1 "pepe zamora"', '200 result=1', '200 result=1', '200 result=1 "666"', '200 result=1', '200 result=1', '200 result=1', '200 result=1', '200 result=1'); setFgetsMock($callerIdR, $callerIdW); $clid->setNumber('666'); $clid->setName('pepe zamora'); $clid->setANI('222'); $clid->setRDNIS('333'); $clid->setDNID('555'); }
/** * @test */ public function can_amd_cause_too_long() { global $standardAGIStart; global $mockTime; global $mockTimeReturn; setFgetsMock($standardAGIStart, array()); $client = \PAGI\Client\Impl\ClientImpl::getInstance($this->_properties); $write = array('EXEC "AMD" ",,,,,,,,"', false, false); $read = array('200 result=0 endpos=0', '200 result=1 (NOTSURE)', '200 result=1 (TOOLONG)'); setFgetsMock($read, $write); $result = $client->amd(); $this->assertTrue($result->isNotSure()); $this->assertTrue($result->isCauseTooLong()); }
/** * @test */ public function can_report_unknown_event() { global $mock_stream_socket_client; global $mock_stream_set_blocking; global $mockTime; global $standardAMIStart; $mockTime = true; $mock_stream_socket_client = true; $mock_stream_set_blocking = true; $options = array('log4php.properties' => RESOURCES_DIR . DIRECTORY_SEPARATOR . 'log4php.properties', 'host' => '2.3.4.5', 'scheme' => 'tcp://', 'port' => 9999, 'username' => 'asd', 'secret' => 'asd', 'connect_timeout' => 10, 'read_timeout' => 10); $write = array("action: Login\r\nactionid: 1432.123\r\nusername: asd\r\nsecret: asd\r\n"); setFgetsMock($standardAMIStart, $write); $client = new \PAMI\Client\Impl\ClientImpl($options); $client->registerEventListener(new SomeListenerClass()); $client->open(); $event = array('Event: MyOwnImaginaryEvent', 'Privilege: system,all', 'ChannelType: SIP', ''); setFgetsMock($event, $event); for ($i = 0; $i < 4; $i++) { $client->process(); } $this->assertTrue(SomeListenerClass::$event instanceof \PAMI\Message\Event\UnknownEvent); }
private function _testEvent($eventName, array $getters, array $values, array $translatedValues) { global $mock_stream_socket_client; global $mock_stream_set_blocking; global $mockTime; global $standardAMIStart; $eventClass = "\\PAMI\\Message\\Event\\" . $eventName . 'Event'; $mockTime = true; $mock_stream_socket_client = true; $mock_stream_set_blocking = true; $options = array('host' => '2.3.4.5', 'scheme' => 'tcp://', 'port' => 9999, 'username' => 'asd', 'secret' => 'asd', 'connect_timeout' => 10, 'read_timeout' => 10); $write = array("action: Login\r\nactionid: 1432.123\r\nusername: asd\r\nsecret: asd\r\n"); setFgetsMock($standardAMIStart, $write); $client = new \PAMI\Client\Impl\ClientImpl($options); $client->registerEventListener(new SomeListenerClass()); $client->open(); $message = array(); $message[] = 'Event: ' . $eventName; foreach ($values as $key => $value) { $message[] = $key . ': ' . $value; } $message[] = ''; setFgetsMock($message, $message); for ($i = 0; $i < count($message); $i++) { $client->process(); } $event = SomeListenerClass::$event; foreach ($values as $key => $value) { if (isset($getters[$eventName][$key])) { $methodName = 'get' . $getters[$eventName][$key]; } else { $methodName = 'get' . $key; } if (isset($translatedValues[$eventName][$key])) { $value = $translatedValues[$eventName][$key]; } $this->assertTrue(method_exists($event, $methodName), sprintf('Method %s doesn\'t exixt in event %s', $methodName, get_class($event))); $this->assertEquals($event->{$methodName}(), $value, $eventName); } }
/** * @test * @group channel_vars * ChanVariable is sent with a channel name and with a "channel" key. * https://github.com/marcelog/PAMI/issues/85 */ public function can_get_channel_variables() { global $mock_stream_socket_client; global $mock_stream_set_blocking; global $mockTime; global $standardAMIStart; $mockTime = true; $mock_stream_socket_client = true; $mock_stream_set_blocking = true; $options = array('log4php.properties' => RESOURCES_DIR . DIRECTORY_SEPARATOR . 'log4php.properties', 'host' => '2.3.4.5', 'scheme' => 'tcp://', 'port' => 9999, 'username' => 'asd', 'secret' => 'asd', 'connect_timeout' => 10, 'read_timeout' => 10); $write = array("action: Login\r\nactionid: 1432.123\r\nusername: asd\r\nsecret: asd\r\n"); setFgetsMock($standardAMIStart, $write); $client = new \PAMI\Client\Impl\ClientImpl($options); $client->registerEventListener(new SomeListenerClass()); $client->open(); $event = array('Event: Dial', 'Privilege: call,all', 'SubEvent: Begin', 'Channel: Local/0@pbx_dial_callroute_to_endpoint-00000008;2', 'Destination: SIP/jw1034-00000010', 'CallerIDNum: 1201', 'CallerIDName: <unknown>', 'ConnectedLineNum: strategy-sequential', 'ConnectedLineName: <unknown>', 'UniqueID: pbx-1439974866.33', 'DestUniqueID: pbx-1439974866.34', 'Dialstring: jw1034', 'ChanVariable: var1', 'ChanVariable: var2=value2', 'ChanVariable(Local/0@pbx_dial_callroute_to_endpoint-00000008;2): var3=value3', 'ChanVariable(Local/0@pbx_dial_callroute_to_endpoint-00000008;2): var4=value4', 'ChanVariable(Local/0@pbx_dial_callroute_to_endpoint-00000008;2): var5=value5', 'ChanVariable(SIP/jw1034-00000010): var12=value12', 'ChanVariable(SIP/jw1034-00000010): var22=value22', 'ChanVariable(SIP/jw1034-00000010): var32=value32', ''); setFgetsMock($event, $event); for ($i = 0; $i < 21; $i++) { $client->process(); } $event = SomeListenerClass::$event; $varChan1 = array('var1' => '', 'var2' => 'value2', 'var3' => 'value3', 'var4' => 'value4', 'var5' => 'value5'); $varChan2 = array('var12' => 'value12', 'var22' => 'value22', 'var32' => 'value32'); $channelVars = array('local/0@pbx_dial_callroute_to_endpoint-00000008;2' => $varChan1, 'sip/jw1034-00000010' => $varChan2); $this->assertEquals($varChan1, $event->getChannelVariables()); $this->assertEquals($channelVars, $event->getAllChannelVariables()); }
/** * @test */ public function can_get_environment_variables() { global $standardAGIStart; setFgetsMock($standardAGIStart, array()); $client = \PAGI\Client\Impl\ClientImpl::getInstance($this->_properties); putenv('AST_CONFIG_DIR=1'); putenv('AST_CONFIG_FILE=2'); putenv('AST_MODULE_DIR=3'); putenv('AST_SPOOL_DIR=4'); putenv('AST_MONITOR_DIR=5'); putenv('AST_VAR_DIR=6'); putenv('AST_DATA_DIR=7'); putenv('AST_LOG_DIR=8'); putenv('AST_AGI_DIR=9'); putenv('AST_KEY_DIR=10'); putenv('AST_RUN_DIR=11'); $vars = $client->getChannelVariables(); $this->assertEquals($vars->getDirectoryRun(), 11); $this->assertEquals($vars->getDirectoryKey(), 10); $this->assertEquals($vars->getDirectoryAgi(), 9); $this->assertEquals($vars->getDirectoryLog(), 8); $this->assertEquals($vars->getDirectoryData(), 7); $this->assertEquals($vars->getDirectoryVar(), 6); $this->assertEquals($vars->getDirectoryMonitor(), 5); $this->assertEquals($vars->getDirectorySpool(), 4); $this->assertEquals($vars->getDirectoryModules(), 3); $this->assertEquals($vars->getConfigFile(), 2); $this->assertEquals($vars->getDirectoryConfig(), 1); }
/** * @test */ public function can_get_cdr_variables() { global $standardAGIStart; setFgetsMock($standardAGIStart, array()); $client = \PAGI\Client\Impl\ClientImpl::getInstance($this->_properties); $cdr = $client->getCDR(); $cdrW = array('GET FULL VARIABLE "${CDR(dcontext)}"', 'GET FULL VARIABLE "${CDR(dstchannel)}"', 'GET FULL VARIABLE "${CDR(dst)}"', 'GET FULL VARIABLE "${CDR(src)}"', 'GET FULL VARIABLE "${CDR(clid)}"', 'GET FULL VARIABLE "${CDR(channel)}"', 'GET FULL VARIABLE "${CDR(lastapp)}"', 'GET FULL VARIABLE "${CDR(lastdata)}"', 'GET FULL VARIABLE "${CDR(userfield)}"', 'GET FULL VARIABLE "${CDR(uniqueid)}"', 'GET FULL VARIABLE "${CDR(accountcode)}"', 'GET FULL VARIABLE "${CDR(amaflags)}"', 'GET FULL VARIABLE "${CDR(start)}"', 'GET FULL VARIABLE "${CDR(answer)}"', 'GET FULL VARIABLE "${CDR(end)}"', 'GET FULL VARIABLE "${CDR(duration)}"', 'GET FULL VARIABLE "${CDR(billsec)}"', 'GET FULL VARIABLE "${CDR(disposition)}"'); $cdrR = array('200 result=1 "dcontext"', '200 result=1 "dchannel"', '200 result=1 "dst"', '200 result=1 "src"', '200 result=1 "clid"', '200 result=1 "channel"', '200 result=1 "lastapp"', '200 result=1 "lastdata"', '200 result=1 "userfield"', '200 result=1 "uniqueid"', '200 result=1 "accountcode"', '200 result=1 "amaflags"', '200 result=1 "start"', '200 result=1 "answer"', '200 result=1 "end"', '200 result=1 "duration"', '200 result=1 "billsec"', '200 result=1 "disposition"'); setFgetsMock($cdrR, $cdrW); $this->assertEquals($cdr->getDestinationContext(), 'dcontext'); $this->assertEquals($cdr->getDestinationChannel(), 'dchannel'); $this->assertEquals($cdr->getDestination(), 'dst'); $this->assertEquals($cdr->getSource(), 'src'); $this->assertEquals($cdr->getCallerId(), 'clid'); $this->assertEquals($cdr->getChannel(), 'channel'); $this->assertEquals($cdr->getLastApp(), 'lastapp'); $this->assertEquals($cdr->getLastAppData(), 'lastdata'); $this->assertEquals($cdr->getUserfield(), 'userfield'); $this->assertEquals($cdr->getUniqueId(), 'uniqueid'); $this->assertEquals($cdr->getAccountCode(), 'accountcode'); $this->assertEquals($cdr->getAMAFlags(), 'amaflags'); $this->assertEquals($cdr->getStartTime(), 'start'); $this->assertEquals($cdr->getAnswerTime(), 'answer'); $this->assertEquals($cdr->getEndTime(), 'end'); $this->assertEquals($cdr->getTotalLength(), 'duration'); $this->assertEquals($cdr->getAnswerLength(), 'billsec'); $this->assertEquals($cdr->getStatus(), 'disposition'); }