From cd515e1f5cbdbdb8eb102c462de657c1b9f0327d Mon Sep 17 00:00:00 2001 From: Hans-Peter Herzog Date: Fri, 28 Oct 2016 17:00:05 +0200 Subject: [PATCH] TT#2723 Added videoroom tests. Change-Id: Ibf6759613a85c4c28095b666e15126c3cd56db18 --- src/mock/janus-response.js | 39 +++++++++++++++-- src/mock/janus-server.js | 32 +++++++++++++- src/plugins/index.js | 2 +- src/plugins/videoroom/{handle.js => index.js} | 14 ++++++ test/plugin-handle-spec.js | 43 +++++++++++++++++++ test/session-spec.js | 2 +- 6 files changed, 126 insertions(+), 6 deletions(-) rename src/plugins/videoroom/{handle.js => index.js} (95%) diff --git a/src/mock/janus-response.js b/src/mock/janus-response.js index 08aab08..c694665 100644 --- a/src/mock/janus-response.js +++ b/src/mock/janus-response.js @@ -114,16 +114,21 @@ module.exports = { session_id: req.session_id, transaction: req.transaction } }, - createVideoRoomHandle: function createVideoRoomHandle(req) { + createVideoRoomHandle: function createVideoRoomHandle(req, handle) { return { janus: 'success', session_id: req.session_id, transaction: req.transaction, - data: { id: 1856019541 } }; + data: { id: handle } }; } }, handle: { + trickle: function detach(req) { + return { janus: 'ack', + session_id: req.session_id, + transaction: req.transaction} + }, detach: function detach(req) { return { janus: 'success', session_id: req.session_id, @@ -137,7 +142,7 @@ module.exports = { }, videoRoomHandle: { - createVideoRoom: function createVideoRoom(req) { + create: function create(req) { return { janus: 'success', session_id: req.session_id, sender: req.handle_id, @@ -145,6 +150,34 @@ module.exports = { plugindata: { plugin: 'janus.plugin.videoroom', data: { videoroom: 'created', room: 2146929290 } } } + }, + destroy: function destroy(req) { + return { janus: 'success', + session_id: req.session_id, + sender: req.handle_id, + transaction: req.transaction, + plugindata: + { plugin: 'janus.plugin.videoroom', + data: { videoroom: 'created', room: 2146929290 } } } + }, + list: function list(req) { + return { janus: 'success', + session_id: req.session_id, + sender: req.handle_id, + transaction: req.transaction, + plugindata: + { plugin: 'janus.plugin.videoroom', + data: { videoroom: 'success', list: [ + { room: 2146929290, + description: 'Room 1790787516', + max_publishers: 3, + bitrate: 0, + fir_freq: 0, + audiocodec: 'opus', + videocodec: 'vp8', + record: 'false', + num_participants: 0 } + ] } } } } } }; diff --git a/src/mock/janus-server.js b/src/mock/janus-server.js index 9864ed1..83cfd01 100644 --- a/src/mock/janus-server.js +++ b/src/mock/janus-server.js @@ -18,6 +18,10 @@ class JanusServer { server: this.http }); this.ws.on('connection',(webSocket)=>{ this.triggerConnection(webSocket); }); + this.handlesByName = { + 'janus.plugin.videoroom': 773735142 + }; + this.handlesById = _.invert(this.handlesByName); } init() { @@ -69,7 +73,8 @@ class JanusServer { case 'attach': switch(object.plugin) { case 'janus.plugin.videoroom': - this.send(webSocket, JanusResponse.session.createVideoRoomHandle(object)); + this.send(webSocket, JanusResponse.session.createVideoRoomHandle( + object, this.handlesByName[object.plugin])); break; } break; @@ -79,11 +84,36 @@ class JanusServer { case 'hangup': this.send(webSocket, JanusResponse.handle.hangup(object)); break; + case 'trickle': + this.send(webSocket, JanusResponse.handle.trickle(object)); + break; + case 'message': + var plugin = this.handlesById[object.handle_id]; + switch(plugin) { + case 'janus.plugin.videoroom': + this.dispatchVideoRoom(webSocket, object); + break; + } + break; default: break; } } + dispatchVideoRoom(webSocket, object) { + switch(object.body.request) { + case 'create': + this.send(webSocket, JanusResponse.videoRoomHandle.create(object)); + break; + case 'destroy': + this.send(webSocket, JanusResponse.videoRoomHandle.destroy(object)); + break; + case 'list': + this.send(webSocket, JanusResponse.videoRoomHandle.list(object)); + break; + } + } + send(webSocket, response) { webSocket.send(JSON.stringify(response)); } diff --git a/src/plugins/index.js b/src/plugins/index.js index 3a639f0..528996a 100644 --- a/src/plugins/index.js +++ b/src/plugins/index.js @@ -1,3 +1,3 @@ -module.exports.VideoRoom = require('./videoroom/handle').VideoRoomHandle; +module.exports.VideoRoom = require('./videoroom').VideoRoomHandle; diff --git a/src/plugins/videoroom/handle.js b/src/plugins/videoroom/index.js similarity index 95% rename from src/plugins/videoroom/handle.js rename to src/plugins/videoroom/index.js index da623cf..98f32d6 100644 --- a/src/plugins/videoroom/handle.js +++ b/src/plugins/videoroom/index.js @@ -6,6 +6,7 @@ var PluginHandle = require('../plugin-handle').PluginHandle; var VideoRoom = require('./room').VideoRoom; var PluginError = require('../../errors').PluginError; var logger = require('debug-logger')('janus:videoroom:handle'); +var Publisher = require('./publisher').Publisher; /** * @class @@ -34,6 +35,19 @@ class VideoRoomHandle extends PluginHandle { }); } + destroy(room) { + return new Promise((resolve, reject)=>{ + this.requestMessage({ + request: 'destroy', + room: room + }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); + } + list() { return new Promise((resolve, reject)=>{ this.requestMessage({ diff --git a/test/plugin-handle-spec.js b/test/plugin-handle-spec.js index f814df1..68c10c7 100644 --- a/test/plugin-handle-spec.js +++ b/test/plugin-handle-spec.js @@ -60,8 +60,51 @@ describe('PluginHandle', function(){ }); }); + it('should trickle', function(done) { + handle.trickle().then(()=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should complete trickle', function(done) { + handle.trickleCompleted().then(()=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + describe('VideoRoomHandle', function() { + it('should create a new room', function(done){ + handle.create().then(()=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should destroy a room', function(done) { + done(); + }); + it('should check whether a room exists or not', function(done) { + done(); + }); + + it('should list all rooms', function(done) { + handle.list().then((list)=>{ + assert.isArray(list); + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should list all participants', function(done) { + done(); + }); }); }); diff --git a/test/session-spec.js b/test/session-spec.js index 27271a2..870c00c 100644 --- a/test/session-spec.js +++ b/test/session-spec.js @@ -4,7 +4,7 @@ var config = require('./config').config; var JanusServerMock = require('../src/mock/janus-server').JanusServer; var Client = require('../src/client').Client; var Session = require('../src/session').Session; -var VideoRoomHandle = require('../src/plugins/videoroom/handle').VideoRoomHandle; +var VideoRoomHandle = require('../src/plugins').VideoRoom; var assert = require('chai').assert; var mockServerPort = config.janus.server.port;