Browse Source

[WebsocketController] handle redis subscribe error on joinProject

joinProject should not complete when the redis pub/sub subscribe request
 failed.
Jakob Ackermann 6 years ago
parent
commit
684cb3903c

+ 1 - 0
services/real-time/app/coffee/WebsocketController.coffee

@@ -40,6 +40,7 @@ module.exports = WebsocketController =
 			client.set("is_restricted_user", !!(isRestrictedUser))
 
 			RoomManager.joinProject client, project_id, (err) ->
+				return callback(err) if err
 				logger.log {user_id, project_id, client_id: client.id}, "user joined project"
 				callback null, project, privilegeLevel, WebsocketController.PROTOCOL_VERSION
 

+ 22 - 0
services/real-time/test/unit/coffee/WebsocketControllerTests.coffee

@@ -125,6 +125,28 @@ describe 'WebsocketController', ->
 			it "should not log an error", ->
 				@logger.error.called.should.equal false
 
+		describe "when the subscribe failed", ->
+			beforeEach ->
+				@client.id = "mock-client-id"
+				@project = {
+					name: "Test Project"
+					owner: {
+						_id: @owner_id = "mock-owner-id-123"
+					}
+				}
+				@privilegeLevel = "owner"
+				@ConnectedUsersManager.updateUserPosition = sinon.stub().callsArg(4)
+				@isRestrictedUser = true
+				@WebApiManager.joinProject = sinon.stub().callsArgWith(2, null, @project, @privilegeLevel, @isRestrictedUser)
+				@RoomManager.joinProject = sinon.stub().callsArgWith(2, new Error("subscribe failed"))
+				@WebsocketController.joinProject @client, @user, @project_id, @callback
+
+			it "should return an error", ->
+				@callback
+					.calledWith(new Error("subscribe failed"))
+					.should.equal true
+				@callback.args[0][0].message.should.equal "subscribe failed"
+
 	describe "leaveProject", ->
 		beforeEach ->
 			@DocumentUpdaterManager.flushProjectToMongoAndDelete = sinon.stub().callsArg(1)