2016-04-19 11:48:51 -04:00
|
|
|
sinon = require('sinon')
|
|
|
|
chai = require('chai')
|
2016-04-27 12:05:12 -04:00
|
|
|
assert = chai.assert
|
2016-04-19 11:48:51 -04:00
|
|
|
should = chai.should()
|
|
|
|
expect = chai.expect
|
2016-04-20 10:06:39 -04:00
|
|
|
modulePath = "../../../../app/js/Features/Compile/ClsiCookieManager.js"
|
2016-04-19 11:48:51 -04:00
|
|
|
SandboxedModule = require('sandboxed-module')
|
|
|
|
realRequst = require("request")
|
2016-04-27 11:20:10 -04:00
|
|
|
|
2016-04-20 10:06:39 -04:00
|
|
|
describe "ClsiCookieManager", ->
|
2016-04-19 11:48:51 -04:00
|
|
|
beforeEach ->
|
2016-04-27 11:56:21 -04:00
|
|
|
self = @
|
2016-04-19 11:48:51 -04:00
|
|
|
@redisMulti =
|
|
|
|
set:sinon.stub()
|
|
|
|
get:sinon.stub()
|
|
|
|
expire:sinon.stub()
|
|
|
|
exec:sinon.stub()
|
2016-04-27 11:56:21 -04:00
|
|
|
@redis =
|
|
|
|
auth:->
|
|
|
|
get:sinon.stub()
|
|
|
|
multi: -> return self.redisMulti
|
2016-04-19 11:48:51 -04:00
|
|
|
@project_id = "123423431321"
|
|
|
|
@request =
|
|
|
|
get: sinon.stub()
|
|
|
|
cookie:realRequst.cookie
|
|
|
|
jar: realRequst.jar
|
2016-04-27 12:05:12 -04:00
|
|
|
@settings =
|
|
|
|
redis:
|
|
|
|
web:"redis.something"
|
|
|
|
apis:
|
|
|
|
clsi:
|
|
|
|
url: "http://clsi.example.com"
|
2016-05-05 11:50:18 -04:00
|
|
|
clsi_cookie_expire_length: Math.random()
|
2016-04-27 12:05:12 -04:00
|
|
|
clsiCookieKey: "coooookie"
|
|
|
|
@requires =
|
2016-04-19 11:48:51 -04:00
|
|
|
"redis-sharelatex" :
|
|
|
|
createClient: =>
|
2016-04-27 11:56:21 -04:00
|
|
|
@redis
|
2016-04-27 12:05:12 -04:00
|
|
|
"settings-sharelatex": @settings
|
2016-04-19 11:48:51 -04:00
|
|
|
"request": @request
|
|
|
|
|
|
|
|
"logger-sharelatex": @logger = { log: sinon.stub(), error: sinon.stub(), warn: sinon.stub() }
|
2016-04-27 12:05:12 -04:00
|
|
|
@ClsiCookieManager = SandboxedModule.require modulePath, requires:@requires
|
2016-04-19 11:48:51 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
describe "getServerId", ->
|
|
|
|
|
|
|
|
it "should call get for the key", (done)->
|
2016-04-27 11:56:21 -04:00
|
|
|
@redis.get.callsArgWith(1, null, "clsi-7")
|
2016-04-20 10:06:39 -04:00
|
|
|
@ClsiCookieManager._getServerId @project_id, (err, serverId)=>
|
2016-04-27 11:56:21 -04:00
|
|
|
@redis.get.calledWith("clsiserver:#{@project_id}").should.equal true
|
2016-04-19 11:48:51 -04:00
|
|
|
serverId.should.equal "clsi-7"
|
|
|
|
done()
|
|
|
|
|
2016-04-20 10:06:39 -04:00
|
|
|
it "should _populateServerIdViaRequest if no key is found", (done)->
|
|
|
|
@ClsiCookieManager._populateServerIdViaRequest = sinon.stub().callsArgWith(1)
|
2016-04-27 11:56:21 -04:00
|
|
|
@redis.get.callsArgWith(1, null)
|
2016-04-20 10:06:39 -04:00
|
|
|
@ClsiCookieManager._getServerId @project_id, (err, serverId)=>
|
|
|
|
@ClsiCookieManager._populateServerIdViaRequest.calledWith(@project_id).should.equal true
|
2016-04-19 11:48:51 -04:00
|
|
|
done()
|
|
|
|
|
|
|
|
|
2016-04-20 10:06:39 -04:00
|
|
|
describe "_populateServerIdViaRequest", ->
|
2016-04-19 11:48:51 -04:00
|
|
|
|
2016-04-27 11:20:10 -04:00
|
|
|
beforeEach ->
|
|
|
|
@response = "some data"
|
|
|
|
@request.get.callsArgWith(1, null, @response)
|
|
|
|
@ClsiCookieManager.setServerId = sinon.stub().callsArgWith(2, null, "clsi-9")
|
|
|
|
|
2016-04-19 11:48:51 -04:00
|
|
|
it "should make a request to the clsi", (done)->
|
2016-04-20 10:06:39 -04:00
|
|
|
@ClsiCookieManager._populateServerIdViaRequest @project_id, (err, serverId)=>
|
|
|
|
args = @ClsiCookieManager.setServerId.args[0]
|
2016-04-19 11:48:51 -04:00
|
|
|
args[0].should.equal @project_id
|
2016-04-27 11:20:10 -04:00
|
|
|
args[1].should.deep.equal @response
|
|
|
|
done()
|
|
|
|
|
|
|
|
it "should return the server id", (done)->
|
|
|
|
@ClsiCookieManager._populateServerIdViaRequest @project_id, (err, serverId)=>
|
|
|
|
serverId.should.equal "clsi-9"
|
2016-04-19 11:48:51 -04:00
|
|
|
done()
|
|
|
|
|
|
|
|
describe "setServerId", ->
|
|
|
|
|
2016-04-27 11:20:10 -04:00
|
|
|
beforeEach ->
|
|
|
|
@response = "dsadsakj"
|
2016-04-20 10:06:39 -04:00
|
|
|
@ClsiCookieManager._parseServerIdFromResponse = sinon.stub().returns("clsi-8")
|
2016-04-19 11:48:51 -04:00
|
|
|
@redisMulti.exec.callsArgWith(0)
|
2016-04-27 11:20:10 -04:00
|
|
|
|
|
|
|
it "should set the server id with a ttl", (done)->
|
|
|
|
@ClsiCookieManager.setServerId @project_id, @response, (err)=>
|
2016-04-19 11:48:51 -04:00
|
|
|
@redisMulti.set.calledWith("clsiserver:#{@project_id}", "clsi-8").should.equal true
|
2016-05-05 11:50:18 -04:00
|
|
|
@redisMulti.expire.calledWith("clsiserver:#{@project_id}", @settings.clsi_cookie_expire_length).should.equal true
|
2016-04-19 11:48:51 -04:00
|
|
|
done()
|
|
|
|
|
2016-04-27 11:20:10 -04:00
|
|
|
it "should return the server id", (done)->
|
|
|
|
@ClsiCookieManager.setServerId @project_id, @response, (err, serverId)=>
|
|
|
|
serverId.should.equal "clsi-8"
|
|
|
|
done()
|
2016-04-19 11:48:51 -04:00
|
|
|
|
2016-04-27 12:05:12 -04:00
|
|
|
|
|
|
|
it "should not set the server id if clsiCookies are not enabled", (done)->
|
|
|
|
delete @settings.clsiCookieKey
|
|
|
|
@ClsiCookieManager = SandboxedModule.require modulePath, requires:@requires
|
|
|
|
@ClsiCookieManager.setServerId @project_id, @response, (err, serverId)=>
|
|
|
|
@redisMulti.exec.called.should.equal false
|
|
|
|
done()
|
|
|
|
|
2016-04-19 11:48:51 -04:00
|
|
|
describe "getCookieJar", ->
|
|
|
|
|
2016-04-27 12:05:12 -04:00
|
|
|
beforeEach ->
|
2016-04-20 10:06:39 -04:00
|
|
|
@ClsiCookieManager._getServerId = sinon.stub().callsArgWith(1, null, "clsi-11")
|
2016-04-27 12:05:12 -04:00
|
|
|
|
|
|
|
it "should return a jar with the cookie set populated from redis", (done)->
|
2016-04-20 10:06:39 -04:00
|
|
|
@ClsiCookieManager.getCookieJar @project_id, (err, jar)->
|
2016-04-19 11:48:51 -04:00
|
|
|
jar._jar.store.idx["clsi.example.com"]["/"].clsiserver.key.should.equal "clsiserver"
|
|
|
|
jar._jar.store.idx["clsi.example.com"]["/"].clsiserver.value.should.equal "clsi-11"
|
|
|
|
done()
|
|
|
|
|
|
|
|
|
2016-04-27 12:05:12 -04:00
|
|
|
it "should return empty cookie jar if clsiCookies are not enabled", (done)->
|
|
|
|
delete @settings.clsiCookieKey
|
|
|
|
@ClsiCookieManager = SandboxedModule.require modulePath, requires:@requires
|
|
|
|
@ClsiCookieManager.getCookieJar @project_id, (err, jar)->
|
|
|
|
assert.deepEqual jar, realRequst.jar()
|
|
|
|
done()
|
2016-04-19 11:48:51 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|