public function testFetchStatus() { $serverList = new CM_Janus_ServerList(); foreach ([1, 5] as $serverId) { $server = $this->mockClass('CM_Janus_Server')->newInstanceWithoutConstructor(); $server->mockMethod('getId')->set($serverId); /** @var CM_Janus_Server $server */ $serverList->addServer($server); } $httpApiClient = $this->mockClass('CM_Janus_HttpApiClient')->newInstanceWithoutConstructor(); $httpApiClient->mockMethod('fetchStatus')->set(function (CM_Janus_Server $server) { switch ($server->getId()) { case 1: return [['id' => 'stream-foo', 'channelName' => 'channel-foo', 'isPublish' => false]]; case 5: return [['id' => 'stream-bar', 'channelName' => 'channel-bar', 'isPublish' => false], ['id' => 'stream-zoo', 'channelName' => 'channel-zoo', 'isPublish' => false]]; } }); /** @var CM_Janus_HttpApiClient $httpApiClient */ $janus = new CM_Janus_Service($serverList, $httpApiClient); /** @var CM_Janus_Stream[] $streams */ $streams = $this->callProtectedMethod($janus, '_fetchStatus'); $this->assertContainsOnlyInstancesOf('CM_Janus_Stream', $streams); $this->assertCount(3, $streams); $this->assertSame($serverList->getById(1), $streams[0]->getServer()); $this->assertSame('stream-foo', $streams[0]->getStreamKey()); $this->assertSame('channel-foo', $streams[0]->getStreamChannelKey()); $this->assertSame($serverList->getById(5), $streams[1]->getServer()); $this->assertSame('stream-bar', $streams[1]->getStreamKey()); $this->assertSame('channel-bar', $streams[1]->getStreamChannelKey()); $this->assertSame($serverList->getById(5), $streams[2]->getServer()); $this->assertSame('stream-zoo', $streams[2]->getStreamKey()); $this->assertSame('channel-zoo', $streams[2]->getStreamChannelKey()); }
/** * @param array $servers * @return CM_Janus_Service * @throws CM_Exception_Invalid */ public function createService(array $servers) { $serverList = new CM_Janus_ServerList(); foreach ($servers as $serverId => $serverConfig) { $iceServerList = isset($serverConfig['iceServerList']) ? $serverConfig['iceServerList'] : null; if (empty($serverConfig['pluginList'])) { throw new CM_Exception_Invalid('Server pluginList is empty'); } $serverList->addServer(new CM_Janus_Server($serverId, $serverConfig['key'], $serverConfig['httpAddress'], $serverConfig['webSocketAddress'], $serverConfig['pluginList'], new CM_Geo_Point($serverConfig['coordinates']['latitude'], $serverConfig['coordinates']['longitude']), $iceServerList)); } $httpClient = new GuzzleHttp\Client(); $appName = CM_App::getInstance()->getName(); $contextFormatter = new CM_Log_ContextFormatter_Cargomedia($appName); $httpApiClient = new CM_Janus_HttpApiClient($httpClient, $contextFormatter); $janus = new CM_Janus_Service($serverList, $httpApiClient); return $janus; }
public function testGetForIdentifier() { $serverList = new CM_Janus_ServerList(); $serverClass = $this->mockClass('CM_Janus_Server'); for ($i = 0; $i < 100; $i++) { /** @var CM_Janus_Server $server */ $server = $serverClass->newInstanceWithoutConstructor(); $serverList->addServer($server); } $id = rand(0, 1000); $server1 = $serverList->getForIdentifier($id); for ($i = 0; $i < 10; $i++) { $this->assertSame($server1, $serverList->getForIdentifier($id)); } $id++; $server2 = $serverList->getForIdentifier($id); $this->assertNotSame($server1, $server2); }
/** * @param CM_Model_Stream_Abstract $stream * @throws CM_Exception_Invalid * @throws CM_Janus_StopStreamError */ protected function _stopStream(CM_Model_Stream_Abstract $stream) { /** @var $streamChannel CM_Model_StreamChannel_Media */ $streamChannel = $stream->getStreamChannel(); $server = $this->_serverList->getById($streamChannel->getServerId()); $result = $this->_httpApiClient->stopStream($server, $stream->getKey()); if (array_key_exists('error', $result)) { throw new CM_Janus_StopStreamError($result['error']); } }