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()); }
public function testGetById() { $server = $this->mockClass('CM_Janus_Server')->newInstanceWithoutConstructor(); $server->mockMethod('getId')->set(1); $serverList = new CM_Janus_ServerList([$server]); $this->assertSame($server, $serverList->getById(1)); $exception = $this->catchException(function () use($serverList) { $serverList->getById(2); }); $this->assertTrue($exception instanceof CM_Exception_Invalid); /** @var CM_Exception_Invalid $exception */ $this->assertSame('Cannot find server', $exception->getMessage()); $this->assertSame(['serverId' => 2], $exception->getMetaInfo()); }
/** * @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']); } }